在阿里云 Ubuntu 24.04 系统上部署该网盘项目的完整步骤。
1. 更新系统并安装依赖
1 | sudo apt update |
2. 克隆代码仓库
代码托管在 GitHub 上(地址未知,请替换为实际地址):
1 | git clone https://github.com/your-repo/GraduationDesign-main.git |
3. 创建配置文件和存储目录
3.1 创建配置文件目录和配置文件
1 | mkdir -p config |
根据实际情况修改数据库用户名和密码。
3.2 创建存储目录(代码中硬编码为 /storage)
1 | sudo mkdir -p /storage |
4. 配置 MySQL 数据库
4.1 启动并登录 MySQL
1 | sudo systemctl start mysql |
4.2 创建数据库和用户
1 | CREATE DATABASE cloud_disk CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
4.3 导入建表脚本
将提供的 SQL 脚本(vm-cenntos3Script.sql)导入数据库:
1 | mysql -u cloud_disk_user -p cloud_disk < vm-cenntos3Script.sql |
或者直接在 MySQL 命令行中执行:
1 | SOURCE /path/to/vm-cenntos3Script.sql; |
注意:脚本中可能包含 TRUNCATE 等数据操作,导入前请确认是否合适。
5. 编译项目
项目依赖 cJSON,但系统包可能没有提供头文件,最好手动编译并安装,或者直接将 libs/cJSON 目录下的源文件加入编译(Makefile 已经包含了 libs/cJSON/cJSON.c)。
如果系统有 libcjson-dev,则不需要额外操作。否则,请确保 libs/cJSON 目录存在且包含 cJSON.c 和 cJSON.h。
1 | # 检查是否有 libcjson-dev |
编译项目:
1 | make |
如果编译出错,检查是否缺少头文件路径。可能需要修改 Makefile 中的 CFLAGS 添加 -I/usr/include/mysql 等。
6. 运行服务器
1 | ./bin/cloud_disk |
默认监听端口 8080,监听所有地址 0.0.0.0。
6.1 配置防火墙(阿里云安全组)
在阿里云控制台的安全组中,添加入方向规则:
- 协议:TCP
- 端口:8080
- 来源:0.0.0.0/0(或根据需要限制)
同时,本地防火墙如果开启(如 ufw),需要允许 8080:
1 | sudo ufw allow 8080/tcp |
6.2 测试访问
在浏览器中访问 http://服务器公网IP:8080,应看到登录界面(index.html)。
7. (可选)使用 systemd 管理服务
创建 systemd 服务文件 /etc/systemd/system/cloud-disk.service:
1 | [Unit] |
启用并启动:
1 | sudo systemctl daemon-reload |
查看日志:
1 | sudo journalctl -u cloud-disk -f |
8. 注意事项
- 数据库密码和用户名请勿使用默认值,生产环境需加强。
- 存储目录
/storage应设置为合适的权限,并定期备份。 - 代码中 Token 有效期设置为 1 小时,可根据需要调整。
- 日志文件未写入文件,可在生产环境中添加日志重定向。
- 默认线程池大小和数据库连接池大小根据 CPU 核心数自动计算,适合大多数场景。
9. 常见问题排查
编译错误:找不到 mysql.h
安装libmysqlclient-dev并确认头文件路径。如果 Makefile 中使用mysql_config --cflags,确保该命令能正常输出。运行时连接数据库失败
检查数据库用户、密码、主机名是否正确,确认 MySQL 是否允许本地连接(bind-address = 127.0.0.1或0.0.0.0)。上传文件失败
检查/storage目录权限,确保运行服务的用户有读写权限。CORS 错误
前端代码中API_BASE是硬编码为http://192.168.2.131:8080,请修改为服务器的实际公网 IP 或域名,否则浏览器会跨域拦截。在编译时遇到 PIE 链接错误,原因是某些目标文件没有使用
-fPIE编译。修改 Makefile 的CFLAGS添加-fPIE即可解决。python3 -m http.server 8000默认只监听127.0.0.1(本机),外部无法访问。启动时加上--bind 0.0.0.0让服务器监听所有网络接口
简单长期运行方案
要让前端(index.html)通过 http:/ip:8000/ 访问,必须确保前端静态文件服务器一直在运行。使用 nohup 启动的 Python HTTP 服务器也会随着终端关闭而退出,因此也需要让它长期运行。
1. 创建统一启动脚本
在项目目录下创建 run_all.sh,同时启动前端和后端:
1 | cd /home/admin/cloud_disk |
2. 创建停止脚本
stop_all.sh 用于停止服务:
1 | cat > stop_all.sh << 'EOF' |
3. 设置开机自启(使用 crontab)
1 | crontab -e |
添加一行:
1 | @reboot /home/admin/cloud_disk/run_all.sh |
4. 立即启动
1 | ./run_all.sh |
5. 验证
- 前端:访问
http://ip:8000/应显示登录页面。 - 后端:登录后能正常与后端交互(需确保前端
index.html中的API_BASE已改为公网 IP:8080)。
注意事项
- 确保阿里云安全组已开放 8000 和 8080 端口(入方向)。
- Python HTTP 服务器是单线程,不适合高并发,但作为简单演示足够。
- 如果想让前端更稳定,可以用
nohup python3 -m http.server 8000 --bind 0.0.0.0 &代替上面脚本中的方式。 - 日志文件
frontend.log和cloud_disk.log会记录输出,便于排查问题。