Build wordpress with docker-compose and cloudflare
Build wordpress with docker-compose and cloudflare
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
echo
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update sudo apt -y upgrade sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose vim sudo systemctl enable docker –now sudo mkdir -p /opt/wordpress/nginx
cd /opt/wordpress
sudo vim docker-compose.yml
version: '3'
services:
db:
image: mysql:latest
container_name: db
restart: always
environment:
MYSQL_ROOT_PASSWORD: verysecurepassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: P@SSword
volumes:
- dbdata:/var/lib/mysql
wordpress:
image: wordpress:5-fpm-alpine
depends_on:
- db
container_name: wordpress
restart: always
volumes:
- wordpress:/var/www/html
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: P@SSword
WORDPRESS_DB_NAME: wordpress
webserver:
depends_on:
- wordpress
image: nginx:mainline-alpine
container_name: webserver
restart: always
ports:
- "443:443"
volumes:
- wordpress:/var/www/html
- /opt/wordpress/nginx/:/etc/nginx/conf.d
volumes:
wordpress:
dbdata:
sudo vim nginx/cert.pem sudo vim nginx/key.pem sudo vim nginx/nginx.conf
server {
listen 443 ssl http2;
ssl_certificate conf.d/cert.pem;
ssl_certificate_key conf.d/key.pem;
server_name wp-docker.winglab.net;
root /var/www/html;
index index.php index.html index.htm;
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
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;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /favicon.svg {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
docker-compose up -d