menu_book 部署 · 配置 · 运维

教程文档

从零开始部署 OriginSNS,涵盖 Docker、宝塔、环境配置与日常运维。

快速开始

确保你的服务器已安装 DockerDocker Compose(建议 Docker 20.10+),然后执行以下命令:

git clone https://gitee.com/szjinghai_admin/origin.git
cd origin
docker compose up -d

首次启动会自动拉取镜像并初始化数据库,等待约 30 秒后访问 http://你的服务器IP:3000 即可看到 OriginSNS 首页。

提示:如果服务器在国内,建议先配置 Docker 镜像加速器(如阿里云容器镜像服务),否则拉取镜像可能较慢。

Docker 部署

容器架构

docker-compose.yml 定义了 5 个容器:

容器镜像作用
postgrespostgres:16主数据库,存储所有业务数据
redisredis:7-alpine缓存与 Session 管理
origin-migrateszjinghai/origin-migrate数据库迁移(启动后自动退出)
origin-webszjinghai/origin-web应用主容器(Next.js 服务)
updaterszjinghai/origin-updater守护进程,监控新版本自动更新

首次启动

# 拉取最新镜像
docker compose pull

# 启动所有服务(后台运行)
docker compose up -d

# 查看启动日志
docker compose logs -f origin-web

常用命令

# 查看容器状态
docker compose ps

# 重启某个服务
docker compose restart origin-web

# 停止所有服务
docker compose down

# 停止并删除数据(⚠️ 谨慎操作)
docker compose down -v
注意:docker compose down 不会删除数据库卷(volume),数据仍然保留。只有加 -v 才会清除所有数据。

宝塔面板部署

适用场景

如果你已经安装了宝塔面板,习惯用可视化管理服务器,可以用宝塔的 Docker 管理器来部署 OriginSNS。

步骤一:安装 Docker 管理器

宝塔面板 → 软件商店 → 搜索「Docker 管理器」→ 安装。

步骤二:上传项目文件

# SSH 进入服务器,将项目文件放到 /www/wwwroot/origin
cd /www/wwwroot
git clone https://gitee.com/szjinghai_admin/origin.git

步骤三:修改编排路径

宝塔 Docker 管理器需要编排文件的绝对路径。将 docker-compose.yml 中的相对路径替换为绝对路径:

# 示例:将 ./scripts 替换为 /www/wwwroot/origin/scripts
# 详细替换规则见仓库中的 baota-compose.path 文件

步骤四:启动编排

宝塔面板 → Docker → 编排模板 → 添加 → 粘贴 docker-compose.yml 内容 → 启动。

环境配置参考

所有可配置的环境变量定义在 .env 文件中。将 .env.example 复制为 .env 后按需修改:

变量名默认值说明
POSTGRES_USERorigin数据库用户名
POSTGRES_PASSWORD数据库密码(必填,请使用强密码)
POSTGRES_DBorigin数据库名称
NEXTAUTH_SECRETNextAuth 会话加密密钥(必填)
NEXTAUTH_URLhttp://localhost:3000站点完整 URL
REDIS_PASSWORDRedis 密码(建议设置)
UPLOAD_DIR./uploads上传文件存储路径
SMTP_HOST邮件服务器地址(可选)
SMTP_PORT587邮件服务器端口
安全建议:生产环境务必修改 POSTGRES_PASSWORDNEXTAUTH_SECRETREDIS_PASSWORD,使用强随机字符串。可以用 openssl rand -base64 32 生成。

在线更新与回滚

自动更新(推荐)

Updater 守护进程默认每 30 分钟检查一次新镜像。发现新版本后自动拉取并滚动重启 origin-web 容器,用户无感知。

# 查看更新日志
docker compose logs updater

手动更新

# 拉取最新镜像
docker compose pull origin-web origin-migrate

# 重新启动
docker compose up -d

回滚到指定版本

使用仓库中 scripts/ 目录下的回滚脚本:

# 回滚到上一个版本
bash scripts/rollback.sh

# 回滚到指定版本
bash scripts/rollback.sh v3.1.3

Nginx 反向代理

生产环境建议使用 Nginx 做反向代理,统一 80/443 端口入口。仓库提供了 nginx-dual-site.example.conf 示例配置,支持单服务器部署多个 OriginSNS 站点。

基本配置示例

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置 HTTPS(Certbot)

# 安装 certbot
apt install certbot python3-certbot-nginx

# 自动获取并配置 SSL 证书
certbot --nginx -d your-domain.com

常见问题

Q: 启动后访问 3000 端口无响应?

先检查容器是否正常运行:docker compose ps。确认 origin-web 状态为 Up。如果一直在重启,查看日志:docker compose logs origin-web

Q: 数据库连接失败?

检查 .envPOSTGRES_PASSWORD 是否正确设置。首次启动时 postgres 容器初始化需要几秒钟,origin-migrate 和 origin-web 会自动重试连接。

Q: 如何迁移数据到新服务器?

# 旧服务器导出
docker compose exec postgres pg_dump -U origin origin > backup.sql

# 新服务器导入
docker compose exec -T postgres psql -U origin origin < backup.sql

Q: 镜像拉取很慢?

国内服务器建议配置 Docker 镜像加速器。编辑 /etc/docker/daemon.json

{
  "registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"]
}

然后重启 Docker:systemctl restart docker

Q: 宝塔面板编排启动失败?

宝塔的 Docker 管理器对相对路径支持不完整,请将 docker-compose.yml 中的 ./ 路径全部替换为项目实际路径,或参考 baota-compose.path 文件。

还没开始部署?

选择最适合你的部署方案,几分钟内上线社区。

rocket_launch 查看部署方案