docs: document direct compose workflow
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user