关于 Python 项目的生产环境部署

104 天前
 mickerwx

现实情况

遇到的问题

  1. 服务太多管理与更新麻烦
  2. 使用 conda 进行环境管理,太多环境了,切换也很麻烦
  3. 多个服务使用 http 进行通信,耗时有点长

想想问问各位大佬们你们的生产是怎么部署的

  1. 直接部署还是会使用 supervisor 或者 docker 或者 k8s 等
  2. 包管理是使用什么进行管理的 venv?conda?还是其他?
  3. 多服务之间的通信是 http 还是 rpc ?
3149 次点击
所在节点    Python
37 条回复
mickerwx
104 天前
@adoal 感谢建议 之前用过一段时间的 supervisord 奈何项目多 服务多管理起来确实不方便 主要也没有一个合格的项目经理和技术经理 代码随便提交 从来没有 review 领导今天说部署一个这个版本就要部署 明天要哪个版本就要部署那个
skyrim61
104 天前
使用 alpine 构建一个 django5 的 docker 镜像, 使用 docker-compose 来管理项目的启动,停止和重启. 使用上, 只要修改 docker-compose 中的环境变量即可, 然后就一键启动. 省事省心
adoal
104 天前
@mickerwx 那你们最需要解决的问题是工作过程的治理,把操作规范化,上 CI/CD ,至于用什么技术和系统来部署,都只是细节
skyrim61
104 天前
. /root/venv/bin/activate
cd /xx/xx/${PROJECT_NAME} && gunicorn -b 127.0.0.1:8000 -w 2 --threads 4 --reload ${PROJECT_NAME}.wsgi &
nginx -g 'daemon off;'

容器启动脚本
mickerwx
104 天前
@adoal 问题是现在解决不了这个 我只是个小兵 没有任何话语权 只能在不给自己找麻烦的情况下 把手头工作尽量干好 问这些问题 之前在上一家公司 是有专业运维来搞这些的 来这边 后端要写 部署要管 运维要管 唉
mickerwx
104 天前
@skyrim61 ok 谢谢建议 我去梳理梳理这些 然后看看改咋搞
adoal
104 天前
@mickerwx 那……没话语权的话,你探索出来的部署手段,会不会也被人因为习惯了 nohup 而软抵制呢。
mickerwx
104 天前
@adoal 这个不会 因为是我写后端 我部署 所以这个就是为了方便自己
julyclyde
104 天前
1 首先 nohup 、supervisorD 、pm2.5 肯定是不对的。正确的做法是 systemd 或者容器。如果多实例应该容器+k8s
2 如用容器,尽量小一点,venv 就挺好吧
mickerwx
104 天前
@julyclyde ok 感谢 决定先容器化 然后考虑上 k8s ci/cd
Hopetree
104 天前
一个项目一个 docker-compose ,容器里面使用 supervisor 管理进程,完美
flmn
104 天前
docker swarm
ytmsdy
104 天前
@mickerwx 这个就涉及到程序底层逻辑的问题了。
一般是先估计,有些定时任务,或者耗时比较长,实时性不高的计算就全部丢到队列里面去处理。
并发什么的按照你说的服务器规模,基本上不用太需要考虑。
把耗时长的请求给单独,异步返回就行了。
ccc1924
101 天前
我这儿老服务用的是 supervisor ,新服务用的是 docker-compose
目前暂时没有动态扩容的需求,所以 docker compose 够用了

建议做好容器化,以后上 k8s/kamal 都方便不少

celery 和 nginx 负载均衡上没有很大的区别,如果是长时间跑的后台任务,使用 celery 会更合适
mickerwx
100 天前
@ccc1924 那如果上 docker 的话 celery 是另起一个 docker 还是放主程序一起起 工作进程你们准备怎么设置
ccc1924
100 天前
@mickerwx #35 另外起一个 docker
tisswb
84 天前
我这边运维大概 10 多个服务,都是在 ubuntu 上运行,
1.supervisor
2.项目内包管理 pip ,python 版本管理 pyenv
3.http 慢就 grpc

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1085332

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX