docs: document direct compose workflow
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
|
||||
# Configuraciones live con datos reales de producción
|
||||
*.live.yaml
|
||||
opencode/opencode.json
|
||||
cheerfy_pentest_report.md
|
||||
|
||||
# Backups y temporales
|
||||
*.bak
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Repository Instructions
|
||||
|
||||
This repository is managed directly with Docker Compose.
|
||||
|
||||
- Do not assume Portainer is part of the deployment workflow.
|
||||
- Deploy services with `docker compose` and each service's local `.env`.
|
||||
- Do not use `stack.env` as the deployment environment file.
|
||||
- Avoid adding new Portainer-based instructions.
|
||||
- Keep edits scoped; many service compose files may have local uncommitted changes.
|
||||
- For exposed services, keep Traefik labels consistent with the existing `proxy` network pattern.
|
||||
- Validate compose changes with `docker compose --env-file .env config` from the service directory when possible.
|
||||
+1
-1
@@ -168,7 +168,7 @@ docker network create mail_internal
|
||||
1. **Ports Exposes**: set to the app's HTTP port (must match `loadbalancer.server.port` label)
|
||||
2. **Domain**: set FQDN (e.g. `myapp.sherlockhomeless.net`)
|
||||
3. **Base Directory**: set to the subdirectory (e.g. `/gitea`, `/n8n`)
|
||||
4. **Environment Variables**: fill from `.env` (copy values from `stack.env` template if needed)
|
||||
4. **Environment Variables**: fill from the service `.env`
|
||||
|
||||
---
|
||||
|
||||
|
||||
+4
-4
@@ -73,9 +73,9 @@ Igual que el Caso A — CrowdSec siempre, Authentik solo cuando la app no tiene
|
||||
|
||||
---
|
||||
|
||||
## 3. Variables de entorno obligatorias en stack.env / .env
|
||||
## 3. Variables de entorno obligatorias en .env
|
||||
|
||||
Incluye siempre estas variables en el `stack.env` de la nueva app para que las labels funcionen:
|
||||
Incluye siempre estas variables en el `.env` local de la nueva app para que Docker Compose resuelva las labels:
|
||||
|
||||
```env
|
||||
##### Traefik / dominios #####
|
||||
@@ -169,7 +169,7 @@ Nueva app
|
||||
│ ├── Caso B (privada) → crowdsec-bouncer@file + ths-authentik@docker
|
||||
│ └── Caso C (auth propia)→ crowdsec-bouncer@file
|
||||
│
|
||||
├── 3. Variables en stack.env / .env
|
||||
├── 3. Variables en .env
|
||||
│
|
||||
├── 4. Authentik Provider + App + Outpost (solo Caso B)
|
||||
│
|
||||
@@ -198,4 +198,4 @@ Nueva app
|
||||
| 3 | SSL no funciona | `tls.certresolver` mal escrito o dominio no existe en DNS | Verificar DNS con `dig miapp.sherlockhomeless.net` |
|
||||
| 4 | Authentik redirige pero da 404 | App no añadida al Embedded Outpost | Paso 4.3 |
|
||||
| 5 | CrowdSec da 403 | IP baneada | `docker exec crowdsec cscli decisions list` — si apareces, `cscli decisions delete --ip <tu-ip>` |
|
||||
| 6 | Variable no expandida en label | Traefik no expande vars en labels de docker | Hardcodear el valor o usar la variable en stack.env |
|
||||
| 6 | Variable no expandida en label | Traefik no expande vars en labels de docker; Docker Compose debe resolverlas antes | Definirla en `.env` y validar con `docker compose --env-file .env config` |
|
||||
|
||||
+2
-4
@@ -121,12 +121,10 @@ Posibles causas:
|
||||
Portainer_repo/
|
||||
├── opengist/
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── .env
|
||||
│ └── stack.env
|
||||
│ └── .env
|
||||
├── onetimesecret/
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── .env
|
||||
│ └── stack.env
|
||||
│ └── .env
|
||||
├── authentik/
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── create-auth-app.sh
|
||||
|
||||
@@ -1,377 +1,183 @@
|
||||
# Portainer Stacks Repository
|
||||
# Compose Services Repository
|
||||
|
||||
Este repositorio contiene la configuración de Portainer y múltiples stacks de servicios Docker gestionados mediante Docker Compose.
|
||||
Este repositorio contiene servicios autoalojados gestionados directamente con Docker Compose.
|
||||
|
||||
## 📋 Tabla de Contenidos
|
||||
Portainer ya no es el gestor de despliegue de este repo. Los despliegues se hacen desde CLI con `docker compose` y variables en archivos `.env` locales. No uses `stack.env` como fuente de despliegue.
|
||||
|
||||
## Contenido
|
||||
|
||||
- [Descripción](#descripción)
|
||||
- [Arquitectura](#arquitectura)
|
||||
- [Prerequisitos](#prerequisitos)
|
||||
- [Instalación y Despliegue](#instalación-y-despliegue)
|
||||
- [Stacks Disponibles](#stacks-disponibles)
|
||||
- [Configuración](#configuración)
|
||||
- [Despliegue](#despliegue)
|
||||
- [Servicios](#servicios)
|
||||
- [Configuracion](#configuracion)
|
||||
- [Uso](#uso)
|
||||
- [**→ Añadir una nueva app**](NUEVA-APP.md)
|
||||
- [Anadir una nueva app](NUEVA-APP.md)
|
||||
|
||||
## 📖 Descripción
|
||||
## Arquitectura
|
||||
|
||||
Este proyecto proporciona una infraestructura completa de servicios containerizados utilizando:
|
||||
- **Portainer** como gestor visual de contenedores Docker
|
||||
- **Traefik** como reverse proxy con certificados SSL automáticos
|
||||
- **Authentik** para autenticación SSO
|
||||
- Múltiples servicios adicionales (Gitea, n8n, AdGuard, etc.)
|
||||
La infraestructura base se levanta en este orden:
|
||||
|
||||
## 🏗️ Arquitectura
|
||||
1. `Traefik/`: reverse proxy y certificados TLS.
|
||||
2. `authentik/`: SSO y forward auth para apps privadas.
|
||||
3. `crowdsec/`: proteccion colaborativa y bouncer para Traefik.
|
||||
4. Resto de servicios: cada uno desde su propia carpeta.
|
||||
|
||||
La arquitectura sigue este orden de despliegue:
|
||||
Los servicios publicados comparten la red Docker externa `proxy`, que Traefik usa para alcanzarlos.
|
||||
|
||||
1. **Portainer** (gestor de contenedores) - acceso directo por puerto 9443
|
||||
2. **Traefik** (reverse proxy) - desplegado desde Portainer
|
||||
3. **Authentik** (SSO) - desplegado desde Portainer
|
||||
4. **CrowdSec** (IPS/IDS + bouncer) - protección de seguridad colaborativa para todos los servicios
|
||||
5. **Resto de stacks** - desplegables desde Portainer
|
||||
Configura DNS antes de desplegar servicios expuestos. Los certificados de Let's Encrypt dependen de que los dominios resuelvan correctamente.
|
||||
|
||||
Todos los servicios se comunican a través de la red Docker `proxy` y están protegidos por Traefik con SSL.
|
||||
## Prerequisitos
|
||||
|
||||
> **⚠️ Importante**: Los registros DNS deben estar configurados ANTES de desplegar Traefik y Authentik para que los certificados SSL se generen correctamente.
|
||||
- Docker Engine
|
||||
- Docker Compose v2
|
||||
- Red Docker externa `proxy`
|
||||
- Dominios apuntando al servidor o al Cloudflare Tunnel correspondiente
|
||||
- Puertos 80/443 disponibles para Traefik si aplica
|
||||
|
||||
## ✅ Prerequisitos
|
||||
|
||||
- Docker Engine (20.10+)
|
||||
- Docker Compose (v2.0+)
|
||||
- Dominio(s) configurado(s) apuntando a tu servidor
|
||||
- Puertos 80 y 443 abiertos (o 9443 para modo directo)
|
||||
|
||||
## 🚀 Instalación y Despliegue
|
||||
|
||||
### Paso 1: Clonar el Repositorio
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd Portainer_repo
|
||||
```
|
||||
|
||||
### Paso 2: Crear la Red de Docker
|
||||
|
||||
Todos los servicios comparten la red `proxy`:
|
||||
Crear la red compartida:
|
||||
|
||||
```bash
|
||||
docker network create proxy
|
||||
```
|
||||
|
||||
### Paso 3: Preparar Secretos de Portainer
|
||||
Si ya existe, Docker devolvera un error inofensivo.
|
||||
|
||||
Crea el archivo de secreto para la clave de cifrado de Portainer:
|
||||
## Despliegue
|
||||
|
||||
Cada servicio se despliega desde su carpeta con su `.env` local:
|
||||
|
||||
```bash
|
||||
# Crear directorio para secretos
|
||||
sudo mkdir -p /opt/portainer/secrets
|
||||
|
||||
# Generar una clave aleatoria de 32 caracteres
|
||||
openssl rand -base64 32 | sudo tee /opt/portainer/secrets/portainer
|
||||
|
||||
# Asegurar permisos correctos
|
||||
sudo chmod 600 /opt/portainer/secrets/portainer
|
||||
cd Traefik
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Paso 4: Desplegar Portainer (PRIMERO)
|
||||
|
||||
Despliega Portainer con acceso directo por puerto 9443:
|
||||
Para actualizar un servicio:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.9443.yml up -d
|
||||
cd <servicio>
|
||||
docker compose --env-file .env pull
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
Verifica que Portainer esté corriendo:
|
||||
```bash
|
||||
docker ps | grep portainer
|
||||
```
|
||||
|
||||
Accede a: `https://tu-servidor:9443`
|
||||
|
||||
### Paso 5: Configuración Inicial de Portainer
|
||||
|
||||
1. Accede a Portainer mediante `https://tu-servidor:9443`
|
||||
2. Crea el usuario administrador (primera vez - tienes 5 minutos)
|
||||
3. Selecciona el entorno Docker local
|
||||
4. Completa la configuración inicial
|
||||
|
||||
### Paso 6: Configurar Registros DNS
|
||||
|
||||
**Antes de desplegar Traefik y Authentik**, configura los registros DNS:
|
||||
|
||||
- Registro A para Traefik Dashboard (ej: `traefik.tudominio.com`)
|
||||
- Registro A para Portainer UI (ej: `portainer.tudominio.com`)
|
||||
- Registro A para Portainer API (ej: `portainer-api.tudominio.com`)
|
||||
- Registro A para Authentik (ej: `auth.tudominio.com`)
|
||||
- Cualquier otro dominio que vayas a usar
|
||||
|
||||
> **⏰ Espera** a que los registros DNS se propaguen antes de continuar (puede tardar de minutos a horas).
|
||||
|
||||
Verifica la propagación:
|
||||
```bash
|
||||
nslookup traefik.tudominio.com
|
||||
nslookup portainer.tudominio.com
|
||||
nslookup auth.tudominio.com
|
||||
```
|
||||
|
||||
### Paso 7: Desplegar Traefik desde Portainer
|
||||
|
||||
1. En Portainer, ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `traefik`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `Traefik/docker-compose.yml`
|
||||
5. Añade el archivo de variables de entorno: `Traefik/.env` (puedes partir de `Traefik/stack.env` como plantilla)
|
||||
6. Haz clic en **Deploy the stack**
|
||||
|
||||
Verifica que Traefik esté funcionando:
|
||||
```bash
|
||||
docker logs traefik
|
||||
```
|
||||
|
||||
### Paso 8: Desplegar Authentik desde Portainer
|
||||
|
||||
1. En Portainer, ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `authentik`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `authentik/docker-compose.yml`
|
||||
5. Añade las variables de entorno necesarias
|
||||
6. Haz clic en **Deploy the stack**
|
||||
|
||||
#### Configuración de Authentik
|
||||
|
||||
Una vez desplegado Authentik, necesitarás configurar:
|
||||
- **Applications** (aplicaciones a proteger)
|
||||
- **Providers** de tipo Forward Auth
|
||||
- **Authorization Flow** de tipo Implicit
|
||||
- **Outposts** para ejecutar los providers
|
||||
- **Middleware** en Traefik
|
||||
|
||||
Para instrucciones detalladas, consulta el [README de Authentik](authentik/README.md).
|
||||
|
||||
> **Importante**: para proteger nuevas apps con `ths-authentik@docker`, no basta con añadir el middleware en Traefik. También hay que crear en Authentik el **Proxy Provider**, la **Application** y asociarlos al **Embedded Outpost**. El patrón completo está documentado en `authentik/README.md`.
|
||||
|
||||
### Paso 9: Configurar Variables de Entorno para Portainer UI
|
||||
|
||||
Una vez Traefik y Authentik están funcionando, actualiza el archivo `.env` en la raíz del proyecto:
|
||||
Para reiniciarlo:
|
||||
|
||||
```bash
|
||||
nano .env
|
||||
cd <servicio>
|
||||
docker compose --env-file .env restart
|
||||
```
|
||||
|
||||
Variables principales a configurar:
|
||||
- `PORTAINER_DOMAIN`: Tu dominio para Portainer UI (ej: `portainer.tudominio.com`)
|
||||
- `PORTAINER_API_DOMAIN`: Tu dominio para la API de Portainer (ej: `portainer-api.tudominio.com`)
|
||||
- `PORTAINER_API_IP_WHITELIST`: IPs permitidas para acceso directo a la API
|
||||
- `TRAEFIK_AUTH_MIDDLEWARE`: Middleware de autenticación (ej: `ths-authentik@docker`)
|
||||
|
||||
### Paso 10: Actualizar Stack de Portainer (Opcional)
|
||||
|
||||
Si deseas acceder a Portainer mediante dominio con SSL (en lugar del puerto 9443):
|
||||
|
||||
1. En Portainer, ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `portainer`
|
||||
3. Selecciona **Upload** y sube el archivo `docker-compose.yml` de la raíz
|
||||
4. O usa **Repository** apuntando a la raíz del repositorio
|
||||
5. Añade las variables de entorno del archivo `.env`
|
||||
6. Haz clic en **Deploy the stack**
|
||||
|
||||
> **Nota**: Esto reemplazará el despliegue inicial por puerto 9443 con acceso mediante dominio.
|
||||
|
||||
### Paso 11: Desplegar Otros Stacks desde Portainer
|
||||
|
||||
Una vez la infraestructura base está funcionando, puedes desplegar el resto de stacks:
|
||||
|
||||
#### Método 1: Desde la UI de Portainer (Recomendado)
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Selecciona **Repository**
|
||||
3. Configura el repositorio Git:
|
||||
- URL: `<tu-repositorio>`
|
||||
- Reference: `main` (o tu rama)
|
||||
- Compose path: `<stack-name>/docker-compose.yml`
|
||||
4. Añade variables de entorno si es necesario
|
||||
5. Haz clic en **Deploy the stack**
|
||||
|
||||
#### Método 2: Desde línea de comandos
|
||||
Para detenerlo:
|
||||
|
||||
```bash
|
||||
# Ejemplo: Desplegar Authentik
|
||||
cd authentik
|
||||
docker compose up -d
|
||||
cd ..
|
||||
|
||||
# Ejemplo: Desplegar Gitea
|
||||
cd gitea
|
||||
docker compose up -d
|
||||
cd ..
|
||||
cd <servicio>
|
||||
docker compose --env-file .env down
|
||||
```
|
||||
|
||||
## 📦 Stacks Disponibles
|
||||
Usa `docker compose --env-file .env -f <ruta>/docker-compose.yml up -d` si prefieres ejecutar desde la raiz del repo.
|
||||
|
||||
| Stack | Descripción | Carpeta | Documentación |
|
||||
|-------|-------------|---------|---------------|
|
||||
| **Traefik** | Reverse proxy con SSL automático | `Traefik/` | [README](Traefik/README.md) |
|
||||
| **Portainer** | Gestor visual de Docker | Raíz (docker-compose.yml) | - |
|
||||
| **Authentik** | Sistema de autenticación SSO (Forward Auth) | `authentik/` | [README](authentik/README.md) |
|
||||
| **CrowdSec** | IPS/IDS colaborativo + bouncer Traefik + Grafana | `crowdsec/` | [README](crowdsec/README.md) |
|
||||
| **Homepage** | Dashboard principal expuesto por Traefik | `homepage/` | [README](homepage/README.md) |
|
||||
| **Dozzle** | Visor de logs Docker protegido con Authentik | `dozzle/` | [README](dozzle/README.md) |
|
||||
| **Beszel** | Monitorización ligera de host y contenedores | `beszel/` | [README](beszel/README.md) |
|
||||
| **Gitea** | Servidor Git autoalojado con Actions | `gitea/` | [README](gitea/README.md) |
|
||||
| **n8n** | Plataforma de automatización de workflows | `n8n/` | [README](n8n/README.md) |
|
||||
| **Mail Relay** | Relay SMTP de salida para aplicaciones | `mail-relay/` | [README](mail-relay/README.md) |
|
||||
| **AdGuard** | Bloqueador de anuncios DNS con DoT | `adguard/` | [README](adguard/README.md) |
|
||||
| **Trilium** | Aplicación de notas jerárquicas | `trilium/` | [README](trilium/README.md) |
|
||||
| **Wireguard** | VPN rápida y segura | `wireguard/` | [README](wireguard/README.md) |
|
||||
| **Ruleta** | Aplicación Next.js personalizada | `ruleta/` | [README](ruleta/README.md) |
|
||||
## Servicios
|
||||
|
||||
> **📖 Nota**: Cada stack tiene su propio README con instrucciones detalladas de configuración, uso y troubleshooting.
|
||||
| Servicio | Descripcion | Carpeta | Documentacion |
|
||||
|---|---|---|---|
|
||||
| Traefik | Reverse proxy con TLS automatico | `Traefik/` | [README](Traefik/README.md) |
|
||||
| Authentik | SSO y Forward Auth | `authentik/` | [README](authentik/README.md) |
|
||||
| CrowdSec | IPS/IDS, bouncer y Grafana | `crowdsec/` | [README](crowdsec/README.md) |
|
||||
| Homepage | Dashboard principal | `homepage/` | [README](homepage/README.md) |
|
||||
| Dozzle | Visor de logs Docker | `dozzle/` | [README](dozzle/README.md) |
|
||||
| Beszel | Monitorizacion ligera | `beszel/` | [README](beszel/README.md) |
|
||||
| Gitea | Git autoalojado | `gitea/` | [README](gitea/README.md) |
|
||||
| n8n | Automatizacion de workflows | `n8n/` | [README](n8n/README.md) |
|
||||
| Mail Relay | Relay SMTP interno | `mail-relay/` | [README](mail-relay/README.md) |
|
||||
| AdGuard | DNS y bloqueo de anuncios | `adguard/` | [README](adguard/README.md) |
|
||||
| Trilium | Notas jerarquicas | `trilium/` | [README](trilium/README.md) |
|
||||
| Wireguard | VPN | `wireguard/` | [README](wireguard/README.md) |
|
||||
| Open WebUI | UI para modelos locales/remotos | `openwebui/` | [README](openwebui/README.md) |
|
||||
| OpenCode | Entorno OpenCode servido por Traefik | `opencode/` | [README](opencode/README.md) |
|
||||
| Kopia | Backups | `backups/kopia/` | [README](backups/kopia/README.md) |
|
||||
|
||||
## ⚙️ Configuración
|
||||
## Configuracion
|
||||
|
||||
### Archivo .env Principal
|
||||
Cada carpeta de servicio debe tener un `.env` con sus variables reales.
|
||||
|
||||
El archivo `.env` en la raíz contiene las configuraciones globales:
|
||||
Reglas actuales:
|
||||
|
||||
- Despliega siempre con `.env`.
|
||||
- No uses `stack.env` para desplegar.
|
||||
- No documentes flujos nuevos basados en Portainer.
|
||||
- Mantén secretos reales fuera de Git.
|
||||
- Para apps expuestas por Traefik, el servicio publicado debe estar en la red `proxy`.
|
||||
- Las bases de datos y dependencias internas deben quedarse en redes internas salvo que Traefik deba alcanzarlas.
|
||||
|
||||
Variables comunes de Traefik:
|
||||
|
||||
```env
|
||||
# Imagen de Portainer
|
||||
PORTAINER_IMAGE=portainer/portainer-ce:latest
|
||||
|
||||
# Rutas de almacenamiento
|
||||
PORTAINER_SECRET_PATH=/opt/portainer/secrets/portainer
|
||||
PORTAINER_DATA_PATH=/opt/portainer/data
|
||||
|
||||
# Configuración de red y proxy
|
||||
TRAEFIK_DOCKER_NETWORK=proxy
|
||||
TRAEFIK_ENTRYPOINT_SECURE=websecure
|
||||
TRAEFIK_CERTRESOLVER=letsencrypt
|
||||
|
||||
# Dominios
|
||||
PORTAINER_DOMAIN=portainer.example.com
|
||||
PORTAINER_API_DOMAIN=portainer-api.example.com
|
||||
|
||||
# Seguridad
|
||||
PORTAINER_API_IP_WHITELIST=10.8.0.0/24,172.18.0.1/32
|
||||
TRAEFIK_AUTH_MIDDLEWARE=ths-authentik@docker
|
||||
```
|
||||
|
||||
### Configuraciones por Stack
|
||||
Para crear una app nueva, sigue [NUEVA-APP.md](NUEVA-APP.md).
|
||||
|
||||
Cada stack usa su propio archivo `.env` local. El archivo `stack.env` se conserva solo como plantilla de ejemplo para copiar o tomar como referencia.
|
||||
## Uso
|
||||
|
||||
## 🎯 Uso
|
||||
|
||||
### Ver Logs de Portainer
|
||||
|
||||
```bash
|
||||
docker logs -f portainer
|
||||
```
|
||||
|
||||
### Ver Estado de Todos los Contenedores
|
||||
Ver contenedores:
|
||||
|
||||
```bash
|
||||
docker ps -a
|
||||
```
|
||||
|
||||
### Actualizar Portainer
|
||||
Ver logs de un servicio:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
cd <servicio>
|
||||
docker compose --env-file .env logs -f
|
||||
```
|
||||
|
||||
### Reiniciar un Stack
|
||||
|
||||
Desde Portainer UI o:
|
||||
```bash
|
||||
cd <stack-folder>
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
### Eliminar un Stack
|
||||
Validar un compose:
|
||||
|
||||
```bash
|
||||
cd <stack-folder>
|
||||
docker compose down
|
||||
# Para eliminar también volúmenes:
|
||||
docker compose down -v
|
||||
cd <servicio>
|
||||
docker compose --env-file .env config
|
||||
```
|
||||
|
||||
## 🔒 Seguridad
|
||||
## Troubleshooting
|
||||
|
||||
### Acceso a Portainer UI
|
||||
Si Traefik no enruta:
|
||||
|
||||
- **Protegido por SSO**: La UI principal está protegida mediante Authentik (configurable con `TRAEFIK_AUTH_MIDDLEWARE`)
|
||||
- **Dominio**: Accesible solo mediante el dominio configurado con SSL
|
||||
1. Verifica DNS: `dig <dominio>`
|
||||
2. Comprueba que Traefik esta corriendo: `docker ps | grep traefik`
|
||||
3. Revisa logs: `docker logs traefik`
|
||||
4. Valida labels del servicio publicado.
|
||||
5. Comprueba que el contenedor esta en la red `proxy`.
|
||||
|
||||
### Acceso a API de Portainer
|
||||
Si Authentik redirige pero devuelve error:
|
||||
|
||||
- **Whitelist IP**: La API está restringida a IPs específicas (VPN, localhost)
|
||||
- **Dominio separado**: Usa un dominio diferente sin SSO para apps móviles
|
||||
- **SSL**: Todo el tráfico está cifrado
|
||||
1. Verifica que existe el Proxy Provider.
|
||||
2. Verifica que existe la Application.
|
||||
3. Comprueba que la app esta asociada al Embedded Outpost.
|
||||
4. Revisa logs de `authentik-server`.
|
||||
|
||||
### Base de Datos Cifrada
|
||||
Si un `.env` no se aplica:
|
||||
|
||||
Portainer utiliza una clave de cifrado para proteger su base de datos, montada en:
|
||||
- `/run/secrets/portainer`
|
||||
- `/run/portainer/portainer`
|
||||
1. Ejecuta desde la carpeta del servicio o usa `--env-file <servicio>/.env`.
|
||||
2. Valida con `docker compose --env-file .env config`.
|
||||
3. Recuerda que Traefik no expande variables; Docker Compose las expande antes de crear labels.
|
||||
|
||||
## 🛠️ Troubleshooting
|
||||
## Notas
|
||||
|
||||
### Portainer no arranca
|
||||
- Orden recomendado: Traefik -> Authentik -> CrowdSec -> servicios.
|
||||
- CrowdSec debe ir antes de Authentik en la cadena de middlewares cuando ambos se usen.
|
||||
- Las instrucciones antiguas de Portainer se consideran obsoletas.
|
||||
|
||||
1. Verifica que la red `proxy` existe: `docker network ls | grep proxy`
|
||||
2. Revisa los logs: `docker logs portainer`
|
||||
3. Verifica que el archivo de secreto existe y tiene permisos correctos
|
||||
4. Verifica que el puerto 9443 no esté ocupado: `sudo netstat -tulpn | grep 9443`
|
||||
## Stacks deprecados
|
||||
|
||||
### No puedo acceder mediante dominio
|
||||
Los stacks descartados de la infra (ya no se despliegan) se prefijan con
|
||||
`DEPRECATED-` (ej. `DEPRECATED-kasm/`) en vez de borrarse, para conservar
|
||||
la config por si hace falta consultarla. Antes de renombrar:
|
||||
|
||||
1. Verifica que el dominio apunta a tu servidor: `nslookup tudominio.com`
|
||||
2. Verifica que los registros DNS están propagados
|
||||
3. Verifica que Traefik esté corriendo: `docker ps | grep traefik`
|
||||
4. Verifica la configuración de Traefik: `docker logs traefik`
|
||||
5. Revisa las labels de Traefik en el docker-compose.yml
|
||||
6. Verifica que los puertos 80 y 443 estén abiertos: `sudo netstat -tulpn | grep -E ':(80|443)'`
|
||||
7. Como respaldo, siempre puedes acceder por `https://tu-servidor:9443`
|
||||
|
||||
### Error de permisos con volúmenes (SELinux)
|
||||
|
||||
Si usas SELinux, los volúmenes ya tienen la opción `:Z` configurada. Si persisten problemas:
|
||||
|
||||
```bash
|
||||
sudo chcon -Rt svirt_sandbox_file_t /opt/portainer/data
|
||||
```
|
||||
|
||||
### Authentik no protege los servicios
|
||||
|
||||
1. Verifica que el outpost esté corriendo y en estado **Healthy**
|
||||
2. Revisa que las aplicaciones y providers estén correctamente configurados
|
||||
3. Verifica que el authorization flow sea de tipo **Implicit**
|
||||
4. Comprueba que el middleware de Traefik esté correctamente referenciado en las labels
|
||||
5. Revisa los logs de Authentik: `docker logs authentik-server`
|
||||
6. Verifica la conectividad entre Traefik y Authentik en la red `proxy`
|
||||
|
||||
## 📝 Notas Adicionales
|
||||
|
||||
- **Orden de despliegue**: Siempre desplegar Portainer (9443) → Traefik → Authentik → CrowdSec → Resto de stacks
|
||||
- **Registros DNS**: Configurar ANTES de desplegar Traefik para que Let's Encrypt funcione correctamente
|
||||
- **Puerto 9443**: Mantén el acceso por puerto 9443 como respaldo en caso de problemas con Traefik
|
||||
- **Backups**: Considera hacer backup regular de `/opt/portainer/data` y el archivo de secretos
|
||||
- **Actualizaciones**: Actualiza las imágenes regularmente desde Portainer UI
|
||||
- **Monitoreo**: Usa Portainer para monitorear recursos y logs de todos los contenedores
|
||||
|
||||
## 📄 Licencia
|
||||
|
||||
Consulta el archivo LICENSE en este repositorio.
|
||||
|
||||
## 🤝 Contribuciones
|
||||
|
||||
Las contribuciones son bienvenidas. Por favor, abre un issue o pull request para sugerencias o mejoras.
|
||||
1. Confirmar que no queden contenedores corriendo (`docker ps -a --filter name=<stack>`).
|
||||
2. Quitar/inhabilitar su ruta en `/opt/traefik/dynamic/` si tenía una.
|
||||
3. Quitar su entrada de Homepage (labels en el compose o `services.yaml`).
|
||||
4. `git mv <stack> DEPRECATED-<stack>` (preserva historial).
|
||||
|
||||
+11
-16
@@ -28,17 +28,14 @@ Este stack despliega Traefik configurado para:
|
||||
sudo mkdir -p /opt/traefik/letsencrypt
|
||||
```
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `traefik`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `Traefik/docker-compose.yml`
|
||||
5. Copia `Traefik/stack.env` a `Traefik/.env` y carga `Traefik/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `Traefik/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd Traefik
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno
|
||||
|
||||
@@ -296,17 +293,15 @@ sudo tar -xzf traefik-backup-YYYYMMDD.tar.gz -C /
|
||||
|
||||
Para actualizar Traefik:
|
||||
|
||||
1. En Portainer, ve al stack de Traefik
|
||||
2. Edita el archivo `.env` y cambia la versión:
|
||||
1. Edita el archivo `.env` y cambia la versión:
|
||||
```env
|
||||
TRAEFIK_IMAGE=traefik:v3.3
|
||||
```
|
||||
3. Haz clic en **Update the stack**
|
||||
4. O desde línea de comandos:
|
||||
2. Redespiega:
|
||||
```bash
|
||||
cd Traefik
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
docker compose --env-file .env pull
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
> **⚠️ Nota**: Revisa el [changelog de Traefik](https://github.com/traefik/traefik/releases) antes de actualizar versiones mayores.
|
||||
|
||||
+8
-11
@@ -47,17 +47,14 @@ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
||||
-subj "/CN=adguard.tudominio.com"
|
||||
```
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `adguard`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `adguard/docker-compose.yml`
|
||||
5. Copia `adguard/stack.env` a `adguard/.env` y carga `adguard/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `adguard/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd adguard
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno
|
||||
|
||||
@@ -352,7 +349,7 @@ sudo tar -xzf adguard-backup-YYYYMMDD.tar.gz -C /
|
||||
```env
|
||||
ADGUARD_IMAGE=adguard/adguardhome:latest
|
||||
```
|
||||
3. Actualiza el stack en Portainer
|
||||
3. Redespiega con Docker Compose
|
||||
4. Verifica los logs y el panel web
|
||||
|
||||
## 📊 Estadísticas
|
||||
|
||||
+23
-25
@@ -8,18 +8,14 @@ Este stack despliega Authentik configurado para funcionar con Traefik mediante *
|
||||
|
||||
## 🚀 Despliegue
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `authentik`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `authentik/docker-compose.yml`
|
||||
5. Carga el archivo de variables de entorno: `authentik/.env`
|
||||
6. O añade manualmente las variables de entorno necesarias
|
||||
7. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `authentik/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd authentik
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno Importantes
|
||||
|
||||
@@ -53,12 +49,12 @@ Una vez desplegado Authentik, accede a su interfaz web en `https://auth.tudomini
|
||||
|
||||
### 2. Crear Applications (Aplicaciones)
|
||||
|
||||
Para cada servicio que quieras proteger (ej: Portainer, Traefik Dashboard, Gitea, etc.):
|
||||
Para cada servicio que quieras proteger (ej: Traefik Dashboard, Gitea, Dozzle, etc.):
|
||||
|
||||
1. Ve a **Applications** → **Create**
|
||||
2. Completa el formulario:
|
||||
- **Name**: `Portainer` (nombre descriptivo)
|
||||
- **Slug**: `portainer` (identificador único en minúsculas)
|
||||
- **Name**: `Mi App` (nombre descriptivo)
|
||||
- **Slug**: `miapp` (identificador único en minúsculas)
|
||||
- **Provider**: (lo crearás en el siguiente paso - déjalo vacío por ahora)
|
||||
- **Policy engine mode**: `any` (permite acceso si alguna política coincide)
|
||||
- **UI settings**: Configura el icono y apariencia (opcional)
|
||||
@@ -71,11 +67,11 @@ Los providers conectan tus aplicaciones con Authentik. Para Forward Auth con Tra
|
||||
1. Ve a **Applications** → Tu aplicación → **Provider** → **Create**
|
||||
2. Selecciona tipo: **Proxy Provider**
|
||||
3. Completa el formulario:
|
||||
- **Name**: `Portainer Provider`
|
||||
- **Name**: `Mi App Provider`
|
||||
- **Authorization flow**: Selecciona `default-provider-authorization-implicit-consent` (créalo si no existe - ver paso 4)
|
||||
- **Type**: **Forward auth (single application)**
|
||||
- **External host**: `https://portainer.tudominio.com` (URL completa de tu servicio)
|
||||
- **Internal host**: `http://portainer:9000` (opcional - URL interna si Authentik debe hacer reverse proxy)
|
||||
- **External host**: `https://miapp.tudominio.com` (URL completa de tu servicio)
|
||||
- **Internal host**: `http://miapp:8080` (opcional - URL interna si Authentik debe hacer reverse proxy)
|
||||
- **Internal host SSL validation**: Desactivado (si usas HTTP interno)
|
||||
4. **Advanced settings**:
|
||||
- **Token validity**: `hours=24` (duración de la sesión)
|
||||
@@ -140,7 +136,7 @@ Los **outposts** son los componentes que ejecutan los providers y procesan las p
|
||||
- **Name**: `authentik-embedded-outpost` (o el nombre que prefieras)
|
||||
- **Type**: **Proxy**
|
||||
- **Integration**: Déjalo vacío (el outpost embedded usa la integración por defecto)
|
||||
3. **Applications**: Selecciona todas las aplicaciones que creaste (Portainer, Traefik, etc.)
|
||||
3. **Applications**: Selecciona todas las aplicaciones que creaste (Traefik, Gitea, Dozzle, etc.)
|
||||
4. **Configuration**:
|
||||
```yaml
|
||||
authentik_host: https://auth.tudominio.com
|
||||
@@ -203,14 +199,14 @@ Una vez configurado el middleware, añade la label a los servicios que quieras p
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
traefik.http.routers.portainer.middlewares: "ths-authentik@docker"
|
||||
traefik.http.routers.miapp.middlewares: "ths-authentik@docker"
|
||||
```
|
||||
|
||||
O si definiste el middleware en archivo:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
traefik.http.routers.portainer.middlewares: "authentik@file"
|
||||
traefik.http.routers.miapp.middlewares: "authentik@file"
|
||||
```
|
||||
|
||||
### 7.1 Patrón recomendado para nuevas apps
|
||||
@@ -583,8 +579,10 @@ docker exec authentik-redis redis-cli --rdb /data/dump.rdb
|
||||
|
||||
## 🔄 Actualizaciones
|
||||
|
||||
1. En Portainer, ve a tu stack de Authentik
|
||||
2. Haz clic en **Editor**
|
||||
3. Actualiza las versiones de las imágenes si es necesario
|
||||
4. Haz clic en **Update the stack**
|
||||
5. O ejecuta: `docker compose pull && docker compose up -d`
|
||||
1. Edita `.env` y actualiza las versiones de las imagenes si es necesario.
|
||||
2. Ejecuta:
|
||||
```bash
|
||||
cd authentik
|
||||
docker compose --env-file .env pull
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
+7
-10
@@ -2,17 +2,14 @@
|
||||
|
||||
Stack para desplegar [Beszel](https://beszel.dev/) en `beszel.sherlockhomeless.net`, con el **hub** publicado por Traefik y un **agent** local para monitorizar este mismo host Docker.
|
||||
|
||||
## 🚀 Despliegue en Portainer
|
||||
## 🚀 Despliegue con Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `beszel`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `beszel/docker-compose.yml`
|
||||
5. Copia `beszel/stack.env` a `beszel/.env` y carga `beszel/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `beszel/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd beszel
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
## ⚙️ Variables importantes
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@ Permisos mínimos necesarios:
|
||||
### 3. Configurar el `.env`
|
||||
|
||||
```bash
|
||||
cp stack.env .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
@@ -111,7 +110,7 @@ docker compose --env-file .env up -d
|
||||
# 2. Migrar los DNS al tunnel (convierte A records → CNAME proxied)
|
||||
./add-domain.sh --tunnel auth traefik gitea n8n nextcloud paperless paperless-ai \
|
||||
notas memos vikunja karakeep kasm remote beszel dozzle crowdsec grafana llm \
|
||||
ocode adblock onlyoffice www cockpit coolify kopia notes opencode portainer \
|
||||
ocode adblock onlyoffice www cockpit coolify kopia notes portainer \
|
||||
uptimekuma webtop wg
|
||||
|
||||
# 3. Verificar conexión
|
||||
@@ -127,7 +126,7 @@ docker stop cloudflared
|
||||
# 2. Revertir DNS a registros A directos
|
||||
./add-domain.sh auth traefik gitea n8n nextcloud paperless paperless-ai \
|
||||
notas memos vikunja karakeep kasm remote beszel dozzle crowdsec grafana llm \
|
||||
ocode adblock onlyoffice www cockpit coolify kopia notes opencode portainer \
|
||||
ocode adblock onlyoffice www cockpit coolify kopia notes portainer \
|
||||
uptimekuma webtop wg
|
||||
```
|
||||
|
||||
@@ -163,7 +162,6 @@ docker stop cloudflared
|
||||
| `coolify` | Coolify |
|
||||
| `kopia` | Kopia |
|
||||
| `notes` | Notes |
|
||||
| `opencode` | OpenCode (alt) |
|
||||
| `portainer` | Portainer |
|
||||
| `uptimekuma` | Uptime Kuma |
|
||||
| `webtop` | Webtop |
|
||||
|
||||
+8
-27
@@ -30,10 +30,9 @@ Este stack despliega:
|
||||
|
||||
### Paso 1: Configurar variables de entorno
|
||||
|
||||
Copia la plantilla y edita las variables:
|
||||
Edita el `.env` local con las variables reales:
|
||||
|
||||
```bash
|
||||
cp crowdsec/stack.env crowdsec/.env
|
||||
nano crowdsec/.env
|
||||
```
|
||||
|
||||
@@ -73,34 +72,18 @@ El script:
|
||||
|
||||
**Importante**: Traefik necesita reiniciarse para cargar el plugin de CrowdSec y los nuevos volúmenes.
|
||||
|
||||
Desde Portainer:
|
||||
1. Ve a **Stacks** → stack `traefik`
|
||||
2. Actualiza el archivo `.env` de Traefik para incluir `TRAEFIK_LOG_DIR=/opt/traefik/logs`
|
||||
3. Haz clic en **Update the stack**
|
||||
Actualiza el archivo `.env` de Traefik para incluir `TRAEFIK_LOG_DIR=/opt/traefik/logs` y redespliega:
|
||||
|
||||
O desde CLI:
|
||||
```bash
|
||||
cd Traefik
|
||||
docker compose up -d
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Paso 4: Desplegar CrowdSec
|
||||
|
||||
Desde Portainer:
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `crowdsec`
|
||||
3. Selecciona **Repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `crowdsec/docker-compose.yml`
|
||||
5. Carga `crowdsec/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
|
||||
O desde CLI:
|
||||
```bash
|
||||
cd crowdsec
|
||||
docker compose up -d
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Paso 5: Verificar el despliegue
|
||||
@@ -456,18 +439,16 @@ Incluye en tus backups de Kopia (ya configurados en `backups/kopia/`):
|
||||
|
||||
Para actualizar CrowdSec:
|
||||
|
||||
1. En Portainer, ve al stack `crowdsec`
|
||||
2. Edita `.env` y actualiza la versión si es necesario:
|
||||
1. Edita `.env` y actualiza la versión si es necesario:
|
||||
```env
|
||||
CROWDSEC_IMAGE=crowdsecurity/crowdsec:latest
|
||||
GRAFANA_IMAGE=grafana/grafana:latest
|
||||
```
|
||||
3. Haz clic en **Update the stack**
|
||||
4. O desde CLI:
|
||||
2. Redespiega:
|
||||
```bash
|
||||
cd crowdsec
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
docker compose --env-file .env pull
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
> ⚠️ Antes de actualizar versiones mayores de CrowdSec, revisa el [changelog](https://github.com/crowdsecurity/crowdsec/releases).
|
||||
|
||||
+7
-10
@@ -2,17 +2,14 @@
|
||||
|
||||
Stack para desplegar [Dozzle](https://dozzle.dev/) como visor ligero de logs Docker en `dozzle.sherlockhomeless.net`.
|
||||
|
||||
## 🚀 Despliegue en Portainer
|
||||
## 🚀 Despliegue con Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `dozzle`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `dozzle/docker-compose.yml`
|
||||
5. Copia `dozzle/stack.env` a `dozzle/.env` y carga `dozzle/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `dozzle/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd dozzle
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
## ⚙️ Variables importantes
|
||||
|
||||
|
||||
+9
-12
@@ -19,17 +19,14 @@ Este stack despliega Gitea con:
|
||||
2. **Registro DNS**: Configura el registro A para tu dominio Gitea
|
||||
3. **Puerto SSH**: El puerto SSH debe estar disponible (por defecto 222)
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `gitea`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `gitea/docker-compose.yml`
|
||||
5. Copia `gitea/stack.env` a `gitea/.env` y carga `gitea/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `gitea/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd gitea
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno Importantes
|
||||
|
||||
@@ -85,7 +82,7 @@ Para habilitar CI/CD con Gitea Actions:
|
||||
```env
|
||||
GITEA_RUNNER_REGISTRATION_TOKEN=tu-token-copiado
|
||||
```
|
||||
3. Actualiza el stack en Portainer
|
||||
3. Redespiega con Docker Compose
|
||||
|
||||
#### Paso 3: Verificar el Runner
|
||||
|
||||
@@ -342,7 +339,7 @@ Esto crea un archivo `gitea-dump-*.zip` con todo lo necesario para restaurar.
|
||||
```env
|
||||
GITEA_IMAGE=gitea/gitea:1.21.0
|
||||
```
|
||||
3. Actualiza el stack en Portainer
|
||||
3. Redespiega con Docker Compose
|
||||
4. Verifica los logs: `docker logs gitea`
|
||||
5. Prueba que todo funciona correctamente
|
||||
|
||||
|
||||
+7
-10
@@ -2,17 +2,14 @@
|
||||
|
||||
Stack para desplegar [Homepage](https://gethomepage.dev/) detrás de Traefik como dashboard principal en `www.sherlockhomeless.net`.
|
||||
|
||||
## 🚀 Despliegue en Portainer
|
||||
## 🚀 Despliegue con Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `homepage`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `homepage/docker-compose.yml`
|
||||
5. Copia `homepage/stack.env` a `homepage/.env` y carga `homepage/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `homepage/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd homepage
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
## ⚙️ Variables importantes
|
||||
|
||||
|
||||
+10
-9
@@ -23,20 +23,21 @@ printf '%s' 'CAMBIA_ESTA_PASSWORD_SMTP' | sudo tee /opt/mail-relay/secrets/relay
|
||||
sudo chmod 600 /opt/mail-relay/secrets/relayhost_password
|
||||
```
|
||||
|
||||
### 2. Desplegar desde Portainer
|
||||
### 2. Configurar `.env`
|
||||
|
||||
1. Ve a **Stacks** -> **Add stack**
|
||||
2. Nombre: `mail-relay`
|
||||
3. Configura el repositorio Git
|
||||
4. Compose path: `mail-relay/docker-compose.yml`
|
||||
5. Copia `mail-relay/stack.env` a `mail-relay/.env` y carga `mail-relay/.env`
|
||||
6. Ajusta al menos:
|
||||
Asegurate de tener `mail-relay/.env` configurado. Ajusta al menos:
|
||||
- `MAIL_RELAY_HOSTNAME`
|
||||
- `MAIL_RELAY_ALLOWED_SENDER_DOMAINS`
|
||||
- `MAIL_RELAY_MASQUERADED_DOMAINS`
|
||||
- `MAIL_RELAY_SMARTHOST`
|
||||
- `MAIL_RELAY_SMARTHOST_USERNAME`
|
||||
7. Deploy del stack
|
||||
|
||||
### 3. Desplegar con Docker Compose
|
||||
|
||||
```bash
|
||||
cd mail-relay
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
## ⚙️ Variables importantes
|
||||
|
||||
@@ -134,4 +135,4 @@ docker logs -f mail-relay
|
||||
Errores tipicos:
|
||||
- `Relay access denied`: revisa `MAIL_RELAY_ALLOWED_SENDER_DOMAINS`
|
||||
- Auth fallida con proveedor: revisa usuario/password SMTP
|
||||
- Rechazo por DNS: valida SPF/DKIM/DMARC
|
||||
- Rechazo por DNS: valida SPF/DKIM/DMARC
|
||||
|
||||
+10
-13
@@ -42,17 +42,14 @@ Este stack despliega un servidor multimedia completo con:
|
||||
2. **Registros DNS**: Configura los registros A para tus dominios de servicios
|
||||
3. **Almacenamiento**: Prepara los directorios para medios y configuraciones
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `media-server`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `media-server/docker-compose.yml`
|
||||
5. Copia `media-server/stack.env` a `media-server/.env` y carga `media-server/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `media-server/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd media-server
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno Importantes
|
||||
|
||||
@@ -445,10 +442,10 @@ echo "Backup completado: $BACKUP_DIR"
|
||||
SONARR_IMAGE=lscr.io/linuxserver/sonarr:latest
|
||||
RADARR_IMAGE=lscr.io/linuxserver/radarr:latest
|
||||
```
|
||||
3. Actualiza el stack en Portainer o con Docker Compose:
|
||||
3. Redespiega con Docker Compose:
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
docker compose --env-file .env pull
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
4. Verifica los logs de cada servicio
|
||||
5. Comprueba que todo funciona correctamente
|
||||
|
||||
+1
-2
@@ -16,8 +16,7 @@ cd cloudflared
|
||||
|
||||
```bash
|
||||
mkdir -p /opt/openwebui/data
|
||||
cp openwebui/stack.env openwebui/.env
|
||||
# Editar .env: cambiar WEBUI_SECRET_KEY por un valor aleatorio
|
||||
# Editar openwebui/.env: cambiar WEBUI_SECRET_KEY por un valor aleatorio
|
||||
openssl rand -hex 32
|
||||
docker compose --env-file openwebui/.env -f openwebui/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
+8
-11
@@ -18,17 +18,14 @@ Este stack despliega Trilium con:
|
||||
1. **Red Docker**: Asegúrate de que la red `proxy` existe
|
||||
2. **Registro DNS**: Configura los registros A para tus dominios Trilium
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `trilium`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `trilium/docker-compose.yml`
|
||||
5. Copia `trilium/stack.env` a `trilium/.env` y carga `trilium/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `trilium/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd trilium
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno
|
||||
|
||||
@@ -355,7 +352,7 @@ Trilium hace backups automáticos:
|
||||
```env
|
||||
TRILIUM_IMAGE=zadam/trilium:0.63.7
|
||||
```
|
||||
3. Actualiza el stack en Portainer
|
||||
3. Redespiega con Docker Compose
|
||||
4. Verifica los logs: `docker logs trilium`
|
||||
5. Accede y verifica que todo funciona
|
||||
|
||||
|
||||
+8
-11
@@ -34,17 +34,14 @@ sudo dnf install wireguard-tools # Fedora/RHEL
|
||||
sudo apt install wireguard # Debian/Ubuntu
|
||||
```
|
||||
|
||||
### Desde Portainer
|
||||
### Desde Docker Compose
|
||||
|
||||
1. Ve a **Stacks** → **Add stack**
|
||||
2. Nombre: `wireguard`
|
||||
3. Selecciona **Repository** o **Git repository**
|
||||
4. Configura:
|
||||
- Repository URL: `<tu-repositorio>`
|
||||
- Repository reference: `main`
|
||||
- Compose path: `wireguard/docker-compose.yml`
|
||||
5. Copia `wireguard/stack.env` a `wireguard/.env` y carga `wireguard/.env` como archivo de variables de entorno
|
||||
6. Haz clic en **Deploy the stack**
|
||||
Asegurate de tener `wireguard/.env` configurado y despliega:
|
||||
|
||||
```bash
|
||||
cd wireguard
|
||||
docker compose --env-file .env up -d
|
||||
```
|
||||
|
||||
### Variables de Entorno
|
||||
|
||||
@@ -378,7 +375,7 @@ docker restart wg-easy
|
||||
```env
|
||||
WG_EASY_IMAGE=ghcr.io/wg-easy/wg-easy:latest
|
||||
```
|
||||
3. Actualiza el stack en Portainer
|
||||
3. Redespiega con Docker Compose
|
||||
4. Verifica que los clientes siguen conectando
|
||||
|
||||
## 📊 Monitoreo
|
||||
|
||||
Reference in New Issue
Block a user