├── 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 |
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<