【问题标题】:How to reflect python changes in django, uwsgi and nginx setup如何在 django、uwsgi 和 nginx 设置中反映 python 的变化
【发布时间】:2016-12-22 08:47:06
【问题描述】:

您好,我已经使用 UWSGI 和 Nginx 部署了 Django,使用了以下教程 http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html 一切运行良好。我在更新 python 代码时面临挑战。我不知道部署新更改的有效方法。 在命中和试用后,我使用以下命令进行部署

git pull; sudo service uwsgi stop; sudo service nginx restart; sudo service uwsgi restart; /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals

此命令运行良好。但我面临以下问题

  1. Usagi 在前台运行。每次我进行更改时,都会有一个新的 UWSGI 实例开始运行。
  2. 由于多个 UWSGI 实例,我的 AWS 服务器因内存耗尽而崩溃。

我想知道我应该运行哪些命令来反映 python 代码的变化。 PS:在我之前的 APACHE Django 设置中,我只是用来重启 apache,是否可以通过仅重启 nginx 来反映更改。

【问题讨论】:

  • 为什么要在前台运行uwsgi?
  • 我应该如何运行它?

标签: python django nginx uwsgi


【解决方案1】:

试试这个:

git pull
python manage.py migrate  # to run any migrations
sudo service uwsgi restart

按 Ctrl + Z 然后bg + 回车 这应该在后台运行该进程。

如果可行,请告诉我。

【讨论】:

    【解决方案2】:

    请查看这个以在后台运行 uwsgi。创建一个 .ini 文件 /etc/uwsgi/sites/projectname.ini。脚本看起来像这样(对于 ubuntu 16.04):

    [uwsgi]
    project = projectname
    base = projectpath
    
    chdir = %(base)/%(project)
    home = %(base)/Env/%(project)
    module = %(project).wsgi:application
    
    master = true
    processes = 5
    
    socket = %(base)/%(project)/%(project).sock
    chmod-socket = 666
    vacuum = true
    

    (对于 ubuntu 16.04):

    然后在 /etc/systemd/system/uwsgi.service 创建以下 systemd 脚本:

    [Unit]
    Description=uWSGI Emperor service
    After=syslog.target
    
    [Service]
    ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
    Restart=always
    KillSignal=SIGQUIT
    Type=notify
    StandardError=syslog
    NotifyAccess=all
    
    [Install]
    WantedBy=multi-user.target
    

    使用板载这个新的 uWSGI 服务刷新 systemd init 系统的状态

    sudo systemctl daemon-reload
    

    为了启动脚本,您需要运行以下命令:

    sudo systemctl start uwsgi
    

    要在重启时启动 uWSGI,您还需要:

    sudo systemctl enable uwsgi
    

    您可以使用以下方式检查其状态:

    systemctl status uwsgi
    

    (对于 ubuntu 14.04):

    为 uWSGI 创建一个 upstart 脚本:

    sudo nano /etc/init/uwsgi.conf
    

    然后在上面创建的文件中添加以下行:

    description "uWSGI application server in Emperor mode"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    setuid user
    setgid www-data
    
    exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
    

    【讨论】:

    • 在 Ubuntu 14.04 上,它给出了以下错误。 sudo:systemctl:找不到命令。如何解决它?
    • 我已经更新了 ubuntu 14.04 版的答案。最上面的部分是所有版本通用的,其余部分是根据版本划分的。请检查。
    • 我已经有一个类似的 upstart 脚本,只要 UWSGI 被杀死,它就会自动运行,但即使在重新启动后,它也会在名为“502 Bad Gateway”的 nginx 上给我错误。此错误仅在我运行此命令时消失 git pull; sudo service uwsgi stop; sudo service nginx restart; sudo service UWSGI restart; /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals 我想知道如何部署我的更改,而不是一次又一次地运行 uwsgi。
    • @jugadengg 它似乎对我有用。详情请参考此链接:digitalocean.com/community/tutorials/…
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 2011-03-12
    • 2016-09-21
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2014-02-01
    相关资源
    最近更新 更多