O setup.sh prepara a infraestrutura base da VPS para hospedar múltiplos projetos atrás do Traefik com SSL automático (Let’s Encrypt).
Também pode subir o MySQL central (MariaDB) e phpMyAdmin integrados, caso você opte.
Este script é modularizado. O orquestrador
scripts/setup.shapenas chama passos emscripts/setup/steps/e usa helpers emscripts/setup/lib.sh.
-
Checagens iniciais
- Exige root (
sudo su). - Valida ambiente Ubuntu/Debian (APT).
- Garante que as portas 80/443 estejam livres.
- Exige root (
-
Coleta de parâmetros
-
E-mail para Let’s Encrypt.
-
Domínio do dashboard do Traefik (ex.:
infra.seu-dominio.com.br). -
Cloudflare opcional:
- Com API Token: usa DNS-01 (pode manter proxy laranja ativo).
- Sem token: usa HTTP-01 (deixe DNS cinza durante a emissão).
-
Canonical (non-www → root ou root → www).
-
BasicAuth (usuário/senha) do dashboard.
-
MySQL central (opcional) + phpMyAdmin: define/gera senha do root.
-
-
Instalações
- Docker e Compose (repo oficial, com fallback para
docker.io). - Abre UFW (22, 80, 443) se disponível; inclui usuário no grupo
docker.
- Docker e Compose (repo oficial, com fallback para
-
SSH para GitHub (opcional, mas útil para
mkclient.sh)- Gera chave ed25519 (se não existir).
- Mostra a pública para você adicionar no GitHub.
- Testa
ssh -T git@github.com.
-
Redes Docker compartilhadas
proxy(HTTP/HTTPS via Traefik)db(acesso ao MySQL central)
-
Traefik (tunado)
-
Prepara
/opt/traefikcom:letsencrypt/acme.json(600),dynamic/,mysql-data/(se usar DB)..envcom variáveis (LE, domínio, BasicAuth, CF token, etc.).dynamic/middlewares.ymlcom cadeia canonical + compress + secure-headers.
-
Gera
docker-compose.ymlcom:- HTTP/3 (QUIC) habilitado (porta
443/udp). - Redirect global HTTP→HTTPS no entrypoint.
- Dashboard em
https://<domínio>/dashboarde/apicom BasicAuth. - Headers de segurança e compressão aplicados via middleware global.
- AccessLog JSON em
/opt/traefik/logs/access.jsoncom filtros (status 4xx/5xx, UA/Referer). - CertResolver
le(DNS-01 Cloudflare ou HTTP-01). - phpMyAdmin em subcaminho
/phpmyadmin/(se habilitado). - Banner de upgrade/check de versão desativados.
- HTTP/3 (QUIC) habilitado (porta
-
-
Sobe a stack (
docker compose up -d) e exibe notas finais.
scripts/
├─ setup.sh # orquestrador (fino)
└─ setup/
├─ lib.sh # helpers (UI, guards, utils, install docker)
└─ steps/
├─ 10-prereqs.sh # root/apt/portas, derruba traefik antigo
├─ 20-inputs.sh # perguntas (LE, domínio, CF, BasicAuth, MySQL)
├─ 30-install-docker.sh # instala Docker/compose + ufw + grupo docker
├─ 40-ssh-github.sh # chave SSH e teste com GitHub
├─ 50-networks.sh # cria redes proxy/db
├─ 60-traefik-files.sh # /opt/traefik (.env, middlewares, acme.json)
├─ 70-compose.sh # docker-compose.yml (Traefik + opcional MySQL/PMA)
├─ 80-up.sh # docker compose up -d
└─ 90-notes.sh # mensagens finais e dicas
- VPS Ubuntu/Debian com root ou
sudo. - Apontar DNS A/AAAA do domínio do dashboard para o IP da VPS.
- Repositório desta infra já na VPS (upload via rsync/scp).
- (Opcional) API Token Cloudflare com permissão DNS Edit, se quiser DNS-01.
Na VPS:
sudo -s
cd /opt/devops-stack
bash scripts/setup.shResponda às perguntas. O script só prossegue no teste do GitHub após você adicionar a chave pública na sua conta (caso precise usar Git depois).
- Tem API Token? Use DNS-01 (pode manter o proxy laranja ligado).
- Sem token? Use HTTP-01 (deixe DNS cinza – “DNS only” – até emitir o certificado).
-
Dashboard Traefik:
https://<DASH_DOMAIN>/dashboard/ -
phpMyAdmin (opcional):
https://<DASH_DOMAIN>/phpmyadmin/ -
Pasta da infra:
/opt/traefik -
Redes Docker:
proxyedb -
Logs do Traefik:
tail -f /opt/traefik/logs/access.json docker logs -f traefik
-
Certificado não emite (HTTP-01)
- DNS A/AAAA deve apontar corretamente.
- Deixe DNS cinza até emitir.
-
Certificado não emite (DNS-01)
- Verifique API Token e permissões DNS Edit.
-
phpMyAdmin
- Use a barra final
/phpmyadmin/(há redirect automático).
- Use a barra final
-
Portas 80/443 ocupadas
-
Pare
apache2/nginxnativos:systemctl disable --now apache2 nginx
-
-
BasicAuth no dashboard: troque periodicamente.
-
Limite IPs (UFW/Nginx/Traefik) para o dashboard, se necessário.
-
Mantenha o sistema e imagens atualizados.
-
Backups importantes:
/opt/traefik/letsencrypt/acme.json(certificados)/opt/traefik/mysql-data(se usar MySQL)
Com o Traefik pronto, crie stacks de cliente/projeto com:
bash /opt/setup-forcoder/scripts/mkclient.shA documentação do mkclient.sh está em docs/mkclient.md.