干掉群晖 DSM 内置 Nginx,我的 NAS 我做主!
本文最后由豫见长安更新于2024 年 6 月 1 日,已超过225天没有更新。如果文章内容或图片资源失效,请留言反馈,将会及时处理,谢谢!
群晖 DSM 使用 Nginx 提供 Web 和反代服务,虽然方便,但有许多功能限制。例如不能批量替换、不能片段复用。这还不算什么,难受的是这内置的 Nginx 反应极其迟钝,修改配置等待重载生效的时间,都够我扒完一碗饭了。更别提配套的证书申请效率低下,即便换用 acme.sh 来签发证书也十分麻烦(例如这篇、这篇)。所以总体而言,并不好用。
我早就对群晖 DSM 的 Docker 和 Shell 深恶痛绝,而这次巴掌扇到了 Nginx 的脸上。
下面,就让我来教大家如何自立门户,额外安装一个 Nginx,接管群晖的网络反代乃至整个 DSM 内部的网页功能。
或者你可以使用 caddy,这样就连 SSL 证书都直接搞定了。但我不会,我只能讲讲我会的 Nginx。
解除端口占用
既然咱都另起炉灶了,那这内置 Nginx 占用的 443 和 80 端口就要先解除掉。
如果你不想执行这一步,可以在后续为自行安装的 Nginx 配置 8443 和 8080 端口。但本地内网访问还要敲端口我觉得超级麻烦,所以还是建议你先解除端口占用。
使用 root 用户登录 ssh,然后使用以下命令:
sed -i -e 's/80/8080/' -e 's/443/8444/' /usr/syno/share/nginx/server.mustache /usr/syno/share/nginx/DSM.mustache /usr/syno/share/nginx/WWWService.mustache
这一段命令的意思是,将 /usr/syno/share/nginx/server.mustache、/usr/syno/share/nginx/DSM.mustache、/usr/syno/share/nginx/WWWService.mustache 文件内的所有 80 替换成 8080, 443 替换成 8443。
再重启 Nginx,使修改生效:
synosystemctl restart nginx
可以在「控制面板 - 网络 - DSM 设置」里随便改一个端口号保存再改回去,就会自动重启 WEB 服务。或者直接重启 NAS 也可以,但耗时较长。
实际使用中重启系统并不会导致配置被覆盖,但以防万一,你可以在「控制面板 - 任务计划」中新增一个「触发的任务」,用户账号选择 root,事件选择「开机」,然后在「任务设置」内填入以下运行命令:
sed -i -e 's/80/8080/' -e 's/443/8444/' /usr/syno/share/nginx/server.mustache /usr/syno/share/nginx/DSM.mustache /usr/syno/share/nginx/WWWService.mustache
synosystemctl restart nginx
之后保存即可。
关闭反代服务
如果你已经在使用内置的反代服务,那么请全部关闭。即删除「控制面板 - 登录门户 - 反向代理服务器」中的所有配置。
如果你是正版群晖用户,请关闭 QuickConnect,否则后续无法使用自己安装的 Nginx 接管系统服务,如 Synology Photo、Synology Drive。
安装 Nginx 和 acme.sh
安装时需要连接 GitHub,请自行解决连接问题,比如使用镜像服务(如 mirror.ghproxy.com)。
使用 Docker 安装 Nginx 和 acme.sh。
这里用上我为了水博客容器化而准备的 dnmp:https://github.com/mikusaa/dnmp 。nginx 使用的是包含了 QUIC、HTTP/3、Google's brotli compression 的非官方的版本,具体信息可以参考官方文档。acme.sh 则是官方版本。
建议使用非 root 用户安装容器
首先,登录 SSH,进入 docker 文件夹:
cd /volume1/docker
因为群晖中安装 Docker 需要先创建文件夹,所以咱直接克隆这个仓库,就不手动创建文件夹了:
git clone https://github.com/mikusaa/dnmp.git
如果没有安装 Git 套件,请参考《优化群晖 NAS 的 Shell 使用体验》中的相关步骤安装一下吧!
由于指定使用了名为 dnmp 的网络,所以咱需要先创建一个 docker 网络。当然,也可以修改为任意你想要的网络名称,只是别忘了同时修改后面的 compose 网络配置。
那么,就新建一个名为 nas 的网络吧
docker network create -d bridge nas
再进入目录:
cd dnmp
复制一份配置文件:
cp docker-compose.yml.example docker-compose.yml
自行注释除 Nginx 和 acme.sh 以外的部分,因为 mysql 和 PHP 在 NAS 中你应该用不到,除非想在 NAS 里建站玩。或者,直接复制下面的内容替换上面的 docker-compose.yml 文件:
services:
acme.sh:
image: neilpang/acme.sh:latest
container_name: acme.sh
command: daemon
environment:
- DEPLOY_DOCKER_CONTAINER_LABEL=sh.acme.autoload.domain=dnmp
# - DEPLOY_DOCKER_CONTAINER_KEY_FILE=""
# - DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE=""
- DEPLOY_DOCKER_CONTAINER_RELOAD_CMD=nginx -s reload
- TZ=Asia/Shanghai
volumes:
- ./acme.sh:/acme.sh
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
networks:
- nas
nginx:
image: macbre/nginx-http3
container_name: nginx
user: root:root
ports:
- 80:80
- 443:443/tcp
# - 443:443/udp #若需使用quic,取消该端口的注释
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:rw
- ./nginx/ssl:/etc/nginx/ssl:rw
- ./nginx/rewrite:/etc/nginx/rewrite:ro
- ./nginx/logs:/home/wwwlogs:rw
- ./nginx/cache:/home/wwwcache:rw
- ./www:/home/wwwroot:rw
environment:
- TZ=Asia/Shanghai
labels:
- sh.acme.autoload.domain=dnmp
restart: unless-stopped
networks:
- nas
networks:
nas:
external: true
启动便可:
docker compose up -d
如果没有 Compose 或者不是最新版本导致报错,使用以下命令快速安装或更新:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
sh -c "curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > $DOCKER_CONFIG/cli-plugins/docker-compose"
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
检查版本:
docker compose version
输出 Docker Compose version v2.25.0 即可。
具体 Compose 的相关使用请参考《原来,群晖也能用 Docker Compose!》或自行搜索文档
签发证书
后续操作都默认是在 acme.sh 的容器内部终端中执行,否则请自行在命令前加上 docker exec acme.sh。或者在安装 ohmyzsh 后使用 alias 别名,具体参考《优化群晖 NAS 的 Shell 使用体验》。
申请 SSL 证书
acme.sh 是一个用于签发证书的脚本。关于 ACME 协议 的相关知识,你可以自行查找资料。这里直接介绍 acme.sh 的使用方法。
启动容器后,进入 acme.sh 容器内部的终端 sh :
docker exec -it acme.sh sh
文章标题:干掉群晖 DSM 内置 Nginx,我的 NAS 我做主!
文章链接:https://zhaojx.fun/archives/449/
最后编辑:2024 年 6 月 1 日 11:12 By 豫见长安
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)