Files
UploaderHui/部署文档.md
2026-04-18 17:41:47 +08:00

15 KiB
Raw Blame History

NAS图片上传系统 - 部署文档

适用环境群晖NAS + 公网服务器frp内网穿透 最后更新2026-04-17


1. 部署前准备

1.1 你需要的东西

项目 说明
公网服务器 有公网IP的云服务器阿里云/腾讯云等最低配1核1G即可
群晖NAS 已开启SSH能通过终端访问
NAS存储路径 决定图片存放在哪个共享文件夹下

1.2 整体部署架构

用户手机/电脑
    │
    ▼
公网服务器(运行 frps
    │  端口7000frp通信、8080对外访问
    │
    ▼  frp 内网穿透
    │
群晖NAS运行 Flask + frpc
    │  端口5000Flask服务
    │
    ▼
NAS磁盘存储图片

部署顺序:先配置服务器 → 再配置NAS → 最后验证

1.3 项目文件清单

nas-uploader/
├── app.py              ← Flask后端主程序
├── config.py           ← 配置读取模块
├── .env.example        ← 配置模板(需复制为.env
├── requirements.txt    ← Python依赖
├── start.sh            ← 启动脚本
├── static/
│   ├── css/style.css   ← 页面样式
│   ├── js/app.js       ← 前端逻辑
│   └── img/            ← 图标资源(可选)
└── templates/
    └── index.html      ← 主页面

2. 公网服务器部署frps

服务器只需要运行 frp 服务端frps不需要安装Python或其他依赖。

2.1 购买服务器

配置项 建议
系统 Ubuntu 22.04 LTS 或 Debian 12
配置 1核1G内存就够了frp只做流量转发不吃资源
带宽 1-3Mbps即可传截图够用
地域 选国内(延迟低,速度快)

2.2 SSH登录服务器

# 服务器购买后会得到公网IP和密码用SSH登录
ssh root@你的公网IP

首次登录会提示是否信任主机,输入 yes,然后输入密码。

2.3 下载并配置frps

版本说明截至2026年4月frp最新稳定版为 v0.68.1。frp官方只提供GitHub下载没有apt/yum等包管理器安装方式。

下载方式(任选一种能用的):

方式一:国内镜像加速(推荐)

mkdir -p /opt/frp && cd /opt/frp
# ghproxy镜像
wget https://mirror.ghproxy.com/https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz

方式二Gitee镜像

mkdir -p /opt/frp && cd /opt/frp
wget https://gitee.com/mirrors/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz

方式三GitHub官方国外服务器或能翻墙

mkdir -p /opt/frp && cd /opt/frp
wget https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz

方式四:自己电脑下载后传到服务器

  1. 在自己电脑浏览器打开:https://github.com/fatedier/frp/releases/tag/v0.68.1
  2. 下载 frp_0.68.1_linux_amd64.tar.gz
  3. 通过群晖Web界面上传到NAS或用SCP传到服务器
scp frp_0.68.1_linux_amd64.tar.gz root@你的服务器IP:/opt/frp/

方式五用curl代替wget有些服务器wget受限但curl能用

mkdir -p /opt/frp && cd /opt/frp
curl -L -o frp.tar.gz https://mirror.ghproxy.com/https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz
tar -xzf frp.tar.gz && mv frp_0.68.1_linux_amd64/* . && rm frp.tar.gz

下载完成后继续:

# 解压(如果上面方式五已经解压过就跳过)
tar -xzf frp_0.68.1_linux_amd64.tar.gz
mv frp_0.68.1_linux_amd64/* .

# 创建服务端配置文件
vi frps.toml

写入以下内容(请修改密码

# frp 服务端配置

# frp通信端口客户端通过此端口连接
bindPort = 7000

# 认证令牌(请改成你自己的强密码!客户端也要填一样的)
auth.token = "请改成你自己的强密码"

# 管理面板(可选,方便查看运行状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "请改成管理面板密码"

⚠️ 重要auth.token 是frp的认证密码防止别人盗用你的服务器转发流量一定要改成强密码

2.4 开放防火墙端口

服务器需要开放以下端口:

端口 用途 在哪里开放
7000 frp通信 云服务器安全组
7500 frp管理面板可选 云服务器安全组
8080 网站对外访问 云服务器安全组

操作步骤(以阿里云为例):

  1. 登录阿里云控制台
  2. 进入 ECS → 实例 → 安全组
  3. 添加入方向规则:
    • 端口 7000/TCP授权对象 0.0.0.0/0
    • 端口 7500/TCP授权对象 0.0.0.0/0如果需要管理面板
    • 端口 8080/TCP授权对象 0.0.0.0/0

不同云服务商操作类似,在"安全组"或"防火墙"中添加规则即可。

2.5 启动frps

cd /opt/frp
./frps -c frps.toml

看到以下输出说明启动成功:

frps started successfully

2.6 设置frps开机自启

vi /etc/systemd/system/frps.service

写入以下内容(注意修改路径

[Unit]
Description=frp server
After=network.target

[Service]
Type=simple
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

启用并启动:

systemctl enable frps
systemctl start frps

# 查看运行状态
systemctl status frps

2.7 验证frps

打开浏览器访问 http://公网IP:7500输入管理面板账号密码能看到面板说明frps正常运行。


3. 群晖NAS上的部署步骤

3.1 上传项目文件

方法一:通过群晖网页上传

  1. 打开群晖 File Station
  2. 进入你想存放项目的共享文件夹(如 web
  3. 上传整个 nas-uploader 文件夹

方法二通过SSH上传

# 在你的电脑上执行假设NAS内网IP为 192.168.1.100
scp -r nas-uploader/ your_admin@192.168.1.100:/volume1/web/

3.2 SSH登录群晖NAS

ssh your_admin@192.168.1.100

如果提示"connection refused",需要在群晖控制面板 → 终端机和SNMP → 开启SSH功能

3.3 配置环境

# 进入项目目录(根据你的实际路径调整)
cd /volume1/web/nas-uploader

# 复制配置文件
cp .env.example .env

# 编辑配置文件
vi .env

必须修改的配置项:

# 改成你实际的NAS存储路径例如
NAS_DATA_PATH=/volume1/photo/训练营图片

# 其他配置一般不需要改
PORT=5000
ALLOWED_EXTENSIONS=jpg,jpeg,png,gif,webp
MAX_FILES_COUNT=100
MAX_FILE_SIZE_MB=20

💡 路径说明NAS_DATA_PATH 是图片存储的根目录,上传的图片会保存在这个目录下的 训练营N期/X班/ 子文件夹中。建议使用群晖已有的共享文件夹路径。

3.4 安装Python依赖

群晖NAS自带Python 3但可能缺少pip。按以下步骤操作

# 检查Python版本
python3 --version

# 如果有pip直接安装
pip3 install flask python-dotenv

# 如果提示权限问题
pip3 install flask python-dotenv --break-system-packages

# 如果没有pip先安装
# 群晖DS718+等型号可以直接通过套件中心安装Python3

3.5 首次启动测试

cd /volume1/web/nas-uploader
python3 app.py

看到以下输出说明启动成功:

服务启动在 http://0.0.0.0:5000
 * Running on http://127.0.0.1:5000

此时在浏览器访问 http://NAS内网IP:5000 应该能看到上传页面。

3.6 验证上传功能

  1. 打开 http://NAS内网IP:5000
  2. 选择训练营和班级
  3. 选择几张图片上传
  4. 检查 NAS_DATA_PATH 目录下是否自动创建了对应的文件夹和图片文件
  5. 检查统计.md是否正确生成

4. 配置frp内网穿透NAS端

详细原理请参考 frp内网穿透_原理与部署指南.md

4.1 在NAS上安装frpc

# 下载frp根据NAS架构选择版本需和服务器端一致
# x86架构大多数群晖
mkdir -p /volume1/web/frp
cd /volume1/web/frp

# 以下任选一种参考服务器部署章节的5种下载方式
# 国内镜像(推荐):
wget https://mirror.ghproxy.com/https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz
# Gitee镜像
# wget https://gitee.com/mirrors/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz
# curl方式
# curl -L -o frp.tar.gz https://mirror.ghproxy.com/https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz

tar -xzf frp_0.68.1_linux_amd64.tar.gz
mv frp_0.68.1_linux_amd64/* .

4.2 创建frpc配置文件

vi frpc.toml

写入以下内容(请替换为你自己的信息

# frp 客户端配置

# 公网服务器地址改成你的服务器公网IP
serverAddr = "123.45.67.89"
serverPort = 7000

# 认证令牌(必须和服务端一致!)
auth.token = "请改成你自己的强密码"

# 图片上传网站代理
[[proxies]]
name = "nas-uploader"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5000
remotePort = 8080

参数说明:

参数 含义 怎么填
serverAddr 公网服务器IP 你的云服务器公网IP
serverPort 服务端通信端口 7000和服务端一致
auth.token 认证密码 和服务端填一样的
localPort NAS上Flask的端口 5000
remotePort 对外开放的端口 8080用户通过这个端口访问

4.3 启动frpc

cd /volume1/web/frp
./frpc -c frpc.toml

看到 start proxy success 说明连接成功!

4.4 验证公网访问

在手机或电脑上(使用非内网网络比如手机4G/5G访问

http://公网服务器IP:8080

如果能打开上传页面,说明整个链路通了!🎉


5. 设置开机自启(推荐)

5.1 服务器端frps自启

在服务器上第2节已经配置过确认一下

systemctl status frps
# 如果没运行:
systemctl enable frps && systemctl start frps

5.2 NAS端Flask服务自启

在NAS上创建systemd服务

sudo vi /etc/systemd/system/nas-uploader.service

写入以下内容(注意修改路径

[Unit]
Description=NAS Image Uploader
After=network.target

[Service]
Type=simple
WorkingDirectory=/volume1/web/nas-uploader
ExecStart=/usr/bin/python3 /volume1/web/nas-uploader/app.py
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl enable nas-uploader
sudo systemctl start nas-uploader

# 查看状态
sudo systemctl status nas-uploader

⚠️ 注意部分群晖型号可能不支持systemd可以用 supervisor 替代,或者通过群晖的"任务计划"功能设置开机脚本。

5.3 NAS端frpc自启

sudo vi /etc/systemd/system/frpc.service
[Unit]
Description=frp client
After=network.target

[Service]
Type=simple
ExecStart=/volume1/web/frp/frpc -c /volume1/web/frp/frpc.toml
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
sudo systemctl enable frpc
sudo systemctl start frpc

5.4 使用群晖任务计划(替代方案)

如果systemd不可用可以通过群晖控制面板设置

  1. 控制面板 → 任务计划 → 新增 → 触发的任务 → 用户自定义脚本
  2. 常规:设置任务名称"启动图片上传服务"
  3. 事件:开机
  4. 任务设置用户账号选root脚本内容
#!/bin/bash
# 启动Flask服务
cd /volume1/web/nas-uploader
nohup python3 app.py > /volume1/web/nas-uploader/app.log 2>&1 &

# 启动frpc
cd /volume1/web/frp
nohup ./frpc -c frpc.toml > /volume1/web/frp/frpc.log 2>&1 &

6. 群晖Docker部署可选

如果你的群晖支持DockerContainer Manager套件可以用Docker部署Flask服务

6.1 创建Dockerfile

在项目根目录创建 Dockerfile

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python3", "app.py"]

6.2 构建和运行

cd /volume1/web/nas-uploader

# 构建镜像
docker build -t nas-uploader .

# 运行容器
docker run -d \
  --name nas-uploader \
  --restart always \
  -p 5000:5000 \
  -v /volume1/photo/训练营图片:/app/data \
  -e NAS_DATA_PATH=/app/data \
  nas-uploader

-v 参数将NAS的存储目录挂载到容器内


7. 常见问题排查

7.1 页面打不开(内网)

检查步骤:
1. Flask服务是否在运行
   → systemctl status nas-uploader 或 ps aux | grep python
2. 端口是否被占用?
   → netstat -tlnp | grep 5000
3. 防火墙是否放行?
   → 群晖控制面板 → 安全性 → 防火墙 → 编辑规则

7.2 公网打不开

检查步骤:
1. frps是否在运行 → systemctl status frps
2. frpc是否在运行 → ps aux | grep frpc
3. frpc日志有无报错 → cat /volume1/web/frp/frpc.log
4. 公网服务器防火墙是否开放了7000和8080端口
   → 云服务器控制台 → 安全组
5. frp的token是否一致
   → 对比服务器frps.toml和NAS frpc.toml中的auth.token

7.3 上传失败

检查步骤:
1. NAS_DATA_PATH路径是否正确 → ls -la 路径
2. 目录是否有写入权限? → touch 路径/test && rm 路径/test
3. 磁盘空间是否充足? → df -h
4. 查看Flask日志 → cat /volume1/web/nas-uploader/app.log

7.4 图片上传后找不到文件

检查步骤:
1. 确认.env中的NAS_DATA_PATH路径
2. 查看该路径下是否生成了训练营文件夹
3. 文件夹名称格式必须是"训练营N期"

7.5 服务器frps启动失败

检查步骤:
1. 端口7000是否被占用 → netstat -tlnp | grep 7000
2. 配置文件格式是否正确? → cat /opt/frp/frps.toml
3. 查看详细错误 → ./frps -c frps.toml --log_level debug

8. 维护命令速查

服务器端

操作 命令
启动frps systemctl start frps
停止frps systemctl stop frps
重启frps systemctl restart frps
查看状态 systemctl status frps
查看日志 journalctl -u frps -f
查看管理面板 浏览器打开 http://公网IP:7500

NAS端

操作 命令
启动Flask systemctl start nas-uploader
停止Flask systemctl stop nas-uploader
重启Flask systemctl restart nas-uploader
启动frpc systemctl start frpc
停止frpc systemctl stop frpc
查看Flask日志 journalctl -u nas-uploader -f
查看frpc日志 journalctl -u frpc -f
查看存储目录 ls -la /volume1/photo/训练营图片
查看磁盘空间 df -h
手动更新统计 python3 -c "from app import update_statistics; update_statistics('训练营13期')"

9. 安全建议

  • 当前版本无密码保护,任何人知道网址都可以上传
  • 建议不要将网址公开分享给无关人员
  • 后续版本会添加访问密码功能
  • 建议定期检查上传的文件,防止滥用
  • 如果发现异常可以暂时停止Flask服务sudo systemctl stop nas-uploader
  • frp的 auth.token 一定要用强密码,防止被别人利用