Skip to content

JLalib/docker-listmonk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

🚀 Listmonk en Docker

Despliegue sencillo y listo para producción de Listmonk, un gestor de newsletters open-source potente y ligero.


📌 ¿Qué es Listmonk?

Listmonk es una herramienta de email marketing autoalojada que permite:

  • Gestión de suscriptores
  • Campañas de correo
  • Automatización básica
  • API REST

🔗 Docs oficiales: https://listmonk.app/docs/installation/
🔗 Repo: https://github.com/knadh/listmonk


📦 Requisitos

  • Docker
  • Docker Compose
  • (Recomendado) dominio tipo DuckDNS o similar

📁 Estructura del proyecto

listmonk/
├── docker-compose.yml
├── .env
└── uploads/

⚙️ docker-compose.yml

Este es un despliegue completo con PostgreSQL incluido:

# All LISTMONK_* env variables also support the LISTMONK_*_FILE pattern for loading secrets from files with Docker secrets and Podman

x-db-credentials: &db-credentials
  POSTGRES_USER: &db-user listmonk
  POSTGRES_PASSWORD: &db-password listmonk
  POSTGRES_DB: &db-name listmonk

services:
  app:
    image: listmonk/listmonk:latest
    container_name: listmonk_app
    restart: unless-stopped
    ports:
      - "4000:9000"
    networks:
      - listmonk
    hostname: letter.genbyte.duckdns.org
    depends_on:
      - db
    command: [sh, -c, "./listmonk --install --idempotent --yes --config '' && ./listmonk --upgrade --yes --config '' && ./listmonk --config ''"]

    environment:
      LISTMONK_app__address: 0.0.0.0:9000
      LISTMONK_db__user: *db-user
      LISTMONK_db__password: *db-password
      LISTMONK_db__database: *db-name
      LISTMONK_db__host: db
      LISTMONK_db__port: 5432
      LISTMONK_db__ssl_mode: disable
      LISTMONK_db__max_open: 25
      LISTMONK_db__max_idle: 25
      LISTMONK_db__max_lifetime: 300s
      TZ: Etc/UTC
      LISTMONK_ADMIN_USER: ${LISTMONK_ADMIN_USER:-}
      LISTMONK_ADMIN_PASSWORD: ${LISTMONK_ADMIN_PASSWORD:-}
    volumes:
      - ./uploads:/listmonk/uploads:rw

  db:
    image: postgres:17-alpine
    container_name: listmonk_db
    restart: unless-stopped
    ports:
      - "127.0.0.1:5432:5432"
    networks:
      - listmonk
    environment:
      <<: *db-credentials
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U listmonk"]
      interval: 10s
      timeout: 5s
      retries: 6
    volumes:
      - type: volume
        source: listmonk-data
        target: /var/lib/postgresql/data

networks:
  listmonk:

volumes:
  listmonk-data:

🔐 Variables de entorno (.env)

Opcional pero recomendado:

LISTMONK_ADMIN_USER=admin
LISTMONK_ADMIN_PASSWORD=SuperPassword123!

👉 Si no defines esto, se creará el usuario desde la web.


▶️ Arranque

docker compose up -d

Ver logs:

docker compose logs -f

🌐 Acceso


🧠 ¿Qué hace este setup?

  • Instala automáticamente la base de datos (--install)
  • Ejecuta migraciones (--upgrade)
  • Arranca la app sin config file (solo ENV)
  • Persiste datos en volumen Docker
  • Permite subida de archivos (uploads)

📂 Persistencia

Tipo Ubicación
DB volumen listmonk-data
Archivos ./uploads

🔄 Actualización

docker compose pull
docker compose up -d

✔️ Las migraciones se aplican automáticamente.


🔒 Recomendaciones para producción

  • Usar HTTPS (NGINX / Traefik + Let's Encrypt)
  • Cambiar credenciales por defecto
  • No exponer PostgreSQL públicamente
  • Configurar backups del volumen

🛠️ Troubleshooting

No arranca la app:

docker compose logs app

Problemas con DB:

docker compose logs db

📬 Resultado

Tendrás un sistema completo de newsletters funcionando en minutos, listo para escalar 🚀


⭐ Bonus

Si vas a usar esto en serio:

  • Añade reverse proxy
  • Configura SMTP (Mailgun, SES, etc.)
  • Automatiza backups

💡 Setup probado, simple y sin dolores de cabeza.

About

Listmonk | Tu Newsletter autoalojada

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages