Simplifique o deploy do seu site WordPress com nosso guia fácil de seguir. Use Docker Compose, Nginx, Apache e SSL para um processo de instalação sem problemas.
Também criaremos volumes para que as alterações ou atualizações sejam preservadas durante o reinício do contêiner.
Este setup foi testado no Google Cloud com uma instância executando o sistema operacional Ubuntu 22.04. Você também pode fazer este setup em qualquer serviço de nuvem como AWS, Azure, DigitalOcean, ou em servidores dedicados ou VPS.
Pré-requisitos
Certifique-se de ter completado todos os passos mencionados acima.
- Domínio apontado para o endereço IP do seu servidor.
- Docker instalado e configurado.
- Docker Compose instalado e configurado.
Depois de concluir todos os pré-requisitos, você pode prosseguir para fazer o setup e configurar o WordPress.
Criar Diretório do Projeto
Conecte-se via SSH ao seu servidor e comece criando um novo diretório de projeto chamado wp-project
. Você também pode nomeá-lo como desejar.
mkdir wp-project
Criar Arquivo Docker Compose YML
Agora, navegue dentro do diretório do projeto e crie um novo arquivo docker-compose.yml com a seguinte configuração.
cd wp-project
Crie um novo arquivo docker-compose.yml
.
nano docker-compose.yml
Copie todo o conteúdo abaixo e cole-o no arquivo.
Configure Docker Compose
Certifique-se de substituir as variáveis de ambiente mencionadas abaixo.
docker-compose.ymlversion: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.2-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: mariadb
WORDPRESS_DB_USER: db_user
WORDPRESS_DB_PASSWORD: db_user_pass
WORDPRESS_DB_NAME: db_name
volumes:
- wordpress_data:/var/www/html
mariadb:
container_name: mariadb
image: mariadb
restart: always
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_user_pass
MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
volumes:
- db_data:/var/lib/mysql
nginx:
container_name: nginx
image: nginx:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/html
certbot:
container_name: certbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/html
volumes:
db_data:
wordpress_data:
Pressione CTRL-X
seguido de Y
e ENTER
para salvar e sair do arquivo.
Configuração do Docker Compose: Explicação
Aqui estão os detalhes de configuração:
- Versão: Componha uma versão de arquivo compatível com o Docker Engine. Você pode verificar a compatibilidade aqui.
- Serviços: Aqui, temos quatro serviços chamados
WordPress
,MariaDB
,nginx
ecertbot
. - Imagem: Usamos a última versão do WordPress com PHP 8.2, Apache, Mariadb, Nginx e Certbot imagens disponíveis no Docker hub.
- Volumes:
wordpress_data
: Configuramos este diretório para ser sincronizado com o diretório que desejamos usar como raiz da web dentro do contêiner.conf
: Aqui, colocaremos o arquivo de configuração do Nginx para ser sincronizado com a pasta conf.d padrão do Nginx dentro do contêiner.cedtbot/conf
: É aqui que receberemos o certificado SSL, e isso será sincronizado com a pasta que desejamos dentro do contêiner.ports
: Configure o contêiner para escutar nas portas listadas.command
: O comando usado para receber o certificado SSL.
- Ambiente: Aqui, listamos todas as variáveis de ambiente disponíveis para a imagem WordPress.
WORDPRESS_DB_HOST
: Aqui, usamos o nome do serviço do contêiner MariaDB.WORDPRESS_DB_USER
: Igual ao que configuramos no serviço mariadb.WORDPRESS_DB_PASSWORD
: Igual ao que configuramos no serviço mariadb.WORDPRESS_DB_NAME
: Igual ao que configuramos no serviço mariadb.
Configure o Nginx
De acordo com a configuração do docker-compose.yml, precisamos criar o arquivo default.conf
dentro do diretório nginx/conf
.
Crie o diretório ao lado do seu arquivo docker-compose.yml
para abrigar o arquivo de configuração.
mkdir -p nginx/conf
Crie um arquivo chamado default.conf
.
nano nginx/conf/default.conf
Coloque as seguintes configurações; aqui, usamos a configuração de proxy reverso para o contêiner wordpress que executa o Apache.
nginx/conf/default.conf server {
listen [::]:80;
listen 80;
server_name domain.com www.domain.com;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
Aperte CTRL-X
seguido de Y
e ENTER
para salvar e sair do arquivo.
Agora você tem sua configuração do docker-compose e sua configuração do Nginx.
Implantar WordPress com Docker Compose
Inicie os contêineres usando o seguinte comando; você receberá os certificados SSL assim que os contêineres forem iniciados.
docker-compose up -d
Uma vez que todos os contêineres estejam em funcionamento, você verá dois diretórios adicionais, certbot
e WordPress,
criados ao lado do seu arquivo docker-compose.yml
.
O diretório wordpress
contém todo o código fonte do seu site WordPress.
O diretório certbot
contém todos os arquivos relacionados aos seus certificados SSL.
Para visualizar os contêineres, você pode executar o seguinte comando.
docker-compose ps
Configurar SSL Let’s Encrypt com Nginx
Como você já recebeu o certificado SSL Let’s Encrypt, pode configurar o HTTPS e configurar a redirecionamento para HTTPS.
Edite o default.conf
e faça as seguintes alterações.
nano nginx/conf/default.conf
nginx/conf/default.confserver {
listen [::]:80;
listen 80;
server_name domain.com www.domain;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
Aperte CTRL-X
seguido de Y
e ENTER
para salvar e sair do arquivo.
Agora, você pode reiniciar o serviço Nginx para carregar as novas configurações.
docker-compose restart nginx
Agora, você pode verificar seu nome de domínio em seu navegador. Você será redirecionado para HTTPS e verá a página de instalação do WordPress para concluir a instalação.
Solução de Problemas
Abaixo estão algumas dicas para SSH em contêineres; consulte os logs de erro.
SSH para o Contêiner Docker
Para SSH no contêiner wordpress
, você pode usar o comando abaixo.
docker-compose exec wordpress /bin/bash
Para SSH no contêiner nginx
, você pode usar o comando abaixo.
docker-compose exec nginx /bin/bash
Verificar Logs do Contêiner
Você pode usar o comando abaixo para verificar os logs dos contêineres usando docker-compose
docker-compose logs -f
Reiniciar Contêineres
Você pode reiniciar os contêineres usando o comando restart
facilmente.
docker-compose restart container_name
Substitua container_name
pelo nome do seu contêiner (wordpress, nginx, certbot)
Parar Todos os Contêineres Docker
Você pode parar todos os contêineres Docker usando o comando abaixo.
docker-compose down
Remover Todos os Contêineres e Volumes
Você pode usar o docker-compose para remover todos os contêineres e seus volumes com o comando abaixo.
docker compose rm -fv
Remover Todos os Contêineres Docker
Remova todos os contêineres usando o seguinte comando.
docker rm -f $(docker ps -a -q)
Excluir Todos os Volumes
Você também pode excluir todos os volumes usando o comando abaixo.
docker volume rm $(docker volume ls -q)
Iniciar Todos os Contêineres
Com um único comando de Docker compose, você pode iniciar todos os contêineres.
docker-compose up -d
Conclusão
Agora você aprendeu a instalar e configurar o WordPress com Nginx, Apache, PHP 8.2, MariaDB e Let’s Encrypt com Docker e Docker Compose no Ubuntu 22.04.
Obrigado pelo seu tempo.
Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl