main
1 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
39d46f7011 |
Upload files to "primerboot"
# Resumen operativo — Infraestructura Self-Hosted Fecha: ```text 2026-05-05 ``` Servidor: ```text Hetzner VPS Ubuntu 24.04 ``` DNS: ```text Cloudflare ``` --- # Objetivo alcanzado Infraestructura self-hosted funcional con: - Gitea - Vaultwarden - NGINX - Certbot - HTTPS válido - Docker Compose - Cloudflare DNS - arquitectura reproducible --- # Dominios ## Gitea ```text https://git.carmona.digital ``` --- ## Vaultwarden ```text https://vault.carmona.digital ``` --- # Arquitectura actual ```text Internet ↓ NGINX reverse proxy ↓ Docker network ├── Gitea ├── Vaultwarden └── PostgreSQL ``` --- # Estructura filesystem ```text /opt/gitea ├── docker-compose.yml ├── nginx/ │ └── conf.d/ ├── certbot/ │ ├── conf/ │ └── www/ ├── gitea/ ├── postgres/ └── vaultwarden/ └── data/ ``` --- # Componentes desplegados ## Gitea Contenedor: ```text gitea ``` Puerto SSH Git: ```text 2222 ``` --- ## PostgreSQL Contenedor: ```text gitea-db ``` Persistencia local. --- ## NGINX Contenedor: ```text gitea-nginx ``` Funciones: - reverse proxy - HTTPS termination - routing subdominios - ACME challenge --- ## Vaultwarden Contenedor: ```text vaultwarden ``` Funciones: - password manager - secrets manager - TOTP - secure notes - API keys - SSH keys --- # DNS Cloudflare ## Tipo de registros Todos: ```text A records ``` --- ## Subdominios | Subdominio | Servicio | |---|---| | git | Gitea | | vault | Vaultwarden | --- ## Configuración importante ```text Proxy = DNS only ``` Durante setup SSL. --- # Problemas encontrados ## 1. nginx restarting Causa: ```text certificados inexistentes ``` Porque nginx intentaba cargar: ```text /etc/letsencrypt/live/git.blocaolabs.com/ ``` Cuando el dominio cambió a: ```text git.carmona.digital ``` --- ## Solución - eliminar HTTPS temporalmente - usar nginx HTTP-only - generar certificados - reactivar HTTPS --- ## 2. Configuración nginx corrupta Causa: ```text texto shell accidental dentro de gitea.conf ``` Ejemplo: ```text cat EOF ``` --- ## Solución Recrear archivo completamente. --- ## 3. Certbot fallaba Causa: ```text nginx caído ``` Let's Encrypt no podía acceder a: ```text http://git.carmona.digital/.well-known/acme-challenge/ ``` --- ## Solución - arreglar nginx - verificar puerto 80 - regenerar certificado --- ## 4. Vaultwarden usuario existente Causa: ```text persistencia SQLite ``` Usuarios guardados en: ```text /opt/gitea/vaultwarden/data ``` --- ## Solución ```bash rm -rf /opt/gitea/vaultwarden/data/* ``` y recrear contenedor. --- # Configuración SSL Certificados generados mediante: ```bash docker compose run --rm certbot certonly \ --webroot \ --webroot-path=/var/www/certbot \ --email digitalcarmona@gmail.com \ --agree-tos \ --no-eff-email \ -d DOMINIO ``` --- # Renovación automática SSL Cron configurado: ```cron 0 3 * * * cd /opt/gitea && docker compose run --rm certbot renew && docker compose restart nginx ``` --- # Configuración nginx ## Estrategia final Un único nginx centralizado. Virtual hosts separados: ```text /opt/gitea/nginx/conf.d/ ``` Ejemplos: ```text gitea.conf vaultwarden.conf ``` --- # Estrategia arquitectónica elegida ## Decisión NO usar: ```text 1 nginx por servicio ``` SÍ usar: ```text 1 nginx compartido ``` --- # Estrategia compose elegida ## Mantener ```text 1 docker-compose principal ``` en: ```text /opt/gitea ``` --- # Razón Más simple para: - bootstrap - recovery - reproducibilidad - AI-assisted operations --- # Servicios futuros recomendados ## Prioridad 1 ### Authentik Objetivo: - SSO - MFA - OAuth2 - central auth --- ## Prioridad 2 ### Uptime Kuma Objetivo: - monitoring - alertas - uptime checks --- ## Prioridad 3 ### Nextcloud Objetivo: - almacenamiento - colaboración - documentos --- ## Prioridad 4 ### Grafana Objetivo: - métricas - dashboards - observabilidad --- ## Prioridad 5 ### MinIO Objetivo: - S3 storage - backups - artefactos --- # Decisiones importantes tomadas ## Cloudflare Usado como DNS principal. --- ## HTTPS Gestionado localmente mediante: - nginx - certbot NO mediante Cloudflare SSL. --- ## Secrets Vaultwarden elegido frente a: - Hashicorp Vault - Doppler - Infisical por simplicidad operacional. --- # Comandos críticos de operación ## Ver logs nginx ```bash docker compose logs nginx --tail=50 ``` --- ## Reiniciar nginx ```bash docker compose restart nginx ``` --- ## Ver contenedores ```bash docker ps ``` --- ## Test SSL ```bash curl -I https://git.carmona.digital ``` --- ## Test DNS ```bash dig git.carmona.digital ``` --- ## Renovación SSL ```bash cd /opt/gitea docker compose run --rm certbot renew --dry-run ``` --- # Backup mínimo obligatorio ## Gitea ```text /opt/gitea/gitea ``` --- ## PostgreSQL ```text /opt/gitea/postgres ``` --- ## Vaultwarden ```text /opt/gitea/vaultwarden/data ``` --- ## Certificados ```text /opt/gitea/certbot/conf ``` --- # Objetivo futuro Construir una infraestructura: - reproducible - Git-native - AI-assisted - portable - documentada - fácilmente reconstruible desde prompts + contexto. |