- Go 58.9%
- Shell 41.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
logwatch hard-depends on mail-transport-agent, so --no-install-recommends alone still pulled postfix (running, inet_interfaces=all). dma (no daemon, no open port) is now pre-seeded and named in the install so apt picks it as the provider. Summary reflects the strategy. Spec 002 amended. Claude-Session: https://claude.ai/code/session_01TA9mRRuGALMCVVKQnEBDpK |
||
| .claude/skills | ||
| .github/workflows | ||
| .specify | ||
| cmd | ||
| internal | ||
| specs | ||
| .air.toml | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| main_test.go | ||
| README.md | ||
| setup.sh | ||
server-configurator
Herramienta DevOps (Go + cobra) que configura un servidor Contabo / Ubuntu 24.04–26.04
para usarlo desde Coolify. Sustituye a setup.sh (v0.3.3), que se conserva en el repo
como referencia hasta validar el binario en un servidor real.
Uso
# En el servidor, como root
./server-configurator setup --yes # sin preguntas, reinicia al terminar
./server-configurator setup # pregunta antes de tocar UFW y antes de reiniciar
./server-configurator setup --dry-run # muestra comandos y ficheros, no ejecuta nada (no requiere root)
./server-configurator version
Pasos aplicados, en orden: zona horaria Europe/Madrid → alias update → actualización del
sistema → UFW (22/80/443) → hardening sshd_config (con backup) → fail2ban (whitelist Coolify,
baneos progresivos) → swap 8 GB + swappiness → paquetes de seguridad sin MTA → auditd →
unattended-upgrades (01:30 / 02:00) → sysctl → limits → clave SSH de Coolify → logwatch →
desactivación de servicios innecesarios → resumen → reinicio.
Es idempotente: puede ejecutarse varias veces.
Toda la salida de la terminal se guarda además en out.log, en la misma carpeta que el
binario (se añade al final en cada ejecución, con una cabecera con fecha y argumentos).
Ubuntu 26.04 y la instalación no interactiva
En 26.04 el truco apt-mark hold postfix exim4 dma dejaba de funcionar: el resolutor de apt
escogía otro proveedor de mail-transport-agent (courier-mta), cuyo debconf del certificado
X.509 volvía interactiva la ejecución. La herramienta lee /etc/os-release y:
- Ubuntu < 26.04 (24.04): mantiene la estrategia original de
setup.sh(debconf-set-selections+apt-mark hold→ instalar →apt-mark unhold), que ahí funciona. - Ubuntu ≥ 26.04 (o SO no detectado):
logwatchtiene una dependencia dura demail-transport-agent, así que un MTA es inevitable. Se instala explícitamente el mínimo,dma(sin demonio, sin puerto abierto, debconf preseedeado), junto conapt-listchangesylogwatchcon--no-install-recommends. Así apt no elige postfix ni courier-mta. - En todos los casos, cada subproceso se ejecuta con
DEBIAN_FRONTEND=noninteractive,NEEDRESTART_MODE=ayNEEDRESTART_SUSPEND=1(internal/sys.NonInteractiveEnv).
Ver specs/002-noninteractive-apt/.
Desarrollo
go build -o server-configurator .
go test ./... # todo el código tiene tests (FS en memoria + runner falso)
air # live reload: recompila y ejecuta `setup --dry-run --yes`
Estructura:
main.go entrada
cmd/ comandos cobra (setup, version)
internal/sys/ Context, Runner (real / dry-run / fake), Summary, helpers de ficheros
internal/steps/ un fichero por paso + tests
internal/setup/ orden de pasos, comprobación de root, informe, reinicio
specs/ especificaciones Spec Kit (001 migración, 002 apt no interactivo)
.specify/ constitución y plantillas de Spec Kit
CI (GitHub Actions / Forgejo Actions)
.github/workflows/build.yml ejecuta gofmt/go vet/go test y construye binarios estáticos
server-configurator-linux-{amd64,arm64} (con .sha256) como artefactos en cada push a
main/dev, en tags v*, en PRs y manualmente. Corre en el runner con etiqueta go (imagen
con el toolchain de Go ya instalado, sin setup-go) y solo usa actions/checkout,
actions/cache (módulos y caché de build) y actions/upload-artifact, que Forgejo (≥ 7) resuelve desde github.com.
Este proyecto sigue Spec Kit: spec.md → plan.md →
tasks.md → implementación. Commits con Conventional Commits.
Licencia
Copyright 2025–2026 Beebit Solutions SLU.