查找过很多关于flask部署Centos的教程,但在操做过程当中总有各类问题没法成功,最后参考如下博客的文章完成上传和部署。这也是第一次部署Python Flask项目,记录下完整过程,也是提供给其余较为基础的新手参考借鉴。html
相关环境和信息:python
参考文章连接:mysql
https://www.cnblogs.com/Sugar-Chl/articles/9497901.htmlnginx
https://blog.csdn.net/wszll_alex/article/details/76285324web
https://blog.csdn.net/ludongdong/article/details/78524653sql
如下为完整步骤。
Mac电脑,打开终端窗口
输入链接命令:22为端口号, 120.0.44.91为云主机的公网IP
ssh -p 22 root@120.0.44.92
而后输入密码后就进入了云主机
安装依赖包
yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
根据本身需求下载不一样版本的Python3,我下载的是和参考博文的中Python3.6.2
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz #其余版本地址:https://www.python.org/ftp/python/
存放目录是/usr/local/python3,使用命令创建一个空文件夹:
mkdir /usr/local/python3
,而后解压压缩包
tar -xvJf Python-3.6.2.tar.xz
进入该目录
cd Python-3.6.2
安装Python3
./configure --prefix=/usr/local/python3
make && make install
安装完后会提示安装好了pip等工具,出现“successfully installed”等字样。
到此为止,Python3.6已经安装好了。
因为centos7 中自带的python的版本是python2,而如今不少包只支持python3 ,因此咱们要安装虚拟环境,在虚拟环境中的python版本是3.6,而后咱们要安装virtualenv(python环境隔离工具)。
以后咱们的flask的部署以及python包的下载都要在这个虚拟环境中进行!每次从新远程链接centos的时候都要记得进去虚拟环境后再操做。
若是出现pip使用的问题
-bash: pip: 未找到命令
解决方式参考:http://www.javashuo.com/article/p-ylfdrljb-dx.html
export PATH=$HOME/bin:/usr/local/bin:$PATH # 在这一行增长python的bin路径,以下 export PATH=$HOME/bin:/usr/local/python3/bin:/usr/local/bin:$PATH
开始安装virtualenv,我这里安装后使用的是pip3
pip3 install virtualenv
创建python3独立环境
virtualenv -p /usr/local/python3/bin/python3.6 /py3env
进去python3独立环境,开头会出现"(py3env)",表示进入了环境
source /py3env/bin/activate
可使用如下命令来验证Python版本
python -V
固然,若是要退出python3的独立环境,命令为
deactivate
到此为止,python3的安装以及独立环境的安装完成了。
下载mysql的repo源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
安装mysql-community-release-el7-5.noarch.rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
安装MYSQL
sudo yum install -y mysql-server
更改MYSQL用户权限
sudo chown -R root:root /var/lib/mysql
重启服务
systemctl restart mysql.service
登陆,并修改密码,这里的 update user set password=password(‘123456‘) where user=‘root‘; 语句中,将‘123456‘修改成本身的密码
mysql -u root mysql > use mysql; mysql > update user set password=password(‘123456‘) where user=‘root‘; mysql > flush privileges; mysql > exit;
到此为止,Mysql的安装和帐号配置基本完成。
下载对应当前系统版本的nginx包
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
创建nginx的yum仓库(默认yum是没有nginx的)
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
下载并安装nginx
yum install -y nginx
启动nginx
systemctl start nginx.service
到此为止,nginx的安装完成。
该命令要另开一个命令窗口,由mac电脑本地上传到服务器,不能是在链接到服务器的命令窗口执行,否则会出现 No such file or directory。
-r 表示文件夹上传
/Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo 为将项目文件的完整路径
root@120.0.44.92:/usr/local/python3/bin 为服务器项目文件的存放位置
scp -r /Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo root@120.0.44.92:/usr/local/python3/bin
到此为止,项目文件上传就完成了。
进入python3的bin目录下,安装
cd /usr/local/python3/bin
yum install mysql-devel gcc gcc-devel python-devel
进去python3独立环境,并进入以前上传的项目文件根目录中
source /py3env/bin/activate
安装项目中 requirements.txt 文件的依赖包
pip3 install -r requirements.txt
到此为止,Python包以及项目中所需的依赖包就都安装完成了。
这里就简单的建立一个数据库
输入命令进入Mysql
mysql -u root -p
而后输入密码,建立数据库
mysql> create database tod;
退出命令
mysql> exit;
更多Mysql操做和指令能够自行网上查询。
安装命令
pip install gunicorn
使用nginx做为反向代理服务器,nginx代理HTTP和websocket请求的一个最基本的配置:
首先进入nginx的文件目录下
cd /etc/nginx
而后建立和修改proxy_params文件
vi proxy_params
进入文件内,敲按键"i"窗口左下角就会出现"INSET",表示能够对内容进行插入和删除操做
内容填写以下,具体内容能够根据须要进行修改
proxy_redirect default; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k;
按键“Esc”可退出该模式,而且输入":"冒号后,输入"wq"表示保存并退出,输入"q"表示不保存直接退出,这里咱们选择保存退出。(具体这些文件操做命令和方法能够另行网上查询)
而后进入nginx的配置文件
cd /etc/nginx/conf.d
修改 default.conf(能够先对该文件进行备份后再进行修改操做,以免误操做)
vi default.conf
参考上面的方式,按键"i"进行修改和保存操做,这里只对如下内容进行修改,具体根据须要进行调整
http://192.168.0.11:5000 是内网IP加端口,我这里因为还有使用socketio,用的端口号是5000
server { listen 80; server_name _;# 这是HOST机器的外部域名,用地址也行 location / { proxy_pass http://192.168.0.11:5000;# 这里是指向 gunicorn host 的服务地址 include proxy_params; } location /socket.io { proxy_pass http://192.168.0.11:5000/socket.io; include proxy_params; } }
按键“Esc”,而且输入":"冒号后,输入"wq"保存并退出。
最后:
记得修改完成 nginx, 须要从新启动 nginx 服务
sudo service nginx restart
到此为止,nginx的配置就完成了。
运行命令
gunicorn -w 3 -b x.x.x.x:8000 manage:app
注意把x.x.x.x替换成内网ip地址,如
gunicorn -w 3 -b 192.168.0.11:8000 manage:app
若是项目中须要部署socketio,还要配合eventlet或者gevent,我这里使用的是eventlet
参考连接:https://www.jianshu.com/p/d81397edd2b1
gunicorn --daemon --worker-class eventlet --reload -w 1 -b 192.168.0.11:5000 app:app
外网想要访问你的flask网站,公网的IP地址就好了
http://X.X.X.X:8000
是的,到这一步,Flask项目的上传和部署就已经完成了!!!
若是要中止这个程序的运行
ps -aux | grep gunicorn
查看进程,而后kill掉这些进程就行了。
若是上面的结束gunicorn不行,使用下面的方式
pstree -ap|grep gunicorn
出现
退出Gunicorn任务,kill掉执行的任务进程
kill -9 1492
若是是要重启Gunicorn任务,则是
kill -HUP 1492
若是出现 “-bash: pstree: 未找到命令”问题,则安装pstree便可
yum install psmisc
若是从新链接服务器,记得要进入独立环境后再操做!
source /py3env/bin/activate