Compare commits

..
Author SHA1 Message Date
CanbiZ (MickLesk) 1f8b4e2769 Change session cookie secret generation method 2026-10-20 11:51:58 +02:00
CanbiZ (MickLesk) e958bb3779 Change Zitadel login version check condition 2026-10-20 11:46:23 +02:00
CanbiZ (MickLesk) 5ff7ef0e92 Enhance Zitadel login options descriptions 2026-10-20 11:45:41 +02:00
CanbiZ (MickLesk) 3d5d9f9f55 Add co-authors to the zitadel.sh file
Updated author information to include co-authors.
2026-10-20 11:44:04 +02:00
CanbiZ (MickLesk) e0c103d171 Update authorship information in zitadel-install.sh 2026-10-20 11:43:59 +02:00
CanbiZ (MickLesk) 16d68056d0 Refactor Zitadel installation and configuration process
Refactor Zitadel installation script to improve configuration and setup processes, including PostgreSQL and Zitadel Login setup.
2026-10-20 11:43:09 +02:00
CanbiZ (MickLesk) b70729c707 Zitadel: Support v1 and v2 Login 2026-10-20 11:41:28 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] bb32c40838 Update CHANGELOG.md (#18027)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 09:13:17 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] e556084107 Update CHANGELOG.md (#18024)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 08:04:28 +00:00
CanbiZ (MickLesk) c16806d87e InvenTree: move to go.packager.io (#18015)
dl.packager.io is frozen at 1.5.1, and its key only has a SHA1 self-signature, which apt's sqv rejects on Debian 13 since 2026-02-01. Upstream's installer moved to go.packager.io (InvenTree #12824), which carries 1.6.0 for Ubuntu 24.04/26.04 and Debian 13; update migrates installs on those releases and accepts Debian.
2026-10-20 10:03:57 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c7d8c440ce Update CHANGELOG.md (#18023)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-20 07:31:38 +00:00
CanbiZ (MickLesk) 9cdce51d43 Zitadel: run init and setup in the foreground (#18016)
start-from-init ran in the background with its output thrown away, and the PID to kill was guessed from lsof after 60 seconds; when the process had already ended, kill got no PID and failed with exit 2. init and setup finish on their own, report their errors, and the service only starts once its user exists.
2026-10-20 09:31:07 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 361039b919 Update CHANGELOG.md (#18014)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 17:22:36 +00:00
push-app-to-main[bot] afe1e6d7cb Add calagopus (ct) (#18012)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-10-19 19:22:08 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 32b6952bdd Update CHANGELOG.md (#18013)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 17:21:09 +00:00
push-app-to-main[bot]andCanbiZ b4abaf9202 Netronome (#18011)
* Add netronome (ct)

* formatting

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-10-19 19:20:35 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c6a14ac506 Update CHANGELOG.md (#18010)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 13:47:53 +00:00
Brad Schroth 25628a6651 feat(mealie): add reverse proxy auth settings to mealie.env (#18006)
* feat(mealie): add reverse proxy auth settings to mealie.env

* fix(mealie): remove run-time note, documented on website instead

* fix(mealie): use plain EOF heredoc delimiter
2026-10-19 15:47:22 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8cf7f29875 Update CHANGELOG.md (#18009)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 07:16:48 +00:00
mazeladoandMatt Daleo 56a5dccabf immich: add missing library lines before the refresh (#17990)
Co-authored-by: Matt Daleo <12395090+mazelado@users.noreply.github.com>
2026-10-19 09:16:18 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 0a55cd58ed Update CHANGELOG.md (#18007)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-19 06:21:43 +00:00
thieneret 231cd8c275 Update authentik 2026.8.4 (#18004)
* bump authentik version, downgrade pnpm

* pnpm revert only relevant about NixOS package
2026-10-19 08:21:15 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2182076128 Update CHANGELOG.md (#18003)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:33:00 +00:00
CanbiZ (MickLesk) 440460f0ea Donetick: create selfhosted.yaml from the example (#17992)
Since 0.1.82 the release only ships config/selfhosted.yaml.example, so the token sed failed on a missing file (#17985).
2026-10-18 21:32:42 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] c0b3b84eef Update CHANGELOG.md (#18002)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:32:37 +00:00
CanbiZ (MickLesk) be863ab405 Wiki.js: only back up db.sqlite on SQLite installs (#17993)
Installs since February 2025 use PostgreSQL and have no db.sqlite, so the update stopped at the backup (#17971). mkdir -p lets a rerun get past the backup folder a failed run left behind.
2026-10-18 21:32:11 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 2bfc7882d3 Update CHANGELOG.md (#18001)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:31:20 +00:00
CanbiZ (MickLesk) e197418b34 FlareSolverr: pass Chrome an en-US Accept-Language (#17995)
FlareSolverr hands LANG to Chrome as --accept-lang, which takes a language tag; with the container locale Cloudflare challenges looped unsolved (discussion #17987, FlareSolverr discussion #1717). Update adds the line to existing units.
2026-10-18 21:30:55 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] bc71c1ce80 Update CHANGELOG.md (#18000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 19:30:17 +00:00
CanbiZ (MickLesk) 12769e95e5 2FAuth: install the locked dependencies (#17996)
composer update re-resolved every dependency instead of using the composer.lock the release ships, and Composer now blocks svg-sanitize 0.22.0 while resolving (#17955, Bubka/2FAuth#575). Upstream's own image only runs composer install, as does our update.
2026-10-18 21:29:52 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] dead918982 Update CHANGELOG.md (#17998)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:32:18 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 662342f679 Update CHANGELOG.md (#17997)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:32:06 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 9a9057d750 Update CHANGELOG.md (#17994)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:24:58 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 7f52edf9dc Update CHANGELOG.md (#17991)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 18:16:56 +00:00
Giovanni Francesco SoloneandCanbiZ 21bf2ddeb6 Tracearr: drop the pnpm store after the update build (#17869)
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-10-18 20:16:29 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 56f109adca Update CHANGELOG.md (#17988)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 10:29:12 +00:00
mazeladoandMatt Daleo db6a758f5e vaultwarden: build before stopping the service (#17983)
Co-authored-by: Matt Daleo <12395090+mazelado@users.noreply.github.com>
2026-10-18 12:28:47 +02:00
community-scripts-pr-app[bot]andgithub-actions[bot] 6083e802ee Update CHANGELOG.md (#17986)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 07:29:09 +00:00
Tobias 2d554a8bb8 fix: geopulse 2.0.0 upgrade support (nginx .mjs, pg18, jwt cleanup) (#17978)
2.0.0 serves its MapLibre worker as a .mjs file, which nginx's stock
mime.types doesn't map, breaking the map on both fresh installs and
updates. Also drops the now-dead JWT key generation/env vars (2.0.0
uses opaque session tokens), clears stale frontend build output on
update via CLEAN_INSTALL+KEEP instead of accumulating it forever,
backs up the database before updating, bumps new installs straight
to PostgreSQL 18/PostGIS 3.6, and raises the default disk size after
hitting real space pressure during a live upgrade.
2026-10-18 09:28:44 +02:00
23 changed files with 612 additions and 133 deletions

No files matched your search

+52
View File
@@ -565,8 +565,60 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-10-20
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- InvenTree: move to go.packager.io [@MickLesk](https://github.com/MickLesk) ([#18015](https://github.com/community-scripts/ProxmoxVE/pull/18015))
- Zitadel: run init and setup in the foreground [@MickLesk](https://github.com/MickLesk) ([#18016](https://github.com/community-scripts/ProxmoxVE/pull/18016))
### 💾 Core
- Only treat an NVIDIA GPU as present when its device nodes are [@MickLesk](https://github.com/MickLesk) ([core#153](https://github.com/community-scripts/core/pull/153))
## 2026-10-19
### 🆕 New Scripts
- Calagopus ([#18012](https://github.com/community-scripts/ProxmoxVE/pull/18012))
- Netronome ([#18011](https://github.com/community-scripts/ProxmoxVE/pull/18011))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- immich: record library revisions when the line is missing [@mazelado](https://github.com/mazelado) ([#17990](https://github.com/community-scripts/ProxmoxVE/pull/17990))
- Update authentik 2026.8.4 [@thieneret](https://github.com/thieneret) ([#18004](https://github.com/community-scripts/ProxmoxVE/pull/18004))
- #### ✨ New Features
- feat(mealie): add reverse proxy auth settings to mealie.env [@bferd](https://github.com/bferd) ([#18006](https://github.com/community-scripts/ProxmoxVE/pull/18006))
## 2026-10-18
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Donetick: create selfhosted.yaml from the example [@MickLesk](https://github.com/MickLesk) ([#17992](https://github.com/community-scripts/ProxmoxVE/pull/17992))
- Wiki.js: only back up db.sqlite on SQLite installs [@MickLesk](https://github.com/MickLesk) ([#17993](https://github.com/community-scripts/ProxmoxVE/pull/17993))
- FlareSolverr: pass Chrome an en-US Accept-Language [@MickLesk](https://github.com/MickLesk) ([#17995](https://github.com/community-scripts/ProxmoxVE/pull/17995))
- 2FAuth: install the locked dependencies [@MickLesk](https://github.com/MickLesk) ([#17996](https://github.com/community-scripts/ProxmoxVE/pull/17996))
- Tracearr: drop the pnpm store after the update build [@gioxx](https://github.com/gioxx) ([#17869](https://github.com/community-scripts/ProxmoxVE/pull/17869))
- vaultwarden: build before stopping the service [@mazelado](https://github.com/mazelado) ([#17983](https://github.com/community-scripts/ProxmoxVE/pull/17983))
- #### 💥 Breaking Changes
- fix: geopulse 2.0.0 upgrade support (nginx .mjs, pg18, jwt cleanup) [@CrazyWolf13](https://github.com/CrazyWolf13) ([#17978](https://github.com/community-scripts/ProxmoxVE/pull/17978))
### 💾 Core
- Let get_current_ip reach its IPv6 fallback [@MickLesk](https://github.com/MickLesk) ([core#151](https://github.com/community-scripts/core/pull/151))
- Drop apt autoclean before apt clean [@MickLesk](https://github.com/MickLesk) ([core#152](https://github.com/community-scripts/core/pull/152))
- Silence apt's script warning in $STD [@MickLesk](https://github.com/MickLesk) ([core#150](https://github.com/community-scripts/core/pull/150))
## 2026-10-17
### 🆕 New Scripts
+1 -1
View File
@@ -47,7 +47,7 @@ function update_script() {
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
setup_yq
AUTHENTIK_VERSION="version/2026.8.3"
AUTHENTIK_VERSION="version/2026.8.4"
# Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26
XMLSEC_VERSION="1.3.12"
+60
View File
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Jelcoo
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://calagopus.com/
APP="Calagopus"
var_tags="${var_tags:-panel;game-server}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-40}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/calagopus-panel ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "calagopus-panel" "calagopus/panel"; then
msg_info "Stopping Service"
systemctl stop calagopus-panel
msg_ok "Stopped Service"
create_backup /etc/calagopus/.env /var/lib/calagopus
fetch_and_deploy_gh_release "calagopus-panel" "calagopus/panel" "singlefile" "latest" "/usr/local/bin" "panel-rs-aio-$(arch_resolve x86_64 aarch64)-linux"
restore_backup
msg_info "Starting Service"
systemctl start calagopus-panel
msg_ok "Started Service"
msg_ok "Updated Successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
+6
View File
@@ -35,6 +35,12 @@ function update_script() {
msg_error "You must upgrade your LXC to Debian Trixie before updating."
exit
fi
# FlareSolverr hands LANG to Chrome as Accept-Language, which needs a tag like en-US, not a locale (#17987)
if ! grep -q '^Environment="LANG=' /etc/systemd/system/flaresolverr.service; then
sed -i '/^Environment="CAPTCHA_SOLVER=/a Environment="LANG=en-US"' /etc/systemd/system/flaresolverr.service
systemctl daemon-reload
systemctl restart flaresolverr
fi
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
msg_info "Stopping service"
systemctl stop flaresolverr
+53 -2
View File
@@ -10,7 +10,7 @@ APP="GeoPulse"
var_tags="${var_tags:-location;tracking;gps}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-8}"
var_disk="${var_disk:-12}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
@@ -32,6 +32,16 @@ function update_script() {
fi
if check_for_gh_release "geopulse-backend" "tess1o/geopulse"; then
msg_info "Backing Up Database"
mkdir -p /var/lib/geopulse/dumps
DB_NAME="$(grep -oP '^GEOPULSE_POSTGRES_DB=\K.*' /etc/geopulse/geopulse.env 2>/dev/null)"
DB_NAME="${DB_NAME:-geopulse}"
if sudo -u postgres pg_dump -Fc "${DB_NAME}" >"/var/lib/geopulse/dumps/${DB_NAME}-pre-update-$(date +%Y%m%d%H%M%S).dump" 2>/dev/null; then
msg_ok "Backed Up Database"
else
msg_warn "Database backup failed, continuing anyway"
fi
msg_info "Stopping Service"
systemctl stop geopulse-backend
msg_ok "Stopped Service"
@@ -51,7 +61,48 @@ function update_script() {
fi
fetch_and_deploy_gh_release "geopulse-backend" "tess1o/geopulse" "singlefile" "latest" "/opt/geopulse/backend" "${BINARY_PATTERN}"
fetch_and_deploy_gh_release "geopulse-frontend" "tess1o/geopulse" "prebuild" "latest" "/var/www/geopulse" "geopulse-frontend-*.tar.gz"
CLEAN_INSTALL=1 CLEAN_INSTALL_KEEP="avatars" fetch_and_deploy_gh_release "geopulse-frontend" "tess1o/geopulse" "prebuild" "latest" "/var/www/geopulse" "geopulse-frontend-*.tar.gz"
if [[ -f /etc/geopulse/geopulse.env ]] && grep -q "GEOPULSE_JWT_" /etc/geopulse/geopulse.env 2>/dev/null; then
msg_info "Removing Unused JWT Keys"
sed -i '/^GEOPULSE_JWT_PRIVATE_KEY_LOCATION=/d;/^GEOPULSE_JWT_PUBLIC_KEY_LOCATION=/d' /etc/geopulse/geopulse.env
rm -f /opt/geopulse/keys/jwt-private-key.pem /opt/geopulse/keys/jwt-public-key.pem
msg_ok "Removed Unused JWT Keys"
fi
if [[ -f /etc/nginx/sites-available/geopulse.conf ]] && ! grep -q '\.mjs\$' /etc/nginx/sites-available/geopulse.conf; then
msg_info "Configuring Nginx for .mjs Assets"
cp /etc/nginx/sites-available/geopulse.conf /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
ANCHOR_LINE="$(grep -n ' add_header Cache-Control "public, max-age=31536000";' /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak | head -1 | cut -d: -f1)"
if [[ -n "$ANCHOR_LINE" ]]; then
INSERT_LINE=$((ANCHOR_LINE + 1))
{
head -n "$INSERT_LINE" /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
cat <<'MJSBLOCK'
location ~* ^/(?!osm/).*\.mjs$ {
types {
application/javascript mjs;
}
expires 1y;
add_header Cache-Control "public, max-age=31536000";
}
MJSBLOCK
tail -n "+$((INSERT_LINE + 1))" /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak
} >/etc/nginx/sites-available/geopulse.conf
fi
if [[ -n "$ANCHOR_LINE" ]] && grep -q '\.mjs\$' /etc/nginx/sites-available/geopulse.conf && nginx -t >/dev/null 2>&1; then
systemctl reload nginx
msg_ok "Configured Nginx for .mjs Assets"
else
cp /etc/nginx/sites-available/geopulse.conf.pre-mjs.bak /etc/nginx/sites-available/geopulse.conf
nginx -t >/dev/null 2>&1 && systemctl reload nginx
msg_warn "Could not automatically add the .mjs nginx block (customized config?) - add it manually, see the GeoPulse 2.0.0 upgrade notes"
fi
fi
msg_info "Starting Service"
systemctl start geopulse-backend
+4 -4
View File
@@ -103,10 +103,10 @@ EOF
fi
fi
# Without the revision file the refresh was skipped and sharp failed on an old libvips (#17914).
if [[ ! -f ~/.immich_library_revisions ]]; then
msg_warn "No record of the compiled image-processing libraries, rebuilding all of them"
printf '%s: unknown\n' imagemagick jpegli libheif libjxl libraw libvips >~/.immich_library_revisions
fi
[[ -f ~/.immich_library_revisions ]] || msg_warn "No record of the compiled image-processing libraries, rebuilding all of them"
for lib in imagemagick jpegli libheif libjxl libraw libvips; do
grep -q "^${lib}:" ~/.immich_library_revisions 2>/dev/null || echo "${lib}: unknown" >>~/.immich_library_revisions
done
[[ -d "$BASE_DIR/.git" ]] || $STD git clone -b main https://github.com/immich-app/base-images "$BASE_DIR"
libraries=("libjxl" "jpegli" "libheif" "libraw" "imagemagick" "libvips")
cd "$BASE_DIR"
+22 -2
View File
@@ -31,11 +31,31 @@ function update_script() {
exit
fi
if ! grep -qE "^ID=(ubuntu)$" /etc/os-release; then
msg_error "Unsupported OS. InvenTree requires Ubuntu (20.04/22.04/24.04)."
if ! grep -qE "^ID=(ubuntu|debian)$" /etc/os-release; then
msg_error "Unsupported OS. InvenTree requires Ubuntu or Debian."
exit
fi
# dl.packager.io is frozen at 1.5.1 and its SHA1-bound key fails on Debian 13;
# go.packager.io only carries current builds for these releases
if grep -qs "dl.packager.io" /etc/apt/sources.list.d/inventree*; then
case "$(get_os_info id)/$(get_os_info version)" in
ubuntu/24.04 | ubuntu/26.04 | debian/13)
msg_info "Migrating InvenTree Repository"
setup_deb822_repo \
"inventree" \
"https://go.packager.io/srv/deb/inventree/InvenTree/gpg-key.asc" \
"https://go.packager.io/srv/deb/inventree/InvenTree/stable/$(get_os_info id)" \
"$(get_os_info version)" \
"main"
msg_ok "Migrated InvenTree Repository"
;;
*)
msg_warn "InvenTree only publishes updates for Ubuntu 24.04/26.04 and Debian 13; staying on the frozen repository"
;;
esac
fi
msg_info "Updating InvenTree"
apt_update_safe
$STD apt install --only-upgrade inventree -y
+12
View File
@@ -58,6 +58,18 @@ exec uv run mealie
STARTEOF
fi
chmod +x /opt/mealie/start.sh
if ! grep -q "REVERSE_PROXY_AUTH_ENABLED" /opt/mealie/mealie.env; then
cat <<EOF >>/opt/mealie/mealie.env
# Reverse proxy auth (Mealie v3.29.0+). Disabled by default.
# To enable: set REVERSE_PROXY_AUTH_ENABLED=true, set a secret, then restart mealie.
# REVERSE_PROXY_AUTH_ENABLED=false
# REVERSE_PROXY_AUTH_HEADER=X-Forwarded-User
# REVERSE_PROXY_AUTH_SIGNUP_ENABLED=false
# REVERSE_PROXY_AUTH_SECRET=
# REVERSE_PROXY_AUTH_SECRET_HEADER=X-Mealie-Reverse-Proxy-Secret
EOF
fi
msg_ok "Configuration restored"
msg_info "Installing Python Dependencies with uv"
+61
View File
@@ -0,0 +1,61 @@
#!/usr/bin/env bash
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/autobrr/netronome
APP="Netronome"
var_tags="${var_tags:-network;monitoring;speedtest}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/bin/netronome ]]; then
msg_error "No Netronome Installation Found!"
exit
fi
if check_for_gh_release "netronome" "autobrr/netronome" "" "" "v"; then
msg_info "Stopping Netronome"
systemctl stop netronome
msg_ok "Stopped Netronome"
fetch_and_deploy_gh_release "netronome" "autobrr/netronome" "binary" "latest" "" "netronome_*_linux_$(arch_resolve).deb" "v"
msg_info "Starting Netronome"
systemctl start netronome
msg_ok "Started Netronome"
msg_ok "Updated successfully!"
fi
if check_for_gh_release "librespeed-cli" "librespeed/speedtest-cli"; then
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "librespeed-cli" "librespeed/speedtest-cli" "prebuild" "latest" "/opt/librespeed-cli" "librespeed-cli_*_linux_$(arch_resolve).tar.gz"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}:7575${CL}"
echo -e "${INFO}${YW}Register your account right away: the registration page accepts only the first account, and until then anyone who reaches the port can claim it.${CL}"
+1
View File
@@ -146,6 +146,7 @@ EOF
rm -rf /opt/tracearr.build
cd /opt/tracearr
$STD pnpm install --prod --frozen-lockfile --ignore-scripts --filter @tracearr/server...
rm -rf "$(pnpm store path)"
$STD chown -R tracearr:tracearr /opt/tracearr
msg_ok "Built Tracearr"
+6 -4
View File
@@ -53,10 +53,6 @@ update_deb_based() {
printf '%s\n' "$INSTALLED_VERSION" >"$HOME/.vaultwarden"
fi
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
msg_info "Stopping Service"
systemctl stop vaultwarden
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "vaultwarden" "dani-garcia/vaultwarden" "tarball" "latest" "/tmp/vaultwarden-src"
msg_info "Updating VaultWarden to $VAULT (Patience)"
@@ -64,6 +60,12 @@ update_deb_based() {
VW_VERSION="$VAULT"
export VW_VERSION
CARGO_BUILD_JOBS="$(get_parallel_jobs)" CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 $STD cargo build --features "sqlite,mysql,postgresql" --release
msg_ok "Built VaultWarden ${VAULT}"
msg_info "Stopping Service"
systemctl stop vaultwarden
msg_ok "Stopped Service"
if [[ -f /usr/bin/vaultwarden ]]; then
cp target/release/vaultwarden /usr/bin/
else
+9 -12
View File
@@ -33,22 +33,18 @@ function update_script() {
NODE_VERSION="26" NODE_MODULE="yarn,node-gyp" setup_nodejs
if check_for_gh_release "wikijs" "requarks/wiki-v2"; then
#msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
#SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
#if [[ "${SQLITE_INSTALL}" == "true" && "${CHECK_UPDATE_RELEASE}" =~ ^3.* ]]; then
# echo "SQLite is not supported in v3.x+, currently there is no update path availble."
# exit
#fi
#msg_ok "There is an update path available for ${APP}"
# Installs before February 2025 use SQLite, newer ones PostgreSQL
SQLITE_INSTALL=$([[ -f /opt/wikijs/db.sqlite ]] && echo "true" || echo "false")
msg_info "Stopping Service"
systemctl stop wikijs
msg_ok "Stopped Service"
msg_info "Backing up Data"
mkdir /opt/wikijs-backup
#$SQLITE_INSTALL &&
cp /opt/wikijs/db.sqlite /opt/wikijs-backup
mkdir -p /opt/wikijs-backup
if [[ "$SQLITE_INSTALL" == "true" ]]; then
cp /opt/wikijs/db.sqlite /opt/wikijs-backup
fi
cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
msg_ok "Backed up Data"
@@ -56,8 +52,9 @@ function update_script() {
msg_info "Restoring Data"
cp -R /opt/wikijs-backup/* /opt/wikijs
#$SQLITE_INSTALL &&
$STD npm rebuild sqlite3
if [[ "$SQLITE_INSTALL" == "true" ]]; then
$STD npm rebuild sqlite3
fi
rm -rf /opt/wikijs-backup
msg_ok "Restored Data"
+36 -10
View File
@@ -2,7 +2,7 @@
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: dave-yap (dave-yap)
# Author: dave-yap (dave-yap) | Co-Author: remz1337, MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://zitadel.com/ | Github: https://github.com/zitadel/zitadel
@@ -16,11 +16,23 @@ var_version="${var_version:-13}"
var_arm64="${var_arm64:-yes}"
var_unprivileged="${var_unprivileged:-1}"
if [[ -z "${var_zitadel_login:-}" ]] && command -v pveversion >/dev/null 2>&1; then
var_zitadel_login=$(msg_menu "Choose the Zitadel login UI" \
"v2" "Login V2, Zitadel's default (HTTPS, self-signed certificate)" \
"v1" "Login V1, the classic login built into the API (HTTP)")
fi
export var_zitadel_login="${var_zitadel_login:-v2}"
header_info "$APP"
variables
color
catch_errors
if [[ ! "${var_zitadel_login}" =~ ^v[12]$ ]]; then
msg_error "var_zitadel_login must be v1 or v2"
exit 1
fi
function update_script() {
header_info
check_container_storage
@@ -31,20 +43,29 @@ function update_script() {
fi
if check_for_gh_release "zitadel" "zitadel/zitadel"; then
msg_info "Stopping Service"
msg_info "Stopping Zitadel"
if [[ -f /etc/systemd/system/zitadel-login.service ]]; then
systemctl stop zitadel-login
fi
systemctl stop zitadel
msg_ok "Stopped Service"
msg_ok "Stopped Zitadel"
rm -f /usr/local/bin/zitadel
fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz"
fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "${CHECK_UPDATE_RELEASE}" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz"
if [[ -f /etc/systemd/system/zitadel-login.service ]]; then
NODE_VERSION="24" setup_nodejs
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "zitadel-login" "zitadel/zitadel" "prebuild" "${CHECK_UPDATE_RELEASE}" "/opt/zitadel-login" "zitadel-login.tar.gz"
fi
msg_info "Updating Zitadel"
msg_info "Migrating Zitadel Database"
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
msg_ok "Updated Zitadel"
msg_ok "Migrated Zitadel Database"
msg_info "Starting Service"
msg_info "Starting Zitadel"
systemctl start zitadel
msg_ok "Started Service"
if [[ -f /etc/systemd/system/zitadel-login.service ]]; then
systemctl start zitadel-login
fi
msg_ok "Started Zitadel"
msg_ok "Updated successfully!"
fi
exit
@@ -57,4 +78,9 @@ description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}:8080/ui/console${CL}"
if [[ "${var_zitadel_login}" == "v1" ]]; then
echo -e "${GATEWAY}${BGN}http://${IP}:8080/ui/console${CL}"
else
echo -e "${GATEWAY}${BGN}https://${IP}:8080/ui/console${CL}"
fi
echo -e "${INFO}${YW}Admin credentials: ~/zitadel.creds (inside the container)${CL}"
-1
View File
@@ -36,7 +36,6 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$LOCAL_IP|" \
-e "s|^DB_USERNAME=$|DB_USERNAME=$MARIADB_DB_USER|" \
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$MARIADB_DB_PASS|" .env
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer update --no-plugins --no-scripts
$STD composer install --no-dev --prefer-dist --no-plugins --no-scripts
$STD php artisan key:generate --force
$STD php artisan migrate:refresh
+1 -1
View File
@@ -57,7 +57,7 @@ PG_VERSION="17" setup_postgresql
PG_DB_NAME="authentik" PG_DB_USER="authentik" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
XMLSEC_VERSION="1.3.12"
AUTHENTIK_VERSION="version/2026.8.3"
AUTHENTIK_VERSION="version/2026.8.4"
fetch_and_deploy_gh_release "xmlsec" "lsh123/xmlsec" "tarball" "${XMLSEC_VERSION}" "/opt/xmlsec"
fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
GO_VERSION="$(grep -m1 '^go ' /opt/authentik/go.mod | awk '{print $2}')" setup_go
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: Jelcoo
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://calagopus.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y valkey
systemctl enable -q --now valkey-server
msg_ok "Installed Dependencies"
PG_VERSION="18" setup_postgresql
PG_DB_NAME="panel" PG_DB_USER="calagopus" setup_postgresql_db
setup_docker
fetch_and_deploy_gh_release "calagopus-panel" "calagopus/panel" "singlefile" "latest" "/usr/local/bin" "panel-rs-aio-$(arch_resolve x86_64 aarch64)-linux"
msg_info "Configuring Calagopus"
mkdir -p /etc/calagopus /var/lib/calagopus /var/log/calagopus
mkdir -p /etc/calagopus-wings /var/lib/calagopus-wings /var/log/calagopus-wings /tmp/calagopus-wings
APP_ENCRYPTION_KEY=$(openssl rand -hex 16)
cat <<EOF >/etc/calagopus/.env
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
DATABASE_MIGRATE=true
REDIS_URL=redis://localhost
PORT=8000
APP_ENCRYPTION_KEY=${APP_ENCRYPTION_KEY}
APP_LOG_DIRECTORY=/var/log/calagopus
APP_PRIMARY=true
APP_ENABLE_WINGS_PROXY=true
APP_USE_DECRYPTION_CACHE=true
APP_USE_INTERNAL_CACHE=true
AIO_BASE_WINGS_CONFIGURATION=/etc/calagopus/wings-config.yml
EOF
chmod 600 /etc/calagopus/.env
cat <<EOF >/etc/calagopus/wings-config.yml
app_name: Calagopus
EOF
msg_ok "Configured Calagopus"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/calagopus-panel.service
[Unit]
Description=Calagopus Panel
After=network.target postgresql.service valkey-server.service docker.service
Requires=postgresql.service valkey-server.service docker.service
[Service]
Type=simple
User=root
WorkingDirectory=/etc/calagopus
EnvironmentFile=/etc/calagopus/.env
ExecStart=/usr/local/bin/calagopus-panel
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now calagopus-panel
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc
+1
View File
@@ -21,6 +21,7 @@ fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "
msg_info "Setup Donetick"
cd /opt/donetick
[[ -f config/selfhosted.yaml ]] || cp config/selfhosted.yaml.example config/selfhosted.yaml
TOKEN=$(openssl rand -hex 16)
sed -i -e "s/change_this_to_a_secure_random_string_32_characters_long/${TOKEN}/g" config/selfhosted.yaml
msg_ok "Setup Donetick"
+1
View File
@@ -48,6 +48,7 @@ RestartSec=5
Type=simple
Environment="LOG_LEVEL=info"
Environment="CAPTCHA_SOLVER=none"
Environment="LANG=en-US"
WorkingDirectory=/opt/flaresolverr
ExecStart=/opt/flaresolverr/flaresolverr
TimeoutStopSec=30
+10 -6
View File
@@ -19,17 +19,15 @@ $STD apt install -y \
nginx
msg_ok "Installed Dependencies"
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
PG_VERSION="18" PG_MODULES="postgis" setup_postgresql
PG_DB_NAME="geopulse" PG_DB_USER="geopulse" PG_DB_EXTENSIONS="postgis,postgis_topology" setup_postgresql_db
msg_info "Generating Security Keys"
mkdir -p /opt/geopulse/{backend,keys}
mkdir -p /etc/geopulse /var/www/geopulse /var/lib/geopulse/dumps
mkdir -p /var/log/geopulse/{backend,nginx}
openssl genpkey -algorithm RSA -out /opt/geopulse/keys/jwt-private-key.pem 2>/dev/null
openssl rsa -pubout -in /opt/geopulse/keys/jwt-private-key.pem -out /opt/geopulse/keys/jwt-public-key.pem 2>/dev/null
openssl rand -base64 32 >/opt/geopulse/keys/ai-encryption-key.txt
chmod 640 /opt/geopulse/keys/jwt-private-key.pem /opt/geopulse/keys/jwt-public-key.pem /opt/geopulse/keys/ai-encryption-key.txt
chmod 640 /opt/geopulse/keys/ai-encryption-key.txt
msg_ok "Generated Security Keys"
if [[ "$(uname -m)" == "aarch64" ]]; then
@@ -62,8 +60,6 @@ GEOPULSE_POSTGRES_PORT=5432
GEOPULSE_POSTGRES_DB=${PG_DB_NAME}
GEOPULSE_POSTGRES_USERNAME=${PG_DB_USER}
GEOPULSE_POSTGRES_PASSWORD=${PG_DB_PASS}
GEOPULSE_JWT_PRIVATE_KEY_LOCATION=file:/opt/geopulse/keys/jwt-private-key.pem
GEOPULSE_JWT_PUBLIC_KEY_LOCATION=file:/opt/geopulse/keys/jwt-public-key.pem
GEOPULSE_AI_ENCRYPTION_KEY_LOCATION=file:/opt/geopulse/keys/ai-encryption-key.txt
QUARKUS_LOG_FILE_ENABLE=true
QUARKUS_LOG_FILE_PATH=/var/log/geopulse/backend/geopulse.log
@@ -128,6 +124,14 @@ server {
add_header Cache-Control "public, max-age=31536000";
}
location ~* ^/(?!osm/).*\.mjs$ {
types {
application/javascript mjs;
}
expires 1y;
add_header Cache-Control "public, max-age=31536000";
}
location ^~ /osm/tiles/ {
resolver 8.8.8.8 valid=300s;
resolver_timeout 10s;
+2 -2
View File
@@ -16,8 +16,8 @@ update_os
msg_info "Setting up InvenTree Repository"
setup_deb822_repo \
"inventree" \
"https://dl.packager.io/srv/inventree/InvenTree/key" \
"https://dl.packager.io/srv/deb/inventree/InvenTree/stable/$(get_os_info id)" \
"https://go.packager.io/srv/deb/inventree/InvenTree/gpg-key.asc" \
"https://go.packager.io/srv/deb/inventree/InvenTree/stable/$(get_os_info id)" \
"$(get_os_info version)" \
"main"
msg_ok "Set up InvenTree Repository"
+8
View File
@@ -98,6 +98,14 @@ PRODUCTION=true
HOST=0.0.0.0
PORT=9000
BASE_URL=http://${LOCAL_IP}:9000
# Reverse proxy auth (Mealie v3.29.0+). Disabled by default.
# To enable: set REVERSE_PROXY_AUTH_ENABLED=true, set a secret, then restart mealie.
# REVERSE_PROXY_AUTH_ENABLED=false
# REVERSE_PROXY_AUTH_HEADER=X-Forwarded-User
# REVERSE_PROXY_AUTH_SIGNUP_ENABLED=false
# REVERSE_PROXY_AUTH_SECRET=
# REVERSE_PROXY_AUTH_SECRET_HEADER=X-Mealie-Reverse-Proxy-Secret
EOF
msg_ok "Wrote Environment File"
+59
View File
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/autobrr/netronome
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
iperf3 \
iputils-ping \
mtr-tiny \
traceroute
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "librespeed-cli" "librespeed/speedtest-cli" "prebuild" "latest" "/opt/librespeed-cli" "librespeed-cli_*_linux_$(arch_resolve).tar.gz"
ln -sf /opt/librespeed-cli/librespeed-cli /usr/local/bin/librespeed-cli
fetch_and_deploy_gh_release "netronome" "autobrr/netronome" "binary" "latest" "" "netronome_*_linux_$(arch_resolve).deb" "v"
msg_info "Configuring Netronome"
mkdir -p /opt/netronome_data /root/.config
$STD netronome generate-config --config /opt/netronome_data/config.toml
sed -i 's/^host = "127.0.0.1"$/host = "0.0.0.0"/' /opt/netronome_data/config.toml
chmod 600 /opt/netronome_data/config.toml
ln -s /opt/netronome_data /root/.config/netronome
msg_ok "Configured Netronome"
msg_info "Creating Netronome Service"
cat <<EOF >/etc/systemd/system/netronome.service
[Unit]
Description=Netronome
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/netronome_data
ExecStart=/usr/bin/netronome serve --config /opt/netronome_data/config.toml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now netronome
msg_ok "Created Netronome Service"
motd_ssh
customize
cleanup_lxc
+130 -88
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2026 community-scripts ORG
# Author: dave-yap
# Author: dave-yap (dave-yap) | Co-Author: remz1337, MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://zitadel.com/ | Github: https://github.com/zitadel/zitadel
@@ -13,132 +13,174 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies (Patience)"
$STD apt install -y ca-certificates lsof
msg_ok "Installed Dependecies"
var_zitadel_login="${var_zitadel_login:-v2}"
PG_VERSION="17" setup_postgresql
msg_info "Installing Postgresql"
DB_NAME="zitadel"
DB_USER="zitadel"
DB_PASS=$(random_password 13)
DB_ADMIN_USER="root"
DB_ADMIN_PASS=$(random_password 13)
systemctl start postgresql
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE USER $DB_ADMIN_USER WITH PASSWORD '$DB_ADMIN_PASS' SUPERUSER;"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;"
cat <<EOF >~/zitadel.creds
Application Credentials
DB_NAME: $DB_NAME
DB_USER: $DB_USER
DB_PASS: $DB_PASS
DB_ADMIN_USER: $DB_ADMIN_USER
DB_ADMIN_PASS: $DB_ADMIN_PASS
EOF
msg_ok "Installed PostgreSQL"
PG_DB_NAME="zitadel" PG_DB_USER="zitadel" setup_postgresql_db
fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-$(arch_resolve).tar.gz"
msg_info "Setting up Zitadel Environments"
msg_info "Configuring Zitadel"
mkdir -p /opt/zitadel
echo "/opt/zitadel/config.yaml" >"/opt/zitadel/.config"
random_password 32 >"/opt/zitadel/.masterkey"
cat <<EOF >~/zitadel.creds
Config location: $(cat "/opt/zitadel/.config")
Masterkey: $(cat "/opt/zitadel/.masterkey")
EOF
random_password 32 >/opt/zitadel/.masterkey
ADMIN_PASS="$(random_password 20)Aa1!"
cat <<EOF >/opt/zitadel/config.yaml
Port: 8080
ExternalDomain: ${LOCAL_IP}
ExternalPort: 8080
ExternalDomain: localhost
ExternalSecure: false
TLS:
Enabled: false
KeyPath: ""
Key: ""
CertPath: ""
Cert: ""
Database:
postgres:
Host: localhost
Port: 5432
Database: ${DB_NAME}
Database: zitadel
User:
Username: ${DB_USER}
Password: ${DB_PASS}
Username: zitadel
Password: ${PG_DB_PASS}
SSL:
Mode: disable
RootCert: ""
Cert: ""
Key: ""
Admin:
Username: ${DB_ADMIN_USER}
Password: ${DB_ADMIN_PASS}
SSL:
Mode: disable
RootCert: ""
Cert: ""
Key: ""
EOF
if [[ "$var_zitadel_login" == "v1" ]]; then
cat <<EOF >>/opt/zitadel/config.yaml
Port: 8080
ExternalSecure: false
DefaultInstance:
Features:
LoginV2:
Required: false
FirstInstance:
Org:
Human:
UserName: zitadel-admin@zitadel.localhost
Password: ${ADMIN_PASS}
PasswordChangeRequired: true
EOF
msg_ok "Installed Zitadel Enviroments"
else
cat <<EOF >>/opt/zitadel/config.yaml
Port: 8081
ExternalSecure: true
DefaultInstance:
Features:
LoginV2:
Required: true
FirstInstance:
LoginClientPatPath: /opt/zitadel/login-client.pat
Org:
Human:
UserName: zitadel-admin@zitadel.localhost
Password: ${ADMIN_PASS}
PasswordChangeRequired: true
LoginClient:
Machine:
Username: login-client
Name: Automatically Initialized IAM_LOGIN_CLIENT
Pat:
ExpirationDate: 2099-01-01T00:00:00Z
EOF
fi
chmod 600 /opt/zitadel/.masterkey /opt/zitadel/config.yaml
msg_ok "Configured Zitadel"
msg_info "Creating Services"
msg_info "Initializing Zitadel"
$STD zitadel init zitadel --config /opt/zitadel/config.yaml
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --steps /opt/zitadel/config.yaml
cat <<EOF >>~/zitadel.creds
Zitadel Admin
Username: zitadel-admin@zitadel.localhost
Initial Password: ${ADMIN_PASS}
EOF
chmod 600 ~/zitadel.creds
msg_ok "Initialized Zitadel"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/zitadel.service
[Unit]
Description=ZITADEL Identiy Server
Description=Zitadel
After=network.target postgresql.service
Wants=postgresql.service
[Service]
Type=simple
User=zitadel
Group=zitadel
ExecStart=/usr/local/bin/zitadel start --masterkeyFile "/opt/zitadel/.masterkey" --config "/opt/zitadel/config.yaml"
ExecStart=/usr/local/bin/zitadel start --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
Restart=always
RestartSec=5
TimeoutStartSec=0
# Security Hardening options
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now zitadel
msg_ok "Created Services"
msg_ok "Created Service"
msg_info "Zitadel initial setup"
zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null &
sleep 60
kill $(lsof -i | awk '/zitadel/ {print $2}' | head -n1)
useradd zitadel
msg_ok "Zitadel initialized"
if [[ "$var_zitadel_login" != "v1" ]]; then
NODE_VERSION="24" setup_nodejs
fetch_and_deploy_gh_release "zitadel-login" "zitadel/zitadel" "prebuild" "latest" "/opt/zitadel-login" "zitadel-login.tar.gz"
msg_info "Set ExternalDomain to current IP and restart Zitadel"
IP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
sed -i "0,/localhost/s/localhost/${IP}/" /opt/zitadel/config.yaml
systemctl stop -q zitadel
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
systemctl restart -q zitadel
msg_ok "Zitadel restarted with ExternalDomain set to current IP"
msg_info "Create zitadel-rerun.sh"
cat <<EOF >~/zitadel-rerun.sh
systemctl stop zitadel
timeout --kill-after=5s 15s zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
systemctl restart zitadel
msg_info "Setting up Zitadel Login"
$STD apt install -y nginx
create_self_signed_cert "zitadel"
cat <<EOF >/opt/zitadel/login.env
ZITADEL_API_URL=http://127.0.0.1:8081
ZITADEL_API_AWAITINITIALCONN=5m
ZITADEL_SERVICE_USER_TOKEN_FILE=/opt/zitadel/login-client.pat
ZITADEL_SESSION_COOKIE_SECRET=$(random_password 48)
NEXT_PUBLIC_BASE_PATH=/ui/v2/login
HOSTNAME=127.0.0.1
PORT=3000
EOF
msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml"
chmod 600 /opt/zitadel/login.env /opt/zitadel/login-client.pat
cat <<EOF >/etc/systemd/system/zitadel-login.service
[Unit]
Description=Zitadel Login
After=network.target zitadel.service
Wants=zitadel.service
[Service]
Type=simple
WorkingDirectory=/opt/zitadel-login
EnvironmentFile=/opt/zitadel/login.env
ExecStart=/opt/zitadel-login/entrypoint.sh node apps/login/server.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now zitadel-login
cat <<'EOF' >/etc/nginx/sites-available/zitadel
server {
listen 8080 ssl;
http2 on;
server_name _;
ssl_certificate /etc/ssl/zitadel/zitadel.crt;
ssl_certificate_key /etc/ssl/zitadel/zitadel.key;
error_page 497 =301 https://$http_host$request_uri;
location = / {
return 302 /ui/v2/login/;
}
location /ui/v2/login {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /api/ {
rewrite ^/api(/.*)$ $1 break;
grpc_pass grpc://127.0.0.1:8081;
grpc_set_header Host $http_host;
}
location / {
grpc_pass grpc://127.0.0.1:8081;
grpc_set_header Host $http_host;
}
}
EOF
nginx_enable_site "zitadel"
msg_ok "Set up Zitadel Login"
fi
motd_ssh
customize