在阿里云 Ubuntu 24.04 系统上部署该网盘项目的完整步骤。


1. 更新系统并安装依赖

1
2
3
4
5
6
7
8
9
10
sudo apt update
sudo apt upgrade -y

# 安装编译工具和依赖库
sudo apt install -y build-essential git
sudo apt install -y libmysqlclient-dev libssl-dev
sudo apt install -y libcjson-dev # 如果系统源有 libcjson-dev,否则需要手动编译

# 安装 MySQL 服务器(如果尚未安装)
sudo apt install -y mysql-server

2. 克隆代码仓库

代码托管在 GitHub 上(地址未知,请替换为实际地址):

1
2
git clone https://github.com/your-repo/GraduationDesign-main.git
cd GraduationDesign-main

3. 创建配置文件和存储目录

3.1 创建配置文件目录和配置文件

1
2
3
4
5
6
7
8
9
mkdir -p config
cat > config/cloud_disk.conf << 'EOF'
[database]
db_host = localhost
db_port = 3306
db_user = cloud_disk_user
db_pass = your_secure_password
db_name = cloud_disk
EOF

根据实际情况修改数据库用户名和密码。

3.2 创建存储目录(代码中硬编码为 /storage

1
2
sudo mkdir -p /storage
sudo chmod 777 /storage # 确保服务有写入权限,生产环境建议更严格的权限

4. 配置 MySQL 数据库

4.1 启动并登录 MySQL

1
2
sudo systemctl start mysql
sudo mysql

4.2 创建数据库和用户

1
2
3
4
5
CREATE DATABASE cloud_disk CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'cloud_disk_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON cloud_disk.* TO 'cloud_disk_user'@'localhost';
FLUSH PRIVILEGES;
USE cloud_disk;

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.ccJSON.h

1
2
3
4
5
# 检查是否有 libcjson-dev
dpkg -l | grep libcjson

# 如果没有,可以手动下载 cJSON
# 假设 cJSON 源码已经在 libs/cJSON 中

编译项目:

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
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Cloud Disk Server
After=network.target mysql.service

[Service]
Type=simple
User=root
WorkingDirectory=/root/GraduationDesign-main
ExecStart=/root/GraduationDesign-main/bin/cloud_disk
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用并启动:

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable cloud-disk
sudo systemctl start cloud-disk

查看日志:

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.10.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd /home/admin/cloud_disk
cat > run_all.sh << 'EOF'
#!/bin/bash
cd /home/admin/cloud_disk

# 启动后端(C 程序)
nohup ./bin/cloud_disk >> /var/log/cloud_disk.log 2>&1 &

# 启动前端静态文件服务器(Python HTTP Server)
nohup python3 -m http.server 8000 --bind 0.0.0.0 >> /var/log/frontend.log 2>&1 &

echo "Services started. PID: cloud_disk=$!, frontend=$!"
EOF

chmod +x run_all.sh

2. 创建停止脚本

stop_all.sh 用于停止服务:

1
2
3
4
5
6
7
8
cat > stop_all.sh << 'EOF'
#!/bin/bash
pkill cloud_disk
pkill -f "python3 -m http.server 8000"
echo "Services stopped."
EOF

chmod +x stop_all.sh

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)。

注意事项

  1. 确保阿里云安全组已开放 8000 和 8080 端口(入方向)。
  2. Python HTTP 服务器是单线程,不适合高并发,但作为简单演示足够。
  3. 如果想让前端更稳定,可以用 nohup python3 -m http.server 8000 --bind 0.0.0.0 & 代替上面脚本中的方式。
  4. 日志文件 frontend.logcloud_disk.log 会记录输出,便于排查问题。