前后端分离部署

你离开我真会死。 提交于 2020-01-02 21:37:00

部署总体: vue +uwsgi+django+mysql+redis

创建luffy文件夹:[root@localhost opt]# cd luffy

路飞学城django代码下载后端:wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip解压 unzip luffy_boy.zipvue代码下载前端:wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip

创建新的虚拟环境:mkvirtualenv luffy

1.前端vue部署**

vue代码下载:wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip解析:unzip

2.下载node.js

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的环境变量即可

luffy) [root@localhost node-v8.6.0-linux-x64]# cd bin

1.(luffy) [root@localhost bin]# pwd /opt/luffy/node-v8.6.0-linux-x64/bin

2.vim /etc/profile

3.在PATH尾部添加:/opt/luffy/node-v8.6.0-linux-x64/bin

4.加载配置文件: source /etc/profile

3.验证node是否正确配置(node就是解释器,npm就是软件安装包)

node -v

npm -v

3.修改vue代码文件

因为vue(端口:80)需要向后台发起请求,先找到nginx(端口9000),通过nginx反向代理,找到

uwsgi(后端地址9001)

4.修改文件端口

api.js 路径:/opt/luffy/07-luffy_project_01/src/restful

(luffy) [root@localhost src]# ls App.vue assets components main.js restful router store (luffy) [root@localhost src]# cd restful (luffy) [root@localhost restful]# vim api.js

命令:sed -i "s/127.0.0.1:8000/192.168.75.128:9000/g" api.js

sed是linux处理字符串的命令

-i是将结果替换到文件

"s/127.0.0.0.1:8000/192.168.75.128:9000/g" api.js

s 是替换模式,/原内容/替换后的内容/g 表示全局

 

5.进行打包vue,生成静态文件夹dist

确保在vue代码文件夹下:/opt/luffy/07-luffy_project_01

npm install # 解决vue代码所需的模块依赖

npm run build # 进行编译打包

 

6.当vue打包正确完成后,生成一个dist静态文件夹,此时就丢给nginx去处理

 

部署vue的流程:

1.用户访问域名ip,首先进入的是nginx,看到的是vue的静态页面index.html

2.当我们用户在浏览器,点击路飞页面的课程列表,就向后台django发起post请求

3.uwsgi也就是后台,接收到请求,响应请求,返回一个json数据‘

4.vue接收到数据,进行渲染,也就看到了课程信息

 

2.后端uwsgi部署

1.下载后端:wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip

2.创建新的虚拟环境,解决环境依赖问题

创建新的虚拟环境:mkvirtualenv luffy

解决依赖问题:

vim requirements.txt # 打开编辑

3.下载依赖模块:

pip3 install -i https://pypi.douban.com/simple -r requirements.txt

4.使用uwsgi启动django

查看虚拟环境运行地址: cdvirtualenv

[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/luffy# process-related settings# mastermaster          = true# maximum number of worker processesprocesses       = 4# the socket (use the full path to be safesocket          = 0.0.0.0:9001# ... with appropriate permissions - may be needed# chmod-socket    = 664# clear environment on exitvacuum          = true

启动uwsgi:uwsgi --ini uwsgi.ini

用supervisor去管理路飞后台

[program:luffy]

command=/root/Envs/luffy/bin/uwsgi --ini /opt/luffy/luffy_boy/uwsgi.ini

stopasgroup=true killasgroup=true

启动:

supervisord -c /etc/supervisord.conf #启动supervisor服务端命令 supervisorctl -c /etc/supervisord.conf # supervisor客户端管理命令

3.nginx反向代理转发

修改nginx.conf内容如下

虚拟主机1:

server { listen 80; server_name localhost;

    #charset koi8-r;​   # access_log  logs/host/access.log  main;   # access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;​    location / {​       root /opt/luffy/07-luffy_project_01/dist;       index index.html;       # 首页    }

虚拟主机2

和uwsgi通信

server { listen 9000; server_name 192.168.226.128; location /{ uwsgi_pass 0.0.0.0:9001; include uwsgi_params; } }

重启nginx:nginx -s reload

4.启动mysql 以及redis

安装:yum install redis -y

启动:systemctl start redis

查看监听端口:netstat -tunlp

 

mysql主从复制

1.centos7如何安装mysql

1.yum安装

2.源代码编译安装

3.rpm包安装

yum安装的前提条件,是准备yum源,可以选择清华园,阿里源,等等

1.安装mariadb的yum源有两,一个是阿里云,版本低,功能小

命令:yum install mariadb-server mariadb

2.mariadb官方的yum源,配置的方式

方法:在/etc/yum.repos.d/目录下创建repo文件就是yum仓库

1.创建一个mariadb.repo文件,写入如下内容

vim /etc/yum.repos.d/MariaDB.repo

2、添加repo仓库配置[mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

3.安装官方mariadb命令

yum install MariaDB-server MariaDB-client -y

4.启动mariadb相关命令

mariadb数据库的相关命令是:​systemctl start mariadb  #启动MariaDB​systemctl stop mariadb  #停止MariaDB​systemctl restart mariadb  #重启MariaDB​systemctl enable mariadb  #设置开机启动

5.安装好后进行初始化

systemctl start mariadb

6.配置mysql

1.中文编码设置,编辑mysql配置文件/etc/my.cnf,下入以下内容

[mysqld]character-set-server=utf8collation-server=utf8_general_cilog-error=/var/log/mysqld.log[client]default-character-set=utf8[mysql]default-character-set=utf8

7.授权mysql进行配置

远程连接设置哦设置所有库,所有表的所有权限,赋值权限给所有ip地址的root用户mysql > grant all privileges on *.* to root@'%' identified by 'password';grant all privileges on *.* to root@'%' identified by '111111';  #远程连接数据库密码111111#刷新权限flush privileges;

8.mysql主从复制配置流程如下

流程:主库复制写入,并写下日志,从库访问日志,重新执行sql语句写入

192.168.226.128 主库

192.168.226.129 从库

环境准备,准备2台服务器,安装好2这个数据库

1.主库配置

编辑主库的/etc/my.cof写入如下配置,写下日志

  [mysqld]   server-id=1   log-bin=s18mysql-bin

2.改了配置文件重启数据库

systemctl restart mariadb

3.master主库添加从库账号,用户远程复制数据的账户

#创建用户 mysql > create user 'username'@'%' identified by 'password'; create user 'kevins'@'%' identified by 'kevins';

#刷新权限 flush privileges;

4.授予kevins这个账号,从库的身份grant replication slave on *.* to 'kevins'@'%';
5.实现对主数据库锁表只读,防止数据写入,数据复制失败flush table with read lock;

6.导出当前数据库

mysqldump -uroot -p --all-databases > /opt/all.sql

7.导出数据完毕后,解锁主库,恢复可写;

unlock tables;

8.将备份导出的数据scp至Slave数据库

scp /data/all.sql root@192.168.178.130:/data/

9.查看主库的状态,可以看到日志文件的名字

show master status;

 

slave从库配置

1.修改从库的配置文件/etc/my.cnf

写入配置:

[mysqld]server-id=10

2.导入主库的数据

导入数据库第一种方式:mysql -uroot -p < /opt/all.sql

导入第二种:

1.先登录进入数据库

2.执行:source /opt/all.sql

 

3.此时主从数据库已经在同一个起始点,开始数据同步

这是一段sql,在mysql中执行

mysql > change master to master_host='192.168.178.129(主库地址)',master_user='kevins',   # 给予从库的账号master_password='kevins',# 给予从库的密码master_log_file='mysql-bin.000001',#访问日志的文件名master_log_pos=575;

4.开启从库同步(在数据库中输入)

start slave

5.检测是否主从是否成功

show slave status\G

查看两个参数是否yes

Slave_IO_Runing:yes

Slave_SQL_Runing:yes

 

6.此时已经可以在主库写入数据,从库实时写入

7.配置mysql主从复制,读写分离

修改从库/etc/my.cnf添加

read-only=true

只可以读的模式

8.在主库上创建一个普通用户,在从库上进行登录,查看是否可以读写分离

主库创建:create user "ywy"@"%" identified by "ywyacd";

从库登录:mysql -uywy -p

密码:ywyacd

9.给这个普通用户查看数据库的权限

grant select on *.* to ysy@"%";

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!