Linux Ubuntu com Docker, proxy reverso e SSL com Nginx Proxy Manager

Danilo Barreto Bezerra
4 min readMay 23, 2021

--

Escrevi um post a pouco tempo explicando como instalar um painel no Ubuntu e o configurar o para fazer proxy reverso, durante as minhas pesquisas achei este projeto Open Source chamado: Nginx Proxy Manager e achei animal.

Este projeto vem como uma imagem docker pré-construída que permite que você encaminhe facilmente para seus sites rodando em casa ou não, incluindo SSL grátis, sem ter que saber muito sobre Nginx ou Letsencrypt.

Bom pra resumir a história é assim se você tem um Linux instalado e não quer instalar painel de controle e precisa só rotear o trafego de um domínio que esteja apontando para sua maquina para uma aplicação docker, basta instalar essa aplicação docker no docker que ela vai escutar a porta 80 e 443 por padrão e toda requisição que chegar ele faz o trabalho de encaminhar o domínio para a aplicação docker que você quiser e até mesmo baixar o certificado SSL do Let’s Encrypt tudo isso através de uma interface web bem simples de configurar.

Estes processos foram feitos no Ubuntu 20.04.2.0 LTS

Veja como é simples….

Antes de tudo não se esqueça de atualizar seu Ubuntu rodando no terminal:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Mensagem de confirmação de que está tudo atualizado

Primeiro instale o docker caso não tenha para instalar é simples.

sudo apt install docker.io

Depois instale o docker compose

sudo apt install docker-compose

Seguindo o tutorial de instalação do próprio Nginx Proxy Manager

Após instalado crie um arquivo chamado docker-compose.yml eu recomendo criar em um diretório onde seja fácil acessar/manter guardado no meu caso como estou usando Ubuntu com interface coloquei em Documentos/NginxProxyManager, e cole o seguinte conteúdo.

version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'jc21/mariadb-aria:latest'
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql

Neste arquivo docker-compose podemos ver que ele irá criar 1 projeto com a ultima versão do docker dele mesmo nginx-proxy-manager e junto um banco de dados mariadb ultima versão e se auto conectar a ele.

Após isto acesse este diretório via terminal usando o comando

cd Documentos/NginxProxyManager

Acessando diretório via terminal

Neste diretório digite:

sudo docker-compose up -d
Subindo imagem do arquivo docker-compose

Após a instalação da imagem ser feita no docker podemos usar o comando:

sudo docker ps

Podemos ver que temos no docker 2 caras rodando sendo um deles o mariadb utilizando porta 3306 eo nginx-proxy-manager na porta 80 mandando para 81 e 443 mandando para 443.

Feito isto basta abrir o navegador e digitar:

http://localhost:81

Os dados para primeiro acesso são:

Email:    admin@example.com
Password: changeme

Após login a primeira coisa que vai pedir é para você colocar seu nome NickName e e-mail e trocar a senha.

Tela inicial

Agora podemos criar nosso Host, para isso acessar o menu Hosts e escolher proxy Hosts

Depois Add Proxy Host

E agora vamos configurar nosso domínio apontar ele para um docker que esteja rodando.

Veja que apontei o domínio: example.com para tudo que vier dele encaminhar para o ip 127.0.0.1 na porta 5000 via protocolo HTTP.

Na aba SSL devemos escolher para ele solicitar um novo certificado SSL para este domínio, após isto, salve e pronto!.

Mas é importante lembrar que seu domínio precisa estar apontando para o IP da maquina se não não vai funcionar o SSL e existem limites de requisições e tentativas para que o SSL seja aplicado, se você estourar o limite ficará sem conseguir aplicar o SSL por algumas horas até mesmo dias, mas essa limitação não é deles é do provedor de certificados SSL Let’s Encrypt, veja sobre os limites aqui.

Se tudo estiver ok, seu domínio já deverá estar funcionando para ser acessado com e sem https.

Bom esse Nginx Proxy Manager é um projeto bem legal, você pode ver muita informação no site oficial, tem outras maneiras de subir e configurar ele, até mesmo de como configurar mais a parte avançada para encaminhar para o IP desejado alguns cabeçalhos a mais enfim tem muita coisa.

Espero que isto ajude!

Abs

--

--

Danilo Barreto Bezerra

Desenvolvedor há mais de 20 anos, atualmente estou me especializando em ASP.NET CORE com Linux.