Nginx+Uwsgi+Django部署
1,首先在部署项目时,需要安装好系统的环境,那我们首先来安装依赖
yum -y install gcc gcc-c++
yum -y groupinstall “Development tools”
yum -y install zlib zlib-devel openssl openssl-devel ncurses-devel sqlite sqlite-devel bzip2-deve readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
yum -y install nginx (后面要用到nginx)
2,编译安装Python3的环境
cd /opt/
使用一下命令下载压缩包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
然后解压压缩包安装Python3
tar -zxvf Python-3.7.0.tgz
mkdir /usr/local/python3
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
最后创建软链接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
输入以下命令测试是否可用:
python3
pip3 --version
3.给python3安装django和uwsgi以及配置启动项目的ini(或者xml)文件
pip3 install django
pip3 install uwsgi
建立软连接
ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
4.安装 MySQL5.7
------------------------------------|
# 下载mysql源安装包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# 安装mysql源
yum localinstall mysql57-community-release-el7-8.noarch.rpm
#检查mysql源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
#安装MySQL
yum install mysql-community-server
#启动MySQL服务
systemctl start mysqld
#查看MySQL的启动状态
systemctl status mysqld
#开机启动
systemctl enable mysqld
systemctl daemon-reload
#修改root本地登录密码
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
mysql>use mysql;
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1; #取消密码验证
mysql> alter user 'root'@'localhost' identified by '123456'; #设置密码
注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误
修改密码策略
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
# 选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0
如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:
validate_password = off
#重新启动mysql服务使配置生效:
systemctl restart mysqld
#添加远程登录用户
默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'yangxin'@'%' IDENTIFIED BY 'Yangxin0917!' WITH GRANT OPTION;
或
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
#配置默认编码为utf8
修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:
vim /etc/my.cnf
----------------
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
----------------
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log//var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
---------------
其他操作
#权限设置:
chown mysql:mysql -R /var/lib/mysql #这里的mysql是用户名(需要设置用户组合用户)
#启动 MySQL:
systemctl start mysqld
#查看 MySQL 运行状态:
systemctl status mysqld
#重新启动mysql
systemctl restart mysqld
#停止
service mysql stop
-----------------------------------------|
5.使用django-admin初始化数据库
pip3 install PyMySQL #安装PyMySQL
python3 manage.py makemigrations #生成配置
python3 manage.py migrate #执行配置
在我们创建的项目里修改setting.py文件
ALLOWED_HOSTS = ['*'] #在这里请求的host添加了*
6.通过uwsgi和nginx的方式来访问项目
#首先编写一个ini的文件来启动django项目
一般在django项目的setting.py文件的同级目录下,增加一个配置文件 uwsgi.ini
# uwsgi.ini 配置
---------------------
[uwsgi]
# 指定IP端口
#http = 0.0.0.0:8081
# 指定sock的文件路径
socket=0.0.0.0:8081
# 项目目录
chdir= /root/app/mysite
# 指定项目的application
module= mysite.wsgi:application
wsgi-file =/root/app/mysite/mysite/wsgi.py
# 启用主进程
master= true
#最多进程数
processes= 4
#运行线程
threads = 2
#过期时间
max-requests = 6000
# 设置日志目录
daemonize = /root/app/mysite/mysite/run.log
# 指定静态文件
static-map = /static=/root/app/mysite/static
----------------------
#启动uWSGI服务器,在配置文件uwsgi.ini所在目录下,用我们刚才配置好的配置文件启动uWSGI:
uwsgi --ini uwsgi.ini
#查看是否启动
ps aux | grep uwsgi
#uwsgi --ini uwsgi.ini # 启动
#uwsgi --reload uwsgi.pid # 重启
#uwsgi --stop uwsgi.pid # 关闭
8,配置nginx
vim /etc/nginx/conf.d/default.conf
server {
listen 80; #配置监听端口
server_name localhost; //配置域名
charset utf-8;
location / {
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass 127.0.0.1:8081;
}
# 指定静态文件路径
#location /static/ {
# alias /root/app/mysite/static;
#}
...
}
#开启/重启Nginx服务
systemctl start nginx.service #开启
systemctl restart nginx.service #重启
#如果起不来解决方案:
重启uwsig 进程, uwgis.ini文件所在目录下:
killall -9 uwsgi
uwsgi --ini uwsgi.ini
重启nginx:
nginx -s stop
nginx
#查询服务的运行状况
ps aux | grep nginx #有三条记录,说明我们Nginx被正常开启了。