CloudDiskServer
开发环境
- 操作系统: Ubuntu 22.04
- 编程语言: C++11
- 构建工具: Make
- 数据库: MySQL 8.0
- 容器化平台: Docker
技术栈
- 消息队列: RabbitMQ(使用
SimpleAmqpClient
库,Docker 部署) - 对象存储服务: 阿里云对象存储(Alibaba Cloud OSS)
- 服务注册中心: Consul(使用
ppconsul
库) - Web框架: wfrest(C++ 异步 Web 框架)
- RPC机制: sRPC(基于 Workflow 框架)
安装与配置指南
为了顺利运行本项目,请确保安装和配置必要的环境和依赖,并根据需要调整配置文件中的相关参数,以适应具体环境和需求。
1. 安装 ppconsul
ppconsul 是 Consul 的 C++ 客户端库。
1.1 安装必要的依赖
1 | sudo apt-get update && sudo apt-get install cmake libcurl4-openssl-dev libboost-all-dev |
1.2 下载并构建 ppconsul
1 | git clone https://github.com/oliora/ppconsul.git && cd ppconsul && mkdir build && cd build && cmake .. && make && sudo make install && sudo ldconfig |
2. Consul 部署与使用
按照以下步骤部署和配置 Consul:
2.1 启动 Consul 服务器容器
1 | sudo docker pull consul:1.15.3 && sudo docker run --hostname consulsvr1 --name consul_node_1 -d -p 8500:8500 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:1.15.3 agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0 |
2.2 获取分配的 IP 地址
1 | sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' consul_node_1 |
2.3 启动其它两个 Consul 节点并加入集群
确保将上述命令中的 <IP_ADDRESS>
替换为实际的 IP 地址。
1 | sudo docker run --hostname consulsvr2 --name consul_node_2 -d -p 8501:8500 consul:1.15.3 agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join <IP_ADDRESS> && sudo docker run --hostname consulsvr3 --name consul_node_3 -d -p 8502:8500 consul:1.15.3 agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -join <IP_ADDRESS> |
2.4 查看集群状态
1 | sudo docker exec -t consul_node_1 consul members |
2.5 测试 Consul UI 和 API
启动并测试后,您可以通过以下 URL 访问 Consul 服务:
3. 安装阿里云OSS SDK并设置OSS环境变量
3.1 安装必要的依赖
1 | sudo apt-get install libssl-dev libcurl4-gnutls-dev |
3.2 设置环境变量
编辑 ~/.bashrc
文件:
1 | nano ~/.bashrc |
在文件末尾添加以下内容:
1 | export OSS_ACCESS_KEY_ID="your-access-key-id" |
保存并关闭文件后,使其生效:
1 | source ~/.bashrc |
3.3 修改 oss.hpp
文件配置
确保在 oss.hpp
文件中正确配置了阿里云OSS的相关信息,如 Endpoint
和 BucketName
。
4. 安装并配置 Nginx
4.1 安装 Nginx
1 | sudo apt install nginx && sudo systemctl status nginx |
4.2 配置 Nginx
编辑 Nginx 配置文件:
1 | sudo vim /etc/nginx/nginx.conf |
将配置文件修改为以下内容:
1 | user root; |
4.3 检查配置文件语法是否正确
1 | sudo nginx -t |
如果输出显示配置文件语法正确:
1 | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok |
4.4 重新加载或重启 Nginx 服务
重新加载配置:
1 | sudo systemctl reload nginx |
如果需要,您可以选择重启 Nginx 服务:
1 | sudo systemctl restart nginx |
5. MySQL 安装与配置
5.1 安装 MySQL
1 | sudo apt install -y mysql-server-8.0 libmysqlclient-dev |
安装完成后,MySQL 服务会自动启动。
5.2 检查 MySQL 状态
1 | sudo systemctl status mysql |
5.3 设置 MySQL root 用户密码
由于安装时没有设置密码,使用以下命令登录并设置密码:
1 | sudo mysql |
在 MySQL 控制台中执行以下 SQL 语句,将 root 用户的密码设置为 1234
:
1 | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234'; |
5.4 重新登录 MySQL
1 | mysql -uroot -p |
输入密码 1234
进行登录。
5.5 打开 MySQL 配置文件
MySQL 的 bind-address
通常位于配置文件 mysqld.cnf
中。
1 | sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
注意:配置文件的路径可能因系统或 MySQL 版本而异。如果上面的路径不存在,可以尝试以下路径之一:
/etc/mysql/my.cnf
/etc/my.cnf
5.6 修改 bind-address
的值
在打开的配置文件中,查找以下行:
1 | bind-address = 127.0.0.1 |
根据您的需求修改 bind-address
的值:
允许仅本地访问(默认设置):
1
bind-address = 127.0.0.1
允许所有网络接口访问:
1
bind-address = 0.0.0.0
5.7 重启 MySQL 服务以应用更改
1 | sudo systemctl restart mysql |
5.8 验证 MySQL 是否绑定到新的地址
您可以使用 ss
或 netstat
命令来验证 MySQL 是否正确绑定到指定的地址和端口(默认为 3306)。
使用 ss
:
1 | sudo ss -tuln | grep 3306 |
5.9 导入数据库
运行 tbl_sql.sql
文件以导入数据库:
1 | mysql -uroot -p your_database < tbl_sql.sql |
6. 安装并配置 RabbitMQ
6.1 启动 RabbitMQ 容器
1 | sudo docker run -d --hostname rabbitsvr --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /data/rabbitmq:/var/lib/rabbitmq rabbitmq:management |
6.2 访问 RabbitMQ 管理界面
打开浏览器访问 http://
6.3 根据 amqp.hpp
完成配置
确保根据项目需求配置 RabbitMQ 的队列和交换机,具体配置可参考 amqp.hpp
文件中的实现。
7. 安装 AMQP 的 C++ 客户端 SDK
7.1 下载源码包
请确保已下载以下源码包:
rabbitmq-c-0.11.0.tar.gz
SimpleAmqpClient-2.5.1.tar.gz
7.2 安装依赖
1 | sudo apt install libboost-dev libboost-system-dev libboost-chrono-dev |
7.3 构建并安装
对于 rabbitmq-c
1 | tar -xzf rabbitmq-c-0.11.0.tar.gz && cd rabbitmq-c-0.11.0 && mkdir build && cd build && cmake .. && make && sudo make install && sudo ldconfig |
对于 SimpleAmqpClient
1 | tar -xzf SimpleAmqpClient-2.5.1.tar.gz && cd SimpleAmqpClient-2.5.1 && mkdir build && cd build && cmake .. && make && sudo make install && sudo ldconfig |
8. 安装 Workflow
8.1 下载源码包
请确保已下载 workflow-0.11.3.tar.gz
。
8.2 安装依赖并构建
1 | sudo apt install cmake && tar -xzf workflow-0.11.3.tar.gz && cd workflow-0.11.3 && mkdir build && cd build && cmake .. && make && sudo make install && sudo ldconfig |
9. 安装 wfrest
9.1 下载源码包
请确保已下载 wfrest-0.9.6.tar.gz
。
9.2 构建并安装
1 | tar -xzf wfrest-0.9.6.tar.gz && cd wfrest-0.9.6 && mkdir build && cd build && cmake .. && make && sudo make install && sudo ldconfig |
10. 安装 Protobuf
10.1 下载源码包
请确保已下载 protobuf-3.20.1.tar.gz
。
10.2 构建并安装
1 | tar -xzf protobuf-3.20.1.tar.gz && cd protobuf-3.20.1 && sudo apt-get install autoconf automake libtool curl make g++ unzip && ./autogen.sh && ./configure && make && sudo make install && sudo ldconfig |
10.3 验证Protobuf
执行protoc,如果出现操作指南说明安装成功了。
11. 安装 srpc
11.1 下载源码包
请确保已下载 srpc-0.10.2.tar.gz
。
11.2 安装依赖并构建
1 | sudo apt install liblz4-dev libsnappy-dev && tar -xzf srpc-0.10.2.tar.gz && cd srpc-0.10.2 && mkdir build && cd build && cmake .. && make && sudo make install && sudo ldconfig |
常见问题
Q1: 为什么需要使用 nlohmann::json
,而不是 wfrest 自带的 Json
类?
A1: 项目中选择使用 nlohmann::json
,是因为 wfrest 自带的 Json
类在处理嵌套 JSON 结构时存在一定的限制,导致JSON构造失败。
- Title: CloudDiskServer
- Author: van
- Created at : 2024-06-30 22:00:22
- Updated at : 2024-11-17 13:01:41
- Link: https://xblog.aptzone.cc/2024/06/30/CloudDiskServer/
- License: All Rights Reserved © van