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

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

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

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

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

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

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

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

    docker 是真的香
        69
    nnnToTnnn   112 天前
    从来没有听说过 liunx 有 exe 的。

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

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