Configurar Reverse-Proxy com Docker + Traefik + Nginx + PHP + MySQL + Mosquitto + phpMyAdmin + Basic Authentication

Este artigo serve para explicar como fazer um sub-domínio apontar para um determinado container de uma forma simples e eficiente. Eu estou a escrevê-lo, porque me deparei com uma série de dificuldades quando o tentei fazer.

Por exemplo, eu usava algo como: https://example.org (web), https://example.org:8080 (phpMyAdmin), wss://example.org:1884 (mosquitto), etc. O meu objectivo era simplificar e passar a usar algo como: https://example.org (web), https://pma.example.org (phpMyAdmin), wss://example.org/mqtt (mosquitto), etc.

Ou seja, para além de apontar um subdomínio para um determinado container, eu também queria usar a mesma porta para protocolos diferentes.

Foi então que eu descobri o Traefik. Para além de satisfazer as minhas necessidades de uma forma muito simples, também gera os certificados SSL para todos os domínios/subdomínios necessários.

Para que tudo funcione como expectável, só precisamos dos ficheiros que se seguem, sendo apenas necessário alterar o e-mail, domínio e sub-domínios nos ficheiros traefik.toml e docker-compose.yml.

acme.json

nginx.conf

mosquitto.conf

traefik.toml

docker-compose.yml

app/index.php

Após a criação destes ficheiros, basta executar o comando:

Agora ao aceder ao URL configurado irás receber a mensagem “Olá!”. Também poderás usar o URL configurado no container do Traefik para verificar o estado atual dos teus containers.

Para experimentar os Mosquitto, apenas necessitas de usar um cliente MQTT (por exemplo MQTT.js), subscrever um tópico e publicar qualquer coisa para esse mesmo tópico, por exemplo:

Basic Authentication

Se quiseres adicionar uma camada extra de segurança à tua aplicação, apenas precisas de adicionar o seguinte ao teu ficheiro traefik.toml:

traefik.toml

As passwords podem ser codificadas em MD5, SHA1 e BCrypt: podes usar o htpasswd para gerá-las. (Ex. http://www.htaccesstools.com/htpasswd-generator/)

MQTT

Full Stack Web Developer

Full Stack Web Developer