从零开始部署 OriginSNS,涵盖 Docker、宝塔、环境配置与日常运维。
确保你的服务器已安装 Docker 和 Docker 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-compose.yml 定义了 5 个容器:
| 容器 | 镜像 | 作用 |
|---|---|---|
| postgres | postgres:16 | 主数据库,存储所有业务数据 |
| redis | redis:7-alpine | 缓存与 Session 管理 |
| origin-migrate | szjinghai/origin-migrate | 数据库迁移(启动后自动退出) |
| origin-web | szjinghai/origin-web | 应用主容器(Next.js 服务) |
| updater | szjinghai/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 管理器」→ 安装。
# 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_USER | origin | 数据库用户名 |
POSTGRES_PASSWORD | — | 数据库密码(必填,请使用强密码) |
POSTGRES_DB | origin | 数据库名称 |
NEXTAUTH_SECRET | — | NextAuth 会话加密密钥(必填) |
NEXTAUTH_URL | http://localhost:3000 | 站点完整 URL |
REDIS_PASSWORD | — | Redis 密码(建议设置) |
UPLOAD_DIR | ./uploads | 上传文件存储路径 |
SMTP_HOST | — | 邮件服务器地址(可选) |
SMTP_PORT | 587 | 邮件服务器端口 |
POSTGRES_PASSWORD、NEXTAUTH_SECRET 和 REDIS_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 做反向代理,统一 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;
}
}
# 安装 certbot
apt install certbot python3-certbot-nginx
# 自动获取并配置 SSL 证书
certbot --nginx -d your-domain.com
先检查容器是否正常运行:docker compose ps。确认 origin-web 状态为 Up。如果一直在重启,查看日志:docker compose logs origin-web。
检查 .env 中 POSTGRES_PASSWORD 是否正确设置。首次启动时 postgres 容器初始化需要几秒钟,origin-migrate 和 origin-web 会自动重试连接。
# 旧服务器导出
docker compose exec postgres pg_dump -U origin origin > backup.sql
# 新服务器导入
docker compose exec -T postgres psql -U origin origin < backup.sql
国内服务器建议配置 Docker 镜像加速器。编辑 /etc/docker/daemon.json:
{
"registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"]
}
然后重启 Docker:systemctl restart docker
宝塔的 Docker 管理器对相对路径支持不完整,请将 docker-compose.yml 中的 ./ 路径全部替换为项目实际路径,或参考 baota-compose.path 文件。