├── srcs ├── requirements │ ├── mariadb │ │ ├── .dockerignore │ │ ├── tools │ │ │ └── initial_db.sql │ │ ├── Dockerfile │ │ └── conf │ │ │ └── 50-server.cnf │ ├── nginx │ │ ├── .dockerignore │ │ ├── tools │ │ │ └── nginx_start.sh │ │ ├── Dockerfile │ │ └── conf │ │ │ └── default │ └── wordpress │ │ ├── .dockerignore │ │ ├── conf │ │ └── www.conf │ │ ├── Dockerfile │ │ └── tools │ │ ├── wordpress_start.sh │ │ └── wp-config.php ├── .env └── docker-compose.yml ├── Subject.pdf ├── examples └── score.png ├── Makefile └── README.md /srcs/requirements/mariadb/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .DS_Store -------------------------------------------------------------------------------- /srcs/requirements/nginx/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .DS_Store -------------------------------------------------------------------------------- /srcs/requirements/wordpress/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .DS_Store -------------------------------------------------------------------------------- /Subject.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexnik42/inception/HEAD/Subject.pdf -------------------------------------------------------------------------------- /examples/score.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexnik42/inception/HEAD/examples/score.png -------------------------------------------------------------------------------- /srcs/requirements/wordpress/conf/www.conf: -------------------------------------------------------------------------------- 1 | [www] 2 | user = www-data 3 | group = www-data 4 | listen = wordpress:9000 5 | pm = dynamic 6 | pm.start_servers = 6 7 | pm.max_children = 25 8 | pm.min_spare_servers = 2 9 | pm.max_spare_servers = 10 -------------------------------------------------------------------------------- /srcs/.env: -------------------------------------------------------------------------------- 1 | WP_URL=crendeha.42.fr 2 | WP_TITLE=wordpress 3 | 4 | WP_ADMIN_LOGIN=boss 5 | WP_ADMIN_PASSWORD=boss12345 6 | WP_ADMIN_EMAIL=boss@42.fr 7 | 8 | WP_USER_LOGIN=crendeha 9 | WP_USER_PASSWORD=12345 10 | WP_USER_EMAIL=crendeha@42.fr -------------------------------------------------------------------------------- /srcs/requirements/mariadb/tools/initial_db.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE IF NOT EXISTS wordpress; 2 | CREATE USER IF NOT EXISTS 'crendeha'@'%' IDENTIFIED BY '12345'; 3 | GRANT ALL PRIVILEGES ON wordpress.* TO 'crendeha'@'%'; 4 | FLUSH PRIVILEGES; 5 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'root12345'; -------------------------------------------------------------------------------- /srcs/requirements/mariadb/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt-get update 4 | RUN apt-get install -y mariadb-server 5 | 6 | EXPOSE 3306 7 | 8 | COPY ./conf/50-server.cnf /etc/mysql/mariadb.conf.d/ 9 | COPY ./tools /var/www/ 10 | 11 | RUN service mysql start && mysql < /var/www/initial_db.sql && rm -f /var/www/initial_db.sql; 12 | 13 | CMD ["mysqld"] -------------------------------------------------------------------------------- /srcs/requirements/nginx/tools/nginx_start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ ! -f /etc/ssl/certs/nginx.crt ]; then 4 | echo "Nginx: setting up ssl ..."; 5 | openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crt -subj "/C=RU/ST=Moscow/L=Moscow/O=wordpress/CN=crendeha.42.fr"; 6 | echo "Nginx: ssl is set up!"; 7 | fi 8 | 9 | exec "$@" -------------------------------------------------------------------------------- /srcs/requirements/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt-get update 4 | RUN apt-get install -y nginx openssl 5 | 6 | EXPOSE 443 7 | 8 | COPY ./conf/default /etc/nginx/sites-enabled/default 9 | COPY ./tools/nginx_start.sh /var/www 10 | 11 | RUN chmod +x /var/www/nginx_start.sh 12 | 13 | ENTRYPOINT [ "var/www/nginx_start.sh" ] 14 | 15 | CMD ["nginx", "-g", "daemon off;"] 16 | -------------------------------------------------------------------------------- /srcs/requirements/wordpress/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt-get update 4 | RUN apt-get -y install php7.3 php-mysqli php-fpm wget sendmail 5 | 6 | EXPOSE 9000 7 | 8 | COPY ./conf/www.conf /etc/php/7.3/fpm/pool.d 9 | COPY ./tools /var/www/ 10 | 11 | RUN chmod +x /var/www/wordpress_start.sh 12 | 13 | ENTRYPOINT [ "/var/www/wordpress_start.sh" ] 14 | 15 | CMD ["/usr/sbin/php-fpm7.3", "--nodaemonize"] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | @docker-compose -f ./srcs/docker-compose.yml up 3 | 4 | down: 5 | @docker-compose -f ./srcs/docker-compose.yml down 6 | 7 | re: 8 | @docker-compose -f srcs/docker-compose.yml up --build 9 | 10 | clean: 11 | @docker stop $$(docker ps -qa);\ 12 | docker rm $$(docker ps -qa);\ 13 | docker rmi -f $$(docker images -qa);\ 14 | docker volume rm $$(docker volume ls -q);\ 15 | docker network rm $$(docker network ls -q);\ 16 | 17 | .PHONY: all re down clean -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # inception 2 | 3 | School 42 Project. Set up a small infrastructure composed of WordPress with LEMP Stack (Nginx, MariaDB and PHP) using Docker / Docker-Compose under specific rules (see `Subject.pdf`). 4 |

5 | 6 | # Final grade: 100/100 7 | 8 | Score

9 | 10 | ## Docker containers 11 | 12 | - MariaDB 13 | - WordPress 14 | - Nginx 15 | 16 | 17 | ## How to use 18 | 19 | - Build the images and deploy the infrastructure: 20 | 21 | ```sh 22 | $ make 23 | ``` 24 | 25 | - Stop and remove containers, remove images, volumes and network: 26 | 27 | ```sh 28 | $ make clean 29 | ``` 30 | 31 | -------------------------------------------------------------------------------- /srcs/requirements/nginx/conf/default: -------------------------------------------------------------------------------- 1 | server { 2 | listen 443 ssl; 3 | listen [::]:443 ssl; 4 | 5 | server_name crendeha.42.fr; 6 | 7 | ssl_certificate /etc/ssl/certs/nginx.crt; 8 | ssl_certificate_key /etc/ssl/private/nginx.key; 9 | ssl_protocols TLSv1.3; 10 | 11 | index index.php; 12 | 13 | root /var/www/html; 14 | 15 | location / { 16 | try_files $uri $uri/ /index.php$is_args$args; 17 | } 18 | 19 | location ~ \.php$ { 20 | try_files $uri =404; 21 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 22 | fastcgi_pass wordpress:9000; 23 | fastcgi_index index.php; 24 | include fastcgi_params; 25 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 26 | fastcgi_param PATH_INFO $fastcgi_path_info; 27 | } 28 | } -------------------------------------------------------------------------------- /srcs/requirements/wordpress/tools/wordpress_start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sed -i "s/listen = \/run\/php\/php7.3-fpm.sock/listen = 9000/" "/etc/php/7.3/fpm/pool.d/www.conf"; 4 | chown -R www-data:www-data /var/www/*; 5 | chown -R 755 /var/www/*; 6 | mkdir -p /run/php/; 7 | touch /run/php/php7.3-fpm.pid; 8 | 9 | if [ ! -f /var/www/html/wp-config.php ]; then 10 | echo "Wordpress: setting up..." 11 | mkdir -p /var/www/html 12 | wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar; 13 | chmod +x wp-cli.phar; 14 | mv wp-cli.phar /usr/local/bin/wp; 15 | cd /var/www/html; 16 | wp core download --allow-root; 17 | mv /var/www/wp-config.php /var/www/html/ 18 | echo "Wordpress: creating users..." 19 | wp core install --allow-root --url=${WP_URL} --title=${WP_TITLE} --admin_user=${WP_ADMIN_LOGIN} --admin_password=${WP_ADMIN_PASSWORD} --admin_email=${WP_ADMIN_EMAIL} 20 | wp user create --allow-root ${WP_USER_LOGIN} ${WP_USER_EMAIL} --user_pass=${WP_USER_PASSWORD}; 21 | echo "Wordpress: set up!" 22 | fi 23 | 24 | exec "$@" -------------------------------------------------------------------------------- /srcs/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | networks: 4 | app-network: 5 | name: app-network 6 | driver: bridge 7 | 8 | volumes: 9 | wp: 10 | driver: local 11 | name: wp 12 | driver_opts: 13 | type: none 14 | o: bind 15 | device: /home/crendeha/data/wordpress 16 | db: 17 | driver: local 18 | name: db 19 | driver_opts: 20 | type: none 21 | o: bind 22 | device: /home/crendeha/data/mariadb 23 | 24 | services: 25 | mariadb: 26 | container_name: mariadb 27 | build: ./requirements/mariadb 28 | env_file: 29 | - .env 30 | volumes: 31 | - db:/var/lib/mysql 32 | networks: 33 | - app-network 34 | restart: unless-stopped 35 | 36 | wordpress: 37 | container_name: wordpress 38 | build: ./requirements/wordpress 39 | env_file: 40 | - .env 41 | depends_on: 42 | - mariadb 43 | volumes: 44 | - wp:/var/www/html 45 | networks: 46 | - app-network 47 | restart: unless-stopped 48 | 49 | nginx: 50 | container_name: nginx 51 | build: ./requirements/nginx 52 | ports: 53 | - "443:443" 54 | depends_on: 55 | - wordpress 56 | volumes: 57 | - wp:/var/www/html 58 | networks: 59 | - app-network 60 | restart: unless-stopped 61 | -------------------------------------------------------------------------------- /srcs/requirements/wordpress/tools/wp-config.php: -------------------------------------------------------------------------------- 1 | Qwt#^?R[DUM~hfRDSnOz-LLc>z7s&!U?PMV'); 54 | define('NONCE_KEY', 'h[+=/+Qz[e-eB5vw>>1-:{9-D^eX1*hly+,!f<