- .gitea/workflows/docker.yml: builds and pushes image to devops.cloudhost.es/malin/paste.es on every push to main, tags as :latest and :<short-sha>, uses GHA layer cache - docker-compose.yml: updated to pull pre-built image from Gitea container registry instead of building locally - docker-compose.build.yml: new override file for local dev builds (docker compose -f docker-compose.yml -f docker-compose.build.yml up --build) - docker-compose.runner.yml: act_runner service — mount docker socket, auto-registers with RUNNER_REGISTRATION_TOKEN from .env - .env.example: added RUNNER_REGISTRATION_TOKEN section - README.md: document CI/CD setup, runner registration, and updated quick-start to use registry pull workflow Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6.5 KiB
paste.es — Compartición de secretos cifrados
Servicio de compartición de secretos efímeros y cifrados para el público hispanohablante, alojado y patrocinado por cloudhost.es.
Basado en Hemmelig v7 — arquitectura de cifrado de conocimiento cero.
Cómo funciona
- Escribe tu secreto en paste.es
- Configura la expiración, límite de vistas y contraseña opcional
- Comparte el enlace generado con el destinatario
- El secreto se elimina automáticamente tras ser leído o al expirar
Arquitectura de conocimiento cero: Todo el cifrado ocurre en tu navegador. El servidor solo almacena datos cifrados y nunca ve tus secretos ni las claves de descifrado. Los datos son completamente efímeros.
Características
- Cifrado AES-256-GCM del lado del cliente — tus datos se cifran antes de salir del navegador
- Secretos autodestructivos — expiración configurable y límite de vistas
- Sin recopilación de datos — sin analíticas, sin registros de IP, sin rastreo
- Protección por contraseña — capa de seguridad adicional opcional
- Restricción por IP — limita el acceso a rangos de IP específicos
- Subida de archivos — comparte archivos cifrados (usuarios autenticados)
- Editor de texto enriquecido — da formato a tus secretos
- Códigos QR — compartición fácil desde móvil
- Soporte multiidioma — interfaz disponible en 10 idiomas (español por defecto)
- Notificaciones webhook — recibe notificaciones cuando se ven o eliminan secretos
Inicio rápido
Docker Compose — imagen desde el registro (recomendado en producción)
Cada push a main construye y publica automáticamente la imagen en el registro de contenedores de Gitea. En el servidor de producción solo necesitas hacer pull:
git clone https://devops.cloudhost.es/Malin/paste.es.git
cd paste.es
# Autentícate en el registro de Gitea
docker login devops.cloudhost.es
# Copia y edita el fichero de entorno
cp .env.example .env
# Descarga la imagen y arranca
docker compose pull
docker compose up -d
Para actualizar a la última versión:
docker compose pull && docker compose up -d
Docker Compose — compilación local (desarrollo)
git clone https://devops.cloudhost.es/Malin/paste.es.git
cd paste.es
cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
El servicio quedará disponible en http://localhost:3000.
Configuración
Copia .env.example a .env y ajusta los valores:
cp .env.example .env
Variables requeridas
| Variable | Descripción |
|---|---|
DATABASE_URL |
Ruta a la base de datos SQLite |
BETTER_AUTH_SECRET |
Clave secreta para las sesiones (mín. 32 caracteres) |
BETTER_AUTH_URL |
URL pública de tu instancia |
Generar secretos seguros
openssl rand -base64 32
Consulta docs/env.md para la referencia completa de variables de entorno.
Desarrollo local
# Instalar dependencias
npm install
# Iniciar el servidor de desarrollo (API + cliente en terminales separadas)
npm run dev:api # Terminal 1 — API en :3000
npm run dev # Terminal 2 — cliente Vite con HMR
CI/CD — Gitea Actions + registro de contenedores
El repositorio incluye un pipeline en .gitea/workflows/docker.yml que:
- Se activa en cada push a
main(o manualmente desde la UI de Gitea) - Construye la imagen Docker con caché de capas
- La publica en el registro de contenedores de Gitea como
devops.cloudhost.es/malin/paste.es:latestydevops.cloudhost.es/malin/paste.es:<sha>
Requisitos previos
1. Habilitar Gitea Actions en el repositorio:
Settings → Actions → Enable repository actions
2. Arrancar un act_runner (ejecutor del pipeline). Obtén el token en:
Settings → Actions → Runners → Create Runner Token
Añádelo a .env y arranca el runner:
# En .env:
RUNNER_REGISTRATION_TOKEN=<token>
docker compose -f docker-compose.runner.yml up -d
El runner se registra automáticamente y queda disponible para ejecutar workflows.
3. El siguiente push a main disparará la build automáticamente. Puedes seguirla en:
Gitea → Actions → Workflows
Despliegue en producción
Detrás de un proxy inverso (Nginx / Caddy)
El servicio escucha en el puerto 3000. Configura tu proxy para que apunte a él:
Nginx:
server {
listen 443 ssl;
server_name paste.es;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Caddy:
paste.es {
reverse_proxy localhost:3000
}
Primer uso — crear cuenta de administrador
Tras el primer arranque, visita https://paste.es/setup para crear la cuenta de administrador y configurar la instancia.
Documentación
- Variables de entorno — referencia completa de configuración
- Docker — guía de despliegue con Docker
- Helm / Kubernetes — despliegue con Helm
- Cifrado — cómo funciona el cifrado del lado del cliente
- Login social — configuración de OAuth (GitHub, Google, etc.)
- Peticiones de secretos — solicita secretos a otros de forma segura
- Webhooks — notificaciones de eventos
- Health checks — sondas de disponibilidad para orquestación
- Métricas Prometheus — monitorización con Prometheus
- API REST — referencia de la API y especificación OpenAPI
- CLI — interfaz de línea de comandos para automatización
- Tests E2E — pruebas end-to-end con Playwright
Alojamiento y patrocinio
paste.es está alojado y patrocinado por CloudHost.es, empresa española de alojamiento web comprometida con la privacidad y la seguridad de los datos.
Créditos
paste.es está basado en Hemmelig por Bjarne Øverli, publicado bajo la O'Saasy License Agreement. Consulta LICENSE para más detalles.