-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
158 lines (134 loc) · 5.98 KB
/
docker-compose.yml
File metadata and controls
158 lines (134 loc) · 5.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# =============================================================================
# docker-compose.yml
# Stack: WordPress (latest) + Nginx (latest) + PHP-FPM 8.5 + MySQL 8.4
# Objetivo: máximo desempenho em ambiente containerizado
# Credenciais: definidas em .env (NÃO versionar o .env com dados reais)
# =============================================================================
# Versão do schema de compose utilizada
# ---------------------------------------------------------------------------
# VOLUMES NOMEADOS — garantem persistência dos dados além do ciclo dos containers
# ---------------------------------------------------------------------------
volumes:
# Volume para os dados do MariaDB (tablespaces, logs, etc.)
mariadb_data:
driver: local
# Volume para os arquivos do WordPress (wp-content, uploads, plugins, temas…)
wordpress_data:
driver: local
# Volume para os sockets Unix do PHP-FPM (comunicação de alta velocidade com Nginx)
php_socket:
driver: local
# ---------------------------------------------------------------------------
# REDE INTERNA — os serviços se comunicam apenas por nome de serviço
# ---------------------------------------------------------------------------
networks:
wp_network:
driver: bridge
# ---------------------------------------------------------------------------
# SERVIÇOS
# ---------------------------------------------------------------------------
services:
# =========================================================================
# MARIADB LTS — banco de dados relacional (fork do MySQL, recomendado para WP)
# MariaDB tem melhor performance para WordPress: thread pool nativo,
# InnoDB otimizado e suporte a Aria (tabelas temporárias mais rápidas)
# =========================================================================
mariadb:
image: mariadb:lts # Tag LTS = versão estável de longo suporte (11.x)
container_name: wp_mariadb
restart: unless-stopped # Reinicia automaticamente salvo se parado manualmente
# Variáveis de ambiente vindas do .env
environment:
MARIADB_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MARIADB_DATABASE: ${MYSQL_DATABASE}
MARIADB_USER: ${MYSQL_USER}
MARIADB_PASSWORD: ${MYSQL_PASSWORD}
# Parâmetros de performance do MariaDB (ajuste conforme RAM disponível)
command: >
--innodb-buffer-pool-size=256M --innodb-log-file-size=64M --innodb-flush-log-at-trx-commit=2 --innodb-flush-method=O_DIRECT --max-connections=200 --skip-name-resolve --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --thread-handling=pool-of-threads
volumes:
# Persiste os dados do banco de dados
- mariadb_data:/var/lib/mysql
networks:
- wp_network
# Health check: garante que o MariaDB esteja pronto antes do WordPress subir
healthcheck:
test: [ "CMD", "healthcheck.sh", "--connect", "--innodb_initialized" ]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
# =========================================================================
# WORDPRESS + PHP-FPM 8.5
# Imagem oficial do Docker Hub: wordpress:php8.5-fpm-alpine
# Alpine = imagem menor e mais segura que a Debian/bookworm
# A imagem já vem com todas as extensões PHP exigidas pelo WordPress
# (mysqli, gd, zip, exif, intl, opcache, etc.) — sem necessidade de Dockerfile
# =========================================================================
php:
image: wordpress:php8.5-fpm-alpine # Imagem oficial WordPress + PHP-FPM 8.5
container_name: wp_php
restart: unless-stopped
# Variáveis de ambiente do WordPress lidas pelo wp-config.php
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}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
WORDPRESS_DEBUG: ${WORDPRESS_DEBUG}
PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT}
volumes:
# Arquivos do WordPress compartilhados com o Nginx
- wordpress_data:/var/www/html
# Socket Unix (mais rápido que TCP para comunicação PHP ↔ Nginx)
- php_socket:/run/php
# Configuração customizada do PHP-FPM
- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
- ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf:ro
networks:
- wp_network
# Sobe somente após o MariaDB estar saudável
depends_on:
mariadb:
condition: service_healthy
# Health check: verifica se o socket PHP-FPM está ativo
healthcheck:
test: [ "CMD-SHELL", "test -S /run/php/php-fpm.sock" ]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
# =========================================================================
# NGINX — servidor web / proxy reverso de alta performance
# =========================================================================
nginx:
image: nginx:alpine # Alpine = menor footprint, mais seguro
container_name: wp_nginx
restart: unless-stopped
# Mapeia as portas do host para o container
ports:
- "${NGINX_HTTP_PORT}:80"
- "${NGINX_HTTPS_PORT}:443"
volumes:
# Arquivos do WordPress (lidos diretamente pelo Nginx para arquivos estáticos)
- wordpress_data:/var/www/html:ro
# Configuração principal do Nginx
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
# VirtualHost do WordPress
- ./nginx/conf.d/wordpress.conf:/etc/nginx/conf.d/default.conf:ro
# Socket Unix compartilhado com PHP-FPM
- php_socket:/run/php
networks:
- wp_network
# Sobe somente após o PHP-FPM estar saudável
depends_on:
php:
condition: service_healthy
# Health check: verifica se o Nginx está respondendo
healthcheck:
test: [ "CMD-SHELL", "wget -qO- http://localhost/wp-login.php | grep -q 'WordPress' || exit 1" ]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s