面试宝典六-- 项目部署(linux环境搭建,springboot项目部署 ,vue项目部署,nginx负载均衡)

环境准备

实际开发中,项目肯定是部署在一个个的linux系统服务器中的,学习过程中,可以在自己电脑上安装虚
拟机然后配置linux操作系统进行模拟项目部署,当然也可以花费较小费用使用各种平台提供的云服务器
进行项目学习和部署(比如阿里云、腾讯云、华为云等)。

这里我使用的是centos7

配置centos的yum源

1、备份原镜像文件,以免出错后可以恢复

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、打开阿里的镜像路径http://mirrors.aliyun.com,找到centos点击帮助可以看到具体配置

下载新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、清除原来的缓存

yum clean all

4、生成新的缓存

yum makecache

5、更新系统

yum -y update

安装配置JDK

https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
在这里插入图片描述
可以选择下载linux系统下的tar.gz压缩文件

先使用yum源下载安装一个文件上传下载链接工具:

yum install lrzsz

进入/usr/local/src目录下。使用rz指令即可

当然,后续还会涉及到mysql数据,redis服务器,nginx服务器等,都可以提前下载好一同上传到服务
器。

注意:后续我们上传的所有源文件安装包,直接放在服务器的/user/local/src目录下,然后各自
解压,并移动到/usr/local/下的各自文件夹下。

jdk安装

1、先检查系统上是否安装了jdk(若安装了就需要先卸载再使用我们自己的

java -version

2、查看出安装的java的软件包

rpm -qa | grep java

3、卸载linux自带的jdk

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686 tzdata-java-2013g-1.el6.noarch

如果没有自带jdk的话,上述2,3步直接跳过。

4、进入 /usr/local/src目录,解压jdk

cd  /usr/local/src

tar -zxvf jdk-8u202-linux-x64.tar.gz

5、将解压后的jdk可以移动到其他文件夹并重命名

mv jdk1.8.0_202/ /usr/local/jdk1.8

6、配置环境变量

先使用vi /etc/profile进入配置文件。
然后,在文件最下方加入java配置。

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH

在这里插入图片描述

保存并退出,然后重新刷新配置文件。

source /etc/profile

7. 检测jdk是否安装成功

java -version

MySql安装配置

这里采用glibc安装方式。

下载

https://dev.mysql.com/downloads/mysql/
大家可以选择使用压缩包下载解压,不过需要进行额外配置了。也可以选择其他方式安装配置。
在这里插入图片描述

1.卸载Centos7自带的Maridb数据库

一定要卸载干净不然后面会报错

rpm -qa | grep mariadb
yum -y remove mari*
rm -rf /var/lib/mysql/*
rpm -qa | grep mariadb

2、安装mysql安装使用过程中需要的第三方依赖库

yum search libaio # search for info
yum install libaio # install library

3、创建Mysql管理用户

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

4、解压安装mysql
注意,进入/usr/local/src目录下,解压上传的mysql。

tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

然后移动并重命名到/usr/local/mysql下。

mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql

文件结构说明:
在这里插入图片描述
进入到/usr/local/mysql目录中,创建 mysql-files文件,并设置用户以及权限。

cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

6、初始化Mysql数据库

进入到/usr/local/mysql目录中,执行以下指令初始化mysql数据,5.7之前版本密码默认为空,5.7版本
会有一个初始化的密码,要记住。

bin/mysqld --initialize --user=mysql

在这里插入图片描述

wdKpZLg&x1Bd

执行上述指令会生成root用户的默认初始化密码,同时会自动帮我们在mysql目录下生成一个data数据
目录,无需自己手动创建。

7、设置SSL安全加密连接

5.7数据库开始对数据的访问调用提高ssl安全保密,需要加密和解密传输。

bin/mysql_ssl_rsa_setup

8、配置Mysql环境变量

类似于java环境变量配置,向/etc/profile文件尾部添加msyql配置,这样任何位置可以使用msyql。

echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

在这里插入图片描述

9、安全方式启动msyql服务

在msyql安装目录下执行指令。

bin/mysqld_safe --user=mysql &

其中,&表示后台启动msyql服务器。
停止服务:

bin/mysqladmin shutdown -p

10、其他操作

最后,我们还可以对安装配置的msyql进行其他配置。比如修改初始化密码、修改可以远程访问mysql
等。

修改root默认密码:

进入msyql安装目录下执行以下指令。

bin/mysqladmin -uroot password '123456' -p

在这里插入图片描述

修改远程访问msyql:

先登录云服务器上的msyql查看用户
默认有一个root超级管理员用户,但是host为localhost本机访问,想要远程可以访问,有两种解决方
案。
方案一:直接修改当前root用户的host地址为%,即所有地址可以访问

use mysql
update user set host ='%' where user = 'root';

但是不建议。
方案二:新增远程访问用户,并设置数据库操作权限。

CREATE USER 'dyk'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'dyk'@'%';
FLUSH PRIVILEGES;

然后进行远程连接,但是可能会出现连接不上错误。
在这里插入图片描述
当然上述我的mysql在阿里云esc服务器上只需要给端口放行,若果是自己的虚拟机系统,则需指令操作开发端口号,或者直接关闭防火墙。

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

或者直接关闭防火墙

#查看防火墙状态: 
systemctl status firewalld.service

在这里插入图片描述

#执行关闭命令: 
systemctl stop firewalld.service

#再次执行查看防火墙命令:
systemctl status firewalld.service

在这里插入图片描述

#执行开机禁用防火墙自启命令  : 
systemctl disable firewalld.service

安装redis

1、在虚拟机中安装c++环境

yum -y install gcc-c++

2、解压Redis

tar -zxvf redis-4.0.14.tar.gz

然后同样移动复制到usr/local的redis目录下

3、编译安装

进入redis目录下进行编译安装
cd到/usr/local/redis目录,输入命令make执行编译命令

cd /usr/local/redis/
make
make PREFIX=/usr/local/redis install

4、修改配置文件

在redis目录下操作。

# 修改配置文件
vi redis.conf
# Redis后台启动
修改 daemonize 为 yes
# Redis服务器可以跨网络访问
修改 bind0.0.0.0
# 开启aof持久化,这个可以不做
appendonly yes

配置文件内容有点多,可以使用 /字符串 回车 操作查找要修改的地方,n查找下一个。

5、启动Redis

注意开发端口6379

bin/redis-server redis.conf

安装nginx

1.Nginx的下载地址:http://nginx.org/en/download.html

2. 把安装包上传到Linux

同样,上传到usr/local/src目录下

3.解压Nginx

tar -zxvf nginx-1.20.1.tar.gz 

4. 将nginx解压包移动到 /usr/local/nginx

mv nginx-1.20.1 /usr/local/nginx

5.安装Nginx依赖环境gcc

Nginx是C/C++语言开发,建议在Linux上运行,安装Nginx需要先将官网下载的源码进行编译,编译依
赖gcc环境,所以需要安装gcc。一直y(同意)(需要网络)

yum -y install gcc-c++

6. 连接网络,安装Nginx依赖环境pcre/zlib/openssl. y表示安装过程如有提示,默认选择y

yum install -y pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel

7. 编译和安装nginx

进入nginx安装目录。

./configure  #配置nginx(在nginx-1.16.1目录中执行这个配置文件)
make #编译nginx
make install #安装nginx

8. 进去sbin目录,启动

cd /usr/local/nginx/sbin #进入/usr/local/nginx/sbin这个目录
./nginx #启动Nginx

注意,如果启动过程中出现以下错误:表示安装配置的时候没有生成对应的logs日志目录和文件,此时
需要手动创建并赋予权限。
在这里插入图片描述
进入nginx安装目录下:

 cd /usr/local/nginx/
mkdir logs
chmod 700 logs

然后再重新执行以上第七步的操作

9. 开放Linux的对外访问的端口80

如果使用的是自己的虚拟机则需通过指令开放端口或者直接关闭防火墙。如果是云服务器开发安全组

10. 停止Nginx服务器

cd /usr/local/nginx/sbin #进入/usr/local/nginx/sbin这个目录
./nginx -s stop #停止Nginx

部署

在企业中,一般都采用linux系统作为Web应用服务器,所以我们需要在linux系统搭建项目运行环
境。在linux系统上搭建运行环境需要安装jdk、myql、tomcat相关软件。由于是srpingboot项目,我这里就不用使用tomcat,内置了tomcat

步骤

  1. 软件安装(前面已经完成)
  2. 向mysql导入数据
  3. 把项目打成jar包,上传到服务器

1.linux系统myql导入数据库

2.导出jar包部署到阿里云服务器上

打包前检查下 配置文件的ip等等
在这里插入图片描述
先clean再install

项目上传并启动

在/src/local/先新建个目录myproject

mkdir myproject
cd myproject/
mv msbd-0.0.1-SNAPSHOT.jar msbd.jar

启动命令

java -jar msbd.jar

注意:启动项目前,务必保证项目本身的所有配置文件已经更改为生产环境。同时,对应的软件
msyql、redis都已经开启

上述方式就简单快速的完成了springboot项目的部署。
但是,该项目默认是前台进程运行,窗口关闭就关闭了项目,另外我们的项目也是只有一个实例,实际
运用没有提供高可用,因此可以在此基础上稍作改进。

项目Nginx部署改进

接下来,我们使用nginx的反向代理实现项目的多实例部署,同时将项目作为后台进程启动。

nohup java -jar msbd.jar --server.port=9011 > logName.log 2>&1 &
nohup java -jar msbd.jar --server.port=9012 > logName2.log 2>&1 &

命令详解:

nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程。

logName.log :是nohup把command的输出重定向到当前目录的指定的“日志文件名.log”文件
中,即输出内容不打印到屏幕上,而是输出到”日志文件名.log”文件中。不指定文件名会在当前目录创建nohup.out,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这里&相当于标准错误等效于标准输出,即把标准错误和标准输出同时输出到指定的“日志文件名.log”文件中。
如果想关闭的话,对于已经后台的执行的进程,可以通过ps命令查看对应pid,直接sudo kill pid即可

通过指令查看java项目运行进程:

ps -ef | grep java

在这里插入图片描述

Nginx进行负载均衡配置。

在/usr/local/nginx/conf目录下新创建一个自定义的配置文件夹myconfig,在该文件夹下引入一个负载
均衡的配置文件msdict.conf

 mkdir myconfig
touch msdict.conf

msdict.conf

# 代理多个服务
upstream msdict-server{
    server 127.0.0.1:9011;
    server 127.0.0.1:9012;
}
server {
    listen 9001;
    server_name 127.0.0.1;
# 代理跳向我们的后台接口服务
    location / {
    proxy_pass http://msdict-server;
    proxy_connect_timeout 600;
    proxy_read_timeout 5000;
    }
}

在nginx的nginx.conf配置文件中引入外部配置文件

 include myconfig/*.conf;

在这里插入图片描述

最后,启动nginx即可。

sbin/nginx -s reload

vue项目部署

1、先在本地对vue项目进行编译
在正式编译vue项目之前,把所有需要修改的配置文件、服务器 地址等信息进行统一修改:

在这里插入图片描述
在这里插入图片描述

接着,执行指令进行编译。

npm run build

在这里插入图片描述
其中,dist下的index.html就是项目编译后默认首页。

上传dist目录到服务器

这里,由于条件限制原因,把项目页上传到了服务器的/usr/local/myproject/web/msweb目录
下。这里,我们上传后对dist目录重命名为msweb
在这里插入图片描述

接着,重新启动Nginx即可。
在这里插入图片描述
在这里插入图片描述

nginx 部署vue项目路由刷新404

在这里插入图片描述

 location / {
            #root   html;
            #
           root /usr/local/myproject/web/msweb;
            index  index.html index.htm;
           try_files $uri $uri/ /index.html;
        }

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。 目录: 一、Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用 final 修饰吗? 14.接口和抽象类有什么区别? 15.java 中 IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和 Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和 Hashtable 有什么区别? 22.如何决定使用 HashMap 还是 TreeMap? 23.说一下 HashMap 的实现原理? 24.说一下 HashSet 的实现原理? 25.ArrayList 和 LinkedList 的区别是什么? 26.如何实现数组和 List 之间的转换? 27.ArrayList 和 Vector 的区别是什么? 28.Array 和 ArrayList 有何区别? 29.在 Queue 中 poll()和 remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器 Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和 ListIterator 有什么区别? 34.怎么确保一个集合不能被修改? 三、多线程 35.并行和并发有什么区别? 36.线程和进程的区别? 37.守护线程是什么? 38.创建线程有哪几种方式? 39.说一下 runnable 和 callable 有什么区别? 40.线程有哪些状态? 41.sleep() 和 wait() 有什么区别? 42.notify()和 notifyAll()有什么区别? 43.线程的 run()和 start()有什么区别? 44.创建线程池有哪几种方式? 45.线程池都有哪些状态? 46.线程池中 submit()和 execute()方法有什么区别? 47.在 java 程序中怎么保证多线程的运行安全? 48.多线程锁的升级原理是什么? 49.什么是死锁? 50.怎么防止死锁? 51.ThreadLocal 是什么?有哪些使用场景? 52.说一下 synchronized 底层实现原理? 53.synchronized 和 volatile 的区别是什么? 54.synchronized 和 Lock 有什么区别? 55.synchronized 和 ReentrantLock 区别是什么? 56.说一下 atomic 的原理? 四、反射 57.什么是反射? 58.什么是 java 序列化?什么情况下需要序列化? 59.动态代理是什么?有哪些应用? 60.怎么实现动态代理? 五、对象拷贝 61.为什么要使用克隆? 62.如何实现对象克隆? 63.深拷贝和浅拷贝区别是什么? 六、Java Web 64.jsp 和 servlet 有什么区别? 65.jsp 有哪些内置对象?作用分别是什么? 66.说一下 jsp 的 4 种作用域? 67.session 和 cookie 有什么区别? 68.说一下 session 的工作原理? 69.如果客户端禁止 cookie 能实现 session 还能用吗? 70.spring mvc 和 struts 的区别是什么? 71.如何避免 sql 注入? 72.什么是 XSS 攻击,如何避免? 73.什么是 CSRF 攻击,如何避免? 七、异常 74.throw 和 throws 的区别? 75.final、finally、finalize 有什么区别? 76.try-catch-finally 中哪个部分
SpringBootVue项目部署上线到Linux可以按照以下步骤进行操作: 1. 准备好Linux服务器,确保安装了Java环境和Node.js环境。 2. 打包SpringBoot后端项目,在SpringBoot项目的根目录下,运行以下命令进行打包: ``` mvn clean package ``` 执行成功后,会在target目录下生成一个可执行的jar文件。 3. 将打包好的SpringBoot项目上传到Linux服务器上的指定目录,比如`/root/app`。 4. 在Linux服务器上,使用以下命令启动SpringBoot项目: ``` java -jar /root/app/your-project.jar ``` 其中`your-project.jar`是你上传的jar文件的名称。 5. 确保SpringBoot项目启动成功后,开始部署Vue前端项目。 6. 进入Vue项目的根目录,运行以下命令进行打包: ``` npm run build ``` 打包成功后,会在项目根目录下生成一个dist目录,里面包含了打包好的静态资源文件。 7. 将打包好的Vue项目的静态资源文件复制到SpringBoot项目的静态资源目录下,比如`/root/app/dist`。 ``` cp -r /root/your-vue-project/dist/* /root/app/src/main/resources/static ``` 8. 修改SpringBoot项目的配置文件application.properties(或application.yml),确保配置了静态资源文件的路径: ``` spring.resources.static-locations=classpath:/static/ ``` 9. 重新启动SpringBoot项目。 10. 在浏览器中访问服务器的公网IP地址加上SpringBoot项目的端口号,即可访问部署好的SpringBootVue项目。 通过以上步骤,你就可以成功将SpringBootVue项目部署上线到Linux服务器了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值