首页 公告 项目 RSS

listmonk搭建和使用

March 9, 2023 本文有 824 个字 需要花费 2 分钟阅读

  1. 简介

Listmonk 是一个开源、自托管的时事通讯和邮件列表管理器

  1. 搭建

首先搭建一下postgresql,我习惯在nas上搭建各种数据库,所以postgresql是直接使用docker compose 启动的

version: "3"
services:
  postgresql:
    image: "postgres:14-alpine"
    container_name: "postgresql"
    restart: "always"
    environment:
      - "POSTGRES_PASSWORD=password"
      - "POSTGRES_HOST_AUTH_METHOD=trust"
    shm_size: 256mb
    ports:
      - "5432:5432"
    volumes:
      - "/etc/localtime:/etc/localtime"
      - "./data:/var/lib/postgresql/data"

搭建完成之后创建一个名字叫listmonk的数据库

之后初始化这个数据库

首先创建listmonk的配置文件

vim config.toml

[app]
# Interface and port where the app will run its webserver.
address = "0.0.0.0:9000"
admin_username = "xxx"
admin_password = "xxxxxxx"

# Database.
[db]
host = "host"
port = 5432
user = "listmonk"
password = "pass"
database = "listmonk"
ssl_mode = "disable"
max_open = 25
max_idle = 25
max_lifetime = "300s"

导入表结构

docker run -v /root/config.toml:/listmonk/config.toml listmonk/listmonk:v2.3.0 ./listmonk --install --yes

接着就是在k8s里面创建listmonk这个应用

创建deployment

vim deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: listmonk
  namespace: app
spec:
  selector:
    matchLabels:
      app: listmonk
  template:
    metadata:
      labels:
        app: listmonk
    spec:
      imagePullSecrets:
      - name: regcred
      containers:
      - name: listmonk
        image: listmonk/listmonk:v2.3.0
        ports:
        - containerPort: 9000
        env:
          - name: TZ
            value: "Asia/Shanghai"
        volumeMounts:
          - mountPath: /listmonk/config.toml
            name: listmonk-config
            subPath: config.toml
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
      volumes:
        - name: listmonk-config
          configMap: 
            name: listmonk-config
            items:
              - key: config.toml
                path: config.toml

创建kustomization的配置

vim kustomization.yaml

resources:
- deploy.yaml
- svc.yaml
- ingress.yaml
- certificare.yaml
- configmap.yaml

应用的configmap

vim configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: listmonk-config
  namespace: app
data:
  config.toml: |-
    [app]
    # Interface and port where the app will run its webserver.
    address = "0.0.0.0:9000"
    admin_username = "xxx"
    admin_password = "xxxxxxx"

    # Database.
    [db]
    host = "ip"
    port = 5432
    user = "listmonk"
    password = "pass"
    database = "listmonk"
    ssl_mode = "disable"
    max_open = 25
    max_idle = 25
    max_lifetime = "300s"    

应用的service

vim svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: listmonk
  namespace: app
spec:
  type: ClusterIP
  selector:
    app: listmonk
  ports:
  - port: 80
    targetPort: 9000
    name: http

应用的ingress

vim ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: listmonk-ingress
  namespace: app
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  rules:
  - host: "listmonk.xxx.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: listmonk
            port:
              number: 80
  tls:
  - hosts:
    - listmonk.xxx.com
    secretName: listmonk-xxx-com-tls

argocd相关的东西

vim argocd.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: listmonk
spec:
  destination:
    name: ''
    namespace: ''
    server: 'https://kubernetes.default.svc'
  source:
    path: k8s/listmonk
    repoURL: 'https://git.xxxx.com/xxxx/kubernetes-yaml'
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated: null

使用certmanager直接去申请证书

vim certificare.yaml

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: listmonk.xxx.com
  namespace: app
spec:
  dnsNames:
  - listmonk.xxx.com # 要签发证书的域名
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-dns01 # 引用 ClusterIssuer,指示采用 dns01 方式进行校验
  secretName: listmonk-xxx-com-tls # 最终签发出来的证书会保存在这个 Secret 里面

最后直接在argocd里面把应用创建好就好了

使用

登录之后的第一件事情就是配置邮箱

首先配置默认“发件人”电子邮件,之后配置smtp服务器,如果你和我一样是163邮箱的身份验证协议使用的是plain

最后

我的订阅地址是

https://listmonk.bboysoul.cn/subscription/form

欢迎订阅

虽然目前我也不知道可以给大家发什么样的信息

欢迎关注我的博客www.bboy.app

Have Fun