add ftp server
This commit is contained in:
@@ -0,0 +1,37 @@
|
|||||||
|
NAME = inception
|
||||||
|
COMPOSE = docker compose --env-file srcs/.env -f srcs/docker-compose.yml
|
||||||
|
DATA_PATH = /home/oriabenkyi/data
|
||||||
|
|
||||||
|
all: up
|
||||||
|
|
||||||
|
up: data
|
||||||
|
$(COMPOSE) up -d --build
|
||||||
|
|
||||||
|
data:
|
||||||
|
mkdir -p $(DATA_PATH)/wordpress
|
||||||
|
mkdir -p $(DATA_PATH)/mariadb
|
||||||
|
|
||||||
|
down:
|
||||||
|
$(COMPOSE) down
|
||||||
|
|
||||||
|
stop:
|
||||||
|
$(COMPOSE) stop
|
||||||
|
|
||||||
|
start:
|
||||||
|
$(COMPOSE) start
|
||||||
|
|
||||||
|
restart: down up
|
||||||
|
|
||||||
|
logs:
|
||||||
|
$(COMPOSE) logs -f
|
||||||
|
|
||||||
|
clean: down
|
||||||
|
docker system prune -f
|
||||||
|
|
||||||
|
fclean: clean
|
||||||
|
sudo rm -rf $(DATA_PATH)/wordpress
|
||||||
|
sudo rm -rf $(DATA_PATH)/mariadb
|
||||||
|
|
||||||
|
re: fclean up
|
||||||
|
|
||||||
|
.PHONY: all up down stop start restart logs clean fclean re data
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
z9K93ew8T+cUVVFwYH6MmVTE
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
tLPUmcpXXzugcZXxXwtT51Qg
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
9BSLCZWoT1Z7mfdcWEC+nmZ2
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
vQvK2jgta1Y9q/EOru7J/APo
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
oMg5sgSqPvIHN0NFS1s+97Un
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
DOMAIN_NAME=oriabenk.42.fr
|
||||||
|
LOGIN=oriabenk
|
||||||
|
|
||||||
|
DATA_PATH=/home/oriabenkyi/data
|
||||||
|
|
||||||
|
MYSQL_DATABASE=wordpress
|
||||||
|
MYSQL_USER=wp_user
|
||||||
|
MYSQL_HOST=mariadb
|
||||||
|
|
||||||
|
WP_TITLE=Inception
|
||||||
|
WP_ADMIN_USER=supervisor
|
||||||
|
WP_ADMIN_EMAIL=supervisor@oriabenk.42.fr
|
||||||
|
WP_USER=oriabenk
|
||||||
|
WP_USER_EMAIL=oriabenk@oriabenk.42.fr
|
||||||
|
|
||||||
|
FTP_USER=oriabenk
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
services:
|
||||||
|
mariadb:
|
||||||
|
build: ./requirements/mariadb
|
||||||
|
image: mariadb:inception
|
||||||
|
container_name: mariadb
|
||||||
|
env_file: .env
|
||||||
|
secrets:
|
||||||
|
- db_root_password
|
||||||
|
- db_password
|
||||||
|
volumes:
|
||||||
|
- mariadb_data:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- inception
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
wordpress:
|
||||||
|
build: ./requirements/wordpress
|
||||||
|
image: wordpress:inception
|
||||||
|
container_name: wordpress
|
||||||
|
env_file: .env
|
||||||
|
secrets:
|
||||||
|
- db_password
|
||||||
|
- wp_admin_password
|
||||||
|
- wp_user_password
|
||||||
|
volumes:
|
||||||
|
- wordpress_data:/var/www/html
|
||||||
|
networks:
|
||||||
|
- inception
|
||||||
|
depends_on:
|
||||||
|
- mariadb
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
build: ./requirements/nginx
|
||||||
|
image: nginx:inception
|
||||||
|
container_name: nginx
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- wordpress_data:/var/www/html
|
||||||
|
networks:
|
||||||
|
- inception
|
||||||
|
ports:
|
||||||
|
- "443:443"
|
||||||
|
depends_on:
|
||||||
|
- wordpress
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
ftp:
|
||||||
|
build: ./requirements/ftp
|
||||||
|
image: ftp:inception
|
||||||
|
container_name: ftp
|
||||||
|
env_file: .env
|
||||||
|
secrets:
|
||||||
|
- ftp_password
|
||||||
|
volumes:
|
||||||
|
- wordpress_data:/var/www/html
|
||||||
|
networks:
|
||||||
|
- inception
|
||||||
|
ports:
|
||||||
|
- "21:21"
|
||||||
|
- "21100-21110:21100-21110"
|
||||||
|
depends_on:
|
||||||
|
- wordpress
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
networks:
|
||||||
|
inception:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mariadb_data:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: ${DATA_PATH}/mariadb
|
||||||
|
wordpress_data:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: ${DATA_PATH}/wordpress
|
||||||
|
|
||||||
|
secrets:
|
||||||
|
db_root_password:
|
||||||
|
file: ../secrets/db_root_password.txt
|
||||||
|
db_password:
|
||||||
|
file: ../secrets/db_password.txt
|
||||||
|
wp_admin_password:
|
||||||
|
file: ../secrets/wp_admin_password.txt
|
||||||
|
wp_user_password:
|
||||||
|
file: ../secrets/wp_user_password.txt
|
||||||
|
ftp_password:
|
||||||
|
file: ../secrets/ftp_password.txt
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
vsftpd \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY conf/vsftpd.conf /etc/vsftpd.conf
|
||||||
|
COPY tools/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
RUN echo "/usr/sbin/nologin" >> /etc/shells \
|
||||||
|
&& chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
EXPOSE 21 21100-21110
|
||||||
|
|
||||||
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
listen=YES
|
||||||
|
listen_ipv6=NO
|
||||||
|
|
||||||
|
anonymous_enable=NO
|
||||||
|
local_enable=YES
|
||||||
|
write_enable=YES
|
||||||
|
|
||||||
|
chroot_local_user=YES
|
||||||
|
allow_writeable_chroot=YES
|
||||||
|
local_umask=022
|
||||||
|
|
||||||
|
pasv_enable=YES
|
||||||
|
pasv_min_port=21100
|
||||||
|
pasv_max_port=21110
|
||||||
|
|
||||||
|
seccomp_sandbox=NO
|
||||||
|
|
||||||
|
xferlog_enable=YES
|
||||||
|
dual_log_enable=YES
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
mkdir -p /var/run/vsftpd/empty
|
||||||
|
|
||||||
|
FTP_PASSWORD=$(cat /run/secrets/ftp_password)
|
||||||
|
|
||||||
|
if ! id "${FTP_USER}" >/dev/null 2>&1; then
|
||||||
|
useradd -o -u 33 -g www-data -d /var/www/html -s /usr/sbin/nologin "${FTP_USER}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${FTP_USER}:${FTP_PASSWORD}" | chpasswd
|
||||||
|
|
||||||
|
exec /usr/sbin/vsftpd /etc/vsftpd.conf
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
mariadb-server \
|
||||||
|
mariadb-client \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY conf/my.cnf /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||||
|
COPY tools/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
RUN chmod +x /usr/local/bin/entrypoint.sh \
|
||||||
|
&& rm -rf /var/lib/mysql/* \
|
||||||
|
&& mkdir -p /var/lib/mysql /run/mysqld \
|
||||||
|
&& chown -R mysql:mysql /var/lib/mysql /run/mysqld
|
||||||
|
|
||||||
|
EXPOSE 3306
|
||||||
|
|
||||||
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[mysqld]
|
||||||
|
user = mysql
|
||||||
|
bind-address = 0.0.0.0
|
||||||
|
port = 3306
|
||||||
|
datadir = /var/lib/mysql
|
||||||
|
socket = /run/mysqld/mysqld.sock
|
||||||
|
pid-file = /run/mysqld/mysqld.pid
|
||||||
|
skip-name-resolve
|
||||||
|
|
||||||
|
[client]
|
||||||
|
socket = /run/mysqld/mysqld.sock
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
unset MYSQL_HOST
|
||||||
|
|
||||||
|
mkdir -p /run/mysqld
|
||||||
|
chown -R mysql:mysql /run/mysqld /var/lib/mysql
|
||||||
|
|
||||||
|
DB_ROOT_PASSWORD=$(cat /run/secrets/db_root_password)
|
||||||
|
DB_PASSWORD=$(cat /run/secrets/db_password)
|
||||||
|
|
||||||
|
if [ ! -f "/var/lib/mysql/.inception_initialized" ]; then
|
||||||
|
mariadb-install-db --user=mysql --datadir=/var/lib/mysql > /dev/null
|
||||||
|
|
||||||
|
mariadbd --user=mysql --skip-networking --socket=/run/mysqld/mysqld.sock &
|
||||||
|
pid="$!"
|
||||||
|
|
||||||
|
until mariadb-admin --socket=/run/mysqld/mysqld.sock --silent ping 2>/dev/null; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
mariadb --socket=/run/mysqld/mysqld.sock -u root <<-EOSQL
|
||||||
|
CREATE DATABASE IF NOT EXISTS \`${MYSQL_DATABASE}\`;
|
||||||
|
CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}';
|
||||||
|
GRANT ALL PRIVILEGES ON \`${MYSQL_DATABASE}\`.* TO '${MYSQL_USER}'@'%';
|
||||||
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASSWORD}';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
EOSQL
|
||||||
|
|
||||||
|
mariadb-admin --socket=/run/mysqld/mysqld.sock -u root -p"${DB_ROOT_PASSWORD}" shutdown
|
||||||
|
wait "$pid"
|
||||||
|
|
||||||
|
touch /var/lib/mysql/.inception_initialized
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec mariadbd --user=mysql
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
nginx \
|
||||||
|
openssl \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY conf/nginx.conf /etc/nginx/sites-available/wordpress.conf
|
||||||
|
COPY tools/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
RUN rm -f /etc/nginx/sites-enabled/default \
|
||||||
|
&& ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/wordpress.conf \
|
||||||
|
&& mkdir -p /etc/nginx/ssl \
|
||||||
|
&& chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
listen [::]:443 ssl;
|
||||||
|
|
||||||
|
server_name oriabenk.42.fr;
|
||||||
|
|
||||||
|
ssl_certificate /etc/nginx/ssl/inception.crt;
|
||||||
|
ssl_certificate_key /etc/nginx/ssl/inception.key;
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
|
||||||
|
root /var/www/html;
|
||||||
|
index index.php index.html;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.php?$args;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
fastcgi_pass wordpress:9000;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
}
|
||||||
|
}
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ ! -f /etc/nginx/ssl/inception.crt ]; then
|
||||||
|
openssl req -x509 -nodes -days 365 \
|
||||||
|
-newkey rsa:2048 \
|
||||||
|
-keyout /etc/nginx/ssl/inception.key \
|
||||||
|
-out /etc/nginx/ssl/inception.crt \
|
||||||
|
-subj "/C=UA/ST=Kyiv/L=Kyiv/O=42/OU=42/CN=${DOMAIN_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec nginx -g "daemon off;"
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
|
php-fpm \
|
||||||
|
php-mysql \
|
||||||
|
php-curl \
|
||||||
|
php-gd \
|
||||||
|
php-xml \
|
||||||
|
php-mbstring \
|
||||||
|
php-zip \
|
||||||
|
php-intl \
|
||||||
|
curl \
|
||||||
|
default-mysql-client \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN curl -sS -o /usr/local/bin/wp \
|
||||||
|
https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
|
||||||
|
&& chmod +x /usr/local/bin/wp
|
||||||
|
|
||||||
|
COPY conf/www.conf /etc/php/8.2/fpm/pool.d/www.conf
|
||||||
|
COPY tools/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
RUN mkdir -p /var/www/html \
|
||||||
|
&& chown -R www-data:www-data /var/www/html \
|
||||||
|
&& chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
EXPOSE 9000
|
||||||
|
|
||||||
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[www]
|
||||||
|
user = www-data
|
||||||
|
group = www-data
|
||||||
|
|
||||||
|
listen = 9000
|
||||||
|
listen.owner = www-data
|
||||||
|
listen.group = www-data
|
||||||
|
|
||||||
|
pm = dynamic
|
||||||
|
pm.max_children = 5
|
||||||
|
pm.start_servers = 2
|
||||||
|
pm.min_spare_servers = 1
|
||||||
|
pm.max_spare_servers = 3
|
||||||
|
|
||||||
|
clear_env = no
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DB_PASSWORD=$(cat /run/secrets/db_password)
|
||||||
|
WP_ADMIN_PASSWORD=$(cat /run/secrets/wp_admin_password)
|
||||||
|
WP_USER_PASSWORD=$(cat /run/secrets/wp_user_password)
|
||||||
|
|
||||||
|
cd /var/www/html
|
||||||
|
|
||||||
|
until (echo > "/dev/tcp/${MYSQL_HOST}/3306") 2>/dev/null; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! -f wp-config.php ]; then
|
||||||
|
wp core download --allow-root
|
||||||
|
|
||||||
|
wp config create \
|
||||||
|
--dbname="${MYSQL_DATABASE}" \
|
||||||
|
--dbuser="${MYSQL_USER}" \
|
||||||
|
--dbpass="${DB_PASSWORD}" \
|
||||||
|
--dbhost="${MYSQL_HOST}" \
|
||||||
|
--allow-root
|
||||||
|
|
||||||
|
until mysqladmin ping -h"${MYSQL_HOST}" -u"${MYSQL_USER}" -p"${DB_PASSWORD}" --silent 2>/dev/null; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
wp core install \
|
||||||
|
--url="https://${DOMAIN_NAME}" \
|
||||||
|
--title="${WP_TITLE}" \
|
||||||
|
--admin_user="${WP_ADMIN_USER}" \
|
||||||
|
--admin_password="${WP_ADMIN_PASSWORD}" \
|
||||||
|
--admin_email="${WP_ADMIN_EMAIL}" \
|
||||||
|
--skip-email \
|
||||||
|
--allow-root
|
||||||
|
|
||||||
|
wp user create "${WP_USER}" "${WP_USER_EMAIL}" \
|
||||||
|
--role=author \
|
||||||
|
--user_pass="${WP_USER_PASSWORD}" \
|
||||||
|
--allow-root
|
||||||
|
fi
|
||||||
|
|
||||||
|
chown -R www-data:www-data /var/www/html
|
||||||
|
|
||||||
|
exec php-fpm8.2 -F
|
||||||
Reference in New Issue
Block a user