Instalação do Nginx Proxy Manager
O que é o Nginx Proxy Manager?
É um sistema que possui uma interface web limpa, eficiente e fácil de configurar, sem precisar saber muito sobre Nginx ou Letsencrypt.
Característica
– Interface de administração bonita e segura baseada
– Crie facilmente domínios de encaminhamento, redirecionamentos, streams e hosts 404 sem saber nada sobre Nginx
– SSL grátis usando Let’s Encrypt ou forneça seus próprios certificados SSL personalizados
– Listas de acesso e autenticação HTTP básica para seus hosts
– Configuração avançada do Nginx disponível para superusuários
– Gerenciamento de usuários, permissões e log de auditoria
Distribuição testadas:
Debian 12 Bookworm
Debian 11 Bullseye
Como melhorar a produtividade no seu Debian após instalação (Recomendado)
Porta Utilizadas
81 – Porta de administração do Nginx Proxy Manager
80 – Porta HTTP pública
443 – Porta HTTP pública
Configurações de interface de Rede
Para a configuração da interface de rede vou usar uma configuração Pointopoint (Ponto a ponto) assim utilizando de apenas um endereço IP público, você pode (deve) ler este tutorial para conhecer varias possibilidades de configuração de rede pensa em como economizar endereços IPs.
# vim /etc/network/interfaces
No meu exemplo vamos pesar que esse servidor esteja conectado ao RouterOS/Mikrotik ether2 e meu endereço de IP publico será o 200.200.200.255
allow-hotplug enp0s3 iface enp0s3 inet static address 200.200.200.255 pointopoint 192.168.171.171 netmask 255.255.255.255 gateway 192.168.171.171
Agora no seu RouterOS vamos criar nosso Pointopoint gatewai 192.168.171.171 tendo como network o endereço IP público.
RouterOS# /ip address RouterOS# add address=192.168.171.171 comment=Pointopoint interface=ether2 network=200.200.200.255
Se você não tem IP publico para colocar em seu servidor, então fixe um endereço IP Privado e redirecione as potas 80,81 e 443 para ele, utilizando seu IP público que está em seu router. Exemplo:
allow-hotplug enp0s3 iface enp0s3 inet static address 10.10.10.2/24 gateway 10.10.10.1
E é clario se você conter endereço IPv6, não deixe de configurar sua placa! Exemplo:
iface enp0s3 inet6 static pre-up modprobe ipv6 address 2804:bebe:cafe::2 netmask 64 gateway 2804:bebe:cafe::1
Instalação Docker
Iremos instalar os pacotes necessários, bem como adicionar o repositório oficial do Docker
# apt install ca-certificates curl gnupg2 apt-transport-https lsb-release # curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - # echo "deb https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
Atualize o repositório e instale-o
# apt update # apt install docker-ce docker-ce-cli containerd.io
Instalação Docker Compose
Vamos fazer download do Docker Compose, e adicionar aos binários do nosso servidor como um executável.
# curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose # ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Versão baixada foi a 2.24.5, mas você pode consultar uma mais recente em: https://github.com/docker/compose/releases/, para verificar qual versão instalado use:
# docker-compose --version
Docker Compose version v2.24.5
Instação Nginx Proxy Manager
Crie os diretórios quais ficarão todas as configurações:
# mkdir /etc/nginx-proxy # mkdir /etc/nginx-proxy/{data,letsencrypt}
Crie seu arquivo de composição do Docker com as configuração, para realizar a instalação dos containers do Nginx Proxy Manager e MariaDB com o Docker Compose. (Ajustes as senhas)
# vim /etc/nginx-proxy/docker-compose.yml
Adicione:
version: "3" services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '80:80' # Porta HTTP pública - '443:443' # Porta HTTPS pública - '81:81' # Porta de administracao do Nginx Proxy # Adicione qualquer outra porta Stream que você queira expor, ex # - '21:21' # FTP environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "nginxproxy" DB_MYSQL_PASSWORD: "S3NHA_NGINX_PR0XY" DB_MYSQL_NAME: "nginxproxy" # Remova o comentário se você não tem o IPv6 em seu 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: 'S3NHA_D3_R00T' MYSQL_DATABASE: 'nginxproxy' MYSQL_USER: 'nginxproxy' MYSQL_PASSWORD: 'S3NHA_NGINX_PR0XY' volumes: - ./mysql:/var/lib/mysql
Execute o comando Docker Compose
# cd /etc/nginx-proxy # docker-compose up -d
Aguarde finalizar… em seguida visualize se os containers que foram criados
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b796a07af22 jc21/nginx-proxy-manager:latest "/init" 9 seconds ago Up 7 seconds 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx-proxy-app-1 4c93d3b8a544 jc21/mariadb-aria:latest "/scripts/run.sh" 13 seconds ago Up 8 seconds 3306/tcp nginx-proxy-db-1
Abra em navegador http://IP_SERVIDOR/ se tudo ocorreu bem você verá:
Agora abra na porta 81 http://IP_SERVIDOR:81/ e entre com:
Email: admin@example.com Password: changeme
Ao entrar pela primeira vez um formulário com informações será exibido para você alterar seus dados, altere seus e-mail e senha.
Configurações de DNS Autoritativa
Para que possamos encaminhar os acessos iremos necessitar configurar um subdomínios para cada situação em nosso servidor DNS autoritativo.
Vamos criar um cenário fictício para ilustrar melhor. Temos 1 clientes recebendo IPs privados da classe de um CGNAT, e o mesmo solicita um redirecionamento de portas para seu DVR. O cliente recebe o endereço IP privado 100.64.0.71 (Fixado) seu DVR esta na porta 80 na rede local 192.168.0.7. Para cada situação irei criar um novo subdomínio, exemplo “dvrudi” no servidor DNS autoritativo apontando para o IP Público do seu servidor Nginx Proxy, assim eu acesso “dvrudi.remontti.com.br”. Agora ao acessar o roteato e criar o redirecionamento provavelmente não iremos poder usar a porta 80, pois ela já é a porta de acesso do roteador 100.64.0.71, e é bem possível que você tenha fechado ela em seu firewall também para se proteger de ataques, neste caso use outra porta exemplos 60080 para fazer o direcionamento para a porta 80 do DVR, o cliente nem precisa saber desta porta 60080 ela é a penas a porta de entrada do Nginx Proxy. Agora volte ao Admin do NPM, no menu Hosts >> Proxy Hosts >> Add Proxy Host
Se desejar pode ativar certificado grátis com Lets Encrypt.
Agora ao acessar “dvrudi.remontti.com.br” ele estará acessando diretamente o DVR. #clientefeliz
Legal não? Agora você pode ter um painel administrativo para redirecionamento de serviços web, no exemplo sitei o caso de CGNAT, mas você pode usar para qualquer outra situação, bem como até apontar para um subdiretório, e restringir o acesso do mesmo, sabe esses ERP porco que você acessar com /admin, daria para restringir. Bom o painel do NPM é bem intuitivo, para quem já conhece o Nginx sabe das suas enumeras possibilidades vai achar um doce.
Atualizando do NPM
# cd /etc/nginx-proxy/ # docker-compose down # docker-compose pull # docker-compose up -d
Gostou? Se quiser apoiar o blog e fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Abraço!
Fonte:
https://nginxproxymanager.com/guide/
https://github.com/NginxProxyManager/nginx-proxy-manager
Wopa! Para que tiver o erro “Bad Gateway” ao acessar o front, isso acontece pois no docker-compose está bindado o folder errado para o mysql.
No serviço do mysql, altere o volume para ./mysql:/vri/lib/mysql ao inves de ser ./data/mysql:……
Vlw flw
Obrigado. Atualizei!
Muito bem explicado.
E aí Remontti.
Primeiro, meus parabéns pelos seus artigos.
É impressão minha ou um servidor desse seria ideal pra empresas que só tem disponível um único ip público mas quer oferecer alguns serviços web, tipo, mail server, sites, aplicações e etc… digo, assumindo que nessa empresa tenha um servidor de virtualização, por exemplo.
Também fiquei curioso sobre isso…
no meu caso, eu até consegui 4 IP’s Públicos (usando um /30 pùblico e usando ip privado como gateway)
porém, desses 4, 2 deles usei pro servidor DNS ns1 e ns2 (feito pelo exemplo do remontti), ja o Terceiro, usei pro servidor de e-mail (Também pelo tutorial do Remontti) e o Ultimo (4º) Usei pra montar um Servidor WEB (Também pelo Tutorial do remontti) com Painel do tipo CPANEL. então não tenho mais ip’s Públicos pra usar em outros serviços. Então Esse tutorial NGM me pareceu a luz do Fim do Tunel.
Será que confirma isso Remontti?