Systemd 部署
本指南介绍如何在 Linux 主机上通过 systemd 直接运行 rs-ibed 服务。
- 一台使用
systemd的 Linux 主机 - 已安装好的
rs-ibed二进制,例如/opt/rs-ibed/rs-ibed - 一个
config.toml配置文件 - 可写的上传、缓存目录,以及可选的 SQLite 数据目录
服务端二进制名称是 rs-ibed。如果配置文件不在当前工作目录,需要通过 --config /path/to/config.toml 显式指定。
必需环境变量
Section titled “必需环境变量”默认情况下,RS-IBED 通过 IMG_ 前缀读取敏感环境变量:
IMG_AUTH_TOKENIMG_JWT_SECRETIMG_DATABASE_URL
如果你在 config.toml 中修改了 server.env_prefix,这里的变量名也要一起调整。
先创建工作目录和可写的数据目录。仓库内示例配置使用的是 ./data/uploads 与 ./data/cache,因此它们会相对于服务的工作目录解析。
sudo mkdir -p /opt/rs-ibed/data/uploadssudo mkdir -p /opt/rs-ibed/data/cachesudo mkdir -p /opt/rs-ibed/data如果你使用 SQLite,还要确保数据库文件的父目录可写。例如下面这个 URL 需要 /opt/rs-ibed/data 存在且可写:
export IMG_DATABASE_URL="sqlite:///opt/rs-ibed/data/image_host.db?mode=rwc"环境变量文件示例
Section titled “环境变量文件示例”通常建议把敏感信息放到环境变量文件,而不是直接写进 unit。
IMG_AUTH_TOKEN=replace-with-a-long-random-tokenIMG_JWT_SECRET=replace-with-a-long-random-secretIMG_DATABASE_URL=sqlite:///opt/rs-ibed/data/image_host.db?mode=rwc将它保存为 /etc/rs-ibed/rs-ibed.env,并收紧文件权限。
Unit 文件示例
Section titled “Unit 文件示例”创建 /etc/systemd/system/rs-ibed.service:
[Unit]Description=RS-IBED image hosting serviceAfter=network-online.targetWants=network-online.target
[Service]Type=simpleWorkingDirectory=/opt/rs-ibedExecStart=/opt/rs-ibed/rs-ibed --config /opt/rs-ibed/config.tomlEnvironmentFile=/etc/rs-ibed/rs-ibed.env# 也可以不用 EnvironmentFile,直接写成:# Environment=IMG_AUTH_TOKEN=replace-me# Environment=IMG_JWT_SECRET=replace-me# Environment=IMG_DATABASE_URL=sqlite:///opt/rs-ibed/data/image_host.db?mode=rwcRestart=on-failureRestartSec=5
[Install]WantedBy=multi-user.target重新加载 unit,启用并启动服务:
sudo systemctl daemon-reloadsudo systemctl enable --now rs-ibed查看当前状态:
sudo systemctl status rs-ibed持续查看日志:
sudo journalctl -u rs-ibed -fSQLite 与 PostgreSQL 注意事项
Section titled “SQLite 与 PostgreSQL 注意事项”SQLite
Section titled “SQLite”- 将
IMG_DATABASE_URL设置为 SQLite 路径,例如sqlite:///opt/rs-ibed/data/image_host.db?mode=rwc - SQLite 数据库文件必须放在持久化存储上
- 上传目录和缓存目录也必须放在持久化存储上,否则重启或清理后图片文件与缓存会丢失
PostgreSQL
Section titled “PostgreSQL”- 将
IMG_DATABASE_URL设置为 PostgreSQL 连接串,例如postgres://ibed:[email protected]:5432/ibed - 应用启动时会先连接维护库,再尝试自动创建目标数据库
- 因此 PostgreSQL 用户通常需要有连接
postgres库以及创建目标数据库的权限,除非目标数据库已经存在,或者你直接把数据库名设为postgres
服务运行后,在浏览器中打开 http://your-host:3000/ 并上传一张测试图片。
然后重启服务,确认元数据、上传文件与缓存都仍然可用:
sudo systemctl restart rs-ibedsudo systemctl status rs-ibed