CentOS7.4 部署Ngnix + Uwsgi + Memcached + MySQL+ Flask环境
Flask环境部署
本文将带你通过一步一步使用mysql、nginx 、uwsgi、memcached在Centos7.4中完整在Centos7.4中搭建一个Flask服务器。因为在做我的项目中使用到mysql以及memcached缓存,因此也一致完整进行说明,memcached在项目中我主要做“忘记密码”这个功能,做验证码的校验。
对于前期的准备工作:
- 需要将我们的开发工程中,将所使用的第三方库进行统一迁移:
pip freeze >requirements.txt
那么,话不多说,直接开干了了了。
一、Mysql的安装
MySQL数据库在Centos7上安装在百度也有很多博文说明,因此这里就不在累述, 至于安装过程可以参考如下连接:
https://blog.csdn.net/qq_34491508/article/details/89150107
注意事项:
-
MySQL密码修改:
1.1 如果安装的MYSQL数据库在7.8以下需要使用以下语句:set password =password('your password'); flush privileges;
1.2 如果安装MYSQL数据库在7.8版本,则使用以下语句:
alter user 'root'@'localhost' identified by 'youpassword'; flush privileges;
-
安装完成后,我们需要通过Navicat对数据库进行访问, 那么需要执行以下SQL语句:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '您的数据库密码' WITH GRANT OPTION; flush privileges;
二、安装Python3以及Flask所需的虚拟环境
对python3的安装,以及虚拟环境
-
Python3安装 :
yum -y install python3
-
安装虚拟环境virtualenvwrapper :
pip3 install virtualenvwrapper
-
配置虚拟环境 方式如下:
编辑:./barshrc文件命令vi ~/.bashrc
并在该文件末尾加入以下内容:export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 #安装的python3的路径,不清楚可以直接使用which python3 source /usr/local/python3/bin/virtualenvwrapper.sh #查找virtualenvwrapper的路径: which virtualenvwrapper.sh
python的路径以及虚拟环境的virtualenvwrapper.sh的路径,根据查询结果进行填写, 完成后,再进行保存。
添加完成成执行:source ~/.bashrc
# 使该文件生效 -
在
/opt
目录(也可以在你想要的其它目录,只要你喜欢)创建虚拟环境:
4.1 创建虚拟换名:mkvirtualenv --python=/usr/bin/python3 flaskapp
其中flaskapp
是自定义虚拟环境名称,指定创建使用python3,创建后默认激活该虚拟环境
4.2 补充虚拟环境的一些其它命令:
激活虚拟环境:workon flaskapp
查看有哪些虚拟环境:lsvirtualenv
删除虚拟环境:rmvirtualenv flaskapp
关闭虚拟环境:deactivate
其中flaskapp
是自定义虚拟环境名称 -
需要将代码放到我们刚刚建立的
flaskapp
这个文件夹中:
那么此时我们需要把刚刚用上了准备工作中的requirements.txt
执行以下命令安装在代码中所使用的第三方库:pip install -r requirements.txt
三、安装Uwsgi以及配置
3.1 安装uwsgi: 执行以下命令进行安装Uwsgi:
- 安装所需包:
yum install -y gcc* pcre-devel openssl-devel
- 安装到python3对应的版本:
yum install python3-devel
- 安装:
pip3 install uwsgi
3.2 配置uwsgi:
首先需要在放置代码工程文件的地方,新创建一个文件:touch uwsgi.ini
然后在uwsgi.ini
文件中加入以下内容:
注:将以下内容的flaskapp
切换成对应的名称(因我的虚拟环境名称与文件夹名称同名)
[uwsgi]
# manage.py文件所在目录;修改成对应的路径
chdir = /opt/flaskapp/
home = /root/.virtualenvs/flaskapp
callable = app
# flask文件名, 修改成对应的路径
wsgi-file= /opt/flaskapp/app.py
# 进程数
processes = 10
# 使用5001端口;修改成对应的路径
socket = /opt/flaskapp/flaskapp.sock
chmod-socket = 666
vacuue = true
master = true
# 日志输出目录; 保存路径需要已有的文件夹,没有的话,请自行创建一个文件夹
daemonize = /opt/uwsgi-flask/flask.log
pidfile = project-master.pid
配置好以后:
启动uwsgi服务: uwsgi uwsgi.ini
停止uwsgi服务:pkill -f uwsgi -9
三、安装Ngnix以及配置
Ngnix的安装在网上有太多相关资源,此外不在累述,关于安装,请参考以下连接:
https://blog.csdn.net/lizhiqiang1217/article/details/82632729
Nginx配置:
1. 首页需要在代码工程文件中,新建一个文件:touch nginx.conf
2. 编辑该文件,并加入以下内容:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream flaskAPP{ #需要修改
server unix:///opt/flaskAPP/flaskbbs.sock; #需要修改
}
server {
listen 80;
server_name 10.10.12.123; #此处填写服务器的IP地址,或者域名地址
charset utf-8;
#上传文件的最大尺寸
client_max_body_size 300M;
#静态文件访问路径
location /static {
#静态文件地址
alias /opt/flaskapp/static; #需要修改
}
location / {
uwsgi_pass flaskAPP; #需要修改
# uswgi_params文件地址
include /usr/local/nginx/conf/uwsgi_params;
}
}
}
需要注意以下内容:
- 每行的
;
不可少,否则会报错。 - 上面标记
需要修改
的地方,请根据实际情况进行修改; - 启动nginx命令:
/usr/local/nginx/sbin/nginx -c /opt/flaskapp/nginx.conf
其中-c后面就是刚刚创建的配置文件 - 停止nginx服务:
pkill -f nginx -9
四、 Memcached以及启动、停止、开机启动
直接执行以下命令:
- 安装:
yum -y install memcached
2.启动Memcached:service memcached start
3.停止Memcamched:service memcached stop
4.将Memcached设置开机启动:systemctl enable memcached.service
5.取消开机启动:systemctl disable mysqld.service
五、 补充:supervisor进程管理
- 安装很简单,直接使用:
pip3 install supervisor
- 在项目目录下新建一个
touch supervisor.conf
文件 - 在
touch supervisor.conf
文件中增加以下内容:
#supervisor的名字
[program:flaskapp]
#supervisor执行命令(需要修改)
command=/opt/flaskapp/uwsgi uwsgi.ini
#项目目录 (需要修改)
directory=/opt/flaskapp/
#开始的时候等待多久秒
startsecs=0
#停止的时候等待多少秒
stopsecs=0
#自动开始
autostart=true
#程序挂了之后自动重启
autorestart=true
#输出的log文件 (需要修改)
stdout_logfile=/var/logs/flaskbbs_supervisor_out.log
#输出的错误文件 (需要修改)
stderr_logfile=/var/logs/flaskbbs_supervisor_err.err
[supervisord]
# log的级别
loglevel=debug
[inet_http_server]
# supervisor服务器
port= :9001
#用户名与密码
username=admin
password=123
#使用supervisorctl的配制
[supervisorctl]
#使用supervisorctl登录的地址和端口号
serverurl= http://127.0.0.1:9001
#登录supersiorctl登录的用户名与密码
username = admin
password = 123
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
注:1. 需要进行修改的地方,已进行标记
2. 目前在Centos7中使用该supervisor进行进程管理,会导致服务器卡死,具体原因还在寻找中
六、 关闭防火墙以及启动服务
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止开机启动
七、 服务启动汇总:
因目前部署只Ngnix + Uwsgi + Memcached ,而mysql已设置了开启自启动这样就不需要关注:
因此我们最终只用使用以下命令进行:
- 激活虚拟环境:
workon flaskapp
- 启用
uwsgi
命令(将目前切换到flaskapp
目录):uwsgi uwsgi.ini
- 启用
ngnix
命令:/usr/local/nginx/sbin/nginx -c /opt/flaskapp/nginx.conf
其它:
- 停止
uwsgi
命令:pkill -f uwsgi -9
- 停止
nginx
命令:pkill -f nginx -9