Files
paste.es/README.md
Malin 4968cb04c3
Some checks failed
Build and Push Docker Image / Build & push to Gitea registry (push) Has been cancelled
feat: Gitea Actions CI/CD pipeline with container registry builds
- .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>
2026-02-24 10:36:04 +01:00

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

  1. Escribe tu secreto en paste.es
  2. Configura la expiración, límite de vistas y contraseña opcional
  3. Comparte el enlace generado con el destinatario
  4. 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:

  1. Se activa en cada push a main (o manualmente desde la UI de Gitea)
  2. Construye la imagen Docker con caché de capas
  3. La publica en el registro de contenedores de Gitea como devops.cloudhost.es/malin/paste.es:latest y devops.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


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.