Como instalar o WordPress em um servidor dedicado VPS usando Docker e Portainer

Passo 1

Antes de começarmos a configuração do WordPress no Portainer.io no Docker Swarm, é essencial garantir um desempenho ótimo e tempo de resposta rápido. Recomendamos contratar um servidor VPS, de preferência localizado no Brasil, para otimizar a experiência. Abaixo, fornecemos um link para contratação, juntamente com nosso suporte para auxiliá-lo durante o processo.

Pré-requisitos:

Passo 2

Criando Banco de Dados no MySQL

Abra o terminal e execute o seguinte comando para acessar seu banco de dados do MySQL com o seguinte comando:

Portainer-Criando-Banco-de-dados-Mysql
				
					mysql -u root -p
				
			

Coloque a senha do mysql definida stack anteriormente.

				
					CREATE DATABASE wordpress;
				
			

Passo 3

Apontamento DNS (Claudflare)

Crie um domínio ou subdomínio, apontando para o seu servidor (IP).

>> Como apontar DNS na Cloudflare?

Passo 4

Subindo-Stack-Portainer-Traefik

Configurando Stack com Traefik

Neste tutorial vou ensinar dois métodos.

Um usando o Traefik e outro usando o Nginx para ativar o SSL (https) do seu domínio ou subdomínio.

Configurando Stack com Traefik

				
					version: "3.8"
services:
  wordpress:
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - traefik_public
      - digital_network
    environment:
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_DB_HOST=mysql
      - WORDPRESS_DB_PORT=3306
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=<suasenha> #atenção
      - WP_REDIS_HOST=redis
      - WP_REDIS_DATABASE=6
      - VIRTUAL_HOST=subdominio.seusite.com.br #atenção
      - WP_LOCALE=pt_BR
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      labels:
        - traefik.enable=true
        - traefik.http.routers.wordpress.rule=Host(`subdominio.seusite.com.br`)  #atenção
        - traefik.http.routers.wordpress.entrypoints=websecure
        - traefik.http.routers.wordpress.tls.certresolver=le
        - traefik.http.routers.wordpress.service=wordpress
        - traefik.http.services.wordpress.loadbalancer.server.port=80
        - traefik.http.services.wordpress.loadbalancer.passHostHeader=true
volumes:
  wordpress_data:
    external: true
    name: wordpress_data
networks:
  traefik_public:
    external: true
  digital_network:
    external: true

				
			

Configurando Stack com Traefik e #SubDominio (Opcional)

Segue exemplo de apontamento DNS na Cloudflare

DNS-Registros-digitalinterativo-com-br-Digitalinterativo4-0-gmail-com-s-Account-Cloudflare (1)
DNS-Registros-digitalinterativo-com-br-Digitalinterativo4-0-gmail-com-s-Account-Cloudflare
				
					version: "3.8"
services:
  wordpress:
    image: wordpress:latest
    restart: always
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - traefik_public
      - digital_network
    environment:
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_DB_HOST=mysql
      - WORDPRESS_DB_PORT=3306
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=<suasenha> #atenção
      - WP_REDIS_HOST=redis
      - WP_REDIS_DATABASE=6
      - VIRTUAL_HOST=subdominio.seusite.com.br #atenção
      - WP_LOCALE=pt_BR
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      # Regra para o domínio principal
        - traefik.http.routers.wordpress-main.rule=Host(`curso.digitalinterativo.com.br`)
        - traefik.http.routers.wordpress-main.entrypoints=websecure
        - traefik.http.routers.wordpress-main.tls.certresolver=le
        - traefik.http.routers.wordpress-main.service=wordpress
        
        # Regra para os subdomínios
        - traefik.http.routers.wordpress-subdomains.rule=HostRegexp(`{subdomain:[a-z0-9]+}.curso.digitalinterativo.com.br`)
        - traefik.http.routers.wordpress-subdomains.entrypoints=websecure
        - traefik.http.routers.wordpress-subdomains.tls.certresolver=le
        - traefik.http.routers.wordpress-subdomains.service=wordpress
        
        - traefik.http.services.wordpress.loadbalancer.server.port=80
        - traefik.http.services.wordpress.loadbalancer.passHostHeader=true
volumes:
  wordpress_data:
    external: true
    name: wordpress_data
networks:
  traefik_public:
    external: true
  digital_network:
    external: true

				
			

Instalação Nginx (Opcional)

Primeiramente, vamos instalar o Nginx, como temos a Stack do Traefik, no exemplo abaixo, deixei configurada para rodar em portas diferentes do padrão:

				
					version: '3.8'

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt
    networks:
      - traefik_public
      - digital_network  
    ports:
      # Alteração das portas para evitar conflito com o Traefik
      - '8080:8080' # Public HTTP Port
      - '8443:8443' # Public HTTPS Port
      - '81:81'    # Admin Web Port
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          cpus: "0.2"
          memory: 256M

volumes:
  npm_data:
    external: true
  npm_letsencrypt:
    external: true

networks:
  traefik_public:
    external: true
  digital_network:
    external: true

				
			

Primeiro Acesso ao Nginx - Definindo Senha

Login Padrão: [email protected]
Senha Padrão: changeme

Passo 4 - Stack WordPress (Nginx)

				
					version: "3.8"
services:
  wordpress:
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - traefik_public
      - digital_network
    environment:
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_DB_HOST=mysql
      - WORDPRESS_DB_PORT=3306
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=<suasenha> #atenção
      - WP_REDIS_HOST=redis
      - WP_REDIS_DATABASE=6
      - VIRTUAL_HOST=subdominio.seusite.com.br #atenção
      - WP_LOCALE=pt_BR
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
volumes:
  wordpress_data:
    external: true
    name: wordpress_data
networks:
  traefik_public:
    external: true
  digital_network:
    external: true

				
			

Passo 5 - Primeiro Acesso WordPress

Gostou do conteúdo? Quer apoiar nosso trabalho?

Você pode fazer uma doação e nos ajudar a continuar criando conteúdo de qualidade. Acesse o link para ver as formas de pagamento disponíveis: https://www.asaas.com/c/io73sms6maiim7ud

Chave Pix: (15) 99855-8323

Share the Post:

Post Relacionados