#!/usr/bin/env bash # Copyright (c) 2021-2026 community-scripts ORG # Author: dave-yap (dave-yap) | Co-Author: remz1337 # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://zitadel.com/ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors setting_up_container network_check update_os # Configuration variables ZITADEL_DIR="/opt/zitadel" LOGIN_DIR="/opt/login" CONFIG_DIR="/etc/zitadel" ZITADEL_USER="zitadel" ZITADEL_GROUP="zitadel" DB_NAME="zitadel" DB_USER="zitadel" DB_PASSWORD="$(openssl rand -base64 32 | tr -d '=/+' | head -c 32)" POSTGRES_ADMIN_PASSWORD="$(openssl rand -base64 32 | tr -d '=/+' | head -c 32)" MASTERKEY="$(openssl rand -base64 32 | tr -d '=/+' | head -c 32)" API_PORT="8080" LOGIN_PORT="3000" # Detect server IP address SERVER_IP=$(hostname -I | awk '{print $1}') msg_info "Installing Dependencies (Patience)" $STD apt install -y ca-certificates msg_ok "Installed Dependecies" # Create zitadel user msg_info "Creating zitadel system user" groupadd --system "${ZITADEL_GROUP}" useradd --system --gid "${ZITADEL_GROUP}" --shell /bin/bash --home-dir "${ZITADEL_DIR}" "${ZITADEL_USER}" msg_ok "Created zitadel system user" fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "${ZITADEL_DIR}" "zitadel-linux-amd64.tar.gz" chown -R "${ZITADEL_USER}:${ZITADEL_GROUP}" "${ZITADEL_DIR}" fetch_and_deploy_gh_release "login" "zitadel/zitadel" "prebuild" "latest" "${LOGIN_DIR}" "zitadel-login.tar.gz" chown -R "${ZITADEL_USER}:${ZITADEL_GROUP}" "${LOGIN_DIR}" NODE_VERSION="24" setup_nodejs PG_VERSION="17" setup_postgresql setup_go msg_info "Configuring Postgresql" $STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '${POSTGRES_ADMIN_PASSWORD}';" msg_ok "Configured PostgreSQL" msg_info "Installing Zitadel" cd "${ZITADEL_DIR}" mkdir -p ${CONFIG_DIR} echo "${MASTERKEY}" > ${CONFIG_DIR}/.masterkey # Update config.yaml for network access cat > "${CONFIG_DIR}/config.yaml" < "${CONFIG_DIR}/login.env" < "${CONFIG_DIR}/api.env" < /etc/systemd/system/zitadel-api.service < /etc/systemd/system/zitadel-login.service < "${CONFIG_DIR}/INSTALLATION_INFO.txt" < zitadel_backup_\$(date +%Y%m%d).sql Database restore: PGPASSWORD=${DB_PASSWORD} psql -h localhost -U ${DB_USER} ${DB_NAME} < zitadel_backup_YYYYMMDD.sql ################################################################################ EOF chmod 600 "${CONFIG_DIR}/INSTALLATION_INFO.txt" chown "${ZITADEL_USER}:${ZITADEL_GROUP}" "${CONFIG_DIR}/INSTALLATION_INFO.txt" cp ${ZITADEL_DIR}/admin.pat ${CONFIG_DIR}/admin.pat.BAK cp ${ZITADEL_DIR}/login-client.pat ${CONFIG_DIR}/login-client.pat.BAK msg_ok "Saved Credentials" msg_info "Create zitadel-rerun.sh" cat <~/zitadel-rerun.sh systemctl stop zitadel timeout --kill-after=5s 15s zitadel setup --masterkeyFile ${CONFIG_DIR}/.masterkey --config ${CONFIG_DIR}/config.yaml" systemctl restart zitadel EOF msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml" motd_ssh customize cleanup_lxc