Fconstant/auto-setup-ubuntu-vm
Script para automatizar a configuração de uma VM Ubuntu com Docker, proxy reverso (Caddy) + atualização dinâmica de DNS free (DuckDNS)
Script para automatizar a configuração de servidores x86/ARM com Docker, proxy reverso (Caddy) + DNS dinâmico gratuito (DuckDNS). Suporte a Docker Swarm para clusters.
Funcionalidades Principais
-
Configuração Inteligente de Swap
- Cria partição swap de 20% do disco (máx 2GB) automaticamente
-
Docker Engine + Docker Compose
- Versões mais recentes com configuração segura para usuários não-root
-
Cluster Docker Swarm
- Transforme a VM em manager/worker com um comando
- Geração automática de tokens de join
-
Proxy Reverso com HTTPS Zero-Config
Usando Caddy + Let's Encrypt:- Certificados SSL automáticos
- Suporte a wildcards (*.seudominio.duckdns.org)
- Atualização DNS integrada
-
Segurança Reforçada
- Firewall com regras mínimas necessárias
- Auto-recuperação do SSH
- Isolamento de rede entre serviços
-
Monitoramento
- Portainer para gestão visual
- Atualizações de IP via DuckDNS (6h-23h)
Pré-requisitos
- Conta no DuckDNS com:
-
Subdomínioconfigurado -
Token(Fica no Header uma vez que você tenha logado no site, abaixo de account e type)
-
- Acesso SSH à instância
- Ubuntu 22.04+ (x86 ou ARM)
Guia Rápido
Baixe o Script primeiro
curl -sS -o setup-server.sh https://raw.githubusercontent.com/Fconstant/auto-setup-ubuntu-vm/main/setup-server.shIsso vai gravar um arquivo setup-server.sh no seu diretório atual.
Executar no Modo Standalone (Default):
bash ./setup_server.shConfigurar em outro dir
Por padrão será instalado no diretório ~/apps
Porém você pode mudar isso com a variável de ambiente: APPS_BASE_DIR:
APPS_BASE_DIR="$HOME/custom-dir" bash ./setup_server.shPós-Instalação:
- Configure as variáveis:
nano ~/.env- Reinicie a sessão SSH
exec ssh $USER@$(hostname -I | awk '{print $1}')Estrutura de Arquivos
| Diretório | Descrição |
|---|---|
~/apps |
Todos os serviços Docker |
~/apps/base |
Configurações do Caddy/Portainer |
Adicionando Novos Serviços
Portainer
👉 Você pode fazer tudo pelo Portainer caso tenha acesso. Ele será o endereço principal que você definiu.
DUCKDNS_SUBDOMAIN.duckdns.org
Sem Portainer (Manual)
- Crie um novo diretório:
mkdir -p ~/apps/meu-app && cd ~/apps/meu-app- Crie
docker-compose.yml:
version: '3.8'
services:
meu-app:
image: minha-imagem
networks:
- caddy-net
labels:
caddy.address: "meuapp.${DOMAIN}"
caddy.target: "meu-app:8080"- Inicie o serviço:
docker compose up -dGerenciamento
| Tarefa | Comando |
|---|---|
| Ver serviços Swarm | docker service ls |
| Ver containers locais | docker ps |
| Logs do Caddy | docker logs -f caddy |
| Atualizar stack | docker stack deploy -c ... |
Troubleshooting
| Problema | Solução |
|---|---|
| Certificado SSL não gerado | Verifique .env e reinicie o Caddy |
| Domínio não resolve | docker logs caddy | grep DNS |
| Erro ao entrar no Swarm | Valide token com SWMTKN-... |
| Portainer não acessível | docker service ps portainer |
