群晖 NAS 自托管服务完全指南
目录
前置准备
- 群晖型号:建议内存 ≥ 2GB(运行 Gitea 和 Vaultwarden 足够,Plex 转码可能需要更多)
- 系统版本:DSM 7.0 及以上(Container Manager 已集成)
- 网络:拥有公网 IP(或支持 IPv6),并可在路由器上配置端口转发
- 域名(可选但推荐):拥有一个自己的域名,用于统一管理服务访问
- 工具:群晖套件中心、Container Manager(Docker)、File Station、控制面板
轻量代码托管 —— Gitea
1. 为什么选择 Gitea 而非 GitLab
- 资源占用极低:内存常驻约 200~500 MB,启动秒级
- 功能完整:支持仓库、PR、Issue、Wiki、Actions(CI)等
- 适合场景:个人开发者、小团队,或资源有限的 NAS
2. 通过 Docker 部署 Gitea
2.1 创建数据文件夹
在 File Station 中新建目录,例如:
1 | /docker/gitea/data |
2.2 拉取镜像并运行容器
- 在 Container Manager 的“注册表”中搜索
gitea/gitea,下载latest标签。 - 创建容器时:
- 端口映射:
- 本地端口
3000→ 容器端口3000(Web) - 本地端口
1022→ 容器端口22(SSH,避免与群晖自带 SSH 冲突)
- 本地端口
- 存储空间:
/docker/gitea/data→/data/docker/gitea/config→/etc/gitea(可选)
- 资源限制:建议内存上限 512 MB,CPU 限制 1 核。
- 端口映射:
2.3 初始化 Gitea
- 浏览器访问
http://群晖IP:3000 - 首次安装页面:
- 数据库:选择
SQLite3(个人足够) - SSH 服务器端口:填写
1022 - 基础 URL:填写
http://群晖IP:3000(后续可改为域名)
- 数据库:选择
- 创建管理员账号,完成安装。
3. 配置 SSL 与域名访问(参见下一章)
网络与安全配置 —— DDNS、泛解析、SSL 与反向代理
1. 动态 DNS(DDNS)—— 解决动态 IP 问题
如果你的公网 IP 会变化,必须配置 DDNS 让域名始终指向最新 IP。
1.1 使用群晖官方 DDNS(最简单)
- 控制面板 → 外部访问 → DDNS → 新增
- 服务供应商:
Synology - 主机名:注册一个
xxxx.synology.me免费域名 - 勾选“从 Let’s Encrypt 获取证书并设为默认”
1.2 使用自有域名 + 第三方 DDNS(推荐)
如果你拥有自己的域名(如 meatball.org.cn),建议使用 DNSPod 或阿里云,并搭配 DDNS-GO(开源)实现多域名自动更新。
- 在 DNS 服务商添加解析:
- 记录1:主机记录
@,类型A,值填当前公网 IP(稍后会自动更新) - 记录2(泛解析):主机记录
*,类型A,值同公网 IP
- 记录1:主机记录
- 泛解析的作用:一次性让所有子域名(如
git.xxx、nas.xxx)都指向同一 IP,无需逐个添加。 - 部署 DDNS-GO:
- 在群晖 Container Manager 中运行
jeessy/ddns-go容器 - 配置 DNSPod 的 API Token,并添加需要更新的域名任务(主域名和泛解析只需更新
@和*两条记录即可)
- 在群晖 Container Manager 中运行
2. SSL 证书
为了让服务支持 HTTPS,需要申请证书。
- 通配符证书(推荐):一张证书可覆盖主域名和所有子域名。
- 申请方式:
- 控制面板 → 安全性 → 证书 → 新增 → 从 Let’s Encrypt 获取
- 域名填写:
*.你的域名, 你的域名(逗号分隔) - 勾选“设为默认证书”
3. 反向代理(群晖自带功能)
通过反向代理,将不同子域名转发到 NAS 内不同端口的服务。
- 控制面板 → 登录门户 → 高级 → 反向代理服务器 → 新增
- 示例规则(为 Gitea):
- 来源:协议
HTTPS,主机名git.你的域名,端口443 - 目的地:协议
HTTP,主机名localhost,端口3000(Gitea 映射端口)
- 来源:协议
- 证书分配:在“证书”设置中,将通配符证书分配给该反向代理规则。
4. 修改 Gitea 配置文件
- 编辑
/docker/gitea/data/gitea/conf/app.ini - 修改
[server]部分:1
2[server]
ROOT_URL = https://git.你的域名 - 重启 Gitea 容器。
常见问题与故障排查
Q1:Git 克隆时出现 schannel: failed to receive handshake
- 原因:Windows 的 Git 客户端与服务器 TLS 握手失败。
- 解决:
- 检查代理设置:
git config --global --get http.proxy,如有则取消。 - 临时绕过 SSL 验证测试:
git -c http.sslVerify=false clone ...,若能成功则说明证书信任问题。 - 确保 SSL 证书由公共 CA 签发(如 Let’s Encrypt),或手动将自签名证书导入系统信任区。
- 更新 Windows 系统和 Git 到最新版本。
- 检查代理设置:
Q3:泛解析不生效
- 检查:在 DNS 服务商处是否添加了主机记录为
*的 A 记录。 - 注意:如果单独为某个子域名添加过解析,会覆盖泛解析,需删除或确保指向相同 IP。
- 生效时间:DNS 缓存可能需要几分钟到数小时,可用
ping 子域名检查。
Q4:群晖自带 DDNS 无法输入泛域名(*)
- 说明:群晖 DDNS 只用于更新主域名,泛解析是需要在 DNS 服务商手动添加
*记录的。 - 操作:在 DNSPod / 阿里云控制台单独添加
*记录,然后使用第三方 DDNS(如 DDNS-GO)同时更新@和*两条记录。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chase!

