跳转到内容

快速开始

本地开发或单机部署建议使用 Docker Compose。它会启动:

  • postgres:SyncTV 的主数据库。
  • redis:缓存、限流、OAuth2 state、集群协调等共享状态。
  • synctv:主服务进程,HTTP、gRPC、RTMP、STUN 都在同一个二进制里。

生产环境至少需要准备四类 secret:

名称用途推荐生成方式
SYNCTV_JWT_SECRET签发访问 token 和刷新 tokenopenssl rand -base64 32
SYNCTV_SECURITY_OPAQUE_SERVER_SETUP_SECRETOPAQUE 密码认证的稳定服务端 secretopenssl rand -base64 48
SYNCTV_SECURITY_CREDENTIAL_ENCRYPTION_KEY加密 Provider 凭据,必须是 64 位十六进制openssl rand -hex 32
SYNCTV_BOOTSTRAP_ROOT_PASSWORD第一次启动时创建 root 用户的密码使用密码管理器生成强密码
  1. 启动开发 Compose:

    Terminal window
    docker compose -f docker-compose.dev.yml up -d
  2. 查看服务状态:

    Terminal window
    docker compose -f docker-compose.dev.yml ps
    docker compose -f docker-compose.dev.yml logs -f synctv
  3. 进入容器执行管理命令:

    Terminal window
    docker compose -f docker-compose.dev.yml exec synctv synctv system stats

如果只是本地试用:

Terminal window
docker compose -f docker-compose.dev.yml up -d

开发 compose 已经内置可工作的开发 secret。不要把这些值用于生产环境。

查看服务状态:

Terminal window
docker compose -f docker-compose.dev.yml ps
docker compose -f docker-compose.dev.yml logs -f synctv

生产 compose 不会默默使用弱 secret。你需要显式设置:

Terminal window
export SYNCTV_JWT_SECRET="$(openssl rand -base64 32)"
export POSTGRES_PASSWORD="$(openssl rand -base64 32)"
export SYNCTV_SERVER_CLUSTER_SECRET="$(openssl rand -hex 32)"
export SYNCTV_SECURITY_OPAQUE_SERVER_SETUP_SECRET="$(openssl rand -base64 48)"
export SYNCTV_SECURITY_CREDENTIAL_ENCRYPTION_KEY="$(openssl rand -hex 32)"
export SYNCTV_BOOTSTRAP_ROOT_PASSWORD="请换成强密码"
docker compose up -d

如果漏掉必填项,docker compose configdocker compose up 会直接报错。这是预期行为,目的是避免生产环境用默认弱密码启动。

如果使用本地 synctv.yaml

Terminal window
cargo run -p synctv --bin synctv -- config --config synctv.yaml validate

这个命令会检查:

  • YAML 是否能解析。
  • JWT secret 是否足够强。
  • OPAQUE secret 是否存在且不是占位值。
  • Redis、OAuth2、WebAuthn、集群等依赖关系是否合理。
  • 端口、路径、超时、限流等数值是否在合理范围内。

bootstrap.create_root_user=true 时,SyncTV 会在数据库还没有 root 用户时创建一个 root 账号。

默认用户名来自:

bootstrap:
root_username: "root"

密码来自:

  • 配置文件里的 bootstrap.root_password
  • 或环境变量 SYNCTV_BOOTSTRAP_ROOT_PASSWORD
  • 或文件变量 SYNCTV_BOOTSTRAP_ROOT_PASSWORD_FILE

生产环境建议只用环境变量或 secret 文件,不要把 root 密码写进公开仓库。