centos7_64+Django2.1.8+nginx+uwsgi+mysql+python3.6.3部署
学习交流qq: 1009682660
一、python环境搭建
创建安装环境
安装相关包
yum install gcc
yum install zlib*
创建安装目录
# mkdir -p /usr/local/python3
下载python安装包( /opt/Python-3.6.3.tgz )
# 解压: tar -zxvf Python-3.6.3.tgz
进入解压目录: cd Python-3.6.3
执行: ./configure --prefix=/usr/local/python3 #/usr/local/python3为安装目录
# configure 命令执行完之后,会生成一个 Makefile 文件
执行make指令: make && make install
建立python3的软链( 可以在任何路径使用 )
# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
测试是否安装成功
# python3 -V
Python 3.6.3
# pip3 -V
pip 18.1 from /usr/local/python3/lib/python3.6.3 /site-packages/pip (python 3.6.3 )
二、mysql安装
下载mysql安装包( /opt/mysql/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar )
# 解压:tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
创建安装环境
# 卸载系统自带mariadb
查询:rpm -qa | grep mariadb
卸载:rpm -e --nodeps mariadb...(查询出来的包名)
# 卸载旧版本mysql
查询:rpm -qa | grep mysql
卸载:rpm -e --nodeps mysql... (查询出来的包名)
安装mysql
# 因为有依赖,所以顺序安装
rpm -ivh mysql-community-common-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm
配置mysql
# 删除原有文件
rm -rf /var/lib/mysql
# 数据库操作 #
查看mysql服务是否启动
service mysqld status
启动服务:
systemctl start mysqld
停止服务:
systemctl stop mysqld
创建用户组:groupadd mysql
创建用户:useradd -g mysql mysql
设置密码:passwd mysql
初始化数据库
mysqld --initialize --user=mysql
进入使用mysql
# 获取原有初始化密码
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
mysql> Enter password: (输入刚才查询到的随机密码)
重新设置密码为:123456 # mysql> SET PASSWORD FOR 'root'@'localhost'= "123456";
先修改mysql的密码策略,才可修改为123456
设置密码的验证强度等级:set global validate_password_policy=LOW;
设置密码长度:set global validate_password_length=6;
三、uwsgi安装
安装uwsgi
# pip3 install uwsgi
软链:ln -s /usr/local/python3/bin/uwsgi /usr/local/uwsgi3
测试uwsgi
# uwsgi3 --http :8000 --file app/wsgi.py --static-map=/static=static //启动web服务,app为应用目录
输入ip:port即可访问,127.0.0.1:8000。访问成功代表uwsgi正常工作
四、nginx安装
下载nginx( /opt/nginx-1.17.7.tar.gz )
# 解压:tar -zxvf nginx-1.17.7.tar.gz
改名:mv nginx-1.17.7 nginx
进入nginx执行:./configure,完成后会生成makefile文件
编译:make && make install
软链:ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# 操作nginx #
nginx启动:nginx # 默认端口80
nginx停止:nginx -s stop
nginx重启: nginx -s reload
测试ngnix
#启动ngnix:ngnix
浏览器输入:127.0.0.1 / 192.168.xx.xx (浏览器默认80端口)
五、项目部署
拷贝项目并安装依赖包
# 项目文件夹copy到centos中( /opt/project/ProName )
安装相关依赖包:pip3 install -r requirement.txt
配置uwsgi.ini
# 配置uwsgi.ini(/etc/uwsgi.ini)
[相关参数配置说明]
master = true
#启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程
chdir = /web/www/mysite
#在app加载前切换到当前目录, 指定运行目录(项目路径)
wsgi-file = mysite.wsgi
# 加载一个WSGI模块,这里加载mysite/wsgi.py这个模块
py-autoreload=1
#监控python模块mtime来触发重载 (只在开发时使用)
lazy-apps=true
#在每个worker而不是master中加载应用
socket = /test/myapp.sock
#指定socket文件,也可以指定为127.0.0.1:9000,这样就会监听到网络套接字(用于和nginx连接)
processes = 2 #启动2个工作进程,生成指定数目的worker/进程
buffer-size = 32768
#设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。
daemonize = /var/log/myapp_uwsgi.log
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
log-maxsize = 5000000 #设置最大日志文件大小
disable-logging = true #禁用请求日志记录
vacuum = true #当服务器退出的时候自动删除unix socket文件和pid文件。
listen = 120 #设置socket的监听队列大小(默认:100)
pidfile = /var/run/uwsgi.pid #指定pid文件
enable-threads = true
#允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程
reload-mercy = 8
#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
max-requests = 5000
#为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏
limit-as = 256
#通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。
harakiri = 60
#一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)
uwsgi常用配置举例( /etc/uwsgi.ini )
# [uwsgi]
socket = 127.0.0.1:9000
chdir = /opt/project/AutoThunder/
wsgi-file = AutoThunder/wsgi.py
processes = 10
daemonize = /opt/project/AutoThunder/server.log # 项目运行日志
pidfile = /tmp/uwsgi.pid
vacuum = true
log-maxsize = 50000000
disable-logging = true
master=true
listen=120
max-requests=5000
# uwsgi操作 #
启动:uwsgi3 --ini /etc/uwsgi.ini
停止:uwsgi3 --stop /tmp/uwsgi.pid
重启:uwsgi3 --reload /tmp/uwsgi.pid
报错处理:
ps -ef | grep uwsgi 查看端口,修改uwsgi.pid中端口为当前端口,再进行操作
配置nginx.conf( /usr/local/nginx/conf/nginx.conf )
#
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; #nginx监听端口,用户浏览器访问此端口
server_name 192.168.48.128; #服务器域名,也可设置端口,多个域名用逗号隔开
charset utf-8;
client_max_body_size 5M; 文件上传最大限制
location /media {
alias /opt/project/AutoThunder/media; 文件保存地址
}
location /static {
alias /opt/project/AutoThunder/static; 静态文件保存地址
}
location / {
proxy_read_timeout 150; 重点:文件上传功能必须设置此超时,不然会报502
uwsgi_pass 127.0.0.1:9000; 和uwsgi通信的地址
# uwsgi_pass unix:///var/www/MyWeb/MyWeb.sock; 也可用sock
include /opt/project/AutoThunder/uwsgi_params; uwsgi参数地址
}
}
}
uwsgi参数文件( /opt/project/AutoThunder/uwsgi_params )
#
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
五、项目启动
项目启动注意点
# 静态文件配置(setting.py)
STATIC_URL = '/static/'
# 开发环境(DEBUG=True)
# 公用样式静态文件存放目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
# 生产环境(DEBUG=False)
# STATIC_ROOT = os.path.join(BASE_DIR,'static')
# 文件保存
# MEDIA_ROOT = os.path.join(BASE_DIR,"media")
步骤
############
# 收集静态文件:python manager.py collectstatic
# mysql中创建项目数据库:create database databasename;
# 迁移表:python manager.py migrate #正式环境不用makemigrations,提前在开发环境弄好
# 启动uwsgi:uwsgi3 --ini /etc/uwsgi.ini
# 启动nginx:nginx
# 浏览器直接访问:ip+port即可
学习交流qq: 1009682660