Pesquisa de site

Como executar o Nginx Proxy Manager no Docker Container


Todos nós sabemos que o gerenciamento manual de hosts Nginx Proxy, redirecionamentos e SSL pode ser entediante. O projeto Nginx Proxy Manager começou como um projeto pessoal de Jamie Curnow com a intenção de fornecer uma maneira mais fácil de criar hosts de proxy reverso e encerrar SSL usando Nginx. O projeto possui opções avançadas opcionais para uso avançado de proxy. Abaixo estão alguns dos bons recursos do Nginx Proxy Manager.

  • Suporte para gerenciamento de usuários, concessão de permissões e registro de auditoria
  • Ele vem com uma interface administrativa bonita e segura baseada no Tableropen in new window
  • Suporte para SSL grátis usando Let’s Encrypt ou uma opção para fornecer seus próprios certificados SSL personalizados
  • Capacidade de criar domínios de encaminhamento, redirecionamentos, streams e hosts 404 sem domínio dos conceitos Nginx
  • Para superusuários, há configuração avançada do Nginx disponível
  • Suporte para listas de acesso e autenticação HTTP básica para hosts específicos
  • Facilidade de implantação: é construído como uma imagem Docker para instalação rápida

Nas próximas seções realizamos a instalação, configurações e demonstramos o uso básico do Nginx Proxy Manager no Docker Container. Você não precisa de conhecimentos profundos de Linux para acompanhar este artigo.

Instale o Docker Engine

O Nginx Proxy Manager é empacotado como uma imagem de contêiner que pode ser executada no Docker, Podman ou qualquer mecanismo de contêiner semelhante. Para simplificar, estamos usando o Docker Engine neste artigo. Siga o artigo abaixo para realizar a instalação do Docker Container Engine.

  • Como instalar o Docker Engine em sistemas Linux

Após a instalação, você pode verificar a versão do Docker.

$ docker version
Client: Docker Engine - Community
 Version:           25.0.3
 API version:       1.44
 Go version:        go1.21.6
 Git commit:        4debf41
 Built:             Tue Feb  6 21:13:09 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          25.0.3
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.6
  Git commit:       f417435
  Built:            Tue Feb  6 21:13:09 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Execute o Nginx Proxy Manager no Docker Container

O Nginx Proxy Manager usará as portas 80 para http, a porta 443 para tráfego https e a porta 81 para seu painel de administração. Se você tiver outro servidor web como Nginx ou Apache no mesmo host, considere desativá-lo.

Para interromper os serviços da web Nginx e Apache atuais em sistemas baseados em Debian e RHEL, use os seguintes comandos.

### Debian / Ubuntu ###
sudo systemctl disable --now nginx apache2

### RHEL based systems ###
sudo systemctl disable --now nginx httpd

Crie diretórios que conterão dados do gerenciador de proxy Nginx.

mkdir ~/nginx-proxy-manager && cd ~/nginx-proxy-manager

Docker compose é uma ferramenta de linha de comando usada para definir e executar um ou vários aplicativos contêineres a partir de definições em um único arquivo YAML chamado docker-compose.yml. Vamos criar este arquivo

vim docker-compose.yml

Aqui temos as configurações padrão necessárias para executar o aplicativo usando o Compose. O banco de dados padrão é SQLite.

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Se você deseja usar o banco de dados MariaDB, aqui está um exemplo de como será a aparência do seu docker-compose.yml :

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      # Mysql/Maria connection parameters:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
      MARIADB_AUTO_UPGRADE: '1'
    volumes:
      - ./mysql:/var/lib/mysql

Ative o contêiner para execução executando os seguintes comandos.

docker compose up -d

Saída esperada de execução de comando.

[+] Running 2/2
  Network nginx-proxy-manager_default  Created                                                                                                                                                  0.1s
   Container nginx-proxy-manager-app-1  Started                                                                                                                                                  0.2s

Se tudo correr bem, você verá uma saída como abaixo.

À medida que os aplicativos são iniciados, as seguintes operações acontecerão.

  1. As chaves GPG são geradas e salvas na pasta de dados
  2. O banco de dados será inicializado com estruturas de tabela
  3. Um usuário administrador padrão será criado – com credenciais [email /changeme

As portas de serviços mencionadas anteriormente são 80, 443 e 81.

$ ss -tunelp | egrep '80|443|81'
tcp   LISTEN 0      4096             0.0.0.0:80        0.0.0.0:*    users:(("docker-proxy",pid=608762,fd=4)) ino:8689062 sk:100d cgroup:/system.slice/docker.service <->
tcp   LISTEN 0      4096             0.0.0.0:81        0.0.0.0:*    users:(("docker-proxy",pid=608740,fd=4)) ino:8689043 sk:100e cgroup:/system.slice/docker.service <->
tcp   LISTEN 0      4096             0.0.0.0:443       0.0.0.0:*    users:(("docker-proxy",pid=608718,fd=4)) ino:8688177 sk:100f cgroup:/system.slice/docker.service <->
tcp   LISTEN 0      4096                [::]:80           [::]:*    users:(("docker-proxy",pid=608768,fd=4)) ino:8689067 sk:1010 cgroup:/system.slice/docker.service v6only:1 <->
tcp   LISTEN 0      4096                [::]:81           [::]:*    users:(("docker-proxy",pid=608746,fd=4)) ino:8688198 sk:1011 cgroup:/system.slice/docker.service v6only:1 <->
tcp   LISTEN 0      4096                [::]:443          [::]:*    users:(("docker-proxy",pid=608724,fd=4)) ino:8688181 sk:1012 cgroup:/system.slice/docker.service v6only:1 <->

Você pode acessar o Nginx Proxy Manager em http://ServerIP_or_FQDN:81

Os detalhes de login padrão são;

  • E-mail: [email protegido]
  • Senha: alterar-me

Edite o usuário após o login e defina os nomes e o endereço de e-mail correto.

Altere sua senha de alterarpara uma senha mais forte.

O painel terá as seguintes seções no menu de navegação.

Usando Let's Encrypt SSL (curinga)

Acho que usar SSL curinga Let’s Encrypt para todos os subdomínios é mais ideal do que gerar um certificado para cada domínio. Para criar novos certificados SSL, navegue até “Certificados SSL” e depois “Adicionar Certificado SSL”.

Para meu caso de uso, optarei por “Usar um desafio de DNS”, já que meu domínio está hospedado na Cloudflare. Insira *.domain para certificado SSL de subdomínio curinga. Você também pode adicionar o domínio primário para que o certificado tenha ambos.

Salve e aguarde a geração do certificado.

Adicionar hosts proxy

Para um serviço que você precisará expor, você deve criar um registro DNS A para um nome de domínio apontando para o endereço IP do gerenciador de proxy Nginx. Por exemplo;

grafana.computingforgeeks.com in A 192.168.20.3

Para o restante deste tutorial, usaremos computingforgeeks.com como domínio, substitua-o pelo seu nome de domínio real.

Para adicionar um novo host virtual, navegue até Hosts > Hosts proxy.

Clique em “Adicionar Host Proxy” para configurar um novo host virtual.

Preencha o formulário preenchendo os seguintes dados.

  • Nomes de Domínio: Insira um ou mais nomes de domínio nos quais o serviço será acessado.
  • Esquema: Define o esquema utilizado pelo Nginx para acessar o serviço, portanto não é o esquema utilizado para o proxy em si.
  • Nome de host/IP de encaminhamento: configure o endereço IP ou nome de host onde o serviço de back-end está sendo executado. Pode ser um IP local ou público.
  • Porta de encaminhamento: a porta de serviço usada pelo serviço de back-end.
  • Bloquear explorações comuns: você pode ativar esta opção.
  • Outros campos podem ser deixados com seus padrões.

Na seção SSL , você pode optar por solicitar um novo certificado SSL ou usar o existente adicionado anteriormente. Preencha as outras informações necessárias para obter o certificado SSL Let's Encrypt.

Todos os hosts proxy estão listados na seção do menu Hosts proxy. Acesse o URL de origem para testar seu serviço de proxy nginx.

Conclusão

Neste artigo, demonstramos como você pode usar o Nginx Proxy Manager para gerenciar o acesso externo frontal ou público aos serviços de back-end protegidos com certificados Let's Encrypt SSL. Este é considerado um guia de uso básico, mas configurações mais avançadas podem ser feitas. Isso serve apenas para mostrar as funcionalidades e a eficácia do gerenciador de proxy nginx.

Artigos relacionados: