Setting up WordPress, MySQL, Nginx proxy and SSL certificates in Docker
August 3, 2021
Ein Compose-Setup fuer WordPress + MySQL + Nginx + Certbot.
Struktur
code
.
|-- docker-compose.yml
|-- .env
`-- data
|-- certbot
`-- nginx
.env
code
MYSQL_DATABASE=wp
MYSQL_USER=wp
MYSQL_PASSWORD=secret
MYSQL_ROOT_PASSWORD=rootsecret
WORDPRESS_DB_HOST=mysql
WORDPRESS_DB_NAME=wp
WORDPRESS_DB_USER=wp
WORDPRESS_DB_PASSWORD=secret
docker-compose.yml (Kurz)
code
services:
mysql:
image: mysql:5.7
restart: unless-stopped
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- /home/${USER}/database:/var/lib/mysql
wordpress:
image: wordpress:php8.2-apache
restart: unless-stopped
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
volumes:
- /home/${USER}/wordpress:/var/www/html
nginx:
image: nginx:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./data/nginx:/etc/nginx/conf.d
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
certbot:
image: certbot/certbot
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
Certbot Erstlauf
code
docker compose run --rm certbot certonly \
--webroot --webroot-path=/var/www/certbot \
--email you@example.com --agree-tos --no-eff-email \
-d domain.com -d www.domain.com
Starten
code
docker compose up -d
Hinweis
- Nginx braucht passende TLS-Config in
data/nginx/*.conf - Certbot Renewal per Cron/Timer