Blog地址:https://www.jiangdog.com/blog/flask-deployment
前期准备
- 阿里云服务器ECS
- 云数据库 RDS版
- CentOS 7.2系统
- 基本开发完成的Flask应用
基本环境准备
安装基本依赖并创建应用目录
安装基本依赖:
yum groupinstall "Development tools" yum install zlib zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
- 创建应用根目录:
# cd /home # mkdir apps
安装Python3
- 进入安装目录
# cd /usr/local/bin
。 - 下载Python3.5源码:
# wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
- 解压源码文件:
# tar -xzvf Python-3.5.1.tgz
进入目录并编译安装:
# cd Python-3.5.1 # ./configure prefix=/usr/local/python3 # make && make install
添加python3, pip3软连接(python3是自带pip3的,是在python3同目录下,不需要自己再重新安装):
# ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # python3 -V # ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # pip3 list # pip3 install --upgrade pip
- 进入安装目录
使用虚拟环境:
安装并配置
virtualenv
:# pip3 install virtualenv # vi ~/.bashrc # export PATH=/usr/local/python3/bin:$PATH # source ~/.bashrc # echo $PATH # cd /home/apps/ # virtualenv venv --no-site-packages --python=python3 # source venv/bin/activate
- 中间有一步骤是将
export PATH=/usr/local/python3/bin:$PATH
添加到文件顶部,然后执行,添加了系统变量。 进入虚拟环境, 退出虚拟环境:
# source /home/apps/venv/bin/activate (venv) # deactivate
- 若想删除虚拟环境,则直接将创建的虚拟环境venv对应的文件夹删掉就行了。
Nginx
- 安装Nginx:
上传应用到服务器
从Git上克隆代码:
# cd /home/apps # git clone https://github.com/jiangdog/jiangdog_blog.git
根据requirements.txt安装第三方库:
# souce ./venv/bin/activate (venv) # cd jiangdog_blog/ (venv) # pip install -r requirements.txt
requirements.txt可以通过
# pip freeze requirements.txt
生成。
配置服务器代理
安装并使用uWSGI:
进入虚拟环境安装uWSGI:
# source /home/apps/venv/bin/activate (venv) # pip install uwsgi (venv) # uwsgi -h
修改uWSGI配置文件uwsgi。
[uwsgi] # uwsgi 启动时所使用的地址与端口 socket = 127.0.0.1:8080 # 指向网站目录 chdir = /home/apps/jiangdog_blog/ # python 启动程序文件 wsgi-file = main.py # python 程序内用以启动的 application 变量名 callable = app # 进程数 processes = 4 # 线程数 threads = 2
通过uWSGI启动。
(venv) # uwsgi uwsgi_config.ini
安装并使用Nginx
安装Nginx(也可以通过源码安装):
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm # yum install nginx # nginx -v
查看并修改nginx配置文件:
# nginx -t # cd /etc/nginx/conf.d/
直接添加一个新的nginx_config.conf配置文件:
server { listen 80; server_name xxx.xxx.xxx.xxx; #公网地址或域名 access_log /home/apps/jiangdog_blog/logs/access.log; error_log /home/apps/jiangdog_blog/logs/error.log; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理 uwsgi_param UWSGI_PYHOME /home/apps/jiangdog_blog/venv/; # 指向虚拟环境目录 uwsgi_param UWSGI_CHDIR /home/apps/jiangdog_blog/; # 指向网站根目录 uwsgi_param UWSGI_SCRIPT main:app; # 指定启动程序 } }
修改应用配置:
- 修改config.py。
修改main.py,将
config_name
改成线上环境。config_name = 'production'
启动并查看应用:
启动Nginx:
# nginx
启动uWSGI:
(venv) cd /home/apps/jiangdog_blog/ (venv) # uwsgi uwsgi_config.ini
其他(查看端口,关闭Nginx,关闭uWSGI)
# netstat -ntlp # nginx -s -stop # ps -aux | grep uwsgi # kill -9 [pid]