feat: add listmonk mailing list service
This commit is contained in:
@@ -45,6 +45,8 @@
|
|||||||
dns_records:
|
dns_records:
|
||||||
- name: "forms"
|
- name: "forms"
|
||||||
ip: "152.53.36.98"
|
ip: "152.53.36.98"
|
||||||
|
- name: "listmonk"
|
||||||
|
ip: "152.53.36.98"
|
||||||
- name: "repair"
|
- name: "repair"
|
||||||
ip: "152.53.36.98"
|
ip: "152.53.36.98"
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ subdomains:
|
|||||||
bytestash: "snippets.{{ primary_domain }}" # ByteStash code snippets
|
bytestash: "snippets.{{ primary_domain }}" # ByteStash code snippets
|
||||||
gotify: "gotify.{{ primary_domain }}" # Gotify notifications
|
gotify: "gotify.{{ primary_domain }}" # Gotify notifications
|
||||||
gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant
|
gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant
|
||||||
|
listmonk: "listmonk.{{ secondary_domain }}" # Listmonk mailing list
|
||||||
|
|
||||||
# Email domains for notifications
|
# Email domains for notifications
|
||||||
email_domains:
|
email_domains:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ service_categories:
|
|||||||
development: ["gitea", "bytestash"]
|
development: ["gitea", "bytestash"]
|
||||||
media: ["audiobookshelf", "calibre", "hoarder", "manyfold"]
|
media: ["audiobookshelf", "calibre", "hoarder", "manyfold"]
|
||||||
productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync"]
|
productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync"]
|
||||||
communication: ["gotosocial"]
|
communication: ["gotosocial", "listmonk"]
|
||||||
monitoring: ["glance", "changedetection", "appriseapi", "gotify", "cronmaster"]
|
monitoring: ["glance", "changedetection", "appriseapi", "gotify", "cronmaster"]
|
||||||
|
|
||||||
# Common service configuration
|
# Common service configuration
|
||||||
|
|||||||
@@ -97,3 +97,7 @@ nerder.land {
|
|||||||
forms.nerder.land {
|
forms.nerder.land {
|
||||||
reverse_proxy heyform-heyform-1:8000
|
reverse_proxy heyform-heyform-1:8000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
listmonk.nerder.land {
|
||||||
|
reverse_proxy listmonk:9000
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
- name: make listmonk directories
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
loop:
|
||||||
|
- /opt/stacks/listmonk
|
||||||
|
|
||||||
|
- name: Template out the compose file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: listmonk-compose.yml.j2
|
||||||
|
dest: /opt/stacks/listmonk/compose.yml
|
||||||
|
owner: root
|
||||||
|
mode: 644
|
||||||
|
|
||||||
|
- name: deploy listmonk stack
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: /opt/stacks/listmonk
|
||||||
|
files:
|
||||||
|
- compose.yml
|
||||||
@@ -8,3 +8,7 @@
|
|||||||
- name: Install postiz
|
- name: Install postiz
|
||||||
import_tasks: postiz.yml
|
import_tasks: postiz.yml
|
||||||
tags: postiz
|
tags: postiz
|
||||||
|
|
||||||
|
- name: Install listmonk
|
||||||
|
import_tasks: listmonk.yml
|
||||||
|
tags: listmonk
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
services:
|
||||||
|
listmonk:
|
||||||
|
image: listmonk/listmonk:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
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: listmonk
|
||||||
|
LISTMONK_db__password: {{ vault_listmonk.postgres_password }}
|
||||||
|
LISTMONK_db__database: listmonk
|
||||||
|
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: {{ vault_listmonk.admin_user }}
|
||||||
|
LISTMONK_ADMIN_PASSWORD: {{ vault_listmonk.admin_password }}
|
||||||
|
volumes:
|
||||||
|
- uploads:/listmonk/uploads
|
||||||
|
labels:
|
||||||
|
glance.name: Listmonk
|
||||||
|
glance.url: https://{{ subdomains.listmonk }}/
|
||||||
|
glance.description: Mailing list manager
|
||||||
|
glance.id: listmonk
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:17-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: listmonk
|
||||||
|
POSTGRES_PASSWORD: {{ vault_listmonk.postgres_password }}
|
||||||
|
POSTGRES_DB: listmonk
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U listmonk"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 6
|
||||||
|
volumes:
|
||||||
|
- listmonk-data:/var/lib/postgresql/data
|
||||||
|
labels:
|
||||||
|
glance.parent: listmonk
|
||||||
|
glance.name: DB
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
uploads:
|
||||||
|
listmonk-data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network_name }}
|
||||||
Reference in New Issue
Block a user