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重新运行则表示设置成功了,否则,重新检查问题出在哪里。
以上是本人此次部署的全过程,第一次在本机操作成功后,第二次在阿里云服务器操作很快就成功了。
虽说内容都是自己敲的,但是所有经验也都是自行进行各种查询综合的结果,希望能帮到想学习这方面的人。