From 17874771ccaee014e788a53210dad4c805bfca3e Mon Sep 17 00:00:00 2001 From: Robert Neumann Date: Tue, 25 Jun 2024 11:10:11 +0200 Subject: [PATCH] Feature/Use Zitadel Postgres Integration by default (#2181) replaces cockroachDB as default DB for Zitadel in the getting started script to deploy script. Users can switch back to cockroachDB by setting the environment variable ZITADEL_DATABASE to cockroach. --- .../workflows/test-infrastructure-files.yml | 59 ++++++- .../getting-started-with-zitadel.sh | 159 +++++++++++++----- 2 files changed, 167 insertions(+), 51 deletions(-) diff --git a/.github/workflows/test-infrastructure-files.yml b/.github/workflows/test-infrastructure-files.yml index ee9739e09..abdd18ceb 100644 --- a/.github/workflows/test-infrastructure-files.yml +++ b/.github/workflows/test-infrastructure-files.yml @@ -178,34 +178,79 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: run script + - name: run script with Zitadel PostgreSQL run: NETBIRD_DOMAIN=use-ip bash -x infrastructure_files/getting-started-with-zitadel.sh - - name: test Caddy file gen + - name: test Caddy file gen postgres run: test -f Caddyfile - - name: test docker-compose file gen + + - name: test docker-compose file gen postgres run: test -f docker-compose.yml - - name: test management.json file gen + + - name: test management.json file gen postgres run: test -f management.json - - name: test turnserver.conf file gen + + - name: test turnserver.conf file gen postgres run: | set -x test -f turnserver.conf grep external-ip turnserver.conf - - name: test zitadel.env file gen + + - name: test zitadel.env file gen postgres run: test -f zitadel.env - - name: test dashboard.env file gen + + - name: test dashboard.env file gen postgres run: test -f dashboard.env + + - name: test zdb.env file gen postgres + run: test -f zdb.env + + - name: Postgres run cleanup + run: | + docker-compose down --volumes --rmi all + rm -rf docker-compose.yml Caddyfile zitadel.env dashboard.env machinekey/zitadel-admin-sa.token turnserver.conf management.json zdb.env + + - name: run script with Zitadel CockroachDB + run: bash -x infrastructure_files/getting-started-with-zitadel.sh + env: + NETBIRD_DOMAIN: use-ip + ZITADEL_DATABASE: cockroach + + - name: test Caddy file gen CockroachDB + run: test -f Caddyfile + + - name: test docker-compose file gen CockroachDB + run: test -f docker-compose.yml + + - name: test management.json file gen CockroachDB + run: test -f management.json + + - name: test turnserver.conf file gen CockroachDB + run: | + set -x + test -f turnserver.conf + grep external-ip turnserver.conf + + - name: test zitadel.env file gen CockroachDB + run: test -f zitadel.env + + - name: test dashboard.env file gen CockroachDB + run: test -f dashboard.env + test-download-geolite2-script: runs-on: ubuntu-latest steps: - name: Install jq run: sudo apt-get update && sudo apt-get install -y unzip sqlite3 + - name: Checkout code uses: actions/checkout@v3 + - name: test script run: bash -x infrastructure_files/download-geolite2.sh + - name: test mmdb file exists run: test -f GeoLite2-City.mmdb + - name: test geonames file exists run: test -f geonames.db diff --git a/infrastructure_files/getting-started-with-zitadel.sh b/infrastructure_files/getting-started-with-zitadel.sh index eb1caf25e..39b9caf30 100644 --- a/infrastructure_files/getting-started-with-zitadel.sh +++ b/infrastructure_files/getting-started-with-zitadel.sh @@ -50,7 +50,7 @@ check_jq() { wait_crdb() { set +e while true; do - if $DOCKER_COMPOSE_COMMAND exec -T crdb curl -sf -o /dev/null 'http://localhost:8080/health?ready=1'; then + if $DOCKER_COMPOSE_COMMAND exec -T zdb curl -sf -o /dev/null 'http://localhost:8080/health?ready=1'; then break fi echo -n " ." @@ -61,14 +61,16 @@ wait_crdb() { } init_crdb() { - echo -e "\nInitializing Zitadel's CockroachDB\n\n" - $DOCKER_COMPOSE_COMMAND up -d crdb - echo "" - # shellcheck disable=SC2028 - echo -n "Waiting cockroachDB to become ready " - wait_crdb - $DOCKER_COMPOSE_COMMAND exec -T crdb /bin/bash -c "cp /cockroach/certs/* /zitadel-certs/ && cockroach cert create-client --overwrite --certs-dir /zitadel-certs/ --ca-key /zitadel-certs/ca.key zitadel_user && chown -R 1000:1000 /zitadel-certs/" - handle_request_command_status $? "init_crdb failed" "" + if [[ $ZITADEL_DATABASE == "cockroach" ]]; then + echo -e "\nInitializing Zitadel's CockroachDB\n\n" + $DOCKER_COMPOSE_COMMAND up -d zdb + echo "" + # shellcheck disable=SC2028 + echo -n "Waiting CockroachDB to become ready" + wait_crdb + $DOCKER_COMPOSE_COMMAND exec -T zdb /bin/bash -c "cp /cockroach/certs/* /zitadel-certs/ && cockroach cert create-client --overwrite --certs-dir /zitadel-certs/ --ca-key /zitadel-certs/ca.key zitadel_user && chown -R 1000:1000 /zitadel-certs/" + handle_request_command_status $? "init_crdb failed" "" + fi } get_main_ip_address() { @@ -156,7 +158,7 @@ create_new_application() { "'"$BASE_REDIRECT_URL2"'" ], "postLogoutRedirectUris": [ - "'"$LOGOUT_URL"'" + "'"$LOGOUT_URL"'" ], "RESPONSETypes": [ "OIDC_RESPONSE_TYPE_CODE" @@ -461,6 +463,20 @@ initEnvironment() { exit 1 fi + if [[ $ZITADEL_DATABASE == "" ]]; then + echo "Use Postgres as default Zitadel database." + echo "For using CockroachDB please the environment variable 'export ZITADEL_DATABASE=cockroach'." + POSTGRES_ROOT_PASSWORD="$(openssl rand -base64 32 | sed 's/=//g')@" + POSTGRES_ZITADEL_PASSWORD="$(openssl rand -base64 32 | sed 's/=//g')@" + ZDB=$(renderDockerComposePostgres) + ZITADEL_DB_ENV=$(renderZitadelPostgresEnv) + renderPostgresEnv > zdb.env + elif [[ $ZITADEL_DATABASE == "cockroach" ]]; then + echo "Use CockroachDB as Zitadel database." + ZDB=$(renderDockerComposeCockroachDB) + ZITADEL_DB_ENV=$(renderZitadelCockroachDBEnv) + fi + echo Rendering initial files... renderDockerCompose > docker-compose.yml renderCaddyfile > Caddyfile @@ -474,7 +490,7 @@ initEnvironment() { init_crdb - echo -e "\nStarting Zidatel IDP for user management\n\n" + echo -e "\nStarting Zitadel IDP for user management\n\n" $DOCKER_COMPOSE_COMMAND up -d caddy zitadel init_zitadel @@ -634,15 +650,15 @@ renderManagementJson() { "ExtraConfig": { "ManagementEndpoint": "$NETBIRD_HTTP_PROTOCOL://$NETBIRD_DOMAIN/management/v1" } - }, - "DeviceAuthorizationFlow": { - "Provider": "hosted", - "ProviderConfig": { - "Audience": "$NETBIRD_AUTH_CLIENT_ID_CLI", - "ClientID": "$NETBIRD_AUTH_CLIENT_ID_CLI", - "Scope": "openid" - } - }, + }, + "DeviceAuthorizationFlow": { + "Provider": "hosted", + "ProviderConfig": { + "Audience": "$NETBIRD_AUTH_CLIENT_ID_CLI", + "ClientID": "$NETBIRD_AUTH_CLIENT_ID_CLI", + "Scope": "openid" + } + }, "PKCEAuthorizationFlow": { "ProviderConfig": { "Audience": "$NETBIRD_AUTH_CLIENT_ID_CLI", @@ -679,16 +695,6 @@ renderZitadelEnv() { cat <