小白问下用 Docker 同时部署前后端的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
starvedcat
V2EX    Docker

小白问下用 Docker 同时部署前后端的问题

  •  
  • starvedcat 2018-06-05 05:01:23 +08:00 4315 次点击
    这是一个创建于 2753 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端用的是 Vue+Webpack,后端 API 用的是 Flask

    本地开发调试的时候,前端运行在 localhost:8080,后端运行在 localhost:5000

    现在由于学校网络限制,外网只能访问 80 端口。所以我想让用户访问的时候,通过 example.com:80 来访问前端,然后通过 example:80/backend/XXXX_API 来访问后端

    由于经验不足,我现在整个思路很混乱,整理一下大致有以下疑问:

    1. 前端是在 docker 里面 git clone && npm install && npm run build,还是在开发环境中 npm run build 然后直接把生成好的网页复制进 docker image ?我倾向于第二种方法,因为我觉得这样速度快,不用 npm install。(后端也是同样的疑问,是在 docker 中 pip install python package_a package_b package_c && flask run,还是先 build 出.whl 文件然后复制进 docker image )但是我看网上的 dockerfile 基本都是用第一种方法的?
    2. 我自己乱想的方法是,让后端服务在 docker 中仍然运行在 5000 端口,然后将 example.com:80 映射到 index.html ( Vue ),将 example:80/backend 映射到 5000 端口( Flask API )?或者有没有更好的方法?
    3. 是 build 成一个 docker image,还是分别 build 两个 docker image 然后再用 docker-compose 组织起来呢?

    以上编程术语很可能使用不当,请见谅

    大佬们请肆意拍砖,谢谢!

    8 条回复    2018-06-05 08:58:19 +08:00
    starvedcat
        1
    starvedcat  
    OP
       2018-06-05 05:10:20 +08:00
    现在还已知,我这台服务器的 IP 绑定了好几个域名,所以我想让 domain1.com 做前端,domain2.com 做后端(例如通过编辑 apache 的 conf )。这样合理吗?或者说和“ domain1.com+domain1.com/backend ”的方案比哪个更合理?
    whileFalse
        2
    whileFalse  
       2018-06-05 07:23:52 +08:00   1
    1. 在 docker 里面 npm install && npm run build,不要在 docker 里面 git clone。使用合理的分层保证不会每次都 install。这是保证你的部署和代码一致的方法。
    2. 这个方法没问题。除非你想额外部署一个 Nginx。如果你是个人使用的场景,没必要。
    3. 用 docker-compose
    4. 就你的场景,domain1.com+domain1.com/backend 比较合适。
    MonoLogueChi
        3
    MonoLogueChi  
       2018-06-05 07:55:33 +08:00 via Android   1
    先问一个问题,你的前端和后端是跑在相同的机器上,还是不同的机器上。
    前端可以用 Nginx 反代,或者是你提到的 Apache。
    如果是在同一机器上,后端完全没必要去额外搞个反代啊,同机器上前端访问后端又不是外网,哪个端口无所谓啊。

    在不同的机器上,你可能要每个机器加一层反向代理了。
    starvedcat
        4
    starvedcat  
    OP
       2018-06-05 08:24:58 +08:00
    @MonoLogueChi #3 谢谢,是在相同的机器上的
    starvedcat
        5
    starvedcat  
    OP
       2018-06-05 08:25:16 +08:00
    @whileFalse #2 谢谢!!
    cliberal
        6
    cliberal  
       2018-06-05 08:43:36 +08:00 via iPhone
    @whileFalse 如何保证不会每次都 install 呢
    gamexg
        7
    gamexg  
       2018-06-05 08:52:29 +08:00
    如果还有其它网站,可以考虑启动个

    https://github.com/jwilder/nginx-proxy

    加上这个就能自动签发 https 证书
    https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
    starvedcat
        8
    starvedcat  
    OP
       2018-06-05 08:58:19 +08:00
    @gamexg #7 谢了,不过暂时用不上,学校的域名有 https
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:05 PVG 06:05 LAX 14:05 JFK 17:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86