本文主要讲解在安装了centos7的Linux主机中部署先后端分离项目的过程。html
前端项目名为:vue_project;后端项目名为:django_project。前端
将这两个项目放在/opt/whw2这个目录下。vue
cd /opt
wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
tar -zxvf node-v8.6.0-linux-x64.tar.gz
在默认状况下,node的bin目录是:/opt/node-v8.6.0-linux-x64/binnode
咱们能够把node的根目录修改下名字,看起来好看点:linux
mv node-v8.6.0-linux-x64/ nodejs
而后把目录 /opt/nodejs/bin 目录加入到环境变量:nginx
vim /etc/profile
在最后一行的PATH变量(以前添加的,若是没添加过须要先执行$PATH看一下当前的环境变量的值)加入上面的目录(注意用冒号隔开):redis
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/opt/tngx231/sbin:/opt/nodejs/bin'
最后必定要记得source一下文件使配置生效:数据库
source /etc/profile
执行下面两个命令,若是不报错说明node的环境变量添加成功了:npm
node -v
npm -v
效果以下:django
vue须要像服务器发起请求,可是前端工程师在测试时会将这个ip设置为本机的环回地址,咱们须要将这个ip设置为linux服务器的ip,端口是nginx对uwsgi反向代理的端口
# 进入项目的src/restful目录,里面有一个api.js文件 # 文件里面的ip与端口是测试用的,须要修改为nginx对uwsgi反向代理的端口 cd /opt/whw2/vue_project/src/restful # 将测试的ip与端口改为生产环境须要用的ip与端口 sed -i "s/127.0.0.1:8000/192.168.16.142:9000/g" api.js
首先须要进入vue项目的根目录
cd /opt/whw2/vue_project
执行下面的命令:
# 默认是国外的资源,这样能够指定taobao的源安装 npm config set registry https://registry.npm.taobao.org #找到package.json而后安装模块,如同pip install npm install #这一步会生成dist静态文件夹,vue开发的首页在这个index.html npm run build
执行到最后一步的时候会在vue_project中生成一个dist目录,里面是项目开发的首页。
上面的二、3步其实能够在别的机器上执行也是能够的,目的实际上是获得dist这个目录(注意ip与端口必定得是最终部署的linux服务器的ip与端口)
另外须要记住这个dist的目录,后面配置nginx的时候会用到:/opt/whw2/vue_project/dist
nginx.conf文件中的配置以下:
#须要找到第一个虚拟主机,配置dist的静态文件夹便可 #第一个虚拟主机的配置 server { listen 80; server_name localhost; location / { root /opt/whw2/vue_project/dist; index index.html index.htm; # 确保不出现404 try_files $uri $uri/ /index.html; } ## 其余配置略 xxxxx } #第二个虚拟主机的配置,用做反向代理——将请求转发给后台程序 server { # 9000是nginx用做反向代理的端口 listen 9000; server_name localhost;
location / { include uwsgi_params; # 9999是对应uwsgi的端口,uwsgi也要配置成9999端口 uwsgi_pass 127.0.0.1:9999; } }
舒适提示:
若是以前存在别的项目的nginx.conf文件,必定要记得备份一下!
cp nginx.conf nginx.conf.crm_bak
后端django程序的配置只须要改一下settings.py中的ALLOWED_HOSTS这个列表便可~
测试的话直接 "*" 就行了:
ALLOWED_HOSTS = ["*"]
在项目的第一层建立一个uwsgi.ini文件,而后在里面写入:
[uwsgi] # Django-related settings # 项目第一层目录的绝对路径 chdir = /opt/whw2/django_project# 自动找项目第二层路径下的uwsgi.py文件 module = django_project.wsgi # 虚拟环境的绝对路径 home = /root/Envs/whw_l # process-related settings # master master= true # maximum number of worker processes processes = 4 # 注意 这个9999端口必定要跟nginx反向代理配置的端口保持一致 socket = 0.0.0.0:9999 # clear environment on exit vacuum = true # 记录pid与日志的文件 pidfile=uwsgi.pid daemonize=uwsgi.log
先激活一个虚拟环境
mkvirtualenv whw_l
解决运行后台项目所须要的依赖环境,这里我用的是requirements.txt文件安装的:
pip3 install -r requirements.txt -i https://pypi.douban.com/simple
因为本项目用到了redis数据库,所以还得在服务端启动redis服务。
# 若是以前没有安装的话,须要先安装一下 yum install redis -y # 启动redis服务 systemctl start redis
后台启动uwsgi服务加一个 -d 参数就行了:
注意:前面是虚拟环境下的uwsgi的绝对路径!
/root/Envs/whw_l/bin/uwsgi -d --ini /opt/whw2/diango_project/uwsgi.ini
若是以前没有开启nginx进程:
nginx
若是以前开启了nginx进程,重启:
(whw_l) [root@bogon opt]# nginx -t nginx: the configuration file /opt/tngx231//conf/nginx.conf syntax is ok nginx: configuration file /opt/tngx231//conf/nginx.conf test is successful (whw_l) [root@bogon opt]# nginx -s reload
若是你的配置检查了好几遍都没问题,可是输入网址就是登录不上,极可能是系统防火墙没关,须要手动关闭一下防火墙:
# 软件防火墙 systemctl stop firewalld # 内置防火墙 setenforce 0
若是你用的是Python虚拟环境部署的项目,环境的路径配置有关虚拟环境的项目必定要用虚拟环境的!
(1)好比上面在配置uwsgi时的home参数:
# 虚拟环境的绝对路径 home = /root/Envs/whw_l
找虚拟环境的路径也很简单:
# 在虚拟环境中 (whw_l) [root@bogon opt]# cdvirtualenv (whw_l) [root@bogon whw_l]# pwd /root/Envs/whw_l
(2)开启uwsgi进程也须要虚拟环境下uwsgi的绝对路径!
在虚拟环境下找uwsgi的执行路径也很简单:
# 在虚拟环境下 (whw_l) [root@bogon opt]# which uwsgi /root/Envs/whw_l/bin/uwsgi
~~