在同学的介绍下接了两个做公司网站的外单, 都只是简单的公司官网, 访问量不大对性能没有太大的要求. 经过一番调查发现 Django 用来做这种类型的网站很快速方便, 目前两个网站已经开发完毕并且部署到服务器上稳定运行了一段时间. 但是个人并没有运营任何 Python/Django 的经验, 部署方案都是自己参考网上一些文章摸索出来的. 部署方案是没什么复杂的, 但是很好奇正规 Django 项目的部署方案是什么样的? 怎么做负载均衡? 我现在的部署方案是否存在一些显而易见的错误或者不合适的地方? 想跟大家讨论一下. 总得来说就是想知道正规的线上 Django 项目都是怎么部署的.
git pull
命令更新代码, 然后执行supervisor restart xxx
, 这里用 Jenkins 是不是可以减少一些工作?之前服务器并不是很稳定, 所以导致经常更换服务器. 迁移的步骤都是手动的, 首先迁移相关的源码和静态文件, 然后再迁移数据库, 有点繁琐. 这里用 Docker 是不是可以减少迁移的重复工作?
1
neoblackcap 2017-01-14 15:35:18 +08:00
uwsgi 并没有特别快, bjoern + gunicron 也很快,关键是 gunicron 的配置简单多了。使用 uwsgi 的前提是你用了很多 uwsgi stack 。若是没有特别要求,我觉得 gunicron 更好。
|
2
lzjun 2017-01-14 15:42:04 +08:00 1
|
3
JasperYanky 2017-01-14 16:14:08 +08:00 1
每次都忍不住发一遍 http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ 另外 可以在 git hooks post-update 里面写脚本 git check 和重启 supervisor
|
4
akinoniku 2017-01-14 16:23:02 +08:00
把你的程序单独放到 docker container 里面运行设成 restart always 就好,不需要 supervisor 和 virtualenv 。
把 nginx 和 db 一类的都做成另外的 container ,最后用 docker-compose 设定关系。 Jenkins 用来跑测试和 build 和 push docker image |
5
maikcn 2017-01-14 17:40:26 +08:00
我们是 django + uwsgi + nginx 一个 docker 容器, db 另一个容器,用 compose 来 run
代码是将 容器 1 中的一个目录 如 /codebase 做成一个 Volume ,更新代码 restart 就好了 |
6
gamexg 2017-01-14 20:15:39 +08:00
@akinoniku docker +1
这种小站点,直接每个 django 网站一个 docker ,里面跑 gunicron 。建议每个站点一个 docker-compose 。 另外对外可以用 https://github.com/jwilder/nginx-proxy 做反代,能够自动扫面运行中的 docker 容器自动反代。 每上线一个新站点直接启动一个新的 docker 容器,在 docker 容器环境变量里面注明域名,是否需要自动申请 https 证书, nginx-proxy 会自动反代及申请证书。 |
10
fengclient 2017-01-15 13:55:03 +08:00 via iPhone
总体差不多 另外还用了 fabric
|