rag_knowledge_go部署到云服务器上
Go 项目云服务器部署:从交叉编译到服务运行
1. 前言
Go 项目开发完成后,需要部署到 Linux 云服务器运行。
相比其他语言,Go 具有较好的部署优势:
- 支持交叉编译,可以在 Windows 环境生成 Linux 可执行文件
- 编译后生成单个二进制文件
- 不依赖额外运行环境,上传即可运行
本文记录我的 RAG 知识库项目从本地开发到 Linux 云服务器部署的完整流程。
2. Go 项目交叉编译
由于本地开发环境为 Windows,而云服务器通常为 Linux,因此需要进行交叉编译。
编译命令
(这个就在vscode里面的终端就行了)
Windows PowerShell:
1 | $env:CGO_ENABLED=0 |
参数说明:
| 参数 | 作用 |
|---|---|
| CGO_ENABLED=0 | 关闭 CGO,生成纯 Go 静态编译程序,减少运行环境依赖 |
| GOOS=linux | 指定目标操作系统为 Linux |
| GOARCH=amd64 | 指定目标 CPU 架构 |
编译完成后生成:
1 | rag |
文件,该文件可以直接上传 Linux 服务器运行。
3. 上传服务器并运行
(我使用的是xshell远程连接服务器的,如果不想使用scp上传文件的话,也可以使用xshell相关的工具xftp就行,只要拖动文件就可以了)
上传文件
使用 scp 上传:
1 | scp rag root@服务器IP:/opt/rag-knowledge/ |
服务器目录:
1 | /opt/rag-knowledge/ |
添加执行权限
Linux 默认可能没有执行权限:
1 | chmod +x rag |
运行:
1 | ./rag |
4. 云服务器安全组配置
如果项目监听端口:
例如:
1 | 8080 |
需要在云服务器控制台开放对应端口。
否则:
- 程序正常运行
- 服务器内部可以访问
- 外网无法连接
配置:
1 | 安全组 |
记得ip别填的跟我一样,用你拥有的云服务器ip
5. RAG 知识库项目部署环境
服务器环境:
| 项目 | 配置 |
|---|---|
| 操作系统 | TencentOS (CentOS 系) |
| 项目目录 | /opt/rag-knowledge |
| 二进制文件 | rag |
| 配置文件 | config.yaml |
| 环境变量 | .env |
| 服务名称 | rag-knowledge |
项目依赖:
| 服务 | 作用 |
|---|---|
| MySQL 8.0 | 保存文档信息、聊天记录 |
| Redis | Embedding 缓存 |
| Qdrant | 向量数据库 |
整体架构:
1 | 用户请求 |
6. 使用 systemd 管理 Go 服务
为了让服务支持:
- 后台运行
- 开机启动
- 统一日志管理
使用 systemd 创建服务。
服务名称:
1 | rag-knowledge |
服务管理命令
启动:
1 | sudo systemctl start rag-knowledge |
重启:
1 | sudo systemctl restart rag-knowledge |
停止:
1 | sudo systemctl stop rag-knowledge |
查看状态:
1 | sudo systemctl status rag-knowledge |
查看实时日志:
1 | journalctl -u rag-knowledge -f |
查看最近日志:
1 | journalctl -u rag-knowledge -n 50 |
7. 数据库和依赖服务管理
MySQL
查看状态:
1 | sudo systemctl status mysqld |
进入数据库:
1 | mysql -u root -p |
常用操作:
1 | SHOW DATABASES; |
Redis
查看:
1 | sudo systemctl status redis |
Qdrant
Qdrant 使用 Docker 部署。
查看容器:
1 | docker ps |
8. 项目更新流程
当代码修改后,需要重新编译并上传。
1. 本地重新编译
1 | set GOOS=linux |
2. 上传服务器
1 | scp rag root@服务器IP:/opt/rag-knowledge/ |
如果修改配置文件:
1 | scp config.yaml root@服务器IP:/opt/rag-knowledge/ |
3. 重启服务
1 | sudo systemctl restart rag-knowledge |
查看:
1 | sudo systemctl status rag-knowledge |
9. 修改 systemd 配置
如果修改:
1 | /etc/systemd/system/rag-knowledge.service |
需要重新加载:
1 | sudo systemctl daemon-reload |
然后:
1 | sudo systemctl restart rag-knowledge |
不同修改对应操作:
| 修改内容 | 操作 |
|---|---|
| Go代码 | 重新编译 + 上传 + restart |
| config.yaml | 上传 + restart |
| .env | 上传 + restart |
| service文件 | daemon-reload + restart |
10. 总结
Go 项目部署流程:
1 | 本地开发 |
通过本次部署,完成了 Go 后端项目从本地开发环境到云服务器运行环境的完整流程,包括:
- Go 交叉编译
- Linux 文件权限管理
- systemd 服务管理
- MySQL/Redis/Qdrant 依赖部署
- 项目更新维护流程
ps: 只要你不把服务器关机,别人就能一直访问你的项目,但是如果是自己想试一下项目上线部署的过程,可以试玩就关机,下一次重启的时候公网ip地址可能会变。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 乃敢与君绝!









