1
resposta

[Dúvida] VPS + Ansible + Docker + Traefik para projeto (Ningx, Projeto Django, PostgreSQL)

Estou precisando de uma ajuda para implementar o Traefik como gerenciador dos container's numa VPS. Para contextualizar estou criando máquinas utilizando o Ansible + Docker para projetos web rodando com Ningx, estou utilizando uma máquina VPS e gostaria de subir um container com o traefik para gerenciar todos os certificados dos demais containers com ningx.

1 resposta

Olá, Afrânio!

Vou sugerir aqui um passo a passo básico para configurar o Traefik como gerenciador de certificados para seus containers com Nginx.

  1. Configuração do Ansible: Primeiro, você precisa de um playbook Ansible para configurar sua VPS e instalar Docker. Aqui está um exemplo simples de playbook:

    ---
    - hosts: vps
      become: true
    
      tasks:
        - name: Update apt repository and cache
          apt:
            update_cache: yes
    
        - name: Install Docker
          apt:
            name: docker.io
            state: present
    
        - name: Install Docker Compose
          get_url:
            url: https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m`
            dest: /usr/local/bin/docker-compose
            mode: '0755'
    
        - name: Start Docker service
          service:
            name: docker
            state: started
            enabled: true
    
  2. Configuração do Docker Compose: Em seguida, você precisa de um arquivo docker-compose.yml para definir seus serviços, incluindo o Traefik. Aqui está um exemplo:

    version: '3'
    
    services:
      traefik:
        image: traefik:v2.5
        command:
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
          - "--certificatesresolvers.myresolver.acme.email=your-email@example.com"
          - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
          - "./letsencrypt:/letsencrypt"
    
      nginx:
        image: nginx:latest
        labels:
          - "traefik.http.routers.nginx.rule=Host(`example.com`)"
          - "traefik.http.routers.nginx.entrypoints=websecure"
          - "traefik.http.routers.nginx.tls.certresolver=myresolver"
        volumes:
          - ./nginx.conf:/etc/nginx/nginx.conf
    

    Certifique-se de substituir your-email@example.com pelo seu e-mail e example.com pelo seu domínio.

  3. Deploy com Ansible: Adicione uma tarefa no seu playbook Ansible para copiar o arquivo docker-compose.yml para a VPS e iniciar os containers:

    - name: Copy docker-compose.yml to VPS
      copy:
        src: ./docker-compose.yml
        dest: /home/youruser/docker-compose.yml
    
    - name: Start Docker containers
      command: docker-compose -f /home/youruser/docker-compose.yml up -d
      args:
        chdir: /home/youruser
    

    Certifique-se de ajustar o caminho e o usuário conforme necessário.

Espero ter ajudado e bons estudos!