V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Hanggi
V2EX  ›  Go 编程语言

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

  •  1
     
  •   Hanggi · 2019-08-01 15:35:34 +08:00 · 11486 次点击
    这是一个创建于 1941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发现 GO 语言可以在本地 OS 上生成 Linux 可执行的 exe 文件,将 exe 文件上传到服务器就可以直接运行了,好方便啊。

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

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

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

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

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

    docker 是真的香
    nnnToTnnn
        69
    nnnToTnnn  
       2019-08-02 10:08:19 +08:00
    从来没有听说过 liunx 有 exe 的。

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

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