Ubuntu下配置python web + flask + uwsgi + nginx + mysql + supervisor

Ubuntu + python web + Flask + uwsgi + nginx + mysql

最近突发兴趣学习phtyon,之前学过JSP,以网站制作有些兴趣,所以就花了点心思学习python web,之后做了个项目,想发布到阿里云服务器,才知道想发布可不是在自己本地主机上调试那样方便,查询各种资料,或多或少都有些小问题。(可能是系统环境不一致导致)
最后经过各种尝试,综合各种资料,总算是成功发布上去了,在这里将资料整合一下,需要的人可以参考一下。
文中出现的hejia是我的项目名称,可用自己的项目进行替换。
非专业人士,不到之处还请见谅:
1、操作系统选择
本次操作选择的是阿里云云服务器ECS主机,Ubuntu 18操作系统;
本机windows系统,可下载vmware虚拟机,再安装Ubuntu系统到虚拟机;
2、python默认版本调整
起初按网上各种教程试了N次都失败了,因为系统默认使用的是python2.7,除非你使用的就是该版本,否则你安装的新版本,也不会自动切换;
运行以下命令调整默认版本(具体看需要用什么版本,具体问题具体分析):

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

3、python相关安装
安装pip3(这里还是和需要使用的python版本有关,安装适合自己的版本)

sudo apt-get install python3-pip

pip3安装virtualenv

sudo pip3 install virtualenv

进入项目根目录,执行:

Virtualenv venv

安装项目需要的库

pip3 install -r requirements.txt

运行项目

source venv/bin/activate

停止运行

deactivate

备注:
如果本地运行正常,此时运行不正常,还是得要看看python版本是不是你所需要的
ubuntu系统上传项目上传参考链接https://blog.csdn.net/u013250416/article/details/78075590,其它操作系统,还请自行查询

4、mysql安装与配置
本地安装的ubuntu mysql已经是没有问题的,阿里云上的mysql不知什么原因,我将原有版本卸载后重新安装才配置成功
安装mysql

sudo apt-get install mysql-server
apt install mysql-client
apt install libmysqlclient-dev

查找并修改密码,参考如下链接
https://www.cnblogs.com/super-zhangkun/p/9435974.html
mysql插入中文时报错,按以下链接配置一下
https://www.cnblogs.com/shenckicc/p/7060110.html

5、NGINX安装与配置
执行以下代码安装

sudo apt-get updat
sudo apt-get install nginx

修改目录/etc/nginx/sites-enabled/的default文件

cd /etc/nginx/sites-enabled/
sudo vim default

文件打开后,输入i,对文件进行修改:

server {

listen 80;                                         
server_name localhost;     #本地使用localhost,服务器写外网地址,或者域名                                           
charset utf-8;                                                         
client_max_body_size 75M;                                      
                                                                              
location / {                                                                   
    include uwsgi_params;                                           
    uwsgi_pass 127.0.0.1:8000;                                            
    uwsgi_param UWSGI_PYTHON /root/hejia/venv; #虚拟环境根目录
    uwsgi_param UWSGI_CHDIR /root/hejia;    #项目根目录
    uwsgi_param UWSGI_SCRIPT manage:app;       #app运行的文件                 
}                                                                              

}

按esc键,输入:wq,保存数据
重新载入及重新启动

sudo nginx -s reload
nginx

备注:如果以下操作无误,页面应该显示「502 Bad Way],以server_name 设置为localhost为例执行命令

curl http://localhost

html代码会显示以上内容
6、uwsgi安装与配置
进入项目虚拟环境目录下的bin文件,即:项目根目录/venv/bin

pip3 install uwsgi

进入项目根目录,新建目录

mkdir uwsgi

进入uwsgi目录,新建文件uwsgi.ini

cd uwsgi
vim uwsgi.ini

uwsgi.ini内容如下:

[uwsgi]
socket=127.0.0.1:8000 #监听端口,根据程序实际情况填写
plugin=python3
virtualenv=/root/hejia/venv # 项目根目录
chidir=/root/hejia wsgi-file = manage.py # flask程序的启动文件
callable = app # 程序变量名

按esc键,输入:wq保存并退出
在uwsgi目录下执行

uwsgi --ini uwsgi.ini

至此项目已经算是能正常运行了。
备注:本地机器操作直接打开浏览器并输入http:/localhost操作。云服务器需要设置:本实例安全组-》配置规则,在访问规则下,将“入方向”与“出方向”的“80端口”打开,再在本地浏览器输入http://外网IP,进行查看

7、supervisor安装与配置
uwsgi在运行过程中停止,安装与配置supervisor,在停止运行后,可自动重启程序
在项目文件虚拟目录下,进入bin目录,执行

pip3 install supervisor

生成配置文件

echo_supervisord_config > supervisord.conf

进入etc目录

cd /etc

修改supervisord.conf

sudo vim supervisord.conf

输入i,修改文件,将[include]下内容修改为

files = /etc/supervisor/*.conf

进入supervisor目录(无此目录,执行mkdir supervisor创建)

cd /supervisor

新建配置文件hejia.conf:

vim hejia.conf

配置内容及相当说明如下:

[program:hejia]
directory = /root/hejia ;项目根目录
command = /root/hejia/venv/bin/uwsgi --ini uwsgi/uwsgi.ini ;即运行uwsgi命令
autostart = true startsecs = 5
autorestart = true startretries = 3
redirect_stderr = true stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
stdout_logfile = /data/logs/hejia_stdout.log
environment=PYTHONPATH=$PYTHONPATH:/root/hejia/venv/bin
stopasgroup=true
killasgroup=true

environment环境变量为项目虚拟环境目录下的bin目录
stdout_logfile中的 /data/logs/hejia_stdout.log,需要自行手动创建,创建成功后需要修改文件读写权限,执行

sudo chmod 777 /data/logs/hejia_stdout.log

启动superisor

sudo supervisord -c /etc/supervisord.conf

观察hejia这个项目是否正常运行(如果正常进行,项目名称后面会显示RUNNING )

supervisorctl

如果出现异常,修改过conf文件,需要重载一下配置文件

supervisorctl reload

查看uwsgi是否正常运行

ps aux|grep uwsgi

关闭uwsgi进程

sudo killall uwsgi

立即重新查询uwsgi进程应该是关闭状态,过3s后再次查看uwsgi,如果uwsgi重新运行则表示设置成功了,否则,重新检查问题出在哪里。

以上是本人此次部署的全过程,第一次在本机操作成功后,第二次在阿里云服务器操作很快就成功了。
虽说内容都是自己敲的,但是所有经验也都是自行进行各种查询综合的结果,希望能帮到想学习这方面的人。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值