V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Hanggi

Go 语言程序部署到服务器好方便啊

  •  1
     
  •   Hanggi · Aug 1, 2019 · 12206 views
    This topic created in 2463 days ago, the information mentioned may be changed or developed.
    发现 GO 语言可以在本地 OS 上生成 Linux 可执行的 exe 文件,将 exe 文件上传到服务器就可以直接运行了,好方便啊。

    其他语言都是怎么部署的?有没有代码部署黑科技分享一下?
    96 replies    2019-09-16 09:50:50 +08:00
    thet
        1
    thet  
       Aug 1, 2019   ❤️ 2
    php ftp 了解一下
    finallyeva
        2
    finallyeva  
       Aug 1, 2019
    linux?exe?
    zkqiang
        3
    zkqiang  
       Aug 1, 2019
    exe................
    Hanggi
        4
    Hanggi  
    OP
       Aug 1, 2019
    @finallyeva 就是可以直接在 Linux 上执行的文件。
    Hanggi
        5
    Hanggi  
    OP
       Aug 1, 2019
    @zkqiang。。。可执行文件...
    zjyl1994
        6
    zjyl1994  
       Aug 1, 2019
    docker 解决一切问题
    BCy66drFCvk1Ou87
        7
    BCy66drFCvk1Ou87  
       Aug 1, 2019 via Android
    是不是表达错误了? linux 运行不了 exe
    Hanggi
        8
    Hanggi  
    OP
       Aug 1, 2019
    @HuasLeung 嗯嗯,就是可执行文件的意思。
    Hanggi
        9
    Hanggi  
    OP
       Aug 1, 2019
    @zjyl1994 docker 一个容器打包出来几百 MB,Go 打包出来的 Linux 可执行文件只有 10 几 MB.
    springmarker
        10
    springmarker  
       Aug 1, 2019 via Android
    C/C++不也是这样吗
    BinRelay
        11
    BinRelay  
       Aug 1, 2019
    更可怕的是还支持各种稀奇古怪架构的 linux
    Hanggi
        12
    Hanggi  
    OP
       Aug 1, 2019
    @springmarker C/C++ 的话应用范围不太一样吧。例如:最常见的 Web 服务很少用。
    zjsxwc
        13
    zjsxwc  
       Aug 1, 2019
    脚本语言直接 git pull 部署,逃
    springmarker
        14
    springmarker  
       Aug 1, 2019
    @Hanggi #12 局限于 web 的话,其他语言解决方案都很成熟啊,大多只需要 runtime 就可以了,而且全平台运行。
    比如 SpringBoot,只需要 java -jar web.jar 或者./web.jar start 就可以。
    Docker 体积大的问题。。。。你可以多部署几个看看磁盘大小变大了多少的
    saytesnake
        15
    saytesnake  
       Aug 1, 2019
    java -jar 呢...
    www5070504
        16
    www5070504  
       Aug 1, 2019
    交叉编译确实方便太多 脚本语言也还算方便吧 就是环境不好整 用 virtualenv 还是面临跨平台的问题
    tt67wq
        17
    tt67wq  
       Aug 1, 2019
    @Hanggi #9 你 docker 打的有问题吧,怎么打这么大?
    xpresslink
        18
    xpresslink  
       Aug 1, 2019
    非要这么说,脚本语言直接 SSH 到服务器上 VIM 就可搞定了。
    不过现在都是 DevOps 理念了,任何语言都一样,docker 容器化部署,用 jenkins 自动打包了。
    whypool
        19
    whypool  
       Aug 1, 2019
    npm start
    SuperMild
        20
    SuperMild  
       Aug 1, 2019   ❤️ 3
    别的语言说方便,都是把环境搭建好之后方便。Go 的方便,是完全不需要搭建环境。

    因此,如果你强调“热更新”,那其他语言也很方便,甚至可能比 Go 更方便。
    而如果你强调搭建运行环境 /首次运行,那 Go 是最方便的,其他语言最多只能和 Go 并列第一。
    nowgoo
        21
    nowgoo  
       Aug 1, 2019   ❤️ 1
    content.replace(/exe/g, 'binary')
    RYAN0UP
        22
    RYAN0UP  
       Aug 1, 2019 via Android
    @saytesnake 需要 jre,但是 go 打包好的不需要 go 环境,这点很爽
    LokiSharp
        23
    LokiSharp  
       Aug 1, 2019
    @RYAN0UP #22 可是流行的发行版自带 JRE
    qq316107934
        24
    qq316107934  
       Aug 1, 2019   ❤️ 1
    一句话总结:Go 支持交叉编译
    toono
        25
    toono  
       Aug 1, 2019
    @Hanggi docker 多阶段构建打出来的镜像可以是十来兆
    lihongjie0209
        26
    lihongjie0209  
       Aug 1, 2019
    带虚拟机的都很方便(除了 Python)
    bequt
        27
    bequt  
       Aug 1, 2019
    都可以直接生成 windows exe linux 可执行.
    go 确实舒服这点
    kiddingU
        28
    kiddingU  
       Aug 1, 2019
    @Hanggi 多阶段构建了解一下,第一阶段,打出二进制包,第二阶段才是将打出的二进制包拷贝到运行环境,
    From golang:1.9-alpine as builder

    第一阶段
    COPY --from=builder
    第二阶段
    Takamine
        29
    Takamine  
       Aug 1, 2019
    ./start.sh 就可以运行这么多东西,好方便阿。
    zjyl1994
        30
    zjyl1994  
       Aug 1, 2019
    docker 解决一切问题
    @Hanggi 别上来就打包 Ubuntu 或者 CentOS 啊,Alpine 搞一下,也就大了 10 几 M,到哪里都跑起来了
    Hanggi
        31
    Hanggi  
    OP
       Aug 1, 2019 via iPhone
    啊哈,这样啊,我估计把 package 一起丢进去了,谢谢。
    virusdefender
        32
    virusdefender  
       Aug 1, 2019
    等你的依赖中有 cgo 的时候就没这么简单了
    hmxxmh
        33
    hmxxmh  
       Aug 1, 2019
    windows 才是 exe,linux 是一个二进制文件
    dhssingle
        34
    dhssingle  
       Aug 1, 2019
    .net core 也可以直接跑,不需要配置环境
    agdhole
        35
    agdhole  
       Aug 1, 2019
    dotnet core 路过
    wysnylc
        36
    wysnylc  
       Aug 1, 2019
    那么哪个语言是麻烦的呢?
    blless
        37
    blless  
       Aug 1, 2019 via Android
    @virusdefender cgo 也还好 实在不行上 docker apline
    stevenbipt
        38
    stevenbipt  
       Aug 1, 2019
    可能唯一的缺点就是编译以后体积会比较大吧~不过单文件打包确实挺爽的
    byteli
        39
    byteli  
       Aug 1, 2019 via Android
    @wysnylc java py node 等要安装依赖比较麻烦, cpp 可能动态链接库版本不一致
    cco
        40
    cco  
       Aug 1, 2019
    @byteli yum or apt-get 一把 没多麻烦吧。。。
    MrZok
        41
    MrZok  
       Aug 1, 2019
    @thet
    lihongjie0209
        42
    lihongjie0209  
       Aug 1, 2019
    @byteli #39 啥? java 需要安装依赖??? 一个 jar 包或者 war 包, 要什么依赖
    oyjc
        43
    oyjc  
       Aug 1, 2019
    dotnet publish -r win10-x64 /p:PublishSingleFile=true
    orm
        44
    orm  
       Aug 1, 2019 via iPhone
    java 最新的 graalvm 也可以把 java 编译成一个可执行文件
    Torpedo
        45
    Torpedo  
       Aug 1, 2019
    没有比 php 更方便了吧
    lhx2008
        46
    lhx2008  
       Aug 1, 2019 via Android
    如果是首次部署,确实 go 方便。
    如果是后续更新,那应该还是 python php 这种动态语言方便,甚至不用重启。
    go 的话,每次编译和上传也挺浪费时间。java 只要把业务代码的 jar 传上去就可以了,依赖可以分开打包。便捷性上差不多。
    sky101001
        47
    sky101001  
       Aug 1, 2019
    交叉编译是真的好用!
    hxtheone
        48
    hxtheone  
       Aug 1, 2019 via iPhone
    @Hanggi Alpine 了解一下
    Hanggi
        49
    Hanggi  
    OP
       Aug 1, 2019
    @wysnylc 就拿 python 或者 nodejs 为例,他们第一上传首先要有 python 或者 nodejs 环境,然后安装依赖,而这个过程是有可能不顺利的,比如版本不对,系统不兼容。
    zgqq
        50
    zgqq  
       Aug 1, 2019
    java 也很方便啊,为啥有些人觉得 java 就一定繁琐呢?感觉是没玩明白
    Felldeadbird
        51
    Felldeadbird  
       Aug 1, 2019
    吓得我以为 linux 可以运行 exe 了。
    z0ne
        52
    z0ne  
       Aug 1, 2019
    目前项目主力也在用 go,主要是有几下优点符合自己需求:
    1. 编译执行,可进行代码加密(虽然可逆向,但成本太高,个人感觉比各种 php 加密等安全)
    2. 部署方便,正如 lz 所说,直接执行二进制
    3. 高速低内存,多线程执行非常喜欢,也比 python 之类容易上手
    auin
        53
    auin  
       Aug 1, 2019
    Go 为了极致的工程便利性,也舍弃了不少东西,看未来的发展吧
    SuperMild
        54
    SuperMild  
       Aug 1, 2019
    Java 真的有那么方便吗? Maven 或 Gradle 里一堆设置,第一次弄这东西时必然感觉麻烦。

    而 Go 只要执行 go build 就可以了,不需要特别设置。因此还是 Go 稍稍方便一点。
    zhang77555
        55
    zhang77555  
       Aug 2, 2019
    java 开发现在都是提交代码就完事了吧, 自动构建已经非常成熟了,
    一般项目从提交代码到自动部署 docker 容器也就分分钟吧,都不需要登录服务器.
    AllenBigBear
        56
    AllenBigBear  
       Aug 2, 2019
    最近在部署 Django 的筒子飘过。。。。部署部出血。。。
    kppwp
        57
    kppwp  
       Aug 2, 2019 via iPhone
    最近刚开始用 k8s 和 docker 部署 python 项目很方便
    wupher
        58
    wupher  
       Aug 2, 2019
    个人以为:

    Go 的包管理工具不如 Maven 或者 Gradle
    likaka
        59
    likaka  
       Aug 2, 2019
    村里刚通网,linux 连 exe 都发明了吗
    log4j
        60
    log4j  
       Aug 2, 2019
    ....那叫二进制可执行文件,不叫 exe,windows 用多了中毒了么。。。
    hunter2015
        61
    hunter2015  
       Aug 2, 2019
    村里刚通网,linux 连 exe 都发明了吗
    leopku
        62
    leopku  
       Aug 2, 2019
    @Hanggi #9 肯定是你姿势不对。看看这个 https://v2ex.com/t/572815 docker 打完镜像才 7 兆多
    ruoxie
        63
    ruoxie  
       Aug 2, 2019
    其实就是不需要运行时的环境
    phpxiaowangzi
        64
    phpxiaowangzi  
       Aug 2, 2019
    说,是不是露怯了
    leopku
        65
    leopku  
       Aug 2, 2019
    Unix/Linux 可执行文件全称 Executable and Linkable Format,简称 ELF。
    simple2025
        66
    simple2025  
       Aug 2, 2019
    @lhx2008 py 不用重启怎么搞的?有 git 例子吗?大佬?
    mapleray
        67
    mapleray  
       Aug 2, 2019
    imherer
        68
    imherer  
       Aug 2, 2019
    @Hanggi 使用 alpine 打包出来的镜像基本上只比纯二进制文件大几 M 到十几 M

    docker 是真的香
    nnnToTnnn
        69
    nnnToTnnn  
       Aug 2, 2019
    从来没有听说过 liunx 有 exe 的。

    其次,估计你没有走过流水线。。。。。。。。
    nnnToTnnn
        70
    nnnToTnnn  
       Aug 2, 2019
    @imherer ???? k8s 了解下
    imherer
        71
    imherer  
       Aug 2, 2019
    @nnnToTnnn 循序渐进,最近刚上手 docker
    lihongjie0209
        72
    lihongjie0209  
       Aug 2, 2019
    @SuperMild #54 springboot 现在你还需要改 maven 的 xml??
    MilkShake
        73
    MilkShake  
       Aug 2, 2019
    从来没有听说过 liunx 有 exe 的。
    lihongjie0209
        74
    lihongjie0209  
       Aug 2, 2019
    @Hanggi #49
    1. 版本不对? 装 runtime 都不看版本的? 需要用到 python3, 装了一个 python2 这是谁的锅?
    2. 系统不兼容? 不兼容你能用 apt/yum 装上我也是佩服, 哪怕你下载 binary 安装, 不看版本是谁的锅?
    userff
        75
    userff  
       Aug 2, 2019
    @Hanggi #9
    docker 使用二段编译 go 程序,构建出来的镜像也相当小。
    Hanggi
        76
    Hanggi  
    OP
       Aug 2, 2019
    @lihongjie0209 我说的不好,但是同样的代码同样的流程,明明都照着做了,但就是出错的情况也是常有的。
    SuperMild
        77
    SuperMild  
       Aug 2, 2019
    @lihongjie0209 springboot 受到大家欢迎,原因之一就是在简化发布、部署上做得很好,但这严格来说是一个框架 /库做得好,与语言本身的直接特性还有有区别的,Go 是随便换一个框架或者完全不用框架,都不影响其打包的方便性。

    以及上面有很多人说 docker 使部署变得很方便,docker 受欢迎,也可侧面反映其实本来打部署流程是有点麻烦的,所以现在才会觉得 docker 带来了方便。
    lihongjie0209
        78
    lihongjie0209  
       Aug 2, 2019
    @Hanggi #76 要么是部署文档有问题, 要不是部署的人有问题
    lihongjie0209
        79
    lihongjie0209  
       Aug 2, 2019
    @SuperMild #77 类似 spring 或者 maven 这种事实标准,并且默认配置足够的话并不需要改任何配置就可以一键构建的
    mandy0119
        80
    mandy0119  
       Aug 2, 2019
    java -jar ........
    T3RRY
        81
    T3RRY  
       Aug 2, 2019
    是很方便,除了 go server 也可以 caddy,很爽
    skiy
        82
    skiy  
       Aug 2, 2019
    不就交叉编译嘛
    userff
        83
    userff  
       Aug 2, 2019
    搞了两天 gitlab ci 部署 docker python 项目太痛苦了。
    gitlab runner docker in docker 有些坑。
    haisi0525
        84
    haisi0525  
       Aug 2, 2019
    exe,“ executable program,EXE File ”,可执行程序。不是.exe
    zgqq
        85
    zgqq  
       Aug 2, 2019
    @SuperMild 有 gradlew,需要设置什么
    Vegetable
        86
    Vegetable  
       Aug 2, 2019
    Executable 也没错哦哈哈哈
    dabaibai
        87
    dabaibai  
       Aug 2, 2019
    这么说,python 丢个文件上去也行啊
    g9g9
        88
    g9g9  
       Aug 2, 2019
    微服务呀
    GjriFeu
        89
    GjriFeu  
       Aug 2, 2019
    依赖动态库又是另外一回事
    echo1937
        90
    echo1937  
       Aug 2, 2019
    @SuperMild #77 jar/war/ear,差不多就这么三种形式,要么直接 java -jar,要么丢进外部容器,没有 SpringBoot 之前不也是这么干的吗
    microkj
        91
    microkj  
       Aug 2, 2019
    C# core 不管是 build,项目依赖,docker 支持都非常的简洁,语法也优雅,就是用的人不多
    useben
        92
    useben  
       Aug 2, 2019
    确实方便,有时为了方便直接 scp 到测试环境,越过提交代码 cidi 环节。达到快速测试验证的目的~~~爽
    wo642436249
        93
    wo642436249  
       Aug 2, 2019 via Android
    @thet 😂没有 php 环境你试试
    byteli
        94
    byteli  
       Aug 11, 2019 via Android
    @lihongjie0209 依赖 jdk 啊
    byteli
        95
    byteli  
       Aug 11, 2019 via Android
    @cco 看环境吧,太多公司不允许 idc 连外网的,自建源够喝一壶了
    no13bus
        96
    no13bus  
       Sep 16, 2019
    部署的话,线上真正用的时候都是用写个部署脚本,不管是啥语言,最后都是自动化的,其实没啥区别
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5469 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 285ms · UTC 08:36 · PVG 16:36 · LAX 01:36 · JFK 04:36
    ♥ Do have faith in what you're doing.