managuanetworks.com — administrado en Cloudflare, DNS-only (sin proxy naranja) para todos los subdominios de infraestructura interna.
| Subdominio | Apunta a | Servicio | Proxy |
|---|---|---|---|
dok.managuanetworks.com |
129.213.32.254 |
Dokploy (panel) | DNS only |
omada.managuanetworks.com |
129.213.32.254 |
Omada Controller | DNS only |
doc.managuanetworks.com |
129.213.32.254 |
Wiki.js (esta wiki) | DNS only |
Por qué DNS only y no proxy naranja: el proxy de Cloudflare interfiere con la validación HTTP-01 de Let's Encrypt y con WebSockets (usados intensamente por Omada). Mantener "DNS only" evita ambos problemas.
managuanetworks.com → DNS → Add recordA, Name: el subdominio deseado, Content: 129.213.32.254Dos estrategias usadas, según el servicio:
Usado en: dok, doc (Wiki.js). Se activa el toggle HTTPS en la pestaña Domains del servicio en Dokploy — Traefik gestiona la emisión y renovación automáticamente con Let's Encrypt.
Omada Controller tiene su propio manejo de SSL interno (Java/Tomcat), incompatible con la inyección automática de Traefik sin romper WebSockets. Se generó un certificado real y se monta directamente dentro del contenedor.
# Instalar certbot con plugin de Cloudflare
sudo apt install -y certbot python3-certbot-dns-cloudflare
# Credenciales (API Token con permiso "Edit zone DNS" sobre la zona)
sudo nano /root/.secrets/cloudflare.ini
# dns_cloudflare_api_token = <token>
sudo chmod 600 /root/.secrets/cloudflare.ini
# Emitir certificado
sudo certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
-d omada.managuanetworks.com
# Copiar al path que monta el contenedor
sudo cp /etc/letsencrypt/live/omada.managuanetworks.com/fullchain.pem /opt/omada-certs/tls.crt
sudo cp /etc/letsencrypt/live/omada.managuanetworks.com/privkey.pem /opt/omada-certs/tls.key
Renovación automática vía cron — ver página de Omada Controller para el detalle completo.
R2 es el servicio de object storage S3-compatible de Cloudflare. Free tier: 10GB de almacenamiento total por cuenta (sumando todos los buckets), 1M operaciones de escritura y 10M de lectura al mes, sin costo de egress.
| Bucket | Contenido | Token API |
|---|---|---|
omada-backups |
Backups .cfg de Omada Controller (carpeta omada-cfg/) |
Token omada-backups, alcance limitado a este bucket |
dok-bk |
Backup de la config interna de Dokploy (carpeta dokploy-server/) |
Token dokploy-backups, alcance limitado a este bucket |
Decisión de diseño: un bucket separado por proyecto/token, en vez de uno solo compartido. Esto contiene el daño si un servidor o proyecto se ve comprometido — un atacante con acceso a las credenciales de un proyecto no puede tocar los backups de los demás.
proyecto-x-backups)https://<ACCOUNT_ID>.r2.cloudflarestorage.com) — en el gestor de contraseñas, nunca en texto planosudo nano /root/.config/rclone/rclone.conf
[r2]
type = s3
provider = Cloudflare
access_key_id = <access_key_id>
secret_access_key = <secret_access_key>
region = auto
endpoint = https://<ACCOUNT_ID>.r2.cloudflarestorage.com
Nota: si se ejecutan comandos rclone como usuario ubuntu (sin sudo), hay que copiar también el config a ~/.config/rclone/rclone.conf de ese usuario, ya que cada usuario del sistema tiene su propia ruta de configuración.
sudo rclone ls r2:omada-backups/omada-cfg