部署前后端分离项目
路飞前后端项目部署
前言
- 使用软件
- vue
- 部署前段
- uwsgi
- uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
- centos7
- 系统环境
- virtulenv
- 在虚拟环境中部署后端项目
- nginx
- 使用nginx做反向代理
- redis
- 存储数据
- mysql(mariadb)
- 存储数据
- supervisor
- Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
- vue
项目部署
准备工作
1 将项目上传到服务器上
方法一:使用xftp工具,进项上传文件夹,将项目代码,传到linux服务器当中
- 这个页面操作,实在不会百度
方式2: 使用scp从本地将文件上传到linux服务器中
scp -r 本地文件夹 远程用户名@远程ip:远程文件夹/
2 将mysql数据迁移到服务器数据库
服务器端安装mysql(mariadb)数据库链接:https://www.cnblogs.com/yuncong/p/10253215.html
数据导入导出
在linux服务端,mysql,导入knight的数据
1.mysql数据的导出,与导入
这个命令是在linux/windows中敲的
mysqldump -u root -p --all-databases > knight.dump
2.上传这个数据文件到linux数据库中
3.在linux的mysql,导入这个数据文件
mysql -uroot -p < /opt/knight.dump
注意:linux的数据库,需要对root用户设置远程链接的权限
grant all privileges on *.* to root@'%' identified by 'redhat';
# 授权所有的权限,在所有库,所有表 对 root用户在所有的主机上, 权限密码为redhat, 注意是自己设置的密码
# 刷新授权表
flush privileges;
注意2:linux的防火墙要给关闭,否则windows去链接linux的3306端口可能被拒绝
centos7默认已经使用firewall作为防火墙了
1.关闭防火墙
systemctl status firewalld #查看防火墙状态
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld#关闭防火墙开机启动
systemctl is-enabled firewalld.service#检查防火墙是否启动
1 配置node环境
下载node,由于此包含有node,所以不需要编译
wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
解压node源码包
tar -zxvf node-v8.6.0-linux-x64.tar.gz
# 查看
ls
# 进入
cd node-v8.6.0-linux-x64/
将node命令加入PATH环境变量中,方便调用
vim /etc/profile
# 在底行添加代码
PATH=$PATH:/opt/node-v8.6.0-linux-x64/bin
# 保存退出
# 读出该文件,使其生效
source /etc/profile
# 查看该变量看是否成功
echo $PATH
# 测试
node -v
npm -v
进入到vue项目中,打包node模块
cd 07-luffy_project_01/
安装vue模块,默认安装该目录中的package.json模块.如果出错,请手动安装
npm install # 该命令执行后会生成node_modules文件
此时注意,你本地写的vue代码,接口很可能连接的服务器地址有问题,注意Axios.POST提交的地址,一定得发送给django应用(如果用了nginx,就发送给nginx的入口端口) 这里为了试验方便,将vue项目和django项目放在了一台服务器,通过nginx反向代理功能(8000端口),转发vue请求给django(9000)
准备编译打包vue项目,使用sed命令替换配置文件中所有的地址,给为服务器地址
sed -i 's/127.0.0.1/192.168.11.99/g' /opt/opt/07-luffy_project_01/src/restful/api.js
# 将该路径下的所有127.0.0.1换成192.168.11.99
注意:换成自己的服务器地址,换成自己的服务器地址,换成自己的服务器地址
打包,生成一个dist静态文件
npm run build
# 检查该文件
ls dist/
# 结果
index.html static
配置完成
2 后端配置
1 使用virtulenv管理django项目(2选一即可)
mkvirtualenv drf# 进入该虚拟环境
workon drf
# 停止该虚拟环境
deactivate
如果未安装,查看该链接:https://www.cnblogs.com/yuncong/p/10251899.html
解决项目模块依赖
该项目所需文件
certifi==2018.11.29
chardet==3.0.4
crypto==1.4.1
Django==2.1.4
django-redis==4.10.0
django-rest-framework==0.1.0
djangorestframework==3.9.0
idna==2.8
Naked==0.1.31
pycrypto==2.6.1
pytz==2018.7
PyYAML==3.13
redis==3.0.1
requests==2.21.0
shellescape==3.4.1
urllib3==1.24.1
uWSGI==2.0.17.1
新建文件requirements.txt
touch requirements.txt
# 编辑该文件
vim requirements.txt
# 插入上诉所需文件
生成项目依赖模块
pip freeze > requirements.txt
2 使用pipenv安装项目的依赖包
- 进入项目中,新建requirements.txt文件,写入项目相关的依赖包
touch requirements.txt vim requirements.txt
- 指定python解释器版本
pipenv --python python3
- 开启虚拟环境,并换一个国外的源,下载速度更快
pipenv shell
- 安装依赖包
pipenv install
注意目录中初始化虚拟环境之前,就要有requirements.txt这个文件,他会将里面所有的依赖包加载到Pipfile中,然后根据这个文件下载包
3 启动redis服务端
新建一个redis-6379.conf,配置文件如下
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log" # #这个文件要自己在相应的目录下创建
dir /data/6379
protected-mode yes
启动redis服务端
redis-server redis-6379.conf # 这里是相对路径,如果不在,起使用绝对路径
启动时报错,如果没有/data/6379/redis.log,这个文件需要自己创建
查看进程是否启动
ps -ef|grep redis
4 配置uwsgi
在该django虚拟环境中安装uwsgi
pip3 install uwsgi
使用uwsgi.ini配置文件去启动项目,这个文件自己去创建即可,放哪都可以,但是放在项目中最好
touch /opt/luffy_boy/uwsgi.ini
配置信息如下
vim uwsgi.ini
# 插入信息
[uwsgi]
# Django-related settings
# the base directory (full path)
#写上项目的绝对路径
chdir = /opt/vue_drf/luffy_boy
# Django's wsgi file
#填写找到django的wsgi文件,填写相对路径,以chdir参数为相对路径
module = luffy_boy.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home = /root/Envs/drf
# process-related settings
# master
#启动uwsgi主进程
master = true
# maximum number of worker processes
processes = 5
#如果你使用了nginx,做反向代理,必须填写socket链接,而不是http参数
# the socket (use the full path to be safe
socket = 0.0.0.0:9000
#如果你不用nginx,直接使用uwsgi,运行一个http服务端,就用这个http参数
#http = 0.0.0.0:9000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
注意: 查看虚拟环境的命令
cdvirtualenv
导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages
pwd # 查看
就能看到当前虚拟环境的路径
启动django项目
uwsgi --ini uwsgi.ini # 这里用的是相对路径,找不到使用绝对路径
5 配置nginx,使用反向代理
- 作用: 使用ngixn处理django的静态文件
设置django的静态文件目录,收集一下
修改项目中settings.py,写下如下参数
STATIC_ROOT= '/opt/static' #该路径根据实际放置
使用命令收集django的静态文件
python manage.py collectstatic
查看django的静态文件收集目录
ls /opt/static
配置nginx,进行反向代理,找到uwsgi项目,且配置nginx处理uwsgi的静态文件
编辑nginx.conf
server {
listen 80;
#域名
server_name hedouyu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /opt/vue_luffy/07-luffy_project_01/dist;
index index.html index.htm;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 8000;
server_name 192.168.11.96;
location / {
include /opt/nginx1-12/conf/uwsgi_params;
uwsgi_pass 0.0.0.0:9000;
#root /opt/huya;
#index index.html;
}
location /static {
alias /opt/vue_luffy/static;
}
}
这步要注意自己的路径,和代理
重启nginx
./nginx/sbin/nginx -s reload
此时项目就已经完全可以运行了
6 配置supervisor进程管理工具,管理uwsgi
使用supervisor命令,生配置文件
echo_supervisord_conf > /etc/supervisor.conf
在这个配置文件中加入我们想要管理的任务
vim /etc/supervisor.conf
# 在底部写入如下配置
#定义一个任务,名字自定义
#commnad=参数,定义我们启动项目的命令
[program:my_luffy]
# uwsgi的绝对路径和 uwsgi.ini的绝对路径
command=/root/.local/share/virtualenvs/luffy_boy-8uvrb15Z/bin/uwsgi /opt/luffy_boy/uwsgi.ini
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
通过配置文件启动supervisor服务
supervisord -c /etc/supervisor.conf
启动了supervisor服务端后,管理任务
supervisorctl -c /etc/supervisor.conf
任务管理命令如下:有两种,一个是交互式,一个是参数形式
参数形式
supervisorctl -c /etc/supervisor.conf stop/start/restart all
supervisorctl -c /etc/supervisor.conf start crm_knight
交互式形式
supervisorctl -c /etc/supervisor.conf
注意,可能在前面配置文件的时候就会启动项目,造成报错,那么就可以通过以下的命令找出来并杀死进程,然后重启
netstat -tunlp 查看端口号
ps -ef| grep super 查看supervisor
以上是 部署前后端分离项目 的全部内容, 来源链接: utcz.com/z/508708.html