General upgrade

This commit is contained in:
nemunaire 2026-05-10 10:56:01 +08:00
commit 7a97e5ea4a
4 changed files with 391 additions and 266 deletions

View file

@ -46,12 +46,6 @@ write_files:
flush_interval -1
}
}
deliver.happydomain.org {
reverse_proxy app-happydeliver:8080 {
flush_interval -1
}
}
path: /etc/caddy/Caddyfile
- content: |
@version:3.30
@ -151,24 +145,7 @@ write_files:
@include "/etc/syslog-ng/conf.d/*.conf"
path: /etc/syslog-ng/syslog-ng.conf
- content: |
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
# You can also override PATH, but by default, newer versions inherit it from the environment
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
@ -249,6 +226,23 @@ write_files:
permissions: 0o755
- content: |
#!/bin/sh
docker inspect caddy > /dev/null && {
docker pull caddy:latest
docker stop caddy
docker rm caddy
}
docker run -d --restart unless-stopped --network local \
-v /etc/caddy:/etc/caddy \
-v /var/lib/caddy:/data/caddy \
-p 80:80 -p 443:443 \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=caddy \
--name caddy \
caddy:latest
path: /root/launch_caddy.sh
permissions: 0o755
- content: |
#!/bin/sh
export HAPPYDOMAIN_BIND="0.0.0.0:8081"
export HAPPYDOMAIN_CUSTOM_HEAD_HTML="<script async defer data-website-id=\"$(cloud-init query ds.metadata.UMAMI_ID)\" src=\"https://pythagore.p0m.fr/pythagore.js\"></script>"
@ -274,31 +268,31 @@ write_files:
docker rm app-happydomain
}
docker run -d --restart unless-stopped --network local -v /var/lib/happydomain:/data -e HAPPYDOMAIN_BIND -e HAPPYDOMAIN_CUSTOM_HEAD_HTML -e HAPPYDOMAIN_DEFAULT_NS -e HAPPYDOMAIN_EXTERNALURL -e HAPPYDOMAIN_JWT_SECRET_KEY -e HAPPYDOMAIN_NEWSLETTER_SERVER_URL -e HAPPYDOMAIN_NEWSLETTER_ID -e HAPPYDOMAIN_MAIL_FROM -e HAPPYDOMAIN_MAIL_SMTP_HOST -e HAPPYDOMAIN_MAIL_SMTP_PORT -e HAPPYDOMAIN_MAIL_SMTP_USERNAME -e HAPPYDOMAIN_MAIL_SMTP_PASSWORD -e HAPPYDOMAIN_OVH_APPLICATION_KEY -e HAPPYDOMAIN_OVH_APPLICATION_SECRET -e HAPPYDOMAIN_STORAGE_ENGINE -p "8081:8081" --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=app-happydomain --name app-happydomain --pull always happydomain/happydomain:${HAPPYDOMAIN_VERSION}
docker run -d --restart unless-stopped --network local \
-v /var/lib/happydomain:/data \
-e HAPPYDOMAIN_BIND \
-e HAPPYDOMAIN_CUSTOM_HEAD_HTML \
-e HAPPYDOMAIN_DEFAULT_NS \
-e HAPPYDOMAIN_EXTERNALURL \
-e HAPPYDOMAIN_JWT_SECRET_KEY \
-e HAPPYDOMAIN_NEWSLETTER_SERVER_URL \
-e HAPPYDOMAIN_NEWSLETTER_ID \
-e HAPPYDOMAIN_MAIL_FROM \
-e HAPPYDOMAIN_MAIL_SMTP_HOST \
-e HAPPYDOMAIN_MAIL_SMTP_PORT \
-e HAPPYDOMAIN_MAIL_SMTP_USERNAME \
-e HAPPYDOMAIN_MAIL_SMTP_PASSWORD \
-e HAPPYDOMAIN_OVH_APPLICATION_KEY \
-e HAPPYDOMAIN_OVH_APPLICATION_SECRET \
-e HAPPYDOMAIN_STORAGE_ENGINE \
-p "8081:8081" \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=app-happydomain \
--name app-happydomain --pull always \
happydomain/happydomain:${HAPPYDOMAIN_VERSION}
path: /root/launch_container_app.sh
permissions: 0o755
- content: |
#!/bin/sh
export HAPPYDELIVER_BIND="0.0.0.0:8080"
export HAPPYDELIVER_CUSTOM_HEAD_HTML="<script async defer data-website-id=\"9175a22f-3344-4848-a97b-012727957ea4\" src=\"https://pythagore.p0m.fr/pythagore.js\"></script>"
export HAPPYDELIVER_ADDRESS_PREFIX="test-"
export HAPPYDELIVER_DOMAIN="deliver.happydomain.org"
export HAPPYDELIVER_REPORT_RETENTION="168h"
[ -z "${HAPPYDELIVER_VERSION}" ] && export HAPPYDELIVER_VERSION=$(cloud-init query ds.metadata.HAPPYDOMAIN_VERSION)
docker inspect app-happydeliver > /dev/null && {
docker pull happydomain/happydeliver:${HAPPYDELIVER_VERSION}
docker stop app-happydeliver
docker rm app-happydeliver
}
docker run -d --restart unless-stopped --network local -e HAPPYDELIVER_BIND -e HAPPYDELIVER_CUSTOM_HEAD_HTML -e HAPPYDELIVER_ADDRESS_PREFIX -e HAPPYDELIVER_DOMAIN -e HAPPYDELIVER_REPORT_RETENTION --hostname "${HAPPYDELIVER_DOMAIN}" -p "8080:8080" -p 25:25 -v /var/lib/happydeliver/:/var/lib/happydeliver/ --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=app-happydelier --name app-happydeliver --pull always happydomain/happydeliver:${HAPPYDELIVER_VERSION}
path: /root/launch_container_deliver.sh
permissions: 0o755
- content: |
#!/bin/sh
# pdns
docker inspect pdns-demo-happydomain > /dev/null && {
docker pull nemunaire/pdns
@ -306,7 +300,12 @@ write_files:
docker rm pdns-demo-happydomain
}
docker run -d --restart unless-stopped --network local -e PDNS_AUTH_API_KEY=changeme --entrypoint /bin/sh --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=pdns-demo-happydomain --name pdns-demo-happydomain --pull always nemunaire/pdns -c "rm /var/lib/powerdns/pdns.sqlite3; sqlite3 /var/lib/powerdns/pdns.sqlite3 < /usr/share/doc/pdns/schema.sqlite3.sql && exec tini -- /usr/sbin/pdns_server-startup"
docker run -d --restart unless-stopped --network local \
-e PDNS_AUTH_API_KEY=changeme \
--entrypoint /bin/sh \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=pdns-demo-happydomain \
--name pdns-demo-happydomain --pull always \
nemunaire/pdns -c "rm /var/lib/powerdns/pdns.sqlite3; sqlite3 /var/lib/powerdns/pdns.sqlite3 < /usr/share/doc/pdns/schema.sqlite3.sql && exec tini -- /usr/sbin/pdns_server-startup"
# happyDomain demo
export HAPPYDOMAIN_BIND="0.0.0.0:8081"
@ -323,17 +322,63 @@ write_files:
docker rm demo-happydomain
}
docker run -d --restart unless-stopped --network local -e HAPPYDOMAIN_OPT_OUT_INSIGHTS=1 -e HAPPYDOMAIN_BIND -e HAPPYDOMAIN_CUSTOM_HEAD_HTML -e HAPPYDOMAIN_DEFAULT_NS -e HAPPYDOMAIN_EXTERNALURL -e HAPPYDOMAIN_DISABLE_PROVIDERS_EDIT=true -e HAPPYDOMAIN_NO_AUTH=1 -e HAPPYDOMAIN_MSG_HEADER_TEXT="Shared demo instance; data reset at 00:34 and 12:34 UTC" -e HAPPYDOMAIN_MSG_HEADER_COLOR="warning" -e HAPPYDOMAIN_STORAGE_ENGINE --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=demo-happydomain --name demo-happydomain --pull always happydomain/happydomain:${HAPPYDOMAIN_VERSION}
docker run -d --restart unless-stopped --network local \
-e HAPPYDOMAIN_OPT_OUT_INSIGHTS=1 \
-e HAPPYDOMAIN_BIND \
-e HAPPYDOMAIN_CUSTOM_HEAD_HTML \
-e HAPPYDOMAIN_DEFAULT_NS \
-e HAPPYDOMAIN_EXTERNALURL \
-e HAPPYDOMAIN_DISABLE_PROVIDERS_EDIT=true \
-e HAPPYDOMAIN_NO_AUTH=1 \
-e HAPPYDOMAIN_MSG_HEADER_TEXT="Shared demo instance; data reset at 00:34 and 12:34 UTC" \
-e HAPPYDOMAIN_MSG_HEADER_COLOR="warning" \
-e HAPPYDOMAIN_STORAGE_ENGINE \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=demo-happydomain \
--name demo-happydomain --pull always \
happydomain/happydomain:${HAPPYDOMAIN_VERSION}
path: /root/launch_container_demo.sh
permissions: 0o755
- content: |
#!/bin/sh
docker inspect listmonk > /dev/null && {
docker pull ghcr.io/knadh/listmonk:latest
docker stop listmonk
docker rm listmonk
docker run -it --network local --rm -v /etc/listmonk.toml:/listmonk/config.toml:ro -e GENERIC_TIMEZONE="Europe/Paris" -e TZ="Europe/Paris" ghcr.io/knadh/listmonk:latest /listmonk/listmonk --upgrade
}
docker run -d --restart unless-stopped --hostname lists.happydomain.org --network local \
-v /etc/listmonk.toml:/listmonk/config.toml:ro \
-e GENERIC_TIMEZONE="Europe/Paris" \
-e TZ="Europe/Paris" \
-p "9000:9000" \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=listmonk \
--name listmonk --pull always \
ghcr.io/knadh/listmonk:latest
path: /root/launch_listmonk.sh
permissions: 0o755
- content: |
#!/bin/sh
[ -z "$POSTGRES_PASSWORD_fider" ] && export $(docker inspect postgres -f 'json' | jq -r '.[0].Config.Env[]' | grep ^POSTGRES_PASSWORD_fider)
docker run -d --restart unless-stopped --network local -e BASE_URL="https://$(cloud-init query ds.metadata.FIDER_DOMAIN)" -e DATABASE_URL="postgres://fider:${POSTGRES_PASSWORD_fider}@postgres:5432/fider?sslmode=disable" -e JWT_SECRET="$(cloud-init query ds.metadata.FIDER_JWT_SECRET)" -e EMAIL_NOREPLY="feedback@happydomain.org" -e EMAIL_SMTP_HOST="$(cloud-init query ds.metadata.EMAIL_SMTP_HOST)" -e EMAIL_SMTP_PORT=$(cloud-init query ds.metadata.EMAIL_SMTP_PORT) -e EMAIL_SMTP_USERNAME="$(cloud-init query ds.metadata.EMAIL_SMTP_USERNAME)" -e EMAIL_SMTP_PASSWORD="$(cloud-init query ds.metadata.EMAIL_SMTP_PASSWORD)" -e EMAIL_SMTP_ENABLE_STARTTLS=true -e OAUTH_GITHUB_CLIENTID="$(cloud-init query ds.metadata.FIDER_GITHUB_CLIENTID)" -e OAUTH_GITHUB_SECRET="$(cloud-init query ds.metadata.FIDER_GITHUB_SECRET)" -p 3000:3000 --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=feedback --name feedback --pull always getfider/fider:stable
docker run -d --restart unless-stopped --hostname lists.happydomain.org --network local -v /etc/listmonk.toml:/listmonk/config.toml:ro -e GENERIC_TIMEZONE="Europe/Paris" -e TZ="Europe/Paris" -p "9000:9000" --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=listmonk --name listmonk --pull always ghcr.io/knadh/listmonk:latest
path: /root/launch_container_other.sh
docker run -d --restart unless-stopped --network local \
-e BASE_URL="https://$(cloud-init query ds.metadata.FIDER_DOMAIN)" \
-e DATABASE_URL="postgres://fider:${POSTGRES_PASSWORD_fider}@postgres:5432/fider?sslmode=disable" \
-e JWT_SECRET="$(cloud-init query ds.metadata.FIDER_JWT_SECRET)" \
-e EMAIL_NOREPLY="feedback@happydomain.org" \
-e EMAIL_SMTP_HOST="$(cloud-init query ds.metadata.EMAIL_SMTP_HOST)" \
-e EMAIL_SMTP_PORT=$(cloud-init query ds.metadata.EMAIL_SMTP_PORT) \
-e EMAIL_SMTP_USERNAME="$(cloud-init query ds.metadata.EMAIL_SMTP_USERNAME)" \
-e EMAIL_SMTP_PASSWORD="$(cloud-init query ds.metadata.EMAIL_SMTP_PASSWORD)" \
-e EMAIL_SMTP_ENABLE_STARTTLS=true \
-e OAUTH_GITHUB_CLIENTID="$(cloud-init query ds.metadata.FIDER_GITHUB_CLIENTID)" \
-e OAUTH_GITHUB_SECRET="$(cloud-init query ds.metadata.FIDER_GITHUB_SECRET)" \
-p 3000:3000 \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=feedback \
--name feedback --pull always \
getfider/fider:stable
path: /root/launch_fider.sh
permissions: 0o755
runcmd:
@ -391,14 +436,24 @@ runcmd:
EOF
- chmod +x /etc/pgsql-init/70-update-listmonk-settings.sh
- docker run -d --restart unless-stopped --network local --shm-size=512MB -v /var/backups/postgres/:/var/backups/postgres/ -v /etc/pgsql-init/:/docker-entrypoint-initdb.d/ -v /var/lib/postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=$(cloud-init query ds.metadata.POSTGRES_PASSWORD) -e POSTGRES_MULTIPLE_DATABASES="fider,listmonk" -e POSTGRES_PASSWORD_fider -e POSTGRES_PASSWORD_listmonk --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=postgres --name postgres --pull always --name postgres postgres:alpine
- |
docker run -d --restart unless-stopped --network local --shm-size=512MB \
-v /var/backups/postgres/:/var/backups/postgres/ \
-v /etc/pgsql-init/:/docker-entrypoint-initdb.d/ \
-v /var/lib/postgres:/var/lib/postgresql \
-e POSTGRES_PASSWORD=$(cloud-init query ds.metadata.POSTGRES_PASSWORD) \
-e POSTGRES_MULTIPLE_DATABASES="fider,listmonk" \
-e POSTGRES_PASSWORD_fider \
-e POSTGRES_PASSWORD_listmonk \
--log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=postgres \
--name postgres --pull always \
postgres:alpine
# Launch web server
- docker run -d --restart unless-stopped --network local -v /etc/caddy:/etc/caddy -v /srv/:/srv/ -v /var/lib/caddy/:/data/caddy -p 80:80 -p 443:443 --log-driver syslog --log-opt "syslog-address=unixgram:///dev/log" --log-opt syslog-facility=daemon --log-opt tag=caddy --name caddy caddy:latest
- /root/launch_caddy.sh
# Launch container
- /root/launch_container_app.sh
- /root/launch_container_deliver.sh
# Generate listmonk config
- |
@ -419,7 +474,8 @@ runcmd:
EOF
# Launch others containers
- /root/launch_container_other.sh
- /root/launch_listmonk.sh
- /root/launch_fider.sh
# Launch demo containers
- /root/launch_container_demo.sh