diff --git a/Makefile b/Makefile index 2860629..97487d5 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,29 @@ -#LISTE DE CHOSE A FAIRE POUR LES PC DE 42 -#CHANGER LE PATH en login dans le makefile, dockerfile et docker-compose file +PROJECT_NAME=inception +DOCKER_COMPOSE=docker-compose +DC_FILE=srcs/docker-compose.yml +ENV_FILE=srcs/.env -all: - sudo mkdir -p /home/yantoine/data/wordpress - sudo mkdir -p /home/yantoine/data/mariadb - sudo chmod 777 /etc/hosts - echo "127.0.0.1 yantoine.42.fr" >> /etc/hosts - sudo docker-compose -f srcs/docker-compose.yml up --build -d +all: up up: - sudo docker-compose -f srcs/docker-compose.yml up --build -d + @mkdir -p /home/yantoine/data/mariadb + @mkdir -p /home/yantoine/data/wordpress + @$(DOCKER_COMPOSE) -f $(DC_FILE) --env-file $(ENV_FILE) up -d --build -re: fclean all +down: + @$(DOCKER_COMPOSE) -f $(DC_FILE) --env-file $(ENV_FILE) down +clean: + # Arrête et supprime containers + volumes liés au projet + @$(DOCKER_COMPOSE) -f $(DC_FILE) --env-file $(ENV_FILE) down -v --remove-orphans -fclean: - sudo docker-compose -f srcs/docker-compose.yml down --rmi all --volumes - sudo rm -rf /home/yantoine/data +fclean: clean + # Supprime images du projet + system prune + supprime données sur l'hôte + @docker image rm -f $(PROJECT_NAME)_wordpress $(PROJECT_NAME)_mariadb $(PROJECT_NAME)_nginx || true + @docker system prune -af + @rm -rf /home/yantoine/data/mariadb + @rm -rf /home/yantoine/data/wordpress -.PHONY: all up fclean re +re: fclean up +.PHONY: all up down clean fclean re diff --git a/feuille_de_route b/feuille_de_route deleted file mode 100644 index e69de29..0000000 diff --git a/srcs/.env b/srcs/.env index 5980cda..440e60d 100644 --- a/srcs/.env +++ b/srcs/.env @@ -1,12 +1,9 @@ -SQL_DATABASE=mariadb -SQL_USER=www-http -SQL_PASSWORD=vivementlaspe -SQL_ROOT_PASSWORD=enorme +MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_root_password +MYSQL_DATABASE=wordpress +MYSQL_USER_FILE=/run/secrets/db_user +MYSQL_PASSWORD_FILE=/run/secrets/db_password + +WP_ADMIN_USER_FILE=/run/secrets/wp_admin_user +WP_ADMIN_PASSWORD_FILE=/run/secrets/wp_admin_password +WP_ADMIN_EMAIL=admin@yantoine.42.fr DOMAIN_NAME=yantoine.42.fr -WP_TITLE=LE_SUPER_SITE -WP_ADMIN_USER=leboss -WP_ADMIN_PASSWORD=lemecfort -WP_ADMIN_EMAIL=leboss@mail.com -WP_NORMAL_USER=lestagiaire -WP_NORMAL_USER_PASSWORD=rameneuncafe -WP_NORMAL_USER_EMAIL=lestagiaire@mail.com diff --git a/srcs/docker-compose.yml b/srcs/docker-compose.yml index 58edacb..6d1a14f 100644 --- a/srcs/docker-compose.yml +++ b/srcs/docker-compose.yml @@ -1,71 +1,83 @@ - version: "3" +version: '3.8' - networks: - inception: - driver: bridge +services: + mariadb: + build: ./requirements/mariadb + container_name: mariadb + restart: always + volumes: + - mariadb_data:/var/lib/mysql + - ./tools/init.sql:/docker-entrypoint-initdb.d/init.sql:ro + environment: + MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password + secrets: + - db_root_password + - db_user + - db_password + networks: + - inception - services: - nginx: - container_name: nginx - image: nginx - volumes: - - wp:/var/www/html - networks: - - inception - depends_on: - - wordpress - build: - context: ./requirements/nginx - dockerfile: Dockerfile - env_file: .env - ports: - - "443:443" - restart: always - - wordpress: - container_name: wordpress - env_file: .env - image: wordpress - volumes: - - wp:/var/www/html - networks: - - inception - build: - context: ./requirements/wordpress - dockerfile: Dockerfile - depends_on: - - mariadb - restart: always - expose: - - "9000" - - mariadb: - container_name: mariadb - networks: - - inception - build: - context: ./requirements/mariadb - dockerfile: Dockerfile - image: mariadb - env_file: .env - volumes: - - db:/var/lib/mysql - restart: always - expose: - - "3306" - - volumes: - wp: - driver: local - driver_opts: - type: none - o: bind - device: ${HOME}/data/wp - db: - driver: local - driver_opts: - type: none - o: bind - device: ${HOME}/data/db + wordpress: + build: ./requirements/wordpress + container_name: wordpress + restart: always + depends_on: + - mariadb + volumes: + - wordpress_data:/var/www/html + environment: + MYSQL_DATABASE: wordpress_db + MYSQL_USER_FILE: /run/secrets/db_user + MYSQL_PASSWORD_FILE: /run/secrets/db_password + secrets: + - db_root_password + - db_user + - db_password + - wp_admin_user + - wp_admin_password + networks: + - inception + nginx: + build: ./requirements/nginx + container_name: nginx + restart: always + depends_on: + - wordpress + ports: + - "443:443" + volumes: + - wordpress_data:/var/www/html + networks: + - inception + +volumes: + mariadb_data: + driver: local + driver_opts: + type: 'none' + device: '/home/yantoine/data/mariadb' + o: 'bind' + wordpress_data: + driver: local + driver_opts: + type: 'none' + device: '/home/yantoine/data/wordpress' + o: 'bind' + +networks: + inception: + driver: bridge + +secrets: + db_root_password: + file: ./secrets/db_root_password.txt + db_user: + file: ./secrets/db_user.txt + db_password: + file: ./secrets/db_password.txt + wp_admin_user: + file: ./secrets/wp_admin_user.txt + wp_admin_password: + file: ./secrets/wp_admin_password.txt diff --git a/srcs/requirements/mariadb/Dockerfile b/srcs/requirements/mariadb/Dockerfile index b55edfc..0da0c5b 100644 --- a/srcs/requirements/mariadb/Dockerfile +++ b/srcs/requirements/mariadb/Dockerfile @@ -1,17 +1,11 @@ -FROM debian:bullseye -RUN apt-get update -y && \ - apt-get upgrade -y && \ +FROM debian:12.5-slim + +RUN apt-get update && \ apt-get install -y mariadb-server && \ - mkdir -p /var/run/mysqld && \ - chown -R mysql:mysql /var/lib/mysql /var/run/mysqld -COPY conf/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf -RUN mkdir -p /var/run/mysqld -RUN chown -R mysql:mysql /var/lib/mysql /var/run/mysqld -COPY ./tools/mariadb.sh /mariadb.sh - -RUN chmod +x /mariadb.sh + rm -rf /var/lib/apt/lists/* +COPY conf/my.cnf /etc/mysql/my.cnf +COPY init.sql /docker-entrypoint-initdb.d/ EXPOSE 3306 -RUN ./mariadb.sh -ENTRYPOINT ["/usr/sbin/mysqld"] \ No newline at end of file +CMD ["mysqld_safe"] diff --git a/srcs/requirements/mariadb/conf/50-server.cnf b/srcs/requirements/mariadb/conf/50-server.cnf deleted file mode 100644 index e51a39b..0000000 --- a/srcs/requirements/mariadb/conf/50-server.cnf +++ /dev/null @@ -1,21 +0,0 @@ -[mysqld] - -user = mysql - -socket = /var/run/mysqld/mysqld.sock - -port = 3306 - -datadir = /var/lib/mysql - -key_buffer_size = 16M - -max_allowed_packet = 16M - -log_error = /var/log/mysql/error.log - -character-set-server = utf8mb4 - -collation-server = utf8mb4_general_ci - -bind-address = 0.0.0.0 \ No newline at end of file diff --git a/srcs/requirements/mariadb/conf/my.cnf b/srcs/requirements/mariadb/conf/my.cnf new file mode 100644 index 0000000..84e7bbf --- /dev/null +++ b/srcs/requirements/mariadb/conf/my.cnf @@ -0,0 +1,2 @@ +[mysqld] +bind-address=0.0.0.0 diff --git a/srcs/requirements/mariadb/init.sql b/srcs/requirements/mariadb/init.sql new file mode 100644 index 0000000..5de3eb6 --- /dev/null +++ b/srcs/requirements/mariadb/init.sql @@ -0,0 +1,7 @@ +CREATE DATABASE IF NOT EXISTS wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +CREATE USER IF NOT EXISTS 'wp_user'@'%' IDENTIFIED BY 'wp_pass123'; + +GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'%'; + +FLUSH PRIVILEGES; diff --git a/srcs/requirements/mariadb/tools/mariadb.sh b/srcs/requirements/mariadb/tools/mariadb.sh deleted file mode 100644 index d716717..0000000 --- a/srcs/requirements/mariadb/tools/mariadb.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -if [ ! -e "/var/lib/mysql/.done" ]; then - mysql_install_db --user=mysql --datadir=/var/lib/mysql - /usr/sbin/mysqld --skip-networking & - - for i in {50..0}; do - if echo 'SELECT 1' | mysql &> /dev/null; then - break - fi - sleep 1 - done - - if [ "$i" -eq 0 ]; then - echo >&2 'MariaDB' - exit 1 - fi - - mysql -u root -e "CREATE DATABASE IF NOT EXISTS $SQL_DATABASE;" - - mysql -u root -e "CREATE USER '$SQL_USER'@'%' IDENTIFIED BY '$SQL_PASSWORD';" - - mysql -u root -e "GRANT ALL ON $SQL_DATABASE.* TO '$SQL_USER'@'%';" - - mysql -u root -e "FLUSH PRIVILEGES;" - - mysql -u root -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$SQL_ROOT_PASSWORD');" - - - mysqladmin -u root -p$SQL_ROOT_PASSWORD shutdown - - - touch /var/lib/mysql/.done -fi - -exec "$@" - - - - - diff --git a/srcs/requirements/nginx/Dockerfile b/srcs/requirements/nginx/Dockerfile index 8196d9e..cc414d0 100644 --- a/srcs/requirements/nginx/Dockerfile +++ b/srcs/requirements/nginx/Dockerfile @@ -1,21 +1,12 @@ -FROM debian:bullseye +FROM alpine:3.19 -RUN apt-get update -y && \ - apt-get upgrade -y && \ - apt-get install -y nginx openssl && \ - mkdir -p /etc/nginx/ssl /var/run/nginx && \ - openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ - -keyout /etc/ssl/private/server_pkey.pem \ - -out /etc/nginx/ssl/server.crt \ - -subj "/C=FR/ST=IDF/L=Paris/O=42/OU=42/CN=yantoine.42.fr/UID=yantoine" +RUN apk add --no-cache nginx openssl -COPY conf/nginx.conf /etc/nginx/sites-available/nginx.conf +COPY conf/default.conf /etc/nginx/http.d/default.conf +COPY tools/generate_ssl.sh /tmp/generate_ssl.sh -# Suppression du site par défaut et activation de la nouvelle configuration -RUN rm /etc/nginx/sites-enabled/default && \ - ln -s /etc/nginx/sites-available/nginx.conf /etc/nginx/sites-enabled/ +RUN chmod +x /tmp/generate_ssl.sh && /tmp/generate_ssl.sh EXPOSE 443 -ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"] - +CMD ["nginx", "-g", "daemon off;"] diff --git a/srcs/requirements/nginx/conf/default.conf b/srcs/requirements/nginx/conf/default.conf new file mode 100644 index 0000000..476a047 --- /dev/null +++ b/srcs/requirements/nginx/conf/default.conf @@ -0,0 +1,22 @@ +server { + listen 443 ssl; + server_name yantoine.42.fr; + + ssl_certificate /etc/ssl/private/yantoine.42.fr.crt; + ssl_certificate_key /etc/ssl/private/yantoine.42.fr.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; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } +} diff --git a/srcs/requirements/nginx/conf/nginx.conf b/srcs/requirements/nginx/conf/nginx.conf deleted file mode 100644 index 618aeb6..0000000 --- a/srcs/requirements/nginx/conf/nginx.conf +++ /dev/null @@ -1,28 +0,0 @@ -server { - listen 443 ssl default_server; - ssl_certificate /etc/ssl/certs/server.crt; - - ssl_certificate_key /etc/ssl/private/server_pkey.pem; - - root /var/www/html; - - index index.php; - - server_name $DOMAIN_NAME; - - location / { - try_files $uri $uri/ =404; - } - - location ~ \.php$ { - # Include the fastcgi-php configuration snippet - include snippets/fastcgi-php.conf; - - # Set the SCRIPT_FILENAME parameter to the full path of the requested script - fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; - - # Forward requests to the PHP-FPM service listening on the wordpress host on port 9000 - fastcgi_pass wordpress:9000; - } -} -} diff --git a/srcs/requirements/nginx/tools/generate_ssl.sh b/srcs/requirements/nginx/tools/generate_ssl.sh new file mode 100644 index 0000000..4045ceb --- /dev/null +++ b/srcs/requirements/nginx/tools/generate_ssl.sh @@ -0,0 +1,7 @@ +#!/bin/sh +mkdir -p /etc/ssl/private +openssl req -x509 -nodes -days 365 \ + -subj "/C=FR/ST=Paris/L=Paris/O=42/OU=Login/CN=yantoine.42.fr" \ + -newkey rsa:2048 \ + -keyout /etc/ssl/private/yantoine.42.fr.key \ + -out /etc/ssl/private/yantoine.42.fr.crt diff --git a/srcs/requirements/tags b/srcs/requirements/tags deleted file mode 100644 index 5e1b701..0000000 --- a/srcs/requirements/tags +++ /dev/null @@ -1,42 +0,0 @@ -!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ -!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ -!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ -!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ -!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ -!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ -!_TAG_FIELD_DESCRIPTION input /input file/ -!_TAG_FIELD_DESCRIPTION name /tag name/ -!_TAG_FIELD_DESCRIPTION pattern /pattern/ -!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_KIND_DESCRIPTION!Iniconf k,key /keys/ -!_TAG_KIND_DESCRIPTION!Iniconf s,section /sections/ -!_TAG_KIND_DESCRIPTION!Sh a,alias /aliases/ -!_TAG_KIND_DESCRIPTION!Sh f,function /functions/ -!_TAG_KIND_DESCRIPTION!Sh h,heredoc /label for here document/ -!_TAG_KIND_DESCRIPTION!Sh s,script /script files/ -!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ -!_TAG_OUTPUT_FILESEP slash /slash or backslash/ -!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ -!_TAG_OUTPUT_VERSION 0.0 /current.age/ -!_TAG_PARSER_VERSION!Iniconf 0.0 /current.age/ -!_TAG_PARSER_VERSION!Sh 0.0 /current.age/ -!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ -!_TAG_PROC_CWD /home/null/Documents/Inception/srcs/requirements/ // -!_TAG_PROGRAM_AUTHOR Universal Ctags Team // -!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ -!_TAG_PROGRAM_URL https://ctags.io/ /official site/ -!_TAG_PROGRAM_VERSION 6.1.0 /653ca9204/ -!_TAG_ROLE_DESCRIPTION!Sh!heredoc endmarker /end marker/ -!_TAG_ROLE_DESCRIPTION!Sh!script loaded /loaded/ -clear_env wordpress/conf/www.conf /^clear_env = no$/;" k section:www -group wordpress/conf/www.conf /^group = www-data$/;" k section:www -listen wordpress/conf/www.conf /^listen = 0.0.0.0:9000$/;" k section:www -max_children wordpress/conf/www.conf /^pm.max_children = 5$/;" k section:www -max_spare_servers wordpress/conf/www.conf /^pm.max_spare_servers = 3$/;" k section:www -min_spare_servers wordpress/conf/www.conf /^pm.min_spare_servers = 1$/;" k section:www -pm wordpress/conf/www.conf /^pm = dynamic$/;" k section:www -start_servers wordpress/conf/www.conf /^pm.start_servers = 2$/;" k section:www -user wordpress/conf/www.conf /^user = www-data$/;" k section:www -www wordpress/conf/www.conf /^[www]$/;" s diff --git a/srcs/requirements/wordpress/Dockerfile b/srcs/requirements/wordpress/Dockerfile index f9c5340..4c2d2aa 100644 --- a/srcs/requirements/wordpress/Dockerfile +++ b/srcs/requirements/wordpress/Dockerfile @@ -1,32 +1,33 @@ -FROM debian:bullseye +FROM debian:11 +RUN apt-get update && apt-get install -y \ + mariadb-client \ + curl \ + php7.4-fpm \ + php7.4-mysql \ + php7.4-cli \ + php7.4-curl \ + php7.4-gd \ + php7.4-mbstring \ + php7.4-xml \ + php7.4-zip \ + && apt-get clean -RUN apt-get update -y && \ - apt-get upgrade -y && \ - apt-get install -y php7.4 php-fpm php-cli php-mysql mariadb-client curl +# Fix: créer le dossier /run/php +RUN mkdir -p /run/php -RUN mkdir /run/php - -RUN mkdir -p /var/www/html/ - -RUN chown -R www-data:www-data /var/www/html - -RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar - -RUN chmod +x wp-cli.phar - -RUN mv wp-cli.phar /usr/local/bin/wp - -COPY www.conf /etc/php/7.4/fpm/pool.d/www.conf - -COPY tools/wordpress.sh /wordpress.sh - -RUN chmod +x /wordpress.sh - -EXPOSE 9000 +# Fix: forcer php-fpm à écouter sur le port 9000 +RUN sed -i 's|listen = /run/php/php7.4-fpm.sock|listen = 9000|' /etc/php/7.4/fpm/pool.d/www.conf WORKDIR /var/www/html -ENTRYPOINT ["/bin/bash", "/wordpress.sh"] +RUN curl -o wordpress.tar.gz https://wordpress.org/latest.tar.gz && \ + tar -xzf wordpress.tar.gz --strip-components=1 && \ + rm wordpress.tar.gz + +COPY conf/wp-config.php /var/www/html/wp-config.php + +EXPOSE 9000 CMD ["/usr/sbin/php-fpm7.4", "-F"] + diff --git a/srcs/requirements/wordpress/conf/wp-config.php b/srcs/requirements/wordpress/conf/wp-config.php new file mode 100644 index 0000000..9bcfb4c --- /dev/null +++ b/srcs/requirements/wordpress/conf/wp-config.php @@ -0,0 +1,18 @@ +