MENU

搭建zitadel并通过nginx反向代理

July 30, 2025 • Read: 10 • 教程·折腾

前提已经部署好 postgres 数据库,并且会nginx ssl配置,全部使用docker compose 部署

1. postgres 创建zitadel专用数据库及用户(可选)

改步骤可选,建议先创建

# 删除存在的zitadel数据库,可选,重建时候可以先删除
psql -U POSTGRES -c "DROP DATABASE IF EXISTS zitadel;"
# 创建用户
psql -U POSTGRES -c "CREATE USER zitadel WITH PASSWORD 'your_zitadel_user_password';"
# 创建数据库
psql -U POSTGRES -c "CREATE DATABASE zitadel OWNER zitadel;"
# 授权
psql -U POSTGRES -c "GRANT ALL PRIVILEGES ON DATABASE zitadel TO zitadel;"

2. 配置文件准备

在目录 /opt/zitadel 下创建 zitadel.yaml

ExternalSecure: true #使用外部nginx ssl
ExternalDomain: foo.com #你的域名,建议不要带zitadel,不然登录域名会两个zitadel很奇怪
ExternalPort: 443 #这里端口为nginx的ssl端口,用于拼接日志登录控制台等url

Database:
  postgres:
    Host: 'postgres'
    Port: 5432
    Database: zitadel
    User:
      Username: 'zitadel'
      Password: 'your_zitadel_user_password'
      SSL:
        Mode: 'disable'
    Admin:
      # postgres 超级管理员账号及密码,用于自动生成 zitadel 自动化创建上述 zitadel,可选,建议配置上
      Username: 'POSTGRES'
      Password: 'POSTGRES'
      SSL:
        Mode: 'disable'

FirstInstance:
  DefaultLanguage: zh
  Org:
    Human:
      Username: 'root'
      Password: 'RootPassword1!'
      PreferredLanguage: zh

3. docker compose 文件定义

services:
  zitadel:
    restart: 'always'
    image: 'ghcr.hub.ihalo.top/zitadel/zitadel:v3.3.2'
    container_name: zitadel
    command: 'start-from-init --masterkey "UxhbHSZuQL2uB2tM9ZQzPvtoFqriVCdU" --config /zitadel.yaml --steps /zitadel.yaml --tlsMode external' # masterkey为32个字符的随机字符串,建议不要携带标点符号及特殊字符
    environment:
      - TZ=Asia/Shanghai
      - ZITADEL_LOG_LEVEL=debug #日志等级等一切就绪后修改为info
    ports:
      - '3085:8080' #端口定义,nginx方向代理时候注意端口
    volumes:
      - '/opt/zitadel/zitadel.yaml:/zitadel.yaml'

# 和 postgres 数据库同一个网络,笔者这里为 docker_app_default
networks:
  default:
    name: docker_app_default
    external: true

4. 反向代理

server {
    listen 80;
    listen [::]:80;
    server_name foo.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name foo.com;

    # ssl 配置
    # include /opt/software/nginx/conf.d/foo.com.ssl.conf.incl;
    sl_certificate /ssl.d/foo.com/cert.pem;
    ssl_certificate_key /ssl.d/foo.com/key.pem;

    location / {
        grpc_pass grpc://127.0.0.1:3085; # 注意对应的端口
        grpc_set_header Host $host;
    }
}

5. 登录测试

打开 foo.com,可以通过 root@zitadel.foo.com 这个初始账号登录,密码为上述的 RootPassword1!

6. 修改日志等级

参考:


本文由 ONE 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
如有版权疑问交流,请给我留言:oneisall8955@gmail.com
本文永久链接:http://liuzhicong.cn/index.php/guide/zitadel-install-with-docker.html

Archives QR Code Tip
QR Code for this page
Tipping QR Code