这里写自定义目录标题
centOS7下利用nginx+uwsgi部署Django+vue项目
一、配置Python3环境
1.安装可能需要的依赖
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
2.下载Python3到/usr/local目录下
最新的EPEL 7仓库提供了Python3(python 3.6)的安装源,如果你使用CentOS7或更新的版本的系统你也可以按照下面的步骤很轻松的从EPEL仓库安装。
安装最新版本的EPEL.
sudo yum install epel-release
用yum安装python 3.6:
sudo yum install python36
注意:上面的安装方法并未安装pip和setuptools,如果你要安装这两个库可以使用下面的命令
curl -O https://bootstrap.pypa.io/get-pip.py
sudo /usr/bin/python3.6 get-pip.py
二、安装virtualenv,建议大家都安装一个virtualenv,方便不同版本项目管理
1.执行命令:pip install virtualenv
2.建立软连接
执行命令:ln -s /usr/local/python3/bin/virtualenv/usr/bin/virtualenv
3.在根目录下建立两个文件夹,主要用于存放env和网站文件的(个人习惯,其它人可根据自己的实际情况处理)
mkdir -p /data/env
mkdir -p /data/wwwroot
4.切换到/data/env/下,创建指定版本的虚拟环境
执行命令:cd /data/env #切换目录
执行命令:virtualenv --python=/usr/bin/python3 pyweb
cd /data/env/pyweb/bin #进入此目录,启动虚拟环境
source activate # 启动虚拟环境
deactivate #关闭虚拟环境
5.项目上传到服务器并转移到虚拟环境目录下,/data/wwwroot/下
move /home/hujbo/django_range /data/wwwroot/django_range/
注意:这里看你导入到服务器项目的路径,对他进行转移到虚拟环境下
6.下载依赖包
pip install –r requirements.txt
注意,这里必须是在虚拟环境开启的状态下下载
如果出现mysqlclient库安装失败
退出虚拟环境,下载所需要的依赖包
deactivate
yum install mysql-devel
如果下载时再次报错:
yum -y install python3-devel #如果安装失败则用下面的
yum install python3-devel
数据迁移需要在mysql数据库建立一个同名数据库shopping(根据setting里面设置的),编码是utf8格式,然后进行数据迁移,下载完成后进行数据迁移:(必须是在虚拟环境下)
python3.6 manage.py makemigrations
python3.6 manage.py migrate
如果有可导入的数据包,执行下面代码进行导入数据:
python3.6 manage.py loaddata + 要带入的json文件名全称
没有则执行下面代码:
python3.6 manage.py createsuperuser
运行项目
python3.6 manage.py runserver
项目运行起来,则项目环境搭建完毕
三、把前端项目上传到服务器
前端前台代码存放路径:/data/wwwroot/fonrt/
前端后台代码存放路径:在这里,我的这个比较特殊,如果是一个前端代码的话不需要这样,直接夫南方就OK,跟我一样两个前端代码的话需要现在/data/wwwroot/路径下创建一个new文件夹(这个new是根据前端代码meta修改而定的),然后把上传到服务器的后台代码转移到new文件夹下。(也可以是自己其他自定义的文件下,路径记好就可以)
注意:这里不是把整个后台代码文件夹转移到new文件夹下,而是只需要把文件夹下的所有东西转移到new文件夹下就可以。
四、安装uwsgi
下载uwsgi:
pip install uwsgi
如果报错:
下载依赖包:
yum install python3-devel
创建软连接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
在/data/wwwroot创建一个demo.py文件,内容如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
在此目录下输入一下代码,测试uwsgi安装是否成功
uwsgi --http :8000 --wsgi-file demo.py
在浏览器中输入ip+8000,可以看到Hello world字样表示安装成功
五、配置uwsi.ini文件
在/data/wwwroot下创建文件夹my_uwsgi文件,cd到my_uwsgi
mkdir uwsgi.ini
vi uwsgi.ini
# 输入一下代码
[uwsgi]
socket = 127.0.0.1:8080 # 跟nginx的保持一直
home = /data/env/pyweb #如果有虚拟环境,就写虚拟环境路径,没有此项可以不写
chdir = /data/wwwroot/django_range # 项目路径,可以看到manage.py
module = django_range.wsgi:application # wsgi文件
master = True
processes = 4
vacuum = True
enable-threads=true
daemonize = /data/wwwroot/my_uwsgi/uwsgi.log # 日志
wsgi-file = django_range/wsgi.py
pidfile = /data/wwwroot/my_uwsgi/uwsgi.pid
六、安装nginx和配置nginx.conf文件
进入到/home目录下,下载nginx
cd /home
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz # 如果解压失败,把z参数去掉
进入到nginx-1.13.7目录,依次执行代码
cd nginx-1.13.7
./configure
make
make install
注意:nginx一般默认安装好的路径为/usr/local/nginx
进入 /usr/local/nginx/conf 目录,打开nginx.conf文件
cd /usr/local/nginx/conf
vi nginx.conf
#在server里写入一下代码
server {
listen 50080;
server_name **.***.***.16; 这里可以localhost也可以写自己服务器ip
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /data/wwwroot/front/;
index index.html index.htm;
}
location /new {
alias /data/wwwroot/new/;
index index.html index.htm;
}
location /proxy/ {
uwsgi_pass 127.0.0.1:8080;
Include /usr/local/nginx/conf/uwsgi_params;
}
}
注意:这里的uwsgi_pass 要跟uwsgi.ini里的socket保持一致,include是自己nginx安装路径下的uwsgi_params
回到上级目录,进入到sbin目录
cd /sbin
./nginx -t #测试一下有没有错误
代表没有错误,启动nginx
./nginx
./nginx -s reload #重启nginx
七、配置nginx和uwsgi开机自启
在系统服务目录里创建nginx.service文件
vi /usr/lib/systemd/system/nginx.service
# 写入内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
设置开机自启动
systemctl enable nginx.service
查看nginx状态
systemctl status nginx.service
如果提示了Active: inactive (dead) 则输入以下命令:
pkill -9 nginx
ps aux | grep nginx
systemctl start nginx
然后再此查看nginx状态,显示active,成功。
重启服务器
Reboot
再次连接后,查看服务状态
systemctl status nginx.service
看到nginx已经启动,至此,nginx自启动配置成功
配置uwsgi开机自启
编写开机自启脚本
vi /start.sh
nohup uwsgi --ini /data/wwwroot/my_uwsgi/uwsgi.ini &
注意:在这里前名加上nohup代表centOS后台运行,后面必须加上&,否在可能会造成centOS开机时卡再进度条启动不起来。
配置rc.local文件
vi /etc/rc.d/rc.local
编辑内容:
/start.sh &
再最后一行添加,末尾也必须有“&”符号
配置权限问题
如果再启动脚本,保存脚本或者配置文件的时候出现权限问题,需要赋予文件权限
chmod +x /etc/rc.d/rc.local
脚本文件也需要赋予权限
chmod +x /start.sh
这样就完成uwsgi的开机自启设置
server {
listen 50070; #监听端口设置,也就是你vue项目的端口
server_name localhost;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /tuoputu {
alias /data/wwwroot/django_range/tuoputu/; #前端dist文件夹存放路径
try_files $uri $uri/ /index.html; #解决页面刷新报404错误
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}