簡體   English   中英

在 Amazon Linux EC2 實例上使用 nginx/gunicorn 部署 Python flask 應用程序

[英]Deploying Python flask application using nginx/gunicorn on Amazon Linux EC2 instance

我正在嘗試在 Amazon Linux EC2 實例上部署一個 python Flask 應用程序。 我無法啟動 upstart 腳本並讓它運行。

我正在關注本教程(適用於 ubuntu): https : //www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-14- 04

我的配置文件看起來像:myapp.conf

description "Gunicorn application server running myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid user
setgid www-data

env PATH=/home/ec2-user/flask/venv/bin
chdir /home/ec2-user/flask
exec gunicorn --workers 3 --bind unix:app.sock -m 007 wsgi

我的 wsgi 文件看起來像:wsgi.py

from app import application

if __name__ == "__main__":
    application.run()

我的實際應用程序看起來像:app.py

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return ""Hello World"

if __name__ == "__main__":
    application.run(host='0.0.0.0')

當我做一個:

sudo start myapp

我收到一條錯誤消息,提示未知工作。 我到底需要做什么才能讓它運行? 或者有沒有其他方法可以在 Amazon Linux 實例上制作新貴腳本? 有人可以幫忙嗎

我也遇到了同樣的問題。 經過一番挖掘,這是我發現的。

start: Unknown job: myapp消息表明Upstart腳本myapp.conf 您可以通過運行sudo tail -n 5 /var/log/messages來檢查日志

init: /etc/init/myapp.conf:7: Unknown stanza

在這種情況下,它與setuid有問題。 根據Upstart 文檔,在 Upstart v1.4 中添加了setuid

現在通過運行initctl --version檢查安裝的Upstart initctl --version 它返回了initctl (upstart 0.6.5) ,這解釋了為什么它不適用於 Amazon Linux。 不幸的是, 升級 Upstart似乎沒有簡單的方法。

作為概念證明,您可以將setuidsetgid注釋掉(我還更改了--bind參數)

description "Gunicorn application server running myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
#setuid user
#setgid www-data

env PATH=/home/ec2-user/flask/venv/bin
chdir /home/ec2-user/flask
exec gunicorn --workers 3 --bind 0.0.0.0:8000 wsgi

然后它應該工作

sudo start myapp

但是,不建議這樣做,因為它會以root身份運行gunicorn 而不是使用setuidsetgid新貴文檔提到

如果您不使用 Upstart 1.4,則很容易實現所需的目標。 您可以使用幾種方法。 Debian 和 Ubuntu 系統的推薦方法是使用 helper 實用程序 start-stop-daemon(8),如下所示:

exec start-stop-daemon --start -c myuser --exec command

不幸的是,亞馬遜 Linux 上也沒有start-stop-daemon ......還有其他可能的替代品,例如daemonrunuser ,但在這一點上,我認為不值得追求使用Upstart Gunicorn還有許多其他監控選項 我最終改用了Supervisor

在編寫這本書的時候,使用gunicorn 19.9.0 ,有參數--user--group可與指定gunicorn命令。 因此,為了使用 upstart 0.6.5(即ec2-user:nginx )在 amazon linux 上以非 root 用戶身份運行您的 gunicorn wsgi 服務器,您可以在您的 upstart 腳本的 exec 節中指定它,如下所示(此示例使用unix 套接字但address:port也可以工作:

exec gunicorn --user ec2-user --group nginx --bind socket.sock wsgi

此外,在您的情況下,當前在 amazon linux yum repo 中的 nginx 版本不使用組www-data或根目錄/var/www/html 這是它存在於 ubuntu apt 存儲庫中的方式,旨在模仿 apache。 相反,amazon linux yum repo 使用組nginx和根目錄/usr/share/nginx/html 您可以將系統設置為模仿 ubuntu,但這不是默認設置。 在這種情況下,只需使用:

exec gunicorn --user ec2-user --group www-data --bind socket.sock wsgi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM