django 项目打包部署的正确姿势

2016-12-18 16:18:33 +08:00
 banks0913
小弟有个 django web 项目,部署方式为 uwsgi + nginx 。需要在几十台机器上去挨个部署,并且能够自动更新版本(通过 shell 脚本更新)。

那么问题来了, django 只能采用源代码发布项目的方式发布吗?有没有一种类似于一键安装的方式?
如果没有的话,我就只能把项目打成 tar 压缩包,服务器上通过脚本进行解压缩,执行数据库同步(migrate)等操作。。。
10963 次点击
所在节点    Python
22 条回复
jessynt
2016-12-18 16:24:53 +08:00
docker ?
pimin
2016-12-18 16:29:17 +08:00
virtuialenv+Git 或者 SVN 才是出路吧
成熟的方案不用,强行造轮子把自己碾死的还少么
banks0913
2016-12-18 16:35:18 +08:00
@pimin 目前用的就是 virtualenv + git, 只不过我们目前的问题有两个,一个是并不是所有服务器都能随时进行 ssh (服务器在客户那边),另一个是 这个项目需要与其他几个功能上上相关的程序同时更新,需要引入版本号的概念。
banks0913
2016-12-18 16:40:22 +08:00
@pimin 版本号是公司内部自定义的,比如 1.5.3, 1.5.5 这种形式。并且能够支持回退。请问有什么建议吗?
messyidea
2016-12-18 16:45:47 +08:00
写个 makefile ? 不过感觉和 shell 脚本差不多
purebluesong
2016-12-18 16:47:19 +08:00
写个发布脚本是比较蠢的方式,如果用一些云服务比如阿里云的话这几十台可以直接利用服务的工具同步这几十台机器
pimin
2016-12-18 16:50:10 +08:00
@banks0913
Git 和 svn 都是版本控制系统,都有版本的概念.
Git 版本号管理上可能不如 svn 来得直观
不能实实连过去手动更新是最好的
写个脚本,定时访问 myweb.com/demo.json,确定是否需要更新,需要更新到的版本号.
如果几十台服务器需求不一样,就根据每台机器的 mac 之类确定一个 ID.分别生成 mac1,2,3.json
banks0913
2016-12-18 16:51:51 +08:00
@messyidea 已经有自动安装和部署的 shell 脚本,包括安装 nginx,uwsgi,git clone 代码,同步数据库,加入 supervisor 监控等。
不过目前的问题再代码更新这一块,目前需要自己一台一台登录上去执行 git pull , 同步数据库等操作。而且始终是更新到最新的提交,目前要引入版本号的概念,就需要做到每次 git pull 到某个指定版本( 1.4.5 )
banks0913
2016-12-18 16:54:42 +08:00
@pimin 目前我也偏向于你这种思路。写脚本自动 git pull 。不过版本号怎么搞还不知道,像 1.5.3 , 1.1.2 这种自定的版本号。用 git 的 tag 功能去实现吗?
banks0913
2016-12-18 16:59:56 +08:00
@purebluesong 没办法,我们的服务器是一台一台的实体机,并且安装在客户的机房里那种,而且有些客户不给我们远程 ssh 的权限。。。。
pimin
2016-12-18 17:00:49 +08:00
我对 Git 不是很熟,我有一个比较笨的方法,把 Git 自动生成的版本号和公司自定义的版本在 json 里标示出来.
比如 1a2b:1.5.3
你叫我更新到 1.5.3 我脚本里直接 checkout 1a2b 不就好啦
当然我觉得如果因为对 Git 不熟悉绕了路..还是比较萌蠢的
jimzhong
2016-12-18 18:54:03 +08:00
git 有 webhook
rainysia
2016-12-19 01:03:48 +08:00
以前公司直接打包成 rpm 包
jswh
2016-12-19 02:18:46 +08:00
Fabric?
jswh
2016-12-19 02:21:55 +08:00
@jswh 好吧没有登录权限那就没办法了。不过全打包部署的话有一个已经基本死了的东西 http://platter.pocoo.org/dev/, 可以把应用连同 virtualenv 打包成一个 tar, 直接解压就可以用。
@banks0913
lyhapple
2016-12-19 08:31:25 +08:00
@jswh 我之前也是想做成这样的,但是遇到一个奇葩的 mysql 库的问题 _mysql.so , 好像是这个文件引起的, 把把应用连同 virtualenv 打包成一个 tar, 直接解压后, 总是会提示我没有权限使用这个文件。
botman
2016-12-19 08:42:16 +08:00
用 bitsync 或者 syncthing 做同步吧,修改代码后其他机器自动同步,版本管理直接交给 git 就行。
jswh
2016-12-19 09:37:26 +08:00
@lyhapple 你是在 Windows 下打包的么?我记得 windows 会有这个问题
leopku
2016-12-19 10:14:58 +08:00
既然 python 系的,基于 python 的 ansible 这么好用的部署神器就不能不推荐一把(当然, ansible 不仅仅能做部署,跟 puppet 、 chef 、 salt 是类别的)


/t/327354#reply11 参见 11 楼
julyclyde
2016-12-19 14:05:34 +08:00
@leopku 你这个“既然……就不能不”的道理,我没看出来啊

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

https://www.v2ex.com/t/328455

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

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

© 2021 V2EX