Servidor de hospedagem de sites (pense em páginas do GitHub) projetado para integrar profundamente o Traefik para o roteamento e o término do TLS.
Trabalho em andamento
Crie um diretório de diretórios, onde o nome de cada diretório é o nome do host de um site que você deseja servir, com seu conteúdo dentro.
/mnt/sites
├── example.com
│ └── index.html
└── othersite.example.com
└── index.html
Como os arquivos chegam lá de acordo com você. Minio, rsync
, Webdav, ansible
, não importa.
traefik-pages
se integra ao Traefik através do provedor HTTP. Quando o Traefik atinge a API, traefik-pages
lista os diretórios que contêm sites para obter os nomes de hosts necessários e retorna uma configuração de roteadores para o Traefik usar. Esses roteadores têm regras que correspondem aos nomes de host dos diretórios e dos serviços que correspondem ao especificado para traefik-pages
. O Traefik constantemente pesquisou traefik-pages
para uma configuração atualizada; portanto, os sites recém-criados serão rapidamente adquiridos.
Primeiro, crie um contêiner para traefik-pages
:
traefik-pages :
image : theorangeone/traefik-pages:latest
volumes :
- ./sites:/mnt/sites:ro
environment :
- SITES_ROOT=/mnt/sites
- TRAEFIK_SERVICE=traefik-pages@docker
- AUTH_PASSWORD=hunter2
labels :
- traefik.enable=true
Isso não precisa estar no mesmo arquivo que o Traefik, mas precisa ser acessível ao Traefik usando um nome de host fixo e IP. Se o Traefik estiver em execução no modo host (como eu), você precisará vincular traefik-pages
a uma interface interna e ouvir isso.
O rótulo permite que o Traefik Autoconfiguration para detectar traefik-pages
. Observe que $TRAEFIK_SERVICE
deve corresponder ao nome do serviço criado por Traefik.
Em seguida, você precisará criar um provedor HTTP para Traefik, usando as portas e a senha configurada anteriormente.
providers :
...
http :
endpoint :
- " http://[email protected]:5000/.traefik-pages/provider "
Aqui você também pode configurar o intervalo de votação para traefik-pages
.
Agora, basta iniciar o traefik e traefik-pages
, e eles devem começar a se comunicar e criar roteadores para seus sites.
A configuração para traefik-pages
é feita inteiramente através de variáveis de ambiente:
$SITES_ROOT
: diretório onde os sites são armazenados (exigidos).
$TRAEFIK_SERVICE
: nome do serviço para traefik-pages
, onde o tráfego será roteado (exigido).
$AUTH_PASSWORD
: nome de usuário BASIC AUTH necessário para o acesso a URLs privados ( /.traefik-pages/*
) (obrigatório).
$DENY_PREFIXES
: Lista separada por vírgula de prefixos de URL para ignorar (retornar imediatamente 404). Vazio por padrão.
$LOG_INTERNAL
: se deve registrar solicitações de URLs internos (padrão false).
$TRAEFIK_CERT_RESOLVER
: resolvedor de certificado Traefik a ser usado para provisionar certificados TLS (por padrão, nenhum certificado será solicitado).
$PORT
: porta para ouvir (padrão 5000).
$WORKERS
: número de processos trabalhadores para lidar com solicitações (padrão 1).
traefik-pages
é escrito em ferrugem e projetado para ser o mais rápido possível.
Requests per second: 6786.85 [#/sec] (mean)
Time per request: 14.734 [ms] (mean)
Time per request: 0.147 [ms] (mean, across all concurrent requests)
Transfer rate: 1471.37 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 3 15 5.5 14 51
Waiting: 2 14 5.5 14 51
Total: 3 15 5.5 14 51
Percentage of the requests served within a certain time (ms)
50% 14
66% 16
75% 17
80% 18
90% 21
95% 25
98% 30
99% 35
100% 51 (longest request)
Esses testes foram executados em um 2600X, com um único processo de trabalhador.