序 购买云服务器
我这里购买的是阿里云的服务器,阿里云试用中心 如果是注册不超过六个月的用户,可以免费试用一个月,先玩一玩。 注意:必须要实名认证,还有活动开启时间是上午十点。
买完服务器之后就可以通过阿里云控制台来查看基本信息,这里提醒各位要重置一下实例密码,等下好连接服务器的时候试用,还需要配置一下安全组,之后我们写的接口可以通过这些端口访问。
接下来就可以通过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
文件, 重启mysqlservice 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项目