
| 阶段 | 关键任务 | 说明/避坑要点 |
|---|---|---|
| 1. 准备项目目录 | 创建清晰的文件结构 | 避免权限和路径错误的基础。 |
| 2. 配置认证文件 | 创建.htpasswd密码文件 | 确保密码文件格式正确,并注意在图形界面中正确设置文件权限。 |
| 3. 编写Docker Compose文件 | 定义服务、网络、挂载卷 | 这是核心配置文件,确保语法和缩进正确。 |
| 4. 配置Nginx | 编写nginx.conf和服务器配置 | 正确设置上游服务、认证、文件大小限制。 |
| 5. 飞牛NAS部署 | 在图形界面创建Compose项目 | 确保选择正确的项目路径和Compose文件。 |
| 6. 验证与测试 | 检查容器状态、测试访问和上传 | 通过日志排查问题,确保各项功能正常。 |
第一步:准备项目结构与文件
在飞牛NAS上创建一个独立的项目目录,例如 nginx_gateway。推荐的文件结构如下,这有助于清晰管理配置:
/nginx_gateway/
├── docker-compose.yml # Docker Compose 编排文件
├── nginx/
│ ├── nginx.conf # Nginx 主配置文件
│ └── conf.d/ # (可选) 可用于存放其他配置片段
└── auth/ └── .htpasswd # 存储用户名和密码的认证文件
🔐 第二步:配置认证文件
- 生成 .htpasswd 文件:使用 在线htpasswd工具。输入用户名为和秘密,点击生成,生成的结果复制到文本里,把文本重命名为:.htpasswd

- 设置文件权限(关键!):设置
auth文件夹权限,确保文件所有者有读写权限,或直接设置为101:101(Nginx容器内常用的用户ID和组ID),以避免Nginx进程无权限读取密码文件。
连接到飞牛NAS的SSH:使用如Terminal(macOS/Linux)或PuTTY(Windows)等工具,通过管理员账户SSH登录到你的飞牛NAS。地址是你的NAS IP,端口通常是22。
导航到项目目录:使用 cd命令进入你存放 auth文件夹的路径。例如:
cd /path/to/your/nginx_gateway
递归修改所有者:执行以下命令,将auth目录及其内部所有文件的所有者和组都改为UID 101和GID 101:
sudo chown -R 101:101 auth/
递归修改文件权限:执行以下命令,确保权限正确:
sudo chmod -R 755 auth/
🐳 第三步:编写 Docker Compose 文件
以下是 docker-compose.yml文件的内容
services:
nginx-gateway:
image: nginx:latest
container_name: nginx-gateway
ports:
- "8080:80" # 将NAS的8080端口映射到Nginx容器的80端口
volumes:
# 挂载Nginx配置文件
- /vol1/1000/docker/nginx_gateway/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
# 挂载认证文件
- /vol1/1000/docker/nginx_gateway/auth/.htpasswd:/etc/nginx/auth/.htpasswd:ro
network_mode: bridge
restart: unless-stopped # 容器异常退出时自动重启
重要提示:
- 挂载卷的路径(如
/vol1/1000/docker/nginx_gateway)需要替换为你在飞牛NAS上的实际绝对路径。
⚙️ 第四步:配置 Nginx
创建 nginx/nginx.conf文件,以下是核心配置,它解决了代理设置、认证、文件上传大小限制问题
user nginx;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 设置客户端最大请求体大小,解决大文件上传问题
client_max_body_size 20M;
# 定义上游服务器(你的朋友圈应用)
upstream moments_app {
server moments:3000; # 使用Docker Compose服务名"moments"进行内部通信
}
server {
listen 80;
server_name localhost;
# 启用基础认证
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/auth/.htpasswd;
location / {
# 代理到朋友圈应用
proxy_pass http://moments_app; # 请根据实际情况修改容器名和端口
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;
}
}
}
🚀 第五步:在飞牛NAS上部署
- 1.1.打开飞牛NAS的Docker管理界面。
- 2.2.进入 Compose 标签页,点击 新增项目。
- 3.3.填写项目名称(如
)。nginx_gateway - 4.4.在“路径”中选择你创建的项目根目录(
nginx_gateway)。 - 5.5.在“来源”部分,选择“上传docker-compose.yml”,然后选择你编辑好的
docker-compose.yml文件。 - 6.6.确认勾选“创建后立即启动”,然后点击“确定”。飞牛NAS将自动拉取镜像并启动容器。
✅ 第六步:验证与测试
部署完成后,进行以下检查以确保一切正常:
- 1.1.检查容器状态:在飞牛NAS的Docker管理界面,查看两个容器的状态是否为“已启动”。
- 2.2.测试认证:在浏览器访问
http://你的飞牛NAS的IP:8080。应该会弹出登录框,输入正确的用户名和密码后才能看到朋友圈内容。 - 3.3.测试图片上传:成功登录后,尝试上传一张图片,确认功能正常。
- 4.4.查看日志:如果遇到问题,首先查看容器日志。在飞牛Docker界面点击容器名称,进入“日志”标签页,查看Nginx和朋友圈应用的错误信息。