Golang Go语言中大佬们你们的项目打包到部署的流程是怎么样的
Golang Go语言中大佬们你们的项目打包到部署的流程是怎么样的
比如我现在在本地开发完成了,需要打包部署到服务器上。 因为开发的时候好多配置项都是本地的,比如数据库连接啥的,部署到服务器上需要修改为正式的。
总不能在代码里把配置项修改了,然后在打包部署。完了开发的时候再改成测试的吧?
./server run --config prod.ini ./server run --config dev.ini ./server run --config local.ini
更多关于Golang Go语言中大佬们你们的项目打包到部署的流程是怎么样的的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
1、配置文件
2、配置管理中心,etcd 等方案很多
我写的玩具都是读取 Json 文件来获取配置。。。
你们配置不读文件的???
公司项目没用到 go,我自己写着玩的😂
emmmm 第一次见到配置 hardcode 在代码里的。。。
os.getenv()
看了下 b 站的一个开源 web 库就是用这种方法读写配置文件。。但是不知道是 os.getenv() 读取同目录下的 config.json 好呢。还是用这种方法比较好。
https://12factor.net/zh_cn/
拿走不谢
这不是个 golang 的问题
判断生产环境还是测试环境,然后用不同的数据库
k8s+configMap
写着玩,配置 hardcode 在代码里,也不科学鸭,换个机子改起来多累。
哪个配置管理中心最好?有推荐的么?
所以来向各位大佬取经了😀
单独建一个配置文件的代码库,持续集成流水线部署的时候,会直接拉取对应环境的配置文件部署。
相比读 path,配置文件可能会好点,毕竟跟着代码走,不用维护 path 什么的减少运维成本
能请教一下 docker 是怎么部署吗?
我现在一直以来的思路是抛开语言层面。比如 nodejs python 这些需要虚拟环境的语言。
我是用 docker 做一个包涵所有虚拟环境库的镜像。然后比如我的代码目录是 /home/deploy/app 我就映射 /home/deploy/app 进去镜像的根目录 /app 然后运行 python app.py 或者 node app.js
以后每次更新代码。我只需要在代码目录 git pull 然后 restart 一下容器就可以。。不用每次更新代码都打包一个镜像。
k8s+docker
dotenv
那你基本白用 docker 了,一般不是那么用的。
基本都是每个版本靠持续集成自动测试和构建镜像。
生产部署可以自动,也可以手动。
大项目有很多容器用 k8s,小一点用 swarm 再小一点单机用 docker-compose。
配置是在配置中心或者在启动集群的配置文件里的。用环境变量传入容器。
请教一下。如果按照小一点单机 docker-compose 来处理的话。。正常的配置文件应该怎么写比较好。
比如 redis -> ip:port mysql-> ip:port user:password 这些好像不能打包进镜像里面 config.yaml 或者 config.json 吧?
我有个思路是代码层读取环境变量 比如 go python 初始化项目的时候 读取一下+格式化一下 env[‘redis’] 和 env[‘mysql’]
然后在 docker-compose 写好 environment 这样可以吗?但是会不会导致上传代码的时候 docker-compose 也给上传了。让人家看的一目了解
参考 b 站
配置文件中设置不同的环境配置,然后配置一个 RunMode,不同环境使用不同的 RunMode
公司不写 Go
自己的玩具是读 yaml 的,同时带有命令行开关
除了配置文件,也可以考虑读环境变量
但是绝对不要写死在代码里
dotenv + 1
compose file 不放代码库里的,你可以放一个隐藏掉关键信息的 example。 部署的时候只需要这一个文件就行了,你也不需要把 repo clone 下来呀。
现在还有一个选择是用 docker secret。 这样部署的服务器上也看不到敏感信息了。 不过需要在代码里兼容读取。
在Go语言中,项目从打包到部署的流程通常包括以下几个关键步骤:
- 编译生成二进制文件:使用
go build
命令将Go源代码编译成独立的二进制文件。这一步是打包部署的基础,因为Go语言的静态编译特性使得生成的二进制文件可以在目标系统上直接运行,无需额外的运行时环境。 - 配置依赖项和环境变量:在目标服务器上,创建
.env
文件并添加必要的环境变量,如数据库URL和端口号。在代码中,使用os
包读取这些环境变量。 - 选择部署策略:根据应用需求和目标环境,选择合适的部署策略。可以将生成的二进制文件通过
scp
或rsync
等工具传输到目标服务器,并直接运行。或者,可以使用Docker容器化部署,创建Dockerfile并构建Docker镜像,然后运行容器。 - 监控和维护:部署后,持续监控应用的运行状态,包括CPU、内存、请求响应时间等。使用日志库记录关键事件和错误信息,并配置日志系统集中管理和分析日志。同时,定期更新应用依赖项和库,确保使用最新的安全补丁。
综上所述,Go语言项目的打包到部署流程涉及编译、配置、部署和监控等多个环节。通过遵循这些步骤,可以确保应用在不同环境中稳定、高效地运行。