docs: document direct compose workflow

This commit is contained in:
Eduardo David Paredes Vara
2026-07-25 11:20:27 +00:00
parent d64191865b
commit 3b7f2a2fa1
20 changed files with 247 additions and 482 deletions
+2
View File
@@ -4,6 +4,8 @@
# Configuraciones live con datos reales de producción # Configuraciones live con datos reales de producción
*.live.yaml *.live.yaml
opencode/opencode.json
cheerfy_pentest_report.md
# Backups y temporales # Backups y temporales
*.bak *.bak
+11
View File
@@ -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
View File
@@ -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) 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`) 2. **Domain**: set FQDN (e.g. `myapp.sherlockhomeless.net`)
3. **Base Directory**: set to the subdirectory (e.g. `/gitea`, `/n8n`) 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
View File
@@ -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 ```env
##### Traefik / dominios ##### ##### Traefik / dominios #####
@@ -169,7 +169,7 @@ Nueva app
│ ├── Caso B (privada) → crowdsec-bouncer@file + ths-authentik@docker │ ├── Caso B (privada) → crowdsec-bouncer@file + ths-authentik@docker
│ └── Caso C (auth propia)→ crowdsec-bouncer@file │ └── 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) ├── 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` | | 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 | | 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>` | | 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
View File
@@ -121,12 +121,10 @@ Posibles causas:
Portainer_repo/ Portainer_repo/
├── opengist/ ├── opengist/
│ ├── docker-compose.yml │ ├── docker-compose.yml
│ ├── .env │ └── .env
│ └── stack.env
├── onetimesecret/ ├── onetimesecret/
│ ├── docker-compose.yml │ ├── docker-compose.yml
│ ├── .env │ └── .env
│ └── stack.env
├── authentik/ ├── authentik/
│ ├── docker-compose.yml │ ├── docker-compose.yml
│ ├── create-auth-app.sh │ ├── create-auth-app.sh
+108 -302
View File
@@ -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) - [Arquitectura](#arquitectura)
- [Prerequisitos](#prerequisitos) - [Prerequisitos](#prerequisitos)
- [Instalación y Despliegue](#instalación-y-despliegue) - [Despliegue](#despliegue)
- [Stacks Disponibles](#stacks-disponibles) - [Servicios](#servicios)
- [Configuración](#configuración) - [Configuracion](#configuracion)
- [Uso](#uso) - [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: La infraestructura base se levanta en este orden:
- **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.)
## 🏗️ 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 Configura DNS antes de desplegar servicios expuestos. Los certificados de Let's Encrypt dependen de que los dominios resuelvan correctamente.
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
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 Crear la red compartida:
- 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`:
```bash ```bash
docker network create proxy 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 ```bash
# Crear directorio para secretos cd Traefik
sudo mkdir -p /opt/portainer/secrets docker compose --env-file .env up -d
# 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
``` ```
### Paso 4: Desplegar Portainer (PRIMERO) Para actualizar un servicio:
Despliega Portainer con acceso directo por puerto 9443:
```bash ```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: Para reiniciarlo:
```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:
```bash ```bash
nano .env cd <servicio>
docker compose --env-file .env restart
``` ```
Variables principales a configurar: Para detenerlo:
- `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
```bash ```bash
# Ejemplo: Desplegar Authentik cd <servicio>
cd authentik docker compose --env-file .env down
docker compose up -d
cd ..
# Ejemplo: Desplegar Gitea
cd gitea
docker compose up -d
cd ..
``` ```
## 📦 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 | ## Servicios
|-------|-------------|---------|---------------|
| **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) |
> **📖 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 ```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_DOCKER_NETWORK=proxy
TRAEFIK_ENTRYPOINT_SECURE=websecure TRAEFIK_ENTRYPOINT_SECURE=websecure
TRAEFIK_CERTRESOLVER=letsencrypt 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 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 contenedores:
### Ver Logs de Portainer
```bash
docker logs -f portainer
```
### Ver Estado de Todos los Contenedores
```bash ```bash
docker ps -a docker ps -a
``` ```
### Actualizar Portainer Ver logs de un servicio:
```bash ```bash
docker compose pull cd <servicio>
docker compose up -d docker compose --env-file .env logs -f
``` ```
### Reiniciar un Stack Validar un compose:
Desde Portainer UI o:
```bash
cd <stack-folder>
docker compose restart
```
### Eliminar un Stack
```bash ```bash
cd <stack-folder> cd <servicio>
docker compose down docker compose --env-file .env config
# Para eliminar también volúmenes:
docker compose down -v
``` ```
## 🔒 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`) 1. Verifica DNS: `dig <dominio>`
- **Dominio**: Accesible solo mediante el dominio configurado con SSL 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) 1. Verifica que existe el Proxy Provider.
- **Dominio separado**: Usa un dominio diferente sin SSO para apps móviles 2. Verifica que existe la Application.
- **SSL**: Todo el tráfico está cifrado 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: 1. Ejecuta desde la carpeta del servicio o usa `--env-file <servicio>/.env`.
- `/run/secrets/portainer` 2. Valida con `docker compose --env-file .env config`.
- `/run/portainer/portainer` 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` ## Stacks deprecados
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`
### 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` 1. Confirmar que no queden contenedores corriendo (`docker ps -a --filter name=<stack>`).
2. Verifica que los registros DNS están propagados 2. Quitar/inhabilitar su ruta en `/opt/traefik/dynamic/` si tenía una.
3. Verifica que Traefik esté corriendo: `docker ps | grep traefik` 3. Quitar su entrada de Homepage (labels en el compose o `services.yaml`).
4. Verifica la configuración de Traefik: `docker logs traefik` 4. `git mv <stack> DEPRECATED-<stack>` (preserva historial).
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.
+11 -16
View File
@@ -28,17 +28,14 @@ Este stack despliega Traefik configurado para:
sudo mkdir -p /opt/traefik/letsencrypt sudo mkdir -p /opt/traefik/letsencrypt
``` ```
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `Traefik/.env` configurado y despliega:
2. Nombre: `traefik`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd Traefik
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno ### Variables de Entorno
@@ -296,17 +293,15 @@ sudo tar -xzf traefik-backup-YYYYMMDD.tar.gz -C /
Para actualizar Traefik: Para actualizar Traefik:
1. En Portainer, ve al stack de Traefik 1. Edita el archivo `.env` y cambia la versión:
2. Edita el archivo `.env` y cambia la versión:
```env ```env
TRAEFIK_IMAGE=traefik:v3.3 TRAEFIK_IMAGE=traefik:v3.3
``` ```
3. Haz clic en **Update the stack** 2. Redespiega:
4. O desde línea de comandos:
```bash ```bash
cd Traefik cd Traefik
docker compose pull docker compose --env-file .env pull
docker compose up -d docker compose --env-file .env up -d
``` ```
> **⚠️ Nota**: Revisa el [changelog de Traefik](https://github.com/traefik/traefik/releases) antes de actualizar versiones mayores. > **⚠️ Nota**: Revisa el [changelog de Traefik](https://github.com/traefik/traefik/releases) antes de actualizar versiones mayores.
+8 -11
View File
@@ -47,17 +47,14 @@ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-subj "/CN=adguard.tudominio.com" -subj "/CN=adguard.tudominio.com"
``` ```
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `adguard/.env` configurado y despliega:
2. Nombre: `adguard`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd adguard
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno ### Variables de Entorno
@@ -352,7 +349,7 @@ sudo tar -xzf adguard-backup-YYYYMMDD.tar.gz -C /
```env ```env
ADGUARD_IMAGE=adguard/adguardhome:latest ADGUARD_IMAGE=adguard/adguardhome:latest
``` ```
3. Actualiza el stack en Portainer 3. Redespiega con Docker Compose
4. Verifica los logs y el panel web 4. Verifica los logs y el panel web
## 📊 Estadísticas ## 📊 Estadísticas
+23 -25
View File
@@ -8,18 +8,14 @@ Este stack despliega Authentik configurado para funcionar con Traefik mediante *
## 🚀 Despliegue ## 🚀 Despliegue
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `authentik/.env` configurado y despliega:
2. Nombre: `authentik`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd authentik
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno Importantes ### 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) ### 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** 1. Ve a **Applications** → **Create**
2. Completa el formulario: 2. Completa el formulario:
- **Name**: `Portainer` (nombre descriptivo) - **Name**: `Mi App` (nombre descriptivo)
- **Slug**: `portainer` (identificador único en minúsculas) - **Slug**: `miapp` (identificador único en minúsculas)
- **Provider**: (lo crearás en el siguiente paso - déjalo vacío por ahora) - **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) - **Policy engine mode**: `any` (permite acceso si alguna política coincide)
- **UI settings**: Configura el icono y apariencia (opcional) - **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** 1. Ve a **Applications** → Tu aplicación → **Provider** → **Create**
2. Selecciona tipo: **Proxy Provider** 2. Selecciona tipo: **Proxy Provider**
3. Completa el formulario: 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) - **Authorization flow**: Selecciona `default-provider-authorization-implicit-consent` (créalo si no existe - ver paso 4)
- **Type**: **Forward auth (single application)** - **Type**: **Forward auth (single application)**
- **External host**: `https://portainer.tudominio.com` (URL completa de tu servicio) - **External host**: `https://miapp.tudominio.com` (URL completa de tu servicio)
- **Internal host**: `http://portainer:9000` (opcional - URL interna si Authentik debe hacer reverse proxy) - **Internal host**: `http://miapp:8080` (opcional - URL interna si Authentik debe hacer reverse proxy)
- **Internal host SSL validation**: Desactivado (si usas HTTP interno) - **Internal host SSL validation**: Desactivado (si usas HTTP interno)
4. **Advanced settings**: 4. **Advanced settings**:
- **Token validity**: `hours=24` (duración de la sesión) - **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) - **Name**: `authentik-embedded-outpost` (o el nombre que prefieras)
- **Type**: **Proxy** - **Type**: **Proxy**
- **Integration**: Déjalo vacío (el outpost embedded usa la integración por defecto) - **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**: 4. **Configuration**:
```yaml ```yaml
authentik_host: https://auth.tudominio.com 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 ```yaml
labels: labels:
traefik.http.routers.portainer.middlewares: "ths-authentik@docker" traefik.http.routers.miapp.middlewares: "ths-authentik@docker"
``` ```
O si definiste el middleware en archivo: O si definiste el middleware en archivo:
```yaml ```yaml
labels: labels:
traefik.http.routers.portainer.middlewares: "authentik@file" traefik.http.routers.miapp.middlewares: "authentik@file"
``` ```
### 7.1 Patrón recomendado para nuevas apps ### 7.1 Patrón recomendado para nuevas apps
@@ -583,8 +579,10 @@ docker exec authentik-redis redis-cli --rdb /data/dump.rdb
## 🔄 Actualizaciones ## 🔄 Actualizaciones
1. En Portainer, ve a tu stack de Authentik 1. Edita `.env` y actualiza las versiones de las imagenes si es necesario.
2. Haz clic en **Editor** 2. Ejecuta:
3. Actualiza las versiones de las imágenes si es necesario ```bash
4. Haz clic en **Update the stack** cd authentik
5. O ejecuta: `docker compose pull && docker compose up -d` docker compose --env-file .env pull
docker compose --env-file .env up -d
```
+7 -10
View File
@@ -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. 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** Asegurate de tener `beszel/.env` configurado y despliega:
2. Nombre: `beszel`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd beszel
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
## ⚙️ Variables importantes ## ⚙️ Variables importantes
+2 -4
View File
@@ -42,7 +42,6 @@ Permisos mínimos necesarios:
### 3. Configurar el `.env` ### 3. Configurar el `.env`
```bash ```bash
cp stack.env .env
nano .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) # 2. Migrar los DNS al tunnel (convierte A records → CNAME proxied)
./add-domain.sh --tunnel auth traefik gitea n8n nextcloud paperless paperless-ai \ ./add-domain.sh --tunnel auth traefik gitea n8n nextcloud paperless paperless-ai \
notas memos vikunja karakeep kasm remote beszel dozzle crowdsec grafana llm \ 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 uptimekuma webtop wg
# 3. Verificar conexión # 3. Verificar conexión
@@ -127,7 +126,7 @@ docker stop cloudflared
# 2. Revertir DNS a registros A directos # 2. Revertir DNS a registros A directos
./add-domain.sh auth traefik gitea n8n nextcloud paperless paperless-ai \ ./add-domain.sh auth traefik gitea n8n nextcloud paperless paperless-ai \
notas memos vikunja karakeep kasm remote beszel dozzle crowdsec grafana llm \ 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 uptimekuma webtop wg
``` ```
@@ -163,7 +162,6 @@ docker stop cloudflared
| `coolify` | Coolify | | `coolify` | Coolify |
| `kopia` | Kopia | | `kopia` | Kopia |
| `notes` | Notes | | `notes` | Notes |
| `opencode` | OpenCode (alt) |
| `portainer` | Portainer | | `portainer` | Portainer |
| `uptimekuma` | Uptime Kuma | | `uptimekuma` | Uptime Kuma |
| `webtop` | Webtop | | `webtop` | Webtop |
+8 -27
View File
@@ -30,10 +30,9 @@ Este stack despliega:
### Paso 1: Configurar variables de entorno ### Paso 1: Configurar variables de entorno
Copia la plantilla y edita las variables: Edita el `.env` local con las variables reales:
```bash ```bash
cp crowdsec/stack.env crowdsec/.env
nano 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. **Importante**: Traefik necesita reiniciarse para cargar el plugin de CrowdSec y los nuevos volúmenes.
Desde Portainer: Actualiza el archivo `.env` de Traefik para incluir `TRAEFIK_LOG_DIR=/opt/traefik/logs` y redespliega:
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**
O desde CLI:
```bash ```bash
cd Traefik cd Traefik
docker compose up -d docker compose --env-file .env up -d
``` ```
### Paso 4: Desplegar CrowdSec ### 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 ```bash
cd crowdsec cd crowdsec
docker compose up -d docker compose --env-file .env up -d
``` ```
### Paso 5: Verificar el despliegue ### Paso 5: Verificar el despliegue
@@ -456,18 +439,16 @@ Incluye en tus backups de Kopia (ya configurados en `backups/kopia/`):
Para actualizar CrowdSec: Para actualizar CrowdSec:
1. En Portainer, ve al stack `crowdsec` 1. Edita `.env` y actualiza la versión si es necesario:
2. Edita `.env` y actualiza la versión si es necesario:
```env ```env
CROWDSEC_IMAGE=crowdsecurity/crowdsec:latest CROWDSEC_IMAGE=crowdsecurity/crowdsec:latest
GRAFANA_IMAGE=grafana/grafana:latest GRAFANA_IMAGE=grafana/grafana:latest
``` ```
3. Haz clic en **Update the stack** 2. Redespiega:
4. O desde CLI:
```bash ```bash
cd crowdsec cd crowdsec
docker compose pull docker compose --env-file .env pull
docker compose up -d docker compose --env-file .env up -d
``` ```
> ⚠️ Antes de actualizar versiones mayores de CrowdSec, revisa el [changelog](https://github.com/crowdsecurity/crowdsec/releases). > ⚠️ Antes de actualizar versiones mayores de CrowdSec, revisa el [changelog](https://github.com/crowdsecurity/crowdsec/releases).
+7 -10
View File
@@ -2,17 +2,14 @@
Stack para desplegar [Dozzle](https://dozzle.dev/) como visor ligero de logs Docker en `dozzle.sherlockhomeless.net`. 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** Asegurate de tener `dozzle/.env` configurado y despliega:
2. Nombre: `dozzle`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd dozzle
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
## ⚙️ Variables importantes ## ⚙️ Variables importantes
+9 -12
View File
@@ -19,17 +19,14 @@ Este stack despliega Gitea con:
2. **Registro DNS**: Configura el registro A para tu dominio Gitea 2. **Registro DNS**: Configura el registro A para tu dominio Gitea
3. **Puerto SSH**: El puerto SSH debe estar disponible (por defecto 222) 3. **Puerto SSH**: El puerto SSH debe estar disponible (por defecto 222)
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `gitea/.env` configurado y despliega:
2. Nombre: `gitea`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd gitea
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno Importantes ### Variables de Entorno Importantes
@@ -85,7 +82,7 @@ Para habilitar CI/CD con Gitea Actions:
```env ```env
GITEA_RUNNER_REGISTRATION_TOKEN=tu-token-copiado GITEA_RUNNER_REGISTRATION_TOKEN=tu-token-copiado
``` ```
3. Actualiza el stack en Portainer 3. Redespiega con Docker Compose
#### Paso 3: Verificar el Runner #### Paso 3: Verificar el Runner
@@ -342,7 +339,7 @@ Esto crea un archivo `gitea-dump-*.zip` con todo lo necesario para restaurar.
```env ```env
GITEA_IMAGE=gitea/gitea:1.21.0 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` 4. Verifica los logs: `docker logs gitea`
5. Prueba que todo funciona correctamente 5. Prueba que todo funciona correctamente
+7 -10
View File
@@ -2,17 +2,14 @@
Stack para desplegar [Homepage](https://gethomepage.dev/) detrás de Traefik como dashboard principal en `www.sherlockhomeless.net`. 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** Asegurate de tener `homepage/.env` configurado y despliega:
2. Nombre: `homepage`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd homepage
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
## ⚙️ Variables importantes ## ⚙️ Variables importantes
+10 -9
View File
@@ -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 sudo chmod 600 /opt/mail-relay/secrets/relayhost_password
``` ```
### 2. Desplegar desde Portainer ### 2. Configurar `.env`
1. Ve a **Stacks** -> **Add stack** Asegurate de tener `mail-relay/.env` configurado. Ajusta al menos:
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:
- `MAIL_RELAY_HOSTNAME` - `MAIL_RELAY_HOSTNAME`
- `MAIL_RELAY_ALLOWED_SENDER_DOMAINS` - `MAIL_RELAY_ALLOWED_SENDER_DOMAINS`
- `MAIL_RELAY_MASQUERADED_DOMAINS` - `MAIL_RELAY_MASQUERADED_DOMAINS`
- `MAIL_RELAY_SMARTHOST` - `MAIL_RELAY_SMARTHOST`
- `MAIL_RELAY_SMARTHOST_USERNAME` - `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 ## ⚙️ Variables importantes
@@ -134,4 +135,4 @@ docker logs -f mail-relay
Errores tipicos: Errores tipicos:
- `Relay access denied`: revisa `MAIL_RELAY_ALLOWED_SENDER_DOMAINS` - `Relay access denied`: revisa `MAIL_RELAY_ALLOWED_SENDER_DOMAINS`
- Auth fallida con proveedor: revisa usuario/password SMTP - Auth fallida con proveedor: revisa usuario/password SMTP
- Rechazo por DNS: valida SPF/DKIM/DMARC - Rechazo por DNS: valida SPF/DKIM/DMARC
+10 -13
View File
@@ -42,17 +42,14 @@ Este stack despliega un servidor multimedia completo con:
2. **Registros DNS**: Configura los registros A para tus dominios de servicios 2. **Registros DNS**: Configura los registros A para tus dominios de servicios
3. **Almacenamiento**: Prepara los directorios para medios y configuraciones 3. **Almacenamiento**: Prepara los directorios para medios y configuraciones
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `media-server/.env` configurado y despliega:
2. Nombre: `media-server`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd media-server
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno Importantes ### Variables de Entorno Importantes
@@ -445,10 +442,10 @@ echo "Backup completado: $BACKUP_DIR"
SONARR_IMAGE=lscr.io/linuxserver/sonarr:latest SONARR_IMAGE=lscr.io/linuxserver/sonarr:latest
RADARR_IMAGE=lscr.io/linuxserver/radarr:latest RADARR_IMAGE=lscr.io/linuxserver/radarr:latest
``` ```
3. Actualiza el stack en Portainer o con Docker Compose: 3. Redespiega con Docker Compose:
```bash ```bash
docker compose pull docker compose --env-file .env pull
docker compose up -d docker compose --env-file .env up -d
``` ```
4. Verifica los logs de cada servicio 4. Verifica los logs de cada servicio
5. Comprueba que todo funciona correctamente 5. Comprueba que todo funciona correctamente
+1 -2
View File
@@ -16,8 +16,7 @@ cd cloudflared
```bash ```bash
mkdir -p /opt/openwebui/data mkdir -p /opt/openwebui/data
cp openwebui/stack.env openwebui/.env # Editar openwebui/.env: cambiar WEBUI_SECRET_KEY por un valor aleatorio
# Editar .env: cambiar WEBUI_SECRET_KEY por un valor aleatorio
openssl rand -hex 32 openssl rand -hex 32
docker compose --env-file openwebui/.env -f openwebui/docker-compose.yml up -d docker compose --env-file openwebui/.env -f openwebui/docker-compose.yml up -d
``` ```
+8 -11
View File
@@ -18,17 +18,14 @@ Este stack despliega Trilium con:
1. **Red Docker**: Asegúrate de que la red `proxy` existe 1. **Red Docker**: Asegúrate de que la red `proxy` existe
2. **Registro DNS**: Configura los registros A para tus dominios Trilium 2. **Registro DNS**: Configura los registros A para tus dominios Trilium
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `trilium/.env` configurado y despliega:
2. Nombre: `trilium`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd trilium
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno ### Variables de Entorno
@@ -355,7 +352,7 @@ Trilium hace backups automáticos:
```env ```env
TRILIUM_IMAGE=zadam/trilium:0.63.7 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` 4. Verifica los logs: `docker logs trilium`
5. Accede y verifica que todo funciona 5. Accede y verifica que todo funciona
+8 -11
View File
@@ -34,17 +34,14 @@ sudo dnf install wireguard-tools # Fedora/RHEL
sudo apt install wireguard # Debian/Ubuntu sudo apt install wireguard # Debian/Ubuntu
``` ```
### Desde Portainer ### Desde Docker Compose
1. Ve a **Stacks** → **Add stack** Asegurate de tener `wireguard/.env` configurado y despliega:
2. Nombre: `wireguard`
3. Selecciona **Repository** o **Git repository** ```bash
4. Configura: cd wireguard
- Repository URL: `<tu-repositorio>` docker compose --env-file .env up -d
- 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**
### Variables de Entorno ### Variables de Entorno
@@ -378,7 +375,7 @@ docker restart wg-easy
```env ```env
WG_EASY_IMAGE=ghcr.io/wg-easy/wg-easy:latest 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 4. Verifica que los clientes siguen conectando
## 📊 Monitoreo ## 📊 Monitoreo