云服务器Centos上传和部署Flask项目的完整过程(Mac)

查找过不少关于flask部署Centos的教程,但在操作过程中总有各种问题无法成功,最后参考以下博客的文章完成上传和部署。这也是第一次部署Python Flask项目,记录下完整过程,也是提供给其他较为基础的新手参考借鉴。

相关环境和信息:

  • 开发环境:Mac系统 | PyCharm CE
  • 云主机:京东云(阿里云都一样) | Centos 7.3 
  • Mysql
  • Nginx
  • Eventlet
  • Flask
  • Socket.io

参考文章链接:

以下为完整步骤。


1、连接云主机(服务器)

Mac电脑,打开终端窗口

输入连接命令:22为端口号, 120.0.44.91为云主机的公网IP

ssh -p 22 [email protected] 

然后输入密码后就进入了云主机


2.1、安装Python3.6

以下的操作主要参考来源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html

安装依赖包

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的时候都要记得进去虚拟环境后再操作。


2.2、安装virtualenv

以下的操作主要参考来源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html

如果出现pip使用的问题

-bash: pip: 未找到命令

解决方式参考:https://www.cnblogs.com/xueweihan/p/5133893.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的安装以及独立环境的安装完成了。


2.3、安装Mysql

以下的操作主要参考来源:https://blog.csdn.net/wszll_alex/article/details/76285324

下载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的安装和账号配置基本完成。


2.4、安装Nginx

以下的操作主要参考来源:https://blog.csdn.net/wszll_alex/article/details/76285324

下载对应当前系统版本的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的安装完成。


3、上传flask项目文件至服务器

以下的操作主要参考来源:https://blog.csdn.net/ludongdong/article/details/78524653

该命令要另开一个命令窗口,由mac电脑本地上传到服务器,不能是在连接到服务器的命令窗口执行,不然会出现 No such file or directory。

-r 表示文件夹上传
/Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo 为将项目文件的完整路径
[email protected]:/usr/local/python3/bin 为服务器项目文件的存放位置
scp -r /Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo [email protected]:/usr/local/python3/bin

到此为止,项目文件上传就完成了。


4、安装Python包

以下的操作主要参考来源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html

进入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包以及项目中所需的依赖包就都安装完成了。


 

5、创建Mysql数据库和调试Mysql脚本文件

请参考来源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html

这里就简单的创建一个数据库

输入命令进入Mysql

mysql -u root -p

然后输入密码,创建数据库

mysql> create database tod;

退出命令

mysql> exit;

更多Mysql操作和指令可以自行网上查询。


6、安装gunicorn

请参考来源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html

安装命令

pip install gunicorn

7、配置nginx

参考链接:https://www.jianshu.com/p/d81397edd2b1
参考链接:https://www.cnblogs.com/Ray-liang/p/4837850.html

使用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的配置就完成了。 


8、运行Flask项目

请参考来源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html

运行命令

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

  • -D --daemon 表示和终端脱离并运行在后台
  • --reload 表示在代码改变时自动重启
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:

如果要停止这个程序的运行

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

猜你喜欢

转载自www.cnblogs.com/JipengYe/p/10011427.html