decidim: decidim.hacktivism.ch behind Caddy :9027

This commit is contained in:
Hernâni Marques 2026-08-17 15:31:10 +02:00
parent d519fb3c80
commit 609056615e
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
24 changed files with 840 additions and 24 deletions

View file

@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Apply hacktivism colors + header CSS on the live organization.
set -euo pipefail
cd "${HOME}/koopa-decidim"
set -a
# shellcheck disable=SC1091
source .env
# shellcheck disable=SC1091
source users.env
set +a
podman exec \
-e DECIDIM_HOST="${DECIDIM_HOST:-decidim.hacktivism.ch}" \
-e DECIDIM_SYSTEM_EMAIL \
-e DECIDIM_SYSTEM_PASSWORD \
-e DECIDIM_ADMIN_EMAIL \
-e DECIDIM_ADMIN_PASSWORD \
-e DECIDIM_ADMIN_NAME \
-e DECIDIM_APPLICATION_NAME \
-e DECIDIM_DEFAULT_LOCALE \
-e DECIDIM_AVAILABLE_LOCALES \
koopa-decidim bundle exec rails runner /code/lib/koopa_bootstrap.rb
echo "branding applied. public: https://decidim.hacktivism.ch/"

View file

@ -0,0 +1,47 @@
#!/usr/bin/env bash
# Install Decidim user systemd units on koopa (boot via linger).
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
LIVE="${HOME}/koopa-decidim"
# admin-log tree (scripts/decidim → ../..) or live ~/koopa-decidim/bin
if [ -f "${HERE}/../../configs/decidim/container-koopa-decidim.service" ]; then
UNIT_SRC="${HERE}/../../configs/decidim"
elif [ -f "${LIVE}/container-koopa-decidim.service" ]; then
UNIT_SRC="${LIVE}"
else
echo "ERROR: decidim unit files not found" >&2
exit 1
fi
UNIT_DIR="${HOME}/.config/systemd/user"
mkdir -p "${UNIT_DIR}"
cp "${UNIT_SRC}/container-koopa-decidim-db.service" "${UNIT_DIR}/"
cp "${UNIT_SRC}/container-koopa-decidim.service" "${UNIT_DIR}/"
systemctl --user daemon-reload
systemctl --user enable \
container-koopa-decidim-db.service \
container-koopa-decidim.service
if ! podman ps --format '{{.Names}}' | grep -qx koopa-decidim; then
(cd "${HOME}/koopa-decidim" && set -a && source .env && set +a && podman-compose up -d)
fi
systemctl --user start \
container-koopa-decidim-db.service \
container-koopa-decidim.service
systemctl --user --no-pager --lines=0 status \
container-koopa-decidim-db.service \
container-koopa-decidim.service || true
if command -v loginctl >/dev/null 2>&1; then
if [ "$(loginctl show-user "$(id -un)" -p Linger --value 2>/dev/null || echo no)" != "yes" ]; then
echo "NOTE: enable linger so units start after reboot without login:"
echo " sudo loginctl enable-linger $(id -un)"
else
echo "linger already enabled for $(id -un)"
fi
fi
echo "OK. Public: https://decidim.hacktivism.ch/"

21
scripts/decidim/up.sh Executable file
View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -euo pipefail
DIR="${HOME}/koopa-decidim"
cd "${DIR}"
set -a
# shellcheck disable=SC1091
source .env
set +a
podman-compose up -d
echo "== wait for :9027 =="
ok=0
for i in $(seq 1 80); do
code=$(curl -sS -o /dev/null -w '%{http_code}' --max-time 5 "http://127.0.0.1:9027/" || true)
echo "try $i: $code"
case "$code" in
2*|3*) ok=1; break ;;
esac
sleep 5
done
[[ "$ok" -eq 1 ]] || { echo "ERROR: no answer on 9027"; podman-compose ps; exit 1; }
echo "local ok. public: https://decidim.hacktivism.ch/"

View file

@ -1,12 +1,21 @@
#!/usr/bin/env bash
# Install Lemmy user systemd units on koopa (boot via linger).
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
HERE="$(cd "$(dirname "$0")" && pwd)"
LIVE="${HOME}/koopa-lemmy"
if [ -f "${HERE}/../../configs/lemmy/container-koopa-lemmy.service" ]; then
UNIT_SRC="${HERE}/../../configs/lemmy"
elif [ -f "${LIVE}/container-koopa-lemmy.service" ]; then
UNIT_SRC="${LIVE}"
else
echo "ERROR: lemmy unit files not found" >&2
exit 1
fi
UNIT_DIR="${HOME}/.config/systemd/user"
mkdir -p "${UNIT_DIR}"
cp "${ROOT}/configs/lemmy/container-koopa-lemmy-db.service" "${UNIT_DIR}/"
cp "${ROOT}/configs/lemmy/container-koopa-lemmy.service" "${UNIT_DIR}/"
cp "${UNIT_SRC}/container-koopa-lemmy-db.service" "${UNIT_DIR}/"
cp "${UNIT_SRC}/container-koopa-lemmy.service" "${UNIT_DIR}/"
systemctl --user daemon-reload
systemctl --user enable \
@ -25,4 +34,13 @@ systemctl --user --no-pager --lines=0 status \
container-koopa-lemmy-db.service \
container-koopa-lemmy.service || true
if command -v loginctl >/dev/null 2>&1; then
if [ "$(loginctl show-user "$(id -un)" -p Linger --value 2>/dev/null || echo no)" != "yes" ]; then
echo "NOTE: enable linger so units start after reboot without login:"
echo " sudo loginctl enable-linger $(id -un)"
else
echo "linger already enabled for $(id -un)"
fi
fi
echo "OK. Public: https://lemmy.hacktivism.ch/"

View file

@ -65,7 +65,9 @@ overall: OK ok=42 warn=0 fail=0
| Git SSH | TCP `:9200` |
**Critical** (→ overall FAIL): merchant, exchange, bank, forgejo, edge/critical ports.
**Optional** (→ WARN): castopod, bonfire, lemmy, prime, bt, paivana, tops, tor, nym.
**Optional** (→ WARN): castopod, bonfire, lemmy, decidim, prime, bt, paivana, tops, tor, nym.
Collect also checks **linger** and that Lemmy/Decidim user units are **enabled** (reboot survival).
Read-only. No restarts, no secrets.

View file

@ -151,6 +151,7 @@ EXPECT_CONTAINERS=(
koopa-castopod
koopa-bonfire
koopa-lemmy-proxy
koopa-decidim
koopa-prime-jellyfin
koopa-prime-qbittorrent
koopa-forgejo
@ -173,6 +174,7 @@ OPTIONAL_CONTAINERS=(
koopa-castopod
koopa-bonfire
koopa-lemmy-proxy
koopa-decidim
koopa-paivana
)
@ -185,6 +187,7 @@ PROBES=(
"castopod|http://127.0.0.1:9020/|200,302,303,307,308"
"bonfire|http://127.0.0.1:9021/|200,302,303,307,308"
"lemmy|http://127.0.0.1:9026/|200,302,303,307,308"
"decidim|http://127.0.0.1:9027/|200,301,302,303,307,308"
"prime|http://127.0.0.1:9022/|200,302,303,307,308"
"bt|http://127.0.0.1:9023/|200,302,303,307,308,401"
"paivana|http://127.0.0.1:9025/|200,302,303,307,308"
@ -193,7 +196,7 @@ PROBES=(
"tops-ng3|http://127.0.0.1:9092/|200,302,303"
)
OPTIONAL_PROBES=(castopod bonfire lemmy prime bt paivana tops-ng1 tops-ng2 tops-ng3)
OPTIONAL_PROBES=(castopod bonfire lemmy decidim prime bt paivana tops-ng1 tops-ng2 tops-ng3)
C_OK=; C_WARN=; C_FAIL=; C_DIM=; C_RST=; C_BOLD=
# colors only when writing for a tty later; snapshots are plain + optional ANSI if COLLECT_COLOR=1
@ -277,6 +280,34 @@ do_collect() {
record WARN "systemctl not available"
fi
# Reboot survival: linger + enabled user units (public stacks).
if command -v loginctl >/dev/null 2>&1; then
linger_st=$(loginctl show-user "$(id -un)" -p Linger --value 2>/dev/null || echo no)
if [ "${linger_st}" = "yes" ]; then
record OK "linger=yes ($(id -un))"
else
record FAIL "linger=${linger_st} (user units will not start after reboot without login)"
fi
else
record WARN "loginctl not available (cannot check linger)"
fi
if command -v systemctl >/dev/null 2>&1 && [ "$(id -u 2>/dev/null)" != "0" ]; then
local u en
for u in \
container-koopa-lemmy-db.service \
container-koopa-lemmy.service \
container-koopa-decidim-db.service \
container-koopa-decidim.service
do
en=$(systemctl --user is-enabled "${u}" 2>/dev/null || echo unknown)
if [ "${en}" = "enabled" ]; then
record OK "unit ${u} enabled"
else
record WARN "unit ${u} is ${en} (will not start on reboot)"
fi
done
fi
if command -v ss >/dev/null 2>&1; then
listen_blob=$(ss -lnt 2>/dev/null | awk '{print $4}' || true)
for port in 9000 9001 9010 9011 9012 9024 9200; do
@ -286,7 +317,7 @@ do_collect() {
record FAIL "nothing listening on :${port}"
fi
done
for port in 9020 9021 9022 9023 9025 9026 9090 9091 9092 8080 9080; do
for port in 9020 9021 9022 9023 9025 9026 9027 9090 9091 9092 8080 9080; do
if printf '%s\n' "${listen_blob}" | grep -qE "[:.]${port}\$"; then
record OK "listen :${port} (optional)"
else
@ -323,7 +354,7 @@ do_collect() {
fi
fi
done
for dep in koopa-forgejo-db koopa-castopod-mariadb koopa-castopod-redis koopa-bonfire-db koopa-lemmy-db; do
for dep in koopa-forgejo-db koopa-castopod-mariadb koopa-castopod-redis koopa-bonfire-db koopa-lemmy-db koopa-decidim-db koopa-decidim-redis; do
if printf '%s\n' "${running_names}" | grep -qxF "${dep}"; then
record INFO "dep ${dep} running"
else