新的项目部署
一.首先准备
python3,uwsgi wsgi(web服务网关接口,就是一个实现了python web应用的协议),virtualenvwrapper
前端代码,vue代码,
nginx (一个是nginx对静态文件处理的优秀性能,一个是nginx的反向代理功能,以及nginx的默认80端口,访问nginx的80端口,就能反向代理到应用的8000端口)
mysql,redis 购物车订单信息,supervisor 进程管理工具
环境准备
1.部署环境准备,准备python3和虚拟环境解释器,virtualenvwrapper
2.修改python3的环境变量,写入到/etc/profile中
PATH=/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/ruby/bin/:/root/bin
3.修改~/.bashrc
写入变量
4.新建一个虚拟环境 s15vuedrf
mkvirtualenv s15vuedrf
5.准备前后端代码
1.准备node打包环境,下载是为了帮助解压文件
2.解压缩node包,配置环境变量,使用npm和node命令
cd /opt/s15vuedrf/07-luffy_project_01
注意,解压时 需要将 /07-luffy_project_01 下的 /07-luffy_project_01 删掉在进行以下操作
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
pip3 install -i https://pypi.douban.com/simple uwsgi
2.学习uwsgi的使用方法
通过uwsgi启动一个python web文件
uwsgi --http :8000 --wsgi-file s15testuwsgi.py
--http 指定http协议
--wsgi-file 指定一个python文件
通过uwsgi启动django项目,并且支持热加载项目,不重启项目,自动生效 新的 后端代码
uwsgi --http :8000 --module s15drf.wsgi --py-autoreload=1
#这里启动django时,需要创建一个django.py文件验证,
#验证固定格式
uwsgi --http 默认端口号 --module 项目名称.wsgi.py #项目名称时wsgi.py的上一级
--module 指定找到django项目的wsgi.py文件
1.创建一个uwsgi.ini配置文件,写入参数信息
touch uwsgi.ini
1 [uwsgi] 2 # Django-related settings 3 # the base directory (full path) 4 #指定项目的绝对路径的第一层路径!!!!!!!!!!!!!!!!!!!!!!!! 5 chdir = /opt/s15vuedrf/luffy_boy/ 6 # Django's wsgi file 7 # 指定项目的 wsgi.py文件!!!!!!!!!!!! 8 # 写入相对路径即可,这个参数是以 chdir参数为相对路径 9 module = luffy_boy.wsgi 10 11 # the virtualenv (full path) 12 # 写入虚拟环境解释器的 绝对路径!!!!!! 13 home = /root/Envs/s15vuedrf 14 # process-related settings 15 # master 16 master = true 17 # maximum number of worker processes 18 #指定uwsgi启动的进程个数 19 processes = 1 20 21 #这个参数及其重要!!!!!! 22 #这个参数及其重要!!!!!! 23 #这个参数及其重要!!!!!! 24 #这个参数及其重要!!!!!! 25 # the socket (use the full path to be safe 26 #socket指的是,uwsgi启动一个socket连接,当你使用nginx+uwsgi的时候,使用socket参数 27 socket = 0.0.0.0:8000 28 29 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数 30 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数 31 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数 32 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数 33 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数 34 #http = 0.0.0.0:8000 35 36 # ... with appropriate permissions - may be needed 37 # chmod-socket = 664 38 # clear environment on exit 39 vacuum = true
我的int
[uwsgi] # Django-related settings # the base directory (full path) chdir = /opt/luffy/luffy_boy # Django's wsgi file module = luffy_boy.wsgi # the virtualenv (full path) home = /root/Envs/city # process-related settings # master master = true # maximum number of worker processes processes = 1 # the socket (use the full path to be safe socket = 1.0.0.0:9000 # clear environment on exit #http = 0.0.0.0:8000 vacuum = true #后台运行uwsgi #daemonize=yes ~ ~
6.使用uwsgi配置文件启动项目
uwsgi --ini uwsgi.ini
这个时候也会启动项目后端,
注意,若是启动不了,把uwsgi进程关掉重启,有可能占:8000端口
若是提示没有django模块,重新创建一个虚拟机,只需重新下载requirements.txt 下的环境配置
supervisor进程管理工具
1.将linux进程运行在后台的方法有哪些
第二个 使用nohup命令
第三个使用进程管理工具
直接到最底行,写入以下配置
[program:s15luffy] #名字无所谓
command=/root/Envs/s15vuedrf/bin/uwsgi --ini /opt/s15vuedrf/luffy_boy/s15drf/uwsgi.ini
[program:s15luffy] command= /opt/python3.6.5/bin/uwsgi --ini /opt/luffy/uwsgi.ini #command=后接uwsgi 的pwd 通过which uwsgi 获取 --ini #第二个是创建的uwsgi.ini 绝对路径
5.启动supervisord服务端,指定配置文件启动
supervisord -c /etc/supervisor.conf
6.通过supervisorctl管理任
supervisorctl -c /etc/supervisor.conf
注意,在启动时需要将uwsgi进程关闭,在杀死/supervisor的进程,再重启,uwsgi不和与supervisor一起
7.supervisor管理django进程的命令如下 supervisorctl直接输入命令会进入交互式的操作界面
stop s15luffy
start s15luffy
status s15luffy
8.启动luffy的后端代码
注意:其实配置supervisor后端管理是极大方便了启动后端项目并管理的作用
配置nginx步骤如下
#第一个server虚拟主机是为了找到vue的dist文件, 找到路飞的index.html
server{ listen 80; #浏览器vue默认80断后,访问域名直接默认显示界面 server_name 192.168.125.129;#ip地址 location /{ # deny 192.168.125.*/; #当请求来自于 192.168.13.79/的时候,直接进入以下location,然后找到vue的dist/index.html root /opt/luffy/07-luffy_project_01/dist; #vue的文件 index index.html; } } #由于vue发送的接口数据地址是 192.168.13.79:8000 我们还得再准备一个入口server server { listen 8000; server_name 192.168.125.129; #当接收到接口数据时,请求url是 192.168.13.79:8000 就进入如下location #charset koi8-r; #access_log logs/host.access.log main; location / { uwsgi_pass 192.168.125.129:9000; #这里是nginx将请求转发给 uwsgi启动的 9000端口 include /opt/nginx112/conf/uwsgi_params; # include 就是一个“引入的作用”,就是将外部一个文件的参数,导入到当前的nginx.conf中生效 #root /opt/myserver/oumei; #index index.html; }
1.修改nginx.conf,给前端server添加一行try_files $uri $uri/ /index.html;
server{ listen 80; server_name 192.168.119.128; location / { root /opt/vuedrf/07-luffy_project_01/dist; index index.html ; try_files $uri $uri/ /index.html; } }
(1)vue components里创建一个NotFound页面: <template> <h1>页面不存在</h1> </template> <script> export default { name: "NotFound" } </script> <style scoped> </style> (2)vue-router里: # 引入NotFound页面 import NotFound from '@/components/NotFound/NotFound' # 在routes列表最后添加NotFound捕获所有未定义页面 { path: "*", name:'NotFound', component:NotFound, }