部署概览¶
服务本体是一个 Python 项目。账号、密钥和设备绑定在数据库里;登录限流在 Redis。这两处都要在,服务才能用。
选哪条路径¶
| 方式 | 适合 |
|---|---|
| Docker Compose | 机器上已经有自己的部署方式 |
| Kamal | 一台 Linux 服务器,从安装到发布都交给部署工具 |
两条路径用同一份镜像。Compose 和 Kamal 的数据卷不是同一套,选好之后不要混着搬,数据不会自己过去。
默认按一台机器跑。不要把同一份数据库挂到多台机器上,也不要给 Kamal 加第二台应用主机。写入量大了再换 PostgreSQL。
必要配置¶
生产必须有一份会话密钥,以及这台服务对外使用的主机名。改过配置要重启。没有密钥或数据库连不上,进程起不来。
会话密钥生成一次,填进 LICENSE_SESSION_SECRET,以后部署继续用这一份:
其余常见项:
| 变量 | 说明 |
|---|---|
LICENSE_ALLOWED_HOSTS |
逗号分隔的域名或主机名 |
LICENSE_DATABASE_URL |
不填则用 SQLite,见 数据库 |
LICENSE_REDIS_URL |
Redis 地址,例如 redis://redis:6379/0 |
LICENSE_TRUST_PROXY |
前面有会改写协议头的代理时设为 1 |
WEB_CONCURRENCY |
同时处理请求的进程数,默认 1;调大时提高内存上限 |
第一个管理员¶
管理员不能在网页上自行开通,只能用命令创建。
# Compose
docker compose -f compose.production.yaml exec app python manage.py createsuperuser
# Kamal
kamal superuser
创建完成后打开管理后台即可登录。
更新¶
先按 数据库 把数据拷出来,再换新版本。新进程启动时会自动做数据库迁移。把镜像换回旧版,数据库不会跟着回滚。
Docker Compose 在同一份 compose.production.yaml 上重建并拉起:
若用已经发布的镜像,先拉到你钉住的那一版,再 up -d,不要加 -v。
Kamal 先把要发布的代码提交,再执行:
用已经发布的镜像时: