The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
imherer

大佬们你们的 go 项目打包到部署的流程是怎么样的

  •  
  •   imherer · May 21, 2019 · 8227 views
    This topic created in 2729 days ago, the information mentioned may be changed or developed.
    比如我现在在本地开发完成了,需要打包部署到服务器上。 因为开发的时候好多配置项都是本地的,比如数据库连接啥的,部署到服务器上需要修改为正式的。

    总不能在代码里把配置项修改了,然后在打包部署。完了开发的时候再改成测试的吧?
    27 replies  •  2019-05-21 20:32:51 +08:00
    loveCoding
    loveCoding
    May 21, 2019❤️1
    1
    ./server run --config prod.ini ./server run --config dev.ini ./server run --config local.ini
    godgrp
    godgrp
    May 21, 2019❤️2
    2
    1、配置文件
    2、配置管理中心,etcd 等方案很多
    kwanzaa
    kwanzaa
    May 21, 2019❤️1
    3
    我写的玩具都是读取 Json 文件来获取配置。。。
    Immortal
    Immortal
    May 21, 2019
    4
    你们配置不读文件的???
    imherer
    imherer
    OP
    May 21, 2019
    5
    @Immortal 公司项目没用到 go,我自己写着玩的😂
    guyeu
    guyeu
    May 21, 2019
    6
    emmmm 第一次见到配置 hardcode 在代码里的。。。
    tjyao520
    tjyao520
    May 21, 2019❤️1
    7
    os.getenv()
    BCy66drFCvk1Ou87
    BCy66drFCvk1Ou87
    May 21, 2019❤️1
    8
    服务器端灵活使用 git+docker,每次代码更新 git pull 后 docker 直接制作镜像 run 起来
    wuchujie
    wuchujie
    May 21, 2019
    9
    @loveCoding 看了下 b 站的一个开源 web 库就是用这种方法读写配置文件。。但是不知道是 os.getenv() 读取同目录下的 config.json 好呢。还是用这种方法比较好。
    Muninn
    Muninn
    May 21, 2019❤️3
    10
    https://12factor.net/zh_cn/

    拿走不谢

    这不是个 golang 的问题
    messyidea
    messyidea
    May 21, 2019
    11
    判断生产环境还是测试环境,然后用不同的数据库
    xfriday
    xfriday
    May 21, 2019
    12
    k8s+configMap
    lonelygo
    lonelygo
    May 21, 2019
    13
    @imherer 写着玩,配置 hardcode 在代码里,也不科学鸭,换个机子改起来多累。
    yanzixuan
    yanzixuan
    May 21, 2019
    14
    @godgrp 哪个配置管理中心最好?有推荐的么?
    imherer
    imherer
    OP
    May 21, 2019
    15
    @lonelygo 所以来向各位大佬取经了😀
    zichen
    zichen
    May 21, 2019
    16
    单独建一个配置文件的代码库,持续集成流水线部署的时候,会直接拉取对应环境的配置文件部署。
    loveCoding
    loveCoding
    May 21, 2019
    17
    @wuchujie 相比读 path,配置文件可能会好点,毕竟跟着代码走,不用维护 path 什么的减少运维成本
    wuchujie
    wuchujie
    May 21, 2019
    18
    @lonelygo
    @xfriday
    @Muninn
    @zichen
    @loveCoding
    能请教一下 docker 是怎么部署吗?
    我现在一直以来的思路是抛开语言层面。比如 nodejs python 这些需要虚拟环境的语言。
    我是用 docker 做一个包涵所有虚拟环境库的镜像。然后比如我的代码目录是 /home/deploy/app 我就映射 /home/deploy/app 进去镜像的根目录 /app 然后运行 python app.py 或者 node app.js
    以后每次更新代码。我只需要在代码目录 git pull 然后 restart 一下容器就可以。。不用每次更新代码都打包一个镜像。
    a134698815
    a134698815
    May 21, 2019
    19
    k8s+docker
    Kilerd
    Kilerd
    May 21, 2019
    20
    dotenv
    Muninn
    Muninn
    May 21, 2019
    21
    @wuchujie 那你基本白用 docker 了,一般不是那么用的。

    基本都是每个版本靠持续集成自动测试和构建镜像。

    生产部署可以自动,也可以手动。

    大项目有很多容器用 k8s,小一点用 swarm 再小一点单机用 docker-compose。

    配置是在配置中心或者在启动集群的配置文件里的。用环境变量传入容器。
    wuchujie
    wuchujie
    May 21, 2019
    22
    @Muninn 请教一下。如果按照小一点单机 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 也给上传了。让人家看的一目了解
    wuhongwei
    wuhongwei
    May 21, 2019
    23
    参考 b 站
    zclHIT
    zclHIT
    May 21, 2019
    24
    配置文件中设置不同的环境配置,然后配置一个 RunMode,不同环境使用不同的 RunMode
    boris1993
    boris1993
    May 21, 2019 via Android
    25
    公司不写 Go
    自己的玩具是读 yaml 的,同时带有命令行开关
    除了配置文件,也可以考虑读环境变量
    但是绝对不要写死在代码里
    gxm44
    gxm44
    May 21, 2019
    26
    dotenv + 1
    Muninn
    Muninn
    May 21, 2019
    27
    @wuchujie compose file 不放代码库里的,你可以放一个隐藏掉关键信息的 example。 部署的时候只需要这一个文件就行了,你也不需要把 repo clone 下来呀。

    现在还有一个选择是用 docker secret。 这样部署的服务器上也看不到敏感信息了。 不过需要在代码里兼容读取。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4028 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 07:09 · PVG 15:09 · LAX 23:09 · JFK 02:09
    ♥ Do have faith in what you're doing.