# Plan: Habilitar SSL en PostgreSQL para conexiones externas

## Context

Se quiere que PostgreSQL acepte tanto conexiones no encriptadas (para la app interna) como conexiones encriptadas SSL (para administración remota). PostgreSQL lo soporta nativamente: se habilita SSL en el servidor y cada cliente decide si lo usa o no.

## Cambios

### 1. Generar certificado SSL auto-firmado

Crear un script de setup que genere el certificado al iniciar el contenedor por primera vez:

```bash
# luminarrh/generate-ssl.sh
openssl req -new -x509 -days 3650 \
  -nodes \
  -text \
  -out server.crt \
  -keyout server.key \
  -subj "/CN=postgres"
chmod 600 server.key
cat server.crt server.key > server-ssl.pem
rm server.crt server.key
```

### 2. Actualizar `postgresql.conf`

Agregar al final:

```conf
# SSL
ssl = on
ssl_cert_file = '/var/lib/postgresql/18/docker/server-ssl.pem'
ssl_key_file = '/var/lib/postgresql/18/docker/server-ssl.pem'
```

### 3. Actualizar `docker-compose.yaml`

```yaml
volumes:
  - /volume1/docker/postgres/postgres-sarh/data:/var/lib/postgresql
  - /volume1/docker/projects/synology-apps-containers/luminarrh/databases/postgresql.conf:/etc/postgresql/postgresql.conf
  - ./luminarrh_demo.sql:/docker-entrypoint/initdb.d/luminarrh_demo.sql
  - ./generate-ssl.sh:/docker-entrypoint/initdb.d/generate-ssl.sh  # nueva línea
```

### 4. Crear `luminarrh/generate-ssl.sh`

Script ejecutable que se corre en el primer inicio del contenedor para generar el certificado SSL.

## Cómo funciona

- **App interna**: Se conecta sin SSL (sin cambiar nada en la app, funciona como antes)
- **Admin externo**: Se conecta con SSL usando `sslmode=require` o `sslmode=verify-full`

## Verificación

1. `docker compose -f luminarrh/docker-compose.yaml up -d`
2. Verificar SSL activo: `docker exec -i postgres-sarh psql -U sarh2 -d sarh_db -c "SHOW ssl;"`
3. Conectar con SSL: `psql "host=IP port=5434 dbname=sarh_db user=sarh2 sslmode=require"`
4. Conectar sin SSL (desde app interna): `psql "host=IP port=5434 dbname=sarh_db user=sarh2"`
