mirror of
https://github.com/zitadel/zitadel.git
synced 2025-02-28 16:37:24 +00:00
refactor(local): docker compose (#2892)
* refactor(local): docker compose * fix(compose): disable logging in gateway * docs: guide for local development * docs(local): quickstart * docs: resources * use docker-compose dns * Apply suggestions from code review Co-authored-by: Florian Forster <florian@caos.ch> Co-authored-by: Elio Bischof <eliobischof@gmail.com> Co-authored-by: Florian Forster <florian@caos.ch>
This commit is contained in:
parent
738a5821da
commit
9a374f9c5c
@ -23,9 +23,6 @@ RUN dep ensure && \
|
|||||||
go env -w GO111MODULE=auto && \
|
go env -w GO111MODULE=auto && \
|
||||||
go install ./go/grpcwebproxy
|
go install ./go/grpcwebproxy
|
||||||
|
|
||||||
# ADD ./etc/localhost.crt /etc
|
|
||||||
# ADD ./etc/localhost.key /etc
|
|
||||||
|
|
||||||
ENV BKD_HOST=backend-run
|
ENV BKD_HOST=backend-run
|
||||||
ENV BKD_PORT=50001
|
ENV BKD_PORT=50001
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
FROM ubuntu:latest AS started
|
|
||||||
#install dependencies with a workaround for the 412 error
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install curl -y
|
|
||||||
|
|
||||||
#prepare script
|
|
||||||
COPY build/local/zitadel-started.sh zitadel-started.sh
|
|
||||||
RUN chmod +x /zitadel-started.sh
|
|
||||||
|
|
||||||
ENTRYPOINT [ "/zitadel-started.sh" ]
|
|
@ -2,18 +2,47 @@ version: '3.8'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
profiles: ['database']
|
profiles: ['backend', 'storage']
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- zitadel
|
- zitadel
|
||||||
image: cockroachdb/cockroach:v21.2.3
|
image: cockroachdb/cockroach:v21.2.3
|
||||||
command: start-single-node --insecure --listen-addr=0.0.0.0
|
command: start-single-node --insecure --listen-addr=0.0.0.0
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 30s
|
||||||
|
retries: 5
|
||||||
|
start_period: 20s
|
||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
- 26257:26257
|
- 26257:26257
|
||||||
|
|
||||||
|
# schema changes on the database
|
||||||
|
db-migrations:
|
||||||
|
profiles: ['backend', 'storage']
|
||||||
|
restart: on-failure
|
||||||
|
networks:
|
||||||
|
- zitadel
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
image: flyway/flyway:latest
|
||||||
|
volumes:
|
||||||
|
- ../../migrations/cockroach:/flyway/sql
|
||||||
|
environment:
|
||||||
|
- FLYWAY_PLACEHOLDERS_eventstorepassword=NULL
|
||||||
|
- FLYWAY_PLACEHOLDERS_managementpassword=NULL
|
||||||
|
- FLYWAY_PLACEHOLDERS_adminapipassword=NULL
|
||||||
|
- FLYWAY_PLACEHOLDERS_authpassword=NULL
|
||||||
|
- FLYWAY_PLACEHOLDERS_notificationpassword=NULL
|
||||||
|
- FLYWAY_PLACEHOLDERS_authzpassword=NULL
|
||||||
|
- FLYWAY_PLACEHOLDERS_queriespassword=NULL
|
||||||
|
command: -url=jdbc:postgresql://db:26257/defaultdb -user=root -password= -connectRetries=5 migrate
|
||||||
|
|
||||||
|
# minio is used to store assets
|
||||||
minio:
|
minio:
|
||||||
profiles: ['backend']
|
profiles: ['backend', 'storage']
|
||||||
image: minio/minio:RELEASE.2021-06-14T01-29-23Z
|
image: minio/minio:RELEASE.2021-06-14T01-29-23Z
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
networks:
|
networks:
|
||||||
@ -32,28 +61,11 @@ services:
|
|||||||
- nas
|
- nas
|
||||||
- /export
|
- /export
|
||||||
|
|
||||||
db-migrations:
|
# ZITADEL needs several keys to encrypt data
|
||||||
profiles: ['database']
|
# this container generates the required keys
|
||||||
restart: on-failure
|
# and stores them into zitadel/.keys
|
||||||
networks:
|
|
||||||
- zitadel
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
image: flyway/flyway:latest
|
|
||||||
volumes:
|
|
||||||
- ../../migrations/cockroach:/flyway/sql
|
|
||||||
environment:
|
|
||||||
- FLYWAY_PLACEHOLDERS_eventstorepassword=NULL
|
|
||||||
- FLYWAY_PLACEHOLDERS_managementpassword=NULL
|
|
||||||
- FLYWAY_PLACEHOLDERS_adminapipassword=NULL
|
|
||||||
- FLYWAY_PLACEHOLDERS_authpassword=NULL
|
|
||||||
- FLYWAY_PLACEHOLDERS_notificationpassword=NULL
|
|
||||||
- FLYWAY_PLACEHOLDERS_authzpassword=NULL
|
|
||||||
- FLYWAY_PLACEHOLDERS_queriespassword=NULL
|
|
||||||
command: -url=jdbc:postgresql://db:26257/defaultdb -user=root -password= -connectRetries=5 migrate
|
|
||||||
|
|
||||||
keys:
|
keys:
|
||||||
profiles: ['init-backend']
|
profiles: ['backend', 'backend-stub']
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
networks:
|
networks:
|
||||||
- zitadel
|
- zitadel
|
||||||
@ -66,13 +78,20 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./local.env
|
- ./local.env
|
||||||
|
|
||||||
|
# To interact with ZITADEL requires some data setted up.
|
||||||
|
# Due to the evolution of ZITADEL it's required to add additional
|
||||||
|
# setup steps, because of this fact it's recommended to rerun the setup
|
||||||
|
# on each restart, at least after a new version got released
|
||||||
backend-setup:
|
backend-setup:
|
||||||
profiles: ['init-backend']
|
profiles: ['backend']
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
networks:
|
networks:
|
||||||
- zitadel
|
- zitadel
|
||||||
depends_on:
|
depends_on:
|
||||||
- keys
|
db-migrations:
|
||||||
|
condition: service_completed_successfully
|
||||||
|
keys:
|
||||||
|
condition: service_completed_successfully
|
||||||
build:
|
build:
|
||||||
context: ../..
|
context: ../..
|
||||||
dockerfile: build/zitadel/Dockerfile
|
dockerfile: build/zitadel/Dockerfile
|
||||||
@ -93,14 +112,28 @@ services:
|
|||||||
'setup',
|
'setup',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# starts the backend (API's) of ZITADEL
|
||||||
|
# Port 50001 serves the GRPC API
|
||||||
|
# Port 50002 serves the REST API
|
||||||
|
# Port 50003 serves the login GUI
|
||||||
backend-run:
|
backend-run:
|
||||||
profiles: ['backend']
|
profiles: ['backend']
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
networks:
|
networks:
|
||||||
- zitadel
|
- zitadel
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:50002/management/v1/healthz"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 30s
|
||||||
|
retries: 5
|
||||||
|
start_period: 20s
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
db:
|
||||||
- minio
|
condition: service_healthy
|
||||||
|
minio:
|
||||||
|
condition: service_healthy
|
||||||
|
backend-setup:
|
||||||
|
condition: service_completed_successfully
|
||||||
build:
|
build:
|
||||||
context: ../..
|
context: ../..
|
||||||
dockerfile: build/zitadel/Dockerfile
|
dockerfile: build/zitadel/Dockerfile
|
||||||
@ -114,6 +147,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- ZITADEL_EVENTSTORE_HOST=db
|
- ZITADEL_EVENTSTORE_HOST=db
|
||||||
ports:
|
ports:
|
||||||
|
- 50001:50001
|
||||||
- 50002:50002
|
- 50002:50002
|
||||||
- 50003:50003
|
- 50003:50003
|
||||||
command:
|
command:
|
||||||
@ -126,26 +160,17 @@ services:
|
|||||||
'start',
|
'start',
|
||||||
]
|
]
|
||||||
|
|
||||||
zitadel-started-up:
|
# the GRPC web gateway proxies the
|
||||||
profiles: ['setup']
|
# GRPC web calls to GRPC
|
||||||
networks:
|
# it's used in console (frontend) for example
|
||||||
- zitadel
|
|
||||||
extra_hosts:
|
|
||||||
host.docker.internal: host-gateway
|
|
||||||
build:
|
|
||||||
context: ../..
|
|
||||||
dockerfile: build/local/Dockerfile.started
|
|
||||||
volumes:
|
|
||||||
- ./environment.json:/environment.json
|
|
||||||
environment:
|
|
||||||
- BE_PORT=50002
|
|
||||||
- FE_PORT=4200
|
|
||||||
|
|
||||||
grpc-web-gateway:
|
grpc-web-gateway:
|
||||||
profiles: ['frontend']
|
profiles: ['backend']
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
logging:
|
logging:
|
||||||
driver: none
|
driver: none
|
||||||
|
depends_on:
|
||||||
|
backend-run:
|
||||||
|
condition: service_healthy
|
||||||
networks:
|
networks:
|
||||||
- zitadel
|
- zitadel
|
||||||
build:
|
build:
|
||||||
@ -154,16 +179,38 @@ services:
|
|||||||
image: grpcweb/grpcwebproxy
|
image: grpcweb/grpcwebproxy
|
||||||
ports:
|
ports:
|
||||||
- '50000:8080'
|
- '50000:8080'
|
||||||
environment:
|
|
||||||
- BKD_HOST=host.docker.internal
|
|
||||||
- BKD_PORT=50001
|
|
||||||
|
|
||||||
frontend-local-run:
|
# this service generates the environemnt.json
|
||||||
|
# needed in console.
|
||||||
|
# It curl's the client id of console and writes it to
|
||||||
|
# the environment.json
|
||||||
|
client-id:
|
||||||
|
profiles: ['frontend', 'console-stub']
|
||||||
|
depends_on:
|
||||||
|
backend-run:
|
||||||
|
condition: service_healthy
|
||||||
|
networks:
|
||||||
|
- zitadel
|
||||||
|
build:
|
||||||
|
context: ../..
|
||||||
|
dockerfile: build/local/Dockerfile.clientid
|
||||||
|
target: client-id
|
||||||
|
volumes:
|
||||||
|
- ./environment.json:/environment.json
|
||||||
|
environment:
|
||||||
|
- HOST=backend-run
|
||||||
|
- PORT=50002
|
||||||
|
|
||||||
|
# starts console in development mode
|
||||||
|
frontend-run:
|
||||||
profiles: ['frontend']
|
profiles: ['frontend']
|
||||||
networks:
|
networks:
|
||||||
- zitadel
|
- zitadel
|
||||||
depends_on:
|
depends_on:
|
||||||
- grpc-web-gateway
|
grpc-web-gateway:
|
||||||
|
condition: service_started
|
||||||
|
client-id:
|
||||||
|
condition: service_completed_successfully
|
||||||
build:
|
build:
|
||||||
context: ../..
|
context: ../..
|
||||||
dockerfile: build/console/Dockerfile
|
dockerfile: build/console/Dockerfile
|
||||||
@ -176,19 +223,5 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 4200:4200
|
- 4200:4200
|
||||||
|
|
||||||
client-id:
|
|
||||||
profiles: ['init-frontend']
|
|
||||||
networks:
|
|
||||||
- zitadel
|
|
||||||
build:
|
|
||||||
context: ../..
|
|
||||||
dockerfile: build/local/Dockerfile.clientid
|
|
||||||
target: client-id
|
|
||||||
volumes:
|
|
||||||
- ./environment.json:/environment.json
|
|
||||||
environment:
|
|
||||||
- HOST=host.docker.internal
|
|
||||||
- PORT=50002
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
zitadel: {}
|
zitadel: {}
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# ------------------------------
|
|
||||||
# prints a message as soon as
|
|
||||||
# ZITADEL is ready
|
|
||||||
# ------------------------------
|
|
||||||
|
|
||||||
be_status=""
|
|
||||||
env_status=""
|
|
||||||
console_status=""
|
|
||||||
|
|
||||||
while [[ $be_status != 200 && $env_status != 200 ]]; do
|
|
||||||
sleep 5
|
|
||||||
## This is a workaround for a race condition
|
|
||||||
if [[ $be_status -eq 412 ]]; then
|
|
||||||
echo "please restart the process once again to get rid of the 412 error!"
|
|
||||||
fi
|
|
||||||
be_status=$(curl -s -o /dev/null -I -w "%{http_code}" host.docker.internal:${BE_PORT}/clientID)
|
|
||||||
env_status=$(curl -s -o /dev/null -I -w "%{http_code}" host.docker.internal:${FE_PORT}/assets/environment.json)
|
|
||||||
echo "backend (${be_status}) or environment (${env_status}) not ready yet ==> retrying in 5 seconds"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "backend and environment.json ready!"
|
|
||||||
|
|
||||||
while [[ $console_status != 200 ]]; do
|
|
||||||
sleep 15
|
|
||||||
console_status=$(curl -s -o /dev/null -I -w "%{http_code}" host.docker.internal:${FE_PORT}/index.html)
|
|
||||||
echo "console (${console_status}) not ready yet ==> retrying in 15 seconds"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "console ready - please wait shortly!"
|
|
||||||
sleep 15
|
|
||||||
|
|
||||||
echo -e "++=======================================================================================++
|
|
||||||
|| ||
|
|
||||||
|| ZZZZZZZZZZZZ II TTTTTTTTTTTT AAAA DDDDDD EEEEEEEEEE LL ||
|
|
||||||
|| ZZ II TT AA AA DD DD EE LL ||
|
|
||||||
|| ZZ II TT AA AA DD DD EE LL ||
|
|
||||||
|| ZZ II TT AA AA DD DD EEEEEEEE LL ||
|
|
||||||
|| ZZ II TT AAAAAAAAAAAA DD DD EE LL ||
|
|
||||||
|| ZZ II TT AA AA DD DD EE LL ||
|
|
||||||
|| ZZZZZZZZZZZZ II TT AA AA DDDDDD EEEEEEEEEE LLLLLLLLLL ||
|
|
||||||
|| ||
|
|
||||||
|| ||
|
|
||||||
|| SSSSSSSSSS TTTTTTTTTTTT AAAA RRRRRRRR TTTTTTTTTTTT EEEEEEEEEE DDDDDD ||
|
|
||||||
|| SS TT AA AA RR RR TT EE DD DD ||
|
|
||||||
|| SS TT AA AA RR RR TT EE DD DD ||
|
|
||||||
|| SSSSSS TT AA AA RRRRRRRR TT EEEEEEEE DD DD ||
|
|
||||||
|| SS TT AAAAAAAAAAAA RRRR TT EE DD DD ||
|
|
||||||
|| SS TT AA AA RR RR TT EE DD DD ||
|
|
||||||
|| SSSSSSSSSS TT AA AA RR RR TT EEEEEEEEEE DDDDDD ||
|
|
||||||
|| ||
|
|
||||||
++=======================================================================================++"
|
|
||||||
|
|
||||||
echo "access the console here http://localhost:${FE_PORT}"
|
|
||||||
echo "access the login here http://localhost:50003/login"
|
|
||||||
echo "access the apis here http://localhost:50002"
|
|
@ -6,6 +6,11 @@ You should stay in the ZITADEL root directory to execute the statements in the f
|
|||||||
|
|
||||||
- Buildkit compatible docker installation
|
- Buildkit compatible docker installation
|
||||||
|
|
||||||
|
Minimum resources:
|
||||||
|
|
||||||
|
- CPU's: 2
|
||||||
|
- Memory: 4Gb
|
||||||
|
|
||||||
### env variables
|
### env variables
|
||||||
|
|
||||||
You can use the default vars provided in [this .env-file](../build/local/local.env) or create your own and update the paths in the [docker compose file](../build/local/docker-compose-local.yml).
|
You can use the default vars provided in [this .env-file](../build/local/local.env) or create your own and update the paths in the [docker compose file](../build/local/docker-compose-local.yml).
|
||||||
@ -22,53 +27,46 @@ This command generates the grpc stub for console into the folder console/src/app
|
|||||||
DOCKER_BUILDKIT=1 docker build -f build/console/Dockerfile . -t zitadel:gen-fe --target npm-copy -o .
|
DOCKER_BUILDKIT=1 docker build -f build/console/Dockerfile . -t zitadel:gen-fe --target npm-copy -o .
|
||||||
```
|
```
|
||||||
|
|
||||||
### Backend
|
### Start the Backend
|
||||||
|
|
||||||
With this command you can generate the stub for the backend.
|
With these commands you can generate the stub for the backend.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# generates grpc stub
|
# generates grpc stub
|
||||||
DOCKER_BUILDKIT=1 docker build -f build/zitadel/Dockerfile . -t zitadel:gen-be --target go-copy -o .
|
DOCKER_BUILDKIT=1 docker build -f build/zitadel/Dockerfile . -t zitadel:gen-be --target go-copy -o .
|
||||||
# generates keys for cryptography
|
# generates keys for cryptography
|
||||||
DOCKER_BUILDKIT=1 docker build --target copy-keys -f build/local/Dockerfile.keys . -o .keys
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
||||||
|
&& docker compose -f ./build/local/docker-compose-local.yml --profile backend-stub up --exit-code-from keys
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run
|
## Run
|
||||||
|
|
||||||
### Initialise data
|
### Start storage
|
||||||
|
|
||||||
Used if you want to setup the database and load the initial data.
|
Use this if you only want to start the storage services needed by ZITADEL. These services are started in background (detached).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile init-backend -p zitadel up
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
||||||
|
&& docker compose -f ./build/local/docker-compose-local.yml --profile storage up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
You can stop as soon as db-migrations AND backend-setup returned with exit code 0.
|
**On apple silicon:**
|
||||||
|
Restart the command (second terminal `docker restart zitadel_<SERVICE_NAME>_1`) if `db` logs `qemu: uncaught target signal 11 (Segmentation fault) - core dumped` or no logs are written from `db-migrations`.
|
||||||
|
|
||||||
### Initialise frontend
|
### Initialize the console
|
||||||
|
|
||||||
Used to set the client id of the console. This step is for local development. If you don't work with a local backend you have to set the client id manually.
|
Used to set the client id of the console. This step is for local development. If you don't work with a local backend you have to set the client id manually.
|
||||||
|
|
||||||
You must [initialise the data](###-Initialise-data)) first.
|
You must [initialise the data](###-Initialise-data)) first.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile backend --profile init-frontend -p zitadel up --exit-code-from client-id
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
||||||
|
&& docker compose -f ./build/local/docker-compose-local.yml --profile console-stub up --exit-code-from client-id
|
||||||
```
|
```
|
||||||
|
|
||||||
The command exists as soon as the client id is set.
|
The command exists as soon as the client id is set.
|
||||||
|
|
||||||
### Run database
|
### Start the Console
|
||||||
|
|
||||||
Used if you want to run the backend/console locally and only need the database. It's recommended to [initialise the data](###-Initialise-data) first.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f ./build/local/docker-compose-local.yml --profile database -p zitadel up
|
|
||||||
```
|
|
||||||
|
|
||||||
**On apple silicon:**
|
|
||||||
Restart the command (second terminal `docker restart zitadel_<SERVICE_NAME>_1`) if `db` logs `qemu: uncaught target signal 11 (Segmentation fault) - core dumped` or no logs are written from `db-migrations`.
|
|
||||||
|
|
||||||
### Run Console
|
|
||||||
|
|
||||||
The console service is configured for hot reloading. You can also use docker compose for local development.
|
The console service is configured for hot reloading. You can also use docker compose for local development.
|
||||||
|
|
||||||
@ -79,7 +77,7 @@ If you use the local backend ensure that you have [set the correct client id](##
|
|||||||
#### Run console in docker compose
|
#### Run console in docker compose
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f ./build/local/docker-compose-local.yml --profile frontend -p zitadel up
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose -f ./build/local/docker-compose-local.yml --profile frontend up
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run backend
|
### Run backend
|
||||||
@ -89,7 +87,7 @@ Used if you want to run the backend locally. It's recommended to [initialise the
|
|||||||
#### Run backend in docker compose
|
#### Run backend in docker compose
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile backend -p zitadel up
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose -f ./build/local/docker-compose-local.yml --profile storage --profile backend up
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Run backend locally
|
#### Run backend locally
|
||||||
|
@ -1,50 +1,63 @@
|
|||||||
# Quickstart with docker compose
|
# Quickstart with docker compose
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
The only prerequisite you need fullfill, is that you need to have docker installed with support for compose and buildkit. The resource limit must at least be:
|
||||||
|
|
||||||
|
* CPU's: 2
|
||||||
|
* Memory: 4Gb
|
||||||
|
|
||||||
|
## Start ZITADEL
|
||||||
|
|
||||||
You can start ZITADEL with a simple docker compose up.
|
You can start ZITADEL with a simple docker compose up.
|
||||||
|
|
||||||
The services are configured to restart if an error occurs.
|
The services are configured to restart if an error occurs.
|
||||||
|
|
||||||
In the following script the basic setup of the database is executed before ZITADEL starts. Execute the statement from the root of ZITADEL.
|
In the following script the basic setup of the database is executed before ZITADEL starts. Execute the statement from the root of ZITADEL.
|
||||||
|
|
||||||
You can connect to [ZITADEL on localhost:4200](http://localhost:4200) as soon as the following text appears:
|
You can connect to [ZITADEL on localhost:4200](http://localhost:4200) after the frontend compiled successfully. Initially it takes several minutes to start all containers.
|
||||||
|
|
||||||
```text
|
|
||||||
++=========++
|
|
||||||
|| ZITADEL ||
|
|
||||||
|| STARTED ||
|
|
||||||
++=========++
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
||||||
&& docker-compose -f ./build/local/docker-compose-local.yml --profile database -p zitadel up --exit-code-from db-migrations \
|
&& docker compose -f ./build/local/docker-compose-local.yml --profile backend --profile frontend up
|
||||||
&& sleep 5 \
|
|
||||||
&& docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile init-backend --profile init-frontend --profile backend --profile frontend --profile setup -p zitadel up
|
|
||||||
```
|
```
|
||||||
|
|
||||||
For a more detailed guide take a look at the [development guide](./development.md)
|
For a more detailed guide take a look at the [development guide](./development.md)
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
|
### Mac M1 (Apple Silicon)
|
||||||
|
|
||||||
|
Bellow are some errors we faced with apple silicon.
|
||||||
|
|
||||||
|
#### database-migrations don't start or stop without exit code
|
||||||
|
|
||||||
|
You can simply restart the database with the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
||||||
|
&& docker compose -f ./build/local/docker-compose-local.yml restart db
|
||||||
|
```
|
||||||
|
|
||||||
|
#### API call's block and don't return any response
|
||||||
|
|
||||||
|
The problem is that the database has a connection issues. You can simply restart the database with the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
||||||
|
&& docker compose -f ./build/local/docker-compose-local.yml restart db
|
||||||
|
```
|
||||||
|
|
||||||
### Build Errors
|
### Build Errors
|
||||||
|
|
||||||
If you experience strange docker error you might need to check that `buildkit` is enabled.
|
If you experience strange docker error you might need to check that `buildkit` is enabled.
|
||||||
|
|
||||||
Make sure to enable `"features": { "buildkit": true }` in your docker settings!
|
Make sure to enable `"features": { "buildkit": true }` in your docker settings!
|
||||||
|
|
||||||
### Error 412
|
|
||||||
|
|
||||||
If the line `backend (412), environment (000) or console (000) not ready yet ==> retrying in 5 seconds` contains a `412` you struck a race condition within the start process (It should exit 1 when this happens). This will be fixed in a future release. You can work around it by restarting the containers.
|
|
||||||
|
|
||||||
```Bash
|
|
||||||
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 \
|
|
||||||
docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile init-backend --profile init-frontend --profile backend --profile frontend --profile setup -p zitadel up
|
|
||||||
```
|
|
||||||
|
|
||||||
### Remove the quickstart
|
### Remove the quickstart
|
||||||
|
|
||||||
```Bash
|
```Bash
|
||||||
docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile init-backend --profile init-frontend --profile backend --profile frontend --profile setup -p zitadel rm
|
docker-compose -f ./build/local/docker-compose-local.yml --profile database --profile init-backend --profile init-frontend --profile backend --profile frontend rm
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are **confident** that you don't need to run the same ZITADEL instance again, go ahead and delete the `.keys` folder and reset the `environment.json` as well.
|
If you are **confident** that you don't need to run the same ZITADEL instance again, go ahead and delete the `.keys` folder and reset the `environment.json` as well.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user