#!/bin/bash # Create SSL directory if it doesn't exist mkdir -p ../ssl # Generate self-signed certificate openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ../ssl/nginx-selfsigned.key \ -out ../ssl/nginx-selfsigned.crt \ -subj "/CN=localhost" # Create nginx SSL config directory if it doesn't exist mkdir -p ../nginx-conf # Create SSL configuration cat > ../nginx-conf/ssl.conf << 'EOF' server { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; root /var/www/html; index index.php; client_max_body_size 100M; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_read_timeout 300; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } } EOF # Make the script executable chmod +x "$0" echo "SSL setup complete. Restart the containers to apply changes:" echo "docker-compose down && docker-compose up -d"