天天看点

Centos部署Flask项目

1.安装git:

sudo yum install git
           

2.安装mysql客户端(如果数据库在本机需要安装mysql服务端)

wget https://dev.mysql.com/get/mysql-community-client-5.7.25-1.el7.x86_64.rpm

rpm -Uvh mysql-community-client-5.7.25-1.el7.x86_64.rpm
           

如果此处报错则在后面加上--force --nodeps(由于yum安装了旧版本的GPG keys造成的)

3.安装python3

sudo mkdir /usr/local/python3 # 创建安装目录

wget --no-check-certificate https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz #下载Python源文件
# 注意:wget获取https的时候要加上:--no-check-certifica

tar -xzvf Python-3.6.4.tgz # 解压缩包

cd Python-3.6.4 # 进入解压目录

sudo ./configure --prefix=/usr/local/python3 # 指定创建的目录

sudo make

sudo make install # 编译安装
           

配置两个版本共存:

配置python3软连接

sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
           

错误解决:

(1)执行./configure时可能会报错,configure: error: no acceptable C compiler found in $PATH,这是因为未安装合适的编译器,安装下就好了,

sudo yum install gcc-c++

(使用sudo yum install gcc-c++时会自动安装/升级gcc及其他依赖的包。)

(2)执行sudo make install可能会报错"zipimport.ZipImportError: can't decompress data; zlib not available"错误提示,这是缺少zlib包导致的,安装下就好

yum install zlib zlib-devel –y

然后再去编译 make install python3.6就不会有错误提示

(3)在4中安装requriments.txt报错

ssl certificate:Can't connect to HTTPS URL because the SSL module is not available。原因是没有安装openssl

yum install openssl-devel zilb-devel python3-devel
           

然后安装python

4.安装pip

python2的pip安装:

sudo yum -y install epel-release # 首先安装 epel 扩展源

sudo yum -y install python-pip # 安装 python-pip

sudo yum clean all # 清除 cache
           

python3的pip安装:

wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz # 下载源代码

tar -zvxf 9.0.1.tar.gz    # 解压文件

cd pip-9.0.1

python3 setup.py install # 使用 Python 3 安装
           

创建pip3链接:

sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3
           

升级pip:

pip install --upgrade pip
           

5.安装gunicorn

Gunicorn (独角兽)是一个高效的Python WSGI Server,通常用它来运行 wsgi application(由我们自己编写遵循WSGI application的编写规范) 或者 wsgi framework(如Django,Paster),地位相当于Java中的Tomcat。WSGI就是这样的一个协议:它是一个Python程序和用户请求之间的接口。WSGI服务器的作用就是接受并分析用户的请求,调用相应的python对象完成对请求的处理,然后返回相应的结果。简单来说gunicorn封装了HTTP的底层实现,我们通过gunicorn启动服务,用户请求与服务相应都经过gunicorn传输

创建虚拟环境:

cd /home/www

mkdir venv

python3 -m venv venv
           

激活虚拟环境:

source venv/bin/activate
           

根据requirements.txt文件安装依赖包:

pip3 install -r requirements.txt
           

安装报错:“ssl certificate:Can't connect to HTTPS URL because the SSL module is not available”。

问题修复:

先退出python虚拟环境找到Python3.6.4安装目录先安装openssl

yum install openssl-devel zilb-devel python3-devel

再重新编译Python3:make和make install

编译完成后再重新安装python requirems.txt文件安装依赖包:

pip3 install -r requirements.txt

查看pip已经安装python包:pip3 list --format=columns

安装gunicorn

pip3 install gunicorn
           

6.安装nginx

nginx 是一个高性能的web服务器。通常用来在前端做反向代理服务器。所谓正向与反向(reverse),只是英文说法翻译。代理服务,简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)。

正向代理:{ 客户端 ---》 代理服务器 } ---》 服务器

反向代理:客户端 ---》 { 代理服务器 ---》 服务器 }{} 表示局域网

安装nginx

yum -y install nginx

启动nginx服务

systemctl start nginx.service

终止nginx服务

systemctl stop nginx.service

重启nginx服务

systemctl restart nginx.service

平滑重启,在nginx配置改动了,可以重新加载而不用先关闭再打开

nginx -s reload

nginx的配置

nginx的配置文件为:/etc/nginx/nginx.conf

server {

        listen 80;

        server_name adisonhyh.com;

        location / {

                proxy_pass http://127.0.0.1:8000;

                proxy_set_header Host $host;

               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

}
           

用vim命令查看nginx的配置文件

vim /etc/nginx/nginx.conf

出现“-bash: vim: command not found”错误是vim没有安装或者安装不全,可以用rpm -qa|grep vim查看已经安装的vim工具:

vim-enhanced-7.0.109-7.el5

vim-minimal-7.0.109-7.el5

vim-common-7.0.109-7.el5

如果缺少其中任何一条,比如 vim-enhanced 的,就用命令 yum -y install vim-enhanced 来安裝

 查看nginx配置:

server {

        listen       80;

        #server_name  _;

        server_name     serverIP;

        charset         utf-8;

        #root         /usr/share/nginx/html;

        # Load configuration files for the default server block.

        include /etc/nginx/default.d/*.conf;


        location / {

                #include     uwsgi_params;

                proxy_pass http://127.0.0.1:8000;

                #uwsgi_pass  127.0.0.1:8000;

                #uwsgi_param UWSGI_PYTHON /usr/local/python3;

                #uwsgi_param UWSG_CHDIR /home/zhy/SocketServer;

                #uwsgi_param UWSG_SCRIPT run:app;

                proxy_set_header Host $host;

                proxy_set_header X-Real-IP $remote_addr;

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }



        error_page 404 /404.html;

            location = /40x.html {

        }


        error_page 500 502 503 504 /50x.html;

            location = /50x.html {

        }

    }
           

7.安装supervisor

如果你需要进程一直执行,若该进程因各种原因中断,也会自动重启的话,supervisor是一个很好的选择。supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常终端,则父进程可以准确的获取子进程异常终端的信息,通过在配置文件中设置autostart=true,可以实现对异常中断的子进程的自动重启。

安装supervisor:

pip3 install supervisor

添加项目supervisor.conf配置文件

[program:blog]

command=/home/www/blog/venv/bin/gunicorn -w4 -b0.0.0.0:8000 wsgi:application    ;supervisor启动命令

directory=/home/www/blog                              ; 项目的文件夹路径

startsecs=0                                           ; 启动时间

stopwaitsecs=0                                        ; 终止等待时间

autostart=false                                                           ; 是否自动启动

autorestart=false                                     ; 是否自动重启

stdout_logfile=/home/www/blog/logs/gunicorn.log       ; log 日志

stderr_logfile=/home/www/blog/logs/gunicorn.err       ; 错误日志
           

使用 supervsior 启动 gunicorn,

supervisord -c supervisor.conf

sudo supervisorctl start program_name
           

查看supervisor进程:

 pstree -ap|grep supervisor

报错"pstree:command not found",安装psmic即可:

yum install psmisc -y

8.参考资料

(1)CentOS 部署 flask项目

   https://www.jianshu.com/p/da28ec28ef4b 

(2)解决unix:///tmp/supervisor.sock no such file的问题

  https://blog.csdn.net/qq_28885149/article/details/79364685

继续阅读