1
xiqingongzi 2021-04-25 15:13:58 +08:00
docker 化
|
2
ipwx 2021-04-25 15:14:42 +08:00
只要有 python + pip,写好 requirements.txt 然后服务器上 pip install -r requirements.txt 安装好依赖就行。
其实后面还有一个重点,用比如 gunicorn 做多进程。 |
3
rationa1cuzz 2021-04-25 15:21:13 +08:00
没有,之前 linux 环境脚本,现在 windows 环境手动,同蹲一个解决方案
|
4
privil 2021-04-25 15:22:52 +08:00 1
不用,就是 git 直接拉代码 ,然后重启 python 就完了吗。
|
5
RockShake 2021-04-25 15:56:33 +08:00
Docker 或者 pipenv 吧
|
6
arischow 2021-04-25 15:59:08 +08:00
Docker & poetry
当然最好有个 CI/CD 让你持续自动构建 Docker 镜像,我用的 GitHub Actions |
7
vZexc0m 2021-04-25 16:22:25 +08:00
|
8
janxin 2021-04-25 16:47:02 +08:00
Docker 吧,少烦心事
|
9
lucays 2021-04-25 16:51:29 +08:00
docker 呗看下 docker-compose 啥的
|
10
roundgis 2021-04-25 16:57:22 +08:00 via Android
Python 也有 executable egg 的方案
不過用的人不多 老老實實 docker 吧 |
11
SlipStupig 2021-04-25 17:00:17 +08:00 1
如果是小公司的话,docker 和 k8s 这些太重了,可以使用 SVN hook 触发构建,python 可以用 wheel 打包成 whl, 然后使用 ssh 执行 pip install package.whl, 然后重启一下 python 就好了
|
12
abersheeran 2021-04-25 17:07:56 +08:00
docker + docker-compose 完事。
|
13
feiandxs 2021-04-25 17:10:06 +08:00 1
@SlipStupig 我恰恰觉得是 docker 更省事…… 对小公司来说。 就是因为人少,我们才 docker 化, 不做复杂的编排,只是希望 git 推送后,jenkins 走一套流程,花几分钟打包好容器镜像自动跑上去部署。
因为人少才想尽可能自动。。。 |
14
starsky007 2021-04-25 17:16:26 +08:00
pip 可以把依赖安装到指定目录下,示例:
pip install -r requirements.txt -t target 然后依赖、程序一直打包。 |
15
robot1 2021-04-25 17:21:09 +08:00
pyinstaller 生产用过没问题
|
16
killva4624 2021-04-25 17:27:40 +08:00
docker 化+1,服务的启停可以用 docker-compose 解决,单机如果需要多副本甚至还可以上 swarm
|
17
qianc1990 2021-04-25 17:37:12 +08:00 via iPhone
起个脚本,直接拉代码就完了……
|
18
clf 2021-04-25 17:46:09 +08:00
docker 化+1
|
19
wunsch0106 2021-04-25 18:00:53 +08:00
1 、pyinstaller 打包,不过文件很大。
2 、docker 化 |
20
ClericPy 2021-04-25 21:01:49 +08:00 1
办法太多了...
1. docker 上面都提过了 2. pipenv 或者 poetry 做版本控制 2. 自己写个 makefile 整 venv 3. 使用 zipapp 把 Python 代码和依赖都打包到 .zip 文件里面, 有点接近 jar, 服务器上只要有个 Python 解释器就可以了. 目前用过的有 shiv (linkedin 出品), zipapps (我自己写的). 前者每次构建貌似都需要重新解压缩依赖, 遇到 .so / .pyd 依赖的库或者其他 C 编译的不能跨 Python 版本也不能跨平台; 后者是模仿前者做的, 主要解决的就是非必须情况不要解压缩, 也支持惰性安装来曲线解决跨平台跨版本问题. 4. pyinstaller 或者 Nuitka 或者 PyOxidizer 打包成编译好的, 不太推荐, 兼容性和性能都有问题 |
21
ytmsdy 2021-04-25 22:49:14 +08:00
把代码搞到 github 上面,然后用 action 发布。合并到 master 分支就自动发布。不用管。
|
23
hushao 2021-04-26 03:38:02 +08:00
楼上的哪有那么多事,tornado 本身做 web 服务器就不错,直接 pip 安装依赖之后,指定好端口,python main.py 运行就可。熟悉之后,再想怎么搞怎么搞。
|
24
ila 2021-04-26 08:10:32 +08:00 via Android
用 pip download 吧依赖包下载到本地,写个 requirement 文件和安装脚本,在服务器运行。
|
25
zjsxwc 2021-04-26 08:36:46 +08:00
git pull + 重启
|
27
David1119 2021-04-26 09:32:19 +08:00 1
这不是本末倒置吗?脚本语言还想着去打包发布???你 php 会打包再发布吗?
|
28
tabris17 2021-04-26 09:39:04 +08:00
python 的第三方模块可能有二进制代码,如果开发环境和服务器环境有差异,打包的话可能会有问题。还是 docker 吧
|
30
SlipStupig 2021-04-26 10:27:31 +08:00
@feiandxs docker 需要学习一堆东西,还需要搞 Jenkins 那套,本身这个事干成了收益很低的,不值得额外去学
|
31
est 2021-04-26 10:30:35 +08:00
python 项目不是简单的 jar,一般都包含了类似 JNI 的操作。
LZ 节哀 |
32
z740713651 2021-04-26 10:40:02 +08:00
@SlipStupig #30 简历驱动开发,学完 docker,搞上 jenkins,事成后,简历多好看,又会个技能。
再一个 ,python 可能有环境变量 ,平台等不同导致一些包表现不同的情况。 做预防最好的方法还会上 docker,保证运行环境一样。 |
33
fiht 2021-04-26 11:04:00 +08:00
docker + rancher
每次打包生成新的 Tag 号,用过 rancher API 部署。 除了问题可以直接回滚,很方便。 |
34
WhoMercy 2021-04-26 11:17:57 +08:00
如果部署环境是离线的且和开发环境隔离,就没法使用 git,不好解决。
|
35
SjwNo1 2021-04-26 13:46:31 +08:00
@z740713651 jenkins 对 python 项目友好吗 不太懂
|
36
chenqh 2021-04-26 13:54:02 +08:00
@xiqingongzi 但是 docker 也需要私有镜像的吧,没有私有镜像怎么办?
|
37
z740713651 2021-04-26 14:10:15 +08:00
@SjwNo1 #35 我这边只是个 CICD 的工具 还是挺好用的吧
jenkins 只是说 测试-打包-发版-部署 都由 jenkins 的流水线来完成 对其他语言项目应该都是一样的 CICD 工具其实还有几个 github 也有个 action 功能 我个人的项目就白嫖 github 的这个功能了 |
38
aristolochic 2021-04-26 14:30:21 +08:00
以前 Ruby 生态搞出来的基于 ssh 的部署工具 Capistrano 流行过一段时间,依靠插件简化的部分大概是拉取版本管理系统的提交、保留多个版本供回滚用、多版本共享目录、自动运行 migration 等等,还有生成和自动重启中间件 /应用服务器( Python 的话就是 WSGI,Ruby 就是 Rack,PHP……是啥不知道,没用过) systemd 服务,还有生成 Nginx 配置啥的(不过感觉提供 systemd 和 Nginx 管理的插件就是用来给不怎么懂这些东西的人一个开箱即用的最佳实践,有需要可以手动编辑)。当时不止 Ruby on Rails 的人在用,PHP 和 Python 也有一些。当然现在也不是不能用,就是装 Ruby 和熟悉 Ruby 不是很多人都能接受(因为 Ruby 生态的东西,配置文件一般也是 Ruby 造的 DSL )
小规模的话最好不用也没必要,但是理念可以参考一些,比如利用软链接在多个版本间共享前端资产、用户上传的图片等公共资源、数据库 Schema 和服务器 pid 和 socket 文件目录等等,不知道怎么写 Systemd service 也可以照抄,Nginx 配置也可以照抄(虽然现在可能用 Caddy 和 HAProxy 的多了?),还有写点脚本来搞点服务端的自动化之类的 要是不痛恨 Docker 的话,就 Docker 得了 |
39
tfdetang 2021-04-26 14:54:02 +08:00
@SlipStupig 又不需要学的多精通。组里的实习生让他们花了 2 天看了下,基本就无障碍的使用了,能有多大成本
|
40
xiqingongzi 2021-04-26 18:22:22 +08:00
@chenqh 那就打包成 image,然后 export 为 tar
然后在服务端再 load 进去就行,麻烦点,但可以实现。 |
41
among 2021-04-26 21:35:31 +08:00
建立私有 pip,依赖写在 requirements 里面,然后代码直接 svn update,后重启。
新环境就直接 pip install -r requirements 后再做。 |
42
treblex 2021-04-27 09:58:18 +08:00
uwsgi 接管,写 nginx 配置,自动重启,然后直接 pull 代码,(之前看的 django 是这样的,这个框架没有测试过 ,可以看看这个 https://uwsgi-docs.readthedocs.io/en/latest/Tornado.html
|