CentOS7部署Flask项目

序 购买云服务器

我这里购买的是阿里云的服务器,阿里云试用中心 如果是注册不超过六个月的用户,可以免费试用一个月,先玩一玩。 注意:必须要实名认证,还有活动开启时间是上午十点

买完服务器之后就可以通过阿里云控制台来查看基本信息,这里提醒各位要重置一下实例密码,等下好连接服务器的时候试用,还需要配置一下安全组,之后我们写的接口可以通过这些端口访问。

接下来就可以通过ssh root@公网ip连接服务器了。

一、安装python环境

CentOS7中默认就有Python2,所以我们这里配置一下Python3.

1. 安装相应的编译工具
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

yum install -y libffi-devel zlib1g-dev
yum install zlib* -y

这里直接复制黏贴就好

2. 安装Python3
mkdir /usr/local/python3  # 创建安装目录
wget wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz  # 下载python3.7.7的源文件 我这里用的是3.7.7版本, 这里大家随意, 跟本地的python版本一致就好
tar -xvJf  Python-3.7.7.tar.xz  # 解压缩包
cd Python-3.7.7  # 进入解压目录
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl  # 指定创建的目录
make && make install # 编译安装

执行./configure时可能会报错,configure: error: no acceptable C compiler found in $PATH,这是因为未安装合适的编译器,执行 sudo yum install gcc-c++ 安装下就好了

3. 创建软连接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
python3 -V  # 验证python3版本

这样就可以通过python 命令试用Python2, python3命令试用Python3

4.安装pip3
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 安装
ln -s /usr/local/python3/bin/pip /usr/bin/pip3  # 创建软连接
pip3 -V  # 验证一下

到这我们的Python环境安装好了, 接下来要开始安装一下MySQL.

二、安装MySQL

1. 下载并安装MySQL官方的 Yum Repository
wget 'https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm'  # 下载 Yum Repository 这里版本也尽量选择和本地MySQL相一致的
yum -y install mysql57-community-release-el7-10.noarch.rpm  # 安装 Yum Repository
yum -y install mysql-community-server  # 安装MySQL服务器
2. MySQL数据库设置
systemctl start  mysqld.service  # 启动MySQL
systemctl status mysqld.service  # 查看运行状态
grep "password" /var/log/mysqld.log # 获取root用户的密码
mysql -uroot -p # 登录数据库
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';  # 修改数据库密码 new password 为新密码  一般这步会出现密码复杂度不符合的错误提示
SHOW VARIABLES LIKE 'validate_password%';  # 查看MySQL默认密码复杂度
set global validate_password_policy=LOW;   # 设置安全度为low
set global validate_password_length=6;     # 设置密码长度为6位  这个无所谓
SHOW VARIABLES LIKE 'validate_password%';  # 查看MySQL默认密码复杂度是否修改
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';  # 可以重新设置下新密码
3. 修改数据库默认编码
status # 查看数据库的状态
--------------
...
Server characterset:    latinl   # 我们需要修改为utf8
Db     characterset:    latinl   # 我们需要修改为utf8
Client characterset:    utf8
Conn.  characterset:    utf8
...
--------------

我们需要使用exit; 命令退出mysql, 然后到 /etc 目录下的 my.cnf 文件增加四行代码

# 在顶部添加
[client]
default-character-set=utf8

# 在尾部添加
character-set-server=utf8
collation-server=utf8_general_ci

保存修改后的my.cnf 文件, 重启mysql service mysqld restart , 然后输入 status 再次查看状态, 应该会发生变化了

到这MySQL安装完毕

三、安装Nginx

Nginx是一款轻量级的网页服务器、反向代理服务器。相较于Apache、lighttpd具有占有内存少,稳定性高等优势。它最常的用途是提供反向代理服务。简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)。

我们这里应该在安装Python3的时候安装过gcc gcc-c++, 如果没有安装过, 可通过命令 yum install -y gcc gcc-c++ 进行安装.

1. 安装PCRE库
cd /usr/local/  # 一般我们需要安装的都会放在 local 这里
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz  # 下载源文件
tar -zxvf pcre-8.33.tar.gz  # 解压缩
cd pcre-8.33
./configure  # 配置
make && make install  # 安装
2. 安装SSL库
cd /usr/local/
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1j.tar.gz
tar -zxvf openssl-1.0.1j.tar.gz
cd openssl-1.0.1j
./config
make && make install
3. 安装zlib库
cd /usr/local/
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
4. 安装Nginx
cd /usr/local/
wget http://nginx.org/download/nginx-1.8.0.tar.gz  # 这里安装的是1.8.0 版本的
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0 

./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.33 --with-zlib=/usr/local/zlib-1.2.11
#(注: --with-http_ssl_module:这个不加后面在nginx.conf配置ssl:on后,启动会报nginx: [emerg] unknown directive "ssl" in /opt/nginx/conf/nginx.conf 异常)

make && make install
5.Nginx操作命令
service nginx start  # 启动服务
service nginx restart  # 重启 Nginx
service nginx stop  # 停止 Nginx服务
nginx -s reload  # 重新加载 Nginx 服务

这时候在浏览器输入服务器ip地址, 应该能看到Nginx的欢迎页面, 这时Nginx安装成功

6. 添加配置

Nginx的配置文件地址为 /etc/nginx/nginx.conf

server {
        listen 80;  # 监听http默认的端口号 80
        server_name ;  # 个人域名或者外网ip地址

        location / {
                proxy_pass http://127.0.0.1:8000; # 把请求代理到本机的8000端口(gunicorn启动服务指定的端口) 这里一定要和项目的启动端口一致, 才能保证项目能够被nginx代理
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

到这里Nginx部分告一段落~

四、部署项目

1. 创建虚拟环境
cd /home/project/demo    # 一般都会将项目创建在home 下面 这里自己起文件名
mkdir venv  # 创建文件夹
python3 -m venv venv    # 创建虚拟环境
2. 激活虚拟环境
source venv/bin/activate    
3. 安装项目依赖包

首先我们从本地项目的根目录执行 pip freeze > requirements.txt 生成requirements.txt 文件

pip3 install -r requirements.txt
4. 安装gunicorn

Gunicorn (独角兽)是一个高效的Python WSGI Server,通常用它来运行 wsgi application或者 wsgi framework,地位相当于Java中的Tomcat。

pip3 install gunicorn
5. 创建项目文件

这里只是做一个简单的示例, 如果项目文件大的话, 可以先上传git, 然后通过 sudo yum install git 安装git, 配置下SSH, clone代码就OK啦

touch wsgi.py  # 创建文件
vim wsgi.py   # 编辑文件

# 输入下面的代码
"""
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'

if __name__ == '__main__':
    ap.run(host='0.0.0.0', port='8000')
"""
# 保存并退出

gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app  # 启动服务

这时候在浏览器输入域名加端口号, 网页应该就会显示 hello world 。 到这基本工作就算结束了,现在可以自己写一些小的接口配合MySQL试一试啦

最后说一下Gunicorn和 Nginx的关系

gunicorn 可以单独提供服务,但生产环境一般不这样做。首先静态资源(jscssimg)会占用不少的请求资源,而对于 gunicorn 来讲它本身更应该关注实际业务的请求与处理而不应该把资源浪费在静态资源请求上;此外,单独运行 gunicorn 是没有办法起多个进程多个端口来负载均衡的。

Nginx 的特点是能够做负载均衡和 HTTP 缓存,首先作为前端服务器它可以处理一切静态文件请求,此时 gunicorn 作为后端服务器,nginx 将会把动态请求转发给后端服务器,因此我们可以起多个 gunicorn 进程,然后让 nginx 作均衡负载转发请求给多个 gunicorn 进程从而提升服务器处理效率与处理能力。最后,nginx 还可以配置很多安全相关、认证相关等很多处理,可以让你的网站更专注业务的编写,把一些转发规则等其它业务无关的事情交给 nginx 做。

总结

配置CentOS7环境花了很长时间, 但是这只是一些最基础的, 当然现在也可以满足一些小项目的接口, 不管怎么样, 还是先做出来, 可优化的等做好之后再进行优化。这篇文章主要记录下,防止以后忘记怎么配置。接下来打算写一个小程序,后端就用Flask.期待~

参考资料

CentOS7安装Python3

CentOS7安装Nginx及配置

CentOS7安装MySQL

CentOS 部署 flask项目

Python3+Gunicorn+Nginx 部署Flask项目

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350