commit 69ca21b80ec0e0d6bc8d68b0935c17aa54f76ecd Author: Ladebeze66 Date: Wed Jul 17 15:06:12 2024 +0200 test diff --git a/data/Makefile b/data/Makefile new file mode 100644 index 0000000..31faefc --- /dev/null +++ b/data/Makefile @@ -0,0 +1,62 @@ +SHELL := /bin/bash + +# Variables +HOSTNAME=fgras-ca.42.fr +HOSTS_FILE=/etc/hosts +VOLUME_DIR_MYSQL=/home/fgras-ca/Inception/data/mysql +VOLUME_DIR_HTML=/home/fgras-ca/Inception/data/html + +all: sudo-validate setup-hosts create-volumes start-docker + +sudo-validate: + @echo "Validating sudo credentials..." + @sudo -v + +down: + @echo "Stopping and removing all Docker containers..." + @docker-compose -f /home/fgras-ca/Inception/data/scrs/docker-compose.yml down + +re: down all + +clean: down + @echo "Cleaning up Docker resources..." + @if [ $$(docker ps -qa | wc -l) -gt 0 ]; then \ + echo "Stopping containers..."; \ + docker stop $$(docker ps -qa); \ + echo "Removing containers..."; \ + docker rm $$(docker ps -qa); \ + fi + @if [ $$(docker images -qa | wc -l) -gt 0 ]; then \ + echo "Removing images..."; \ + docker rmi -f $$(docker images -qa); \ + fi + @if [ $$(docker volume ls -q | wc -l) -gt 0 ]; then \ + echo "Removing volumes..."; \ + docker volume rm $$(docker volume ls -q); \ + fi + + @docker system prune -a --force --volumes + @echo "Removing MySQL and HTML data directories..." + @sudo chmod -R 777 $(VOLUME_DIR_MYSQL) + @sudo chmod -R 777 $(VOLUME_DIR_HTML) + @sudo rm -rf $(VOLUME_DIR_MYSQL) $(VOLUME_DIR_HTML) + +setup-hosts: + @echo "Configuring /etc/hosts..." + @if ! grep -q "$(HOSTNAME)" $(HOSTS_FILE); then \ + echo "127.0.0.1 $(HOSTNAME)" | sudo tee -a $(HOSTS_FILE); \ + fi + +create-volumes: + @echo "Creating volume directories..." + @mkdir -p $(VOLUME_DIR_MYSQL) $(VOLUME_DIR_HTML) + +start-docker: + @echo "Starting Docker Compose in detached mode..." + @docker-compose -f /home/fgras-ca/Inception/data/scrs/docker-compose.yml up -d --build + +.PHONY: all re down clean setup-hosts create-volumes start-docker sudo-validate + + + + diff --git a/data/scrs/.env b/data/scrs/.env new file mode 100644 index 0000000..6c93c95 --- /dev/null +++ b/data/scrs/.env @@ -0,0 +1,16 @@ +DOMAIN_NAME=fgras-ca.42.fr +CERTS_=/etc/nginx/ssl/inception.key +MYSQL_HOSTNAME=mariadb +MYSQL_DATABASE=wordpress +MYSQL_USER=fgras +MYSQL_PASSWORD=1234 +MYSQL_ROOT_PASSWORD=5678 +WP_TITLE=FernandGrasCalvet +WP_ADMIN_USR=fgras-ca +WP_ADMIN_PWD=1234 +WP_ADMIN_EMAIL=fgras.ca@gmail.com +WP_USR=fgras +WP_EMAIL=fgras.ca@42.com +WP_PWD=123 +ftp_user=Dino +ftp_pwd=gg66! diff --git a/data/scrs/docker-compose.yml b/data/scrs/docker-compose.yml new file mode 100644 index 0000000..b4ac151 --- /dev/null +++ b/data/scrs/docker-compose.yml @@ -0,0 +1,62 @@ +networks: + inception: + name: inception + driver: bridge + +services: + mariadb: + container_name: mariadb + build: ./requirements/mariadb + ports: + - "3306:3306" + env_file: + - .env + volumes: + - mariadb_data:/var/lib/mysql + networks: + - inception + restart: always + + wordpress: + container_name: wordpress + build: + context: ./requirements/wordpress + dockerfile: Dockerfile + env_file: + - .env + expose: + - "9000" + networks: + - inception + volumes: + - wordpress_data:/var/www/html + restart: always + + nginx: + container_name: nginx + build: ./requirements/nginx + depends_on: + - wordpress + - mariadb + ports: + - "443:443" + volumes: + - wordpress_data:/var/www/html + - ./requirements/nginx/conf/nginx.conf:/etc/nginx/nginx.conf + networks: + - inception + restart: always + +volumes: + mariadb_data: + driver: local + driver_opts: + type: none + device: /home/fgras-ca/Inception/data/mysql + o: bind + wordpress_data: + driver: local + driver_opts: + type: none + device: /home/fgras-ca/Inception/data/html + o: bind diff --git a/data/scrs/requirements/mariadb/.dockerignore b/data/scrs/requirements/mariadb/.dockerignore new file mode 100644 index 0000000..e69de29 diff --git a/data/scrs/requirements/mariadb/Dockerfile b/data/scrs/requirements/mariadb/Dockerfile new file mode 100644 index 0000000..63bdc45 --- /dev/null +++ b/data/scrs/requirements/mariadb/Dockerfile @@ -0,0 +1,26 @@ +FROM debian:buster + +# Install necessary packages +RUN apt update -y && apt upgrade -y +RUN apt-get install -y mariadb-server mariadb-client gettext-base + +# Create the required directory for the Unix socket file +RUN mkdir -p /run/mysqld /var/www +RUN chown mysql:mysql /run/mysqld + +# Copy configuration files +COPY ./conf/50-server.cnf /etc/mysql/mariadb.conf.d/ +COPY ./tools/init_db.sql /etc/mysql/init_db.sql +COPY ./tools/init_db.sql /docker-entrypoint-initdb.d/init_db.sql +COPY ./tools/entrypoint.sh /usr/local/bin/entrypoint.sh + +# Ensure the script and SQL file have the correct permissions +RUN chmod +x /usr/local/bin/entrypoint.sh +RUN chmod 644 /etc/mysql/init_db.sql +RUN chmod 644 /docker-entrypoint-initdb.d/init_db.sql +RUN chmod -R 777 /var/lib/mysql + +EXPOSE 3306 + +# Use the entrypoint script +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/data/scrs/requirements/mariadb/conf/50-server.cnf b/data/scrs/requirements/mariadb/conf/50-server.cnf new file mode 100644 index 0000000..5aa7b9d --- /dev/null +++ b/data/scrs/requirements/mariadb/conf/50-server.cnf @@ -0,0 +1,9 @@ +[mysql] +default-character-set=utf8 + +[mysqld] +datadir = /var/lib/mysql +#socket = /run/mysqld/mysqld.sock +bind_address=* +port = 3306 +user = mysql \ No newline at end of file diff --git a/data/scrs/requirements/mariadb/tools/entrypoint.sh b/data/scrs/requirements/mariadb/tools/entrypoint.sh new file mode 100644 index 0000000..e530dda --- /dev/null +++ b/data/scrs/requirements/mariadb/tools/entrypoint.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Créer un fichier SQL pour initialiser la base de données +cat << EOF > /docker-entrypoint-initdb.d/init_db.sql +CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE}; +CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}'; +GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%'; +FLUSH PRIVILEGES; +EOF + +service mysql start + +# Vérifier si le socket existe +if [ ! -S /var/run/mysqld/mysqld.sock ]; then + echo "Le fichier de socket MySQL n'existe pas. Création du socket..." + mkdir -p /var/run/mysqld + chown mysql:mysql /var/run/mysqld + service mysql restart +fi + +# Exécuter le script SQL +mysql -u root -p"${MYSQL_ROOT_PASSWORD}" < /docker-entrypoint-initdb.d/init_db.sql +if [ $? -ne 0 ]; then + echo "Échec de l'exécution du script SQL" + exit 1 +fi + +echo "=== Script SQL exécuté avec succès ===" + +# Garder le conteneur en cours d'exécution +chown -R mysql:mysql /var/lib/mysql +tail -f /dev/null diff --git a/data/scrs/requirements/mariadb/tools/init_db.sql b/data/scrs/requirements/mariadb/tools/init_db.sql new file mode 100644 index 0000000..d842d4c --- /dev/null +++ b/data/scrs/requirements/mariadb/tools/init_db.sql @@ -0,0 +1,4 @@ +CREATE DATABASE IF NOT EXISTS '${MYSQL_DATABASE}'; +CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}'; +GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%'; +FLUSH PRIVILEGES; diff --git a/data/scrs/requirements/nginx/.dockerignore b/data/scrs/requirements/nginx/.dockerignore new file mode 100644 index 0000000..e69de29 diff --git a/data/scrs/requirements/nginx/Dockerfile b/data/scrs/requirements/nginx/Dockerfile new file mode 100644 index 0000000..346deea --- /dev/null +++ b/data/scrs/requirements/nginx/Dockerfile @@ -0,0 +1,21 @@ +FROM debian:buster + +# Installer Nginx et OpenSSL +RUN apt update -y && apt upgrade -y +RUN apt-get install -y nginx vim openssl + +# Créer le répertoire requis pour les certificats SSL +RUN mkdir -p /etc/nginx/ssl + +# Copier les configurations de Nginx et le fichier default +COPY ./conf/nginx.conf /etc/nginx/nginx.conf +COPY ./conf/default /etc/nginx/sites-available/default + +# Générer des certificats auto-signés pour SSL +RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/inception.key -out /etc/nginx/ssl/inception.crt -subj "/C=FR/ST=IDF/L=Paris/O=42/OU=42/CN=fgras-ca.42.fr" + +# Supprimer le lien symbolique existant et créer un nouveau lien symbolique pour le site par défaut +RUN rm -f /etc/nginx/sites-enabled/default && ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/ + +# Démarrer Nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/data/scrs/requirements/nginx/conf/default b/data/scrs/requirements/nginx/conf/default new file mode 100644 index 0000000..b6eaaf6 --- /dev/null +++ b/data/scrs/requirements/nginx/conf/default @@ -0,0 +1,28 @@ +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name fgras.42.fr; + server_name www.fgras.42.fr; + + # SSL certificates + ssl_certificate /etc/nginx/ssl/inception.crt; + ssl_certificate_key /etc/nginx/ssl/inception.key; + + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + + root /var/www/html; + index index.php index.html; + + location / { + try_files $uri $uri/ /index.php?$args; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass wordpress:9000; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } +} diff --git a/data/scrs/requirements/nginx/conf/nginx.conf b/data/scrs/requirements/nginx/conf/nginx.conf new file mode 100644 index 0000000..7437b7c --- /dev/null +++ b/data/scrs/requirements/nginx/conf/nginx.conf @@ -0,0 +1,49 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; + +events { + worker_connections 768; +} + +http { + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + gzip on; + gzip_disable "msie6"; + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; + + server { + listen 443 ssl; + ssl_certificate /etc/nginx/ssl/inception.crt; + ssl_certificate_key /etc/nginx/ssl/inception.key; + + root /var/www/html; + server_name fgras-ca.42.fr; + index index.php index.html index.htm; + + location / { + try_files $uri $uri/ =404; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass wordpress:9000; + } + } +} diff --git a/data/scrs/requirements/wordpress/.dockerignore b/data/scrs/requirements/wordpress/.dockerignore new file mode 100644 index 0000000..e69de29 diff --git a/data/scrs/requirements/wordpress/Dockerfile b/data/scrs/requirements/wordpress/Dockerfile new file mode 100644 index 0000000..09251e1 --- /dev/null +++ b/data/scrs/requirements/wordpress/Dockerfile @@ -0,0 +1,30 @@ +FROM debian:buster + +# Installer les paquets nécessaires +RUN apt update -y && apt upgrade -y && \ + apt-get install -y php7.3-fpm php7.3-mysql mariadb-client wget curl vim && \ + mkdir -p /var/www/html && \ + wget https://fr.wordpress.org/wordpress-6.0-fr_FR.tar.gz -O /tmp/wordpress.tar.gz && \ + tar -xzvf /tmp/wordpress.tar.gz -C /var/www/html --strip-components=1 && \ + rm /tmp/wordpress.tar.gz && \ + wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && chmod +x wp-cli.phar && mv wp-cli.phar /usr/local/bin/wp + +RUN apt-get install sendmail -y + +# Copier les fichiers de configuration PHP et le script d'auto-configuration +COPY ./conf/www.conf /etc/php/7.3/fpm/pool.d/ +COPY ./conf/wp-config.php /var/www/html/ +COPY ./tools/auto_config.sh /usr/local/bin/ + +# Assurer les bonnes permissions pour les fichiers +RUN chmod +x /usr/local/bin/auto_config.sh && \ + chmod -R 755 /var/www/html && \ + chown -R www-data:www-data /var/www/html ; \ + chown www-data:www-data /var/www/html/index.php +RUN chmod -R 777 /var/www/html +COPY ./conf/web /var/www/html +RUN chmod -R 777 /var/www/html + +EXPOSE 9000 + +ENTRYPOINT ["/usr/local/bin/auto_config.sh"] diff --git a/data/scrs/requirements/wordpress/conf/web/Inception_Visual.webp b/data/scrs/requirements/wordpress/conf/web/Inception_Visual.webp new file mode 100644 index 0000000..dfa616a Binary files /dev/null and b/data/scrs/requirements/wordpress/conf/web/Inception_Visual.webp differ diff --git a/data/scrs/requirements/wordpress/conf/web/index.html b/data/scrs/requirements/wordpress/conf/web/index.html new file mode 100644 index 0000000..e49b153 --- /dev/null +++ b/data/scrs/requirements/wordpress/conf/web/index.html @@ -0,0 +1,170 @@ + + + + + + INCEPTION - 42 Perpignan + + + + +
+
+
INCEPTION
+
42 Perpignan
+
fgras-ca
+
+ +
+ +
+
+ + + diff --git a/data/scrs/requirements/wordpress/conf/web/index.php b/data/scrs/requirements/wordpress/conf/web/index.php new file mode 100644 index 0000000..e49b153 --- /dev/null +++ b/data/scrs/requirements/wordpress/conf/web/index.php @@ -0,0 +1,170 @@ + + + + + + INCEPTION - 42 Perpignan + + + + +
+
+
INCEPTION
+
42 Perpignan
+
fgras-ca
+
+ +
+ +
+
+ + + diff --git a/data/scrs/requirements/wordpress/conf/web/jump_scare_image.webp b/data/scrs/requirements/wordpress/conf/web/jump_scare_image.webp new file mode 100644 index 0000000..6270cfc Binary files /dev/null and b/data/scrs/requirements/wordpress/conf/web/jump_scare_image.webp differ diff --git a/data/scrs/requirements/wordpress/conf/wp-config.php b/data/scrs/requirements/wordpress/conf/wp-config.php new file mode 100644 index 0000000..f482596 --- /dev/null +++ b/data/scrs/requirements/wordpress/conf/wp-config.php @@ -0,0 +1,31 @@ +v'); +define('AUTH_SALT', 'P`?.eaIu-G3fZYiN|/X[Sdc!ZVu9LfvP>26('); +define('SECURE_AUTH_SALT', 'ZnDGUX{EtppgS7gTLqg|xYcS26(WB-xP3?ldWSs|Ak;UTWpJ`fGisKDii7agi^P}-@}Gm#m>A6Gb|'); +define('NONCE_SALT', 'ZaiFh{H~?Z34?18v[=Wi> /etc/sudoers +fi + +# Configurer le délai de validité du mot de passe sudo à une durée indéfinie +if ! grep -q "timestamp_timeout=-1" /etc/sudoers; then + echo "Setting sudo password timeout to indefinite..." + echo "Defaults timestamp_timeout=-1" >> /etc/sudoers +fi + +# Mise à jour des paquets +echo "Updating package lists..." +apt-get update + +# Installer les dépendances nécessaires pour Docker +echo "Installing necessary packages..." +apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + git \ + make \ + wget + +# Ajouter la clé GPG officielle de Docker +curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + +# Ajouter le dépôt Docker +echo \ + "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null + +# Mettre à jour les paquets à nouveau et installer Docker +apt-get update +apt-get install -y docker-ce docker-ce-cli containerd.io + +# Installer Docker Compose +echo "Installing Docker Compose..." +DOCKER_COMPOSE_VERSION="1.29.2" +curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +chmod +x /usr/local/bin/docker-compose + +# Ajouter l'utilisateur au groupe Docker +echo "Adding user to Docker group..." +usermod -aG docker $USER + +# Installation de Visual Studio Code +wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg +install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/ +sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' +apt-get update +apt-get install -y code +rm packages.microsoft.gpg + +echo "Setup completed. Please log out and log back in for the Docker group changes to take effect." + +