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

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

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

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

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

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

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

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

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

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