V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
only0jac
V2EX  ›  程序员

[讨论]静态语言怎么部署最方便

  •  
  •   only0jac · 2017-02-15 23:13:26 +08:00 · 2594 次点击
    这是一个创建于 2875 天前的主题,其中的信息可能已经有所发展或是发生改变。

    像.net golang 这种语言,编译后生成二进制文件,可以直接扔进服务器,但,静态资源呢?

    向服务器部署的时候:

    1. 使用 ftp ,但是有个缺点,第一次部署可以直接全部上传整个文件下(二进制和静态资源),那第二次呢,假如 js 或者 css 增加了文件或删除了文件,需要自己记住改动了哪些文件,然后去服务器上修改对应的文件

    2. 为即将部署的内容新建一个 git 仓库,缺点就是要新建一个仓库,麻烦点,同步时需要同步两个仓库

    请问各位还有其他方式吗?

    26 条回复    2017-02-22 15:56:24 +08:00
    pubby
        1
    pubby  
       2017-02-15 23:18:50 +08:00 via Android
    rsync
    only0jac
        2
    only0jac  
    OP
       2017-02-15 23:28:41 +08:00 via Android
    @pubby 总得新建一个文件夹,里面存放要同步到服务器的内容,还不如 git 呢
    visionsmile
        3
    visionsmile  
       2017-02-15 23:32:16 +08:00
    samba
    albertofwb
        4
    albertofwb  
       2017-02-15 23:32:23 +08:00 via Android   ❤️ 1
    这个可以使用自动化运维的思想
    1. 建立一个配置文件,规定需要同步的文件,设定好远程 ftp/ssh 配置信息
    2. 脚本每次运行时检查需要同步的文件是否大小或者哈希发生改变,如果改变则同步变动的文件
    脚本写好后,只需一键即可自动化同步

    以上是我们在做项目中,发布新版本后,同步版本到更新服务器的大致解决思路,仅供参考

    如果题主有何疑问,我很乐意请教
    cloud107202
        5
    cloud107202  
       2017-02-15 23:39:34 +08:00 via Android   ❤️ 1
    目前最好的方式是 docker ,私以为 docker 最大的优点是颠覆研发流程中的交付环节。编写 Dockerfile ,在 CI 环节编译打包工程,通过 dockerfile 来就地构建镜像(把编译产物与静态文件 copy 到镜像中是 Dockerfile 应描述的职责),最后将 image push 到公有私有仓库中。

    容器启动就是一瞬间,秒级的。
    matthewgao
        6
    matthewgao  
       2017-02-15 23:48:18 +08:00   ❤️ 1
    新建个一个 branch 就好 专门放 binary 和配置什么的
    only0jac
        7
    only0jac  
    OP
       2017-02-15 23:54:04 +08:00 via Android
    @albertofwb 确实是个好方法,不过这个脚本似乎不太好写,要检查目录和遍历检查文件,有不同要 push 上去
    only0jac
        8
    only0jac  
    OP
       2017-02-15 23:57:19 +08:00 via Android
    @cloud107202 交付方便,那对项目的版本更新呢,顺便问下 docker 对服务器配置有要求吗?小内存是不是吃不消
    only0jac
        9
    only0jac  
    OP
       2017-02-16 00:01:13 +08:00 via Android
    @matthewgao 也不错,多谢
    cloud107202
        10
    cloud107202  
       2017-02-16 00:05:13 +08:00 via Android   ❤️ 1
    @only0jac docker 的镜像是带 tag 的, tag 尾部是版本号。完全可以每次 git 提交都自动构建一个不同版本号的镜像(不可变运维)。至于性能,对服务器没附加要求,因为 docker 容器 run 起来后本质就是个宿主机的进程。有余力的话可以先深入了解下, segmentfault 站上面讲用容器技术 CI/CD 的例子还是很多的,与 gitlab 等的 CI 打通都是很容易的事情。
    scnace
        11
    scnace  
       2017-02-16 00:10:53 +08:00 via Android
    我用 Daocloud 来做这个事情了…
    matthewgao
        12
    matthewgao  
       2017-02-16 00:16:43 +08:00
    @only0jac 写个 Makefile 配合 gitignore 自动化从其他 branch 编译 binary 再 push
    neoblackcap
        13
    neoblackcap  
       2017-02-16 00:21:50 +08:00
    讲道理的话,静态资源不是应该上 CDN 或者 OSS 吗?
    only0jac
        14
    only0jac  
    OP
       2017-02-16 08:45:06 +08:00 via Android
    @cloud107202 多谢,我了解下 docker

    @scnace 能否详细说下?是否和楼上一样?

    @matthewgao 谢谢,我试试
    only0jac
        15
    only0jac  
    OP
       2017-02-16 08:45:42 +08:00 via Android
    @neoblackcap html 呢
    janxin
        16
    janxin  
       2017-02-16 08:50:28 +08:00 via iPhone
    golang html 等资源可以直接打包进入程序文件中使用,这种方案下由程序提供静态文件解析,不过不推荐。

    我们现在前后端是两个仓库,分开编译打包和部署。
    huawuya
        17
    huawuya  
       2017-02-16 10:02:38 +08:00
    只是同步功能而已, rsync 不就搞定了?或者 beyond compare (支持 ftp , sftp )之类的可视化同步。都很方便啊
    neoblackcap
        18
    neoblackcap  
       2017-02-16 10:03:24 +08:00
    @only0jac 模板也要打包啊,解压不是应该有对应的路径吗?就好像游戏一样,程序会自动从项目位置开始加载文件(资源)
    zhangyuting
        19
    zhangyuting  
       2017-02-16 11:29:31 +08:00 via iPhone
    ansible 或者 puppet
    only0jac
        20
    only0jac  
    OP
       2017-02-16 20:35:13 +08:00
    @huawuya 实际上是不行的,不信你试试
    only0jac
        21
    only0jac  
    OP
       2017-02-16 20:36:00 +08:00
    @janxin 也就这法子了,虽然麻烦点,但省心
    huawuya
        22
    huawuya  
       2017-02-21 12:04:08 +08:00
    @only0jac 不太明白为什么不行,我一般是用 beyond compare 手动同步,点点鼠标就行,感觉挺方便的
    only0jac
        23
    only0jac  
    OP
       2017-02-21 13:27:20 +08:00
    @huawuya bc 本地文件夹之间同步还行,但是同步 ftp 上的目录就不行了,你可以弄几个 html 文件试试
    huawuya
        24
    huawuya  
       2017-02-21 17:31:21 +08:00
    @only0jac 我估计你的比较规则设置里只有时间和文件大小,如果是 ftp 的话就不行了,因为时间戳会变,需要把“ compare content ”打开,我一般是选“ Rules-based comparison",还有其他几个选项可以加快速度。
    如果 server 目录用 samba 共享出来,这样拷贝的时候时间戳就不会变, BC 的缺省规则就可以了
    huawuya
        25
    huawuya  
       2017-02-21 17:51:05 +08:00   ❤️ 1
    @huawuya 刚看了下, BC 的 FTP 同步也会同步时间戳, html 同步后显示不同的原因是 ftp 上传时回车换行转换导致文件大小不一致,这个可以用我上面说的用比较规则选” Rules-based comparison"来解决,也可以把 ftp 设置里的传输类型由 auto 改成 binary 来解决。
    only0jac
        26
    only0jac  
    OP
       2017-02-22 15:56:24 +08:00 via Android
    @huawuya 多谢,回去试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:11 · PVG 05:11 · LAX 13:11 · JFK 16:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.