Tal*_*iss 5 svn django nginx amazon-web-services gunicorn
我有一个基于Django和Python 2.6构建的新网站,我已将其部署到云端(符合流行语和Amazon micro EC2实例是免费的!).
以下是我的详细说明:https://docs.google.com/document/d/1qcZ_SqxNcFlGKNyp-CXqcFxXXsKs26Avv3mytXGCedA/edit?hl = zh_CN
由于这是一个新网站(并且想要玩最新最好的网站),我在主管之上使用了Nginx和Gunicorn.
使用YUM/easy_install从主干安装的所有软件.
我的数据库是Sqlite(现在 - 不确定下一步该去哪,但这不是问题).同样在待办事项清单上:virtualenv + pip.
到现在为止还挺好.
我的代码在SVN中.我写了一个简单的fabfile来部署 - 检查出最新的代码并通过Supervisor重新启动Gunicorn.我将我的DNS名称挂钩到弹性IP.
有用.
我的问题是,如何在不中断服务的情况下更新网站?当我运行我的小更新脚本时,该站点的用户获得404s/500s.
有没有办法在不添加其他服务器的情况下执行此操作(价格是关键)?
我希望有一个临时系统(在不同的端口上?)和在分段和生产之间的无缝切换.在同一个(免费)服务器上.通过面料.
我怎么做?运行两个网站的Nginx是一样的吗?我可以在不损害生产的情况下升级分段吗?fabfile会是什么样子?目录树会是什么样子?
谢谢!
塔尔.
有关:
Nginx 允许您为反向代理设置故障转移,您可以将一个 Gunicorn 实例作为主实例,只要该版本正在运行,它就永远不会查看故障转移。
如果您配置站点以使新版本位于故障转移实例中,则只需编写 fab 文件以使用站点的新版本更新故障实例,然后在准备就绪时关闭主实例。Nginx 将无缝故障转移到第二个实例,然后您就可以在新版本上运行,无需停机。
然后,您可以更新主要版本,然后重新打开它,您的主要版本现已上线。此时,您可以保持故障转移实例运行以防万一,或者将其关闭。
有些事情需要考虑。您必须小心数据库,如果您使用 sqllite,请确保两个 Gunicorn 实例都可以访问 sqllite 文件。
如果您有一个普通的数据库,这不是一个问题,您只需确保在切换到新版本之前应用新版本所需的任何数据库迁移即可。
如果它们是向后兼容的更改,那么这没什么大不了的。如果它们不向后兼容,那么请小心,您可能会在切换到新版本之前破坏网站的旧版本。
为了让事情变得更容易,我会在不同的虚拟环境上运行这些版本。
如果您使用supervisord来控制gunicorn,那么您可以使用supervisorctl命令来重新加载/重新启动您想要部署的实例,而不会影响另一个实例。
希望有帮助
这是 nginx 配置的示例(不是完整的配置文件,删除了不重要的部分)
假设主 Gunicorn 实例在端口 9005 上运行,另一个实例在端口 9006 上运行
upstream service-backend {
server localhost:9005; # primary
server localhost:9006 backup; # only used when primary is down
}
server {
listen 80;
root /opt/htdocs;
server_name localhost;
access_log /var/logs/nginx/access.log;
error_log /var/logs/nginx/error.log;
location / {
proxy_pass http://service-backend;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |