apps/docs/content/self-hosting/deploy/linux.mdx
import Disclaimer from "./_disclaimer.mdx"; import DefaultUser from "./_defaultuser.mdx"; import Next from "./_next.mdx"; import NoteInstanceNotFound from "./troubleshooting/_note_instance_not_found.mdx";
<Callout type="warn">Be aware! This guide does not work for the newly updated version of Zitadel 4! Learn more
Please use Docker version if you want to use Zitadel 4.
</Callout>Download a postgresql binary as described in the PostgreSQL docs.
Zitadel is tested against PostgreSQL latest stable tag and latest Ubuntu LTS.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Download the Zitadel release according to your architecture from Github, unpack the archive and copy zitadel binary to /usr/local/bin
LATEST=$(curl -i https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r'); ARCH=$(uname -m); case $ARCH in armv5*) ARCH="armv5";; armv6*) ARCH="armv6";; armv7*) ARCH="arm";; aarch64) ARCH="arm64";; x86) ARCH="386";; x86_64) ARCH="amd64";; i686) ARCH="386";; i386) ARCH="386";; esac; wget -c https://github.com/zitadel/zitadel/releases/download/$LATEST/zitadel-linux-$ARCH.tar.gz -O - | tar -xz && sudo mv zitadel-linux-$ARCH/zitadel /usr/local/bin
ZITADEL_DATABASE_POSTGRES_DSN=postgresql://root:postgres@localhost:5432/postgres?sslmode=disable ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled
ZITADEL_DATABASE_POSTGRES_DSN=postgresql://root:postgres@localhost:5432/postgres?sslmode=disable ZITADEL_EXTERNALSECURE=false ZITADEL_FIRSTINSTANCE_MACHINEKEYPATH=/tmp/zitadel-admin-sa.json ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_USERNAME=zitadel-admin-sa ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_NAME=Admin ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINEKEY_TYPE=1 zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled
# then you can move your machine key
mv /tmp/zitadel-admin-sa.json $HOME/zitadel-admin-sa.json
This key can be used to provision resources with for example Terraform.
<Next components={props.components} /> <Disclaimer components={props.components} />