[python] flask + ngnix

文本记录了当使用python+flask的应用时,如何配合ngnix实现通过80端口访问,从而也就可以使用域名直接访问python app。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

评论中有502错误解决方法。

如果有多个app,virtualenv可以共用,只要在service的路径里面写上实际路径即可

virtualenv webprojectenv

source webprojectenv/bin/activate

502

For those that have the 502 gateway error try changing chmod-socket = 660

uwsgi_pass unix:///home/sammy/myproject/myproject.sock;

 

假设目录为test1

运行create.sh

createsh test1
source myprojectenv/bin/activate
增加.py or template

测试是否正常

  1. uwsgi –socket 0.0.0.0:5000 –protocol=http -w wsgi:app

 

如下代码存为create.sh, 即使目录存在,也可以使用此脚本重新配置

if [ $# -ne 1 ]
then
echo “Error input, must be a project name”
exit
fi

NAME=$1
DIRNAME=$1
echo $NAME
mkdir ${NAME}
#NAME=$1/$1
echo “[uwsgi]” > ${NAME}.ini
echo “module = wsgi:app” >> ${NAME}.ini
echo “” >> ${NAME}.ini
echo “master = true” >> ${NAME}.ini
echo “processes = 1” >> ${NAME}.ini
echo “”>>${NAME}.ini
echo “socket = ${NAME}.sock”>>${NAME}.ini
echo “chmod-socket = 666”>>${NAME}.ini
echo “vacuum = true”>>${NAME}.ini
echo “”>>${NAME}.ini
echo “die-on-term = true”>>${NAME}.ini
mv ${NAME}.ini $DIRNAME/

echo “============================”
echo “from ${NAME} import app” > wsgi.py
echo “”>>wsgi.py
echo “if __name__ == \”__main__\”:”>>wsgi.py
echo ” app.run()” >> wsgi.py
mv wsgi.py $DIRNAME
cp ./dict/webprojectenv $DIRNAME -rf

echo “============================”
echo “[Unit]”> ${NAME}.service
echo “Description=uWSGI instance to serve ${NAME} api”>>${NAME}.service
echo “After=network.target”>>${NAME}.service
echo “[Service]”>>${NAME}.service
echo “User=sunny”>>${NAME}.service
echo “Group=www-data”>>${NAME}.service
echo “WorkingDirectory=/home/sunny/webproject/${NAME}”>>${NAME}.service
echo “Environment=\”PATH=/home/sunny/webproject/${NAME}/webprojectenv/bin\””>>${NAME}.service
echo “ExecStart=/home/sunny/webproject/${NAME}/webprojectenv/bin/uwsgi –ini ${NAME}.ini”>>${NAME}.service
echo “[Install]”>>${NAME}.service
echo “WantedBy=multi-user.target”>>${NAME}.service
echo “============================”
mv ${NAME}.service $DIRNAME/
sudo cp ./${DIRNAME}/${NAME}.service /etc/systemd/system
sudo cp ./${DIRNAME}/${NAME}.service /etc/systemd/system
sudo systemctl start ${NAME}
sudo systemctl enable ${NAME}
sudo systemctl status ${NAME}
sudo systemctl restart nginx