Files
qwen3-6-lora/data/raw/sanitized/plans/en-luminarrh-docker-compose-yaml-quiero-memoized-star.md
T

2.0 KiB

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:

# 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:

# 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

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"