阿里云的服务器

买完服务器之后就可以通过阿里云控制台来查看基本信息,需要检查配置一下安全组,确保接口的端口可以被访问。如MySQL3369等。

本次的搭建环境为CentOS7.8,Python环境为:3.7.7。

安装python环境

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

安装相应的编译工具

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

安装Python3

mkdir /usr/local/python3  # 创建安装目录
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++ 安装下就好了。

创建软连接

ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
python3 -V  # 验证python3版本

这样就可以通过python 命令试用Python2python3命令试用Python3

安装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

下载并安装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服务器

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';  # 可以重新设置下新密码

解决Navicat连接不上MySQL的问题,更改远程连接设置命令。如:设置root账号密码为123456可以访问用ip 192.168.3.134访问mysql服务器

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.3.134' IDENTIFIED BY '123456' WITH GRANT OPTION;

使用flush privileges;命令使刚才的配置生效。

修改数据库默认编码

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 , 登录MySQL然后输入 status 再次查看状态, 应该会发生变化了。

到这MySQL安装完毕。

安装Nginx

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

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

安装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  # 安装

安装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

安装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

安装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

Nginx操作命令

在centos下启动nginx出现Failed to start nginx.service:unit not found

错误的原因就是没有添加nginx服务,所以启动失败。

解决方法:

/root/etc/init.d/目录下新建文件,文件名为nginx。或者用命令在根目录下执行:# vim /etc/init.d/nginx (注意vim旁边有一个空格)

如果是从win转换过来的,记得要转换格式 dos2unix nginx。将程序文件的格式一直使用 UNIX 格式。

插入以下代码:

#!/bin/sh
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server

# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}


stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}



restart() {

    configtest || return $?

    stop

    start

}


reload() {

    configtest || return $?

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

    echo

}

force_reload() {

    restart

}


configtest() {

  $nginx -t -c $NGINX_CONF_FILE

}



rh_status() {

    status $prog

}


rh_status_q() {

    rh_status >/dev/null 2>&1

}

case "$1" in

    start)

        rh_status_q && exit 0
        $1
        ;;

    stop)


        rh_status_q || exit 0
        $1
        ;;

    restart|configtest)
        $1
        ;;

    reload)
        rh_status_q || exit 7
        $1
        ;;


    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;


    condrestart|try-restart)

        rh_status_q || exit 0
            ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2

esac

接下来就依次操作以下命令:

cd /etc/init.d

chmod 755 /etc/init.d/nginx

chkconfig --add nginx

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

service nginx start  # 启动服务
service nginx restart  # 重启 Nginx
service nginx stop  # 停止 Nginx服务
nginx -s reload  # 重新加载 Nginx 服务

添加配置

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

在 nginx.conf 文件中引用 conf.d 下的所有配置文件

#在http配置节的末尾添加配置引用
http {
    ...

    #gzip  on;

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

打开配置路径:/etc/nginx/conf.d/default.conf,如文件路径不存在,可自行创建。

server {
        listen 80;  # 监听http默认的端口号 80
        server_name zikaols.com;  # 个人域名或者外网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部分告一段落~

部署项目

创建虚拟环境

cd /home/project/demo	 # 一般都会将项目创建在home 下面 这里自己起文件名
mkdir venv  # 创建文件夹
python3 -m venv venv	# 创建虚拟环境

激活虚拟环境

source venv/bin/activate

安装项目依赖包

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

pip3 install -r requirements.txt -i https://pypi.douban.com/simple

安装gunicorn

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

pip3 install gunicorn

创建项目文件

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

wget https://www.javami.com/12.1.tar.gz
tar -vxf 12.1.tar.gz
cd 12.1

也可以使用命令:scp D:\nginx root@182.92.229.18:/etc/init.d/nginx 传递文件。

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

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

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

if __name__ == '__main__':
    app.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 做。

总结

项目的环境生产环境和本地环境Linux切换方式:linux export ops_config=local|production

centos7安装mysqlclient报错ERROR: Command errored out with exit status 1: python setup.py egg_info Check

需要安装:

yum install mysql-devel

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

影视列表和详情实现 下一篇