CI Proxy: Nginx Reverse Proxy¶
En segundo lugar creé el contenedor proxy (Nginx Reverse Proxy), para extablecer que dirección IP va asociada a cada dominio.
Arquitectura de Red¶
1. Capa de Gestión (Subdominios)¶
Acceso directo a las herramientas de administración.
* DNS: dns.dap.gal (Pi-hole)
* Proxy: proxy.dap.gal (Traefik Dashboard)
* Métricas: stats.dap.gal (Grafana)
* VPN: vpn.dap.gal (WireGuard Web UI)
* Dashboard: home.dap.gal (Homepage)
2. Capa Pública (Path-based)¶
Servicios expuestos al exterior.
* Landing Page: dap.gal/
* Blog: dap.gal/blog (Ghost)
1. Despliegue del Contenedor¶
Desde el host:
sudo lxc-copy -n CB01-deb12 -N CI02-PROXY
# Editar config
sudo nano /var/lib/lxc/CI02-PROXY/config
# Iniciar
sudo lxc-start -n CI02-PROXY
sudo lxc-attach -n CI02-PROXY
# Configuramos DNS
rm /etc/resolv.conf
echo "nameserver 192.168.1.11" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
2. Instalación y Configuración de Traefik¶
1. Preparación del Sistema¶
Actualizamos repositorios e instalamos las dependencias básicas necesarias.
apt update && apt upgrade -y
apt install -y curl wget debian-archive-keyring lsb-release gnupg2
2. Instalación de Traefik¶
Descargamos el binario oficial (método recomendado para LXC para evitar sobrecarga de Docker).
# Obtener la última versión de la página de lanzamientos de GitHub
wget https://github.com/traefik/traefik/releases/download/v3.0.0/traefik_v3.0.0_linux_arm64.tar.gz # Ajusta si es amd64
tar -zxvf traefik_v3.0.0_linux_arm64.tar.gz
mv traefik /usr/local/bin/
chmod +x /usr/local/bin/traefik
3. Estructura de Directorios y Permisos¶
Creamos el entorno de configuración profesional.
mkdir -p /etc/traefik/conf.d
mkdir -p /etc/traefik/acme
touch /etc/traefik/traefik.yml
touch /etc/traefik/acme/acme.json
chmod 600 /etc/traefik/acme/acme.json # Requisito de seguridad para SSL
4. Configuración Estática (traefik.yml)¶
Este archivo define los EntryPoints (puertos) y el Certificate Resolver para Cloudflare.
nano /etc/traefik/traefik.yml
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
file:
directory: /etc/traefik/conf.d
watch: true
certificatesResolvers:
cloudflare:
acme:
email: tu-email@ejemplo.com
storage: /etc/traefik/acme/acme.json
dnsChallenge:
provider: cloudflare
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
5. Configuración Dinámica (conf.d/rules.yml)¶
Aquí es donde ocurre la magia del enrutado que definimos.
nano /etc/traefik/conf.d/rules.yml
Copiar el contenido de rules
6. Variables de Entorno (Cloudflare API)¶
Traefik necesita tu Token de Cloudflare para validar el DNS Challenge. Lo configuramos en el servicio de Systemd.
nano /etc/systemd/system/traefik.service
[Unit]
Description=Traefik
After=network-online.target
[Service]
Type=simple
User=root
Group=root
Environment=CF_DNS_API_TOKEN=TU_TOKEN_DE_CLOUDFLARE_AQUI
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
7. Lanzamiento y Verificación¶
Habilitamos el servicio y comprobamos que todo esté en orden.
systemctl daemon-reload
systemctl enable traefik
systemctl start traefik
# Ver logs en tiempo real por si falla algo
journalctl -u traefik -f
- Configuración de Reglas Básicas Bash
1. Denegar todo el tráfico entrante por defecto (Seguridad)¶
ufw default deny incoming
2. Permitir todo el tráfico saliente (Para que Traefik llegue a los otros LXC)¶
ufw default allow outgoing
3. Permitir SSH (¡IMPORTANTE! Si no, te echarás a ti mismo del contenedor)¶
ufw allow ssh
4. Puertos Web Estándar (Entrada desde el exterior)¶
ufw allow 80/tcp ufw allow 443/tcp
5. Puerto del Dashboard de Traefik (Uso interno)¶
Aunque lo sacamos por proxy.dap.gal (443), el binario escucha internamente aquí¶
ufw allow 8080/tcp
6. Integración con Monitoreo¶
Como ya tienes el Node Exporter en la base, Grafana ya verá la CPU.