最近工作内容不忙,自己安装了了下虚拟机准备学习一些关于Linux的内容,记录一下遇到的各种坑以及解决方法。步骤相对详细,大家有相关需求可以按照这个步骤基本没问题。
一、VM虚拟机下安装CentOS 7安装使用教程
参考博客:VMWare下载安装以及创建虚拟机教程 - 一响贪欢 - 博客园
注:安装完成发现是图形界面模式,切换方法:
1.查看目前默认的启动默认
systemctl get-default
命令行模式 :multi-user.target
图形界面模式:graphical.target
2.设置为图形界面模式
systemctl set-default graphical.target
3.设置为命令行模式
systemctl set-default multi-user.target
二、使用xshell连接虚拟机(虚拟机设置静态IP)
参考博客:VM下安装CentOS 7并使用Xshell终端连接_CSDN_Ty的博客-CSDN博客
三、在虚拟机运行springboot项目并通过主机访问
1.打好的jar包通过xftp传输到虚拟机:
发现Xftp乱码问题:左上角文件-属性-选项-勾选 使用UTF-8编码
发现传输失败:没有文件夹权限,赋权:
- # groupadd projects 添加用户组projects
- # add user to projects 添加用户到用户组
- #sudo chown -R user /usr/local/src 给用户赋指定目录的权限传输成功
2.进入到jar包目录下 java -jar [包名] 运行jar包
3.在主机浏览器访问,发现无法访问
查看虚拟机ip:ifconfig 本机cmd窗口查看ip:ipconfig
互相ping,能ping通(虚拟机ping主机时,会显示一直在ping,发送资源包,按ctrl+C即可结束ping过程并返回结果)。
service iptables stop 关闭防火墙 访问成功。
四.安装tomcat并部署springboot项目
1)下载和解压:
# wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.zip
# unzip apache-tomcat-9.0.36.zip
2)jar包放到tomcat webapps下去启动tomcat:
进入到tomcat的bin目录下
# ./startup.sh 提示权限不够
#chmod u+x *.sh 赋权之后再次启动可以
3)启动之后访问拒绝连接,查看tomca查看tomcat是否启动成功:
ps -ef|grep java 查看tomcat是否启动成功
使用netstat 命令查看占用情况:
netstat -ap |grep 8080 //查找tomcat端口是否被占用
4)启动失败网上查需要war包,重新打war包,idea中maven-package打包失败
Failed to execute goal org.apache.maven.plugins:maven-resources:原因是target文件夹路径正在被(XFTP)占用,关掉就好了
./shutdown.sh 停止tomcat
把war包放到tomcat得webapps下启动,虚拟机访问404 #curl http://192.168.187.3:8080/Test/test?JobName=1&&keyType=2
5)网上查springboot项目再tomcat部署访问controller404得到答案:springboot项目要用tomcat部署需要再启动类继承SpringBootServletInitializer的congigure方法
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(DemoApplication.class);
}
并且pom.xml文件种增加该依赖屏蔽springboot内嵌的tomcat容器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
加上之后访问依旧404,突然想到很久之前一个同事说过,在tomcat的webapps下的项目名改成ROOT之后就不用加前缀否则需要在端口后的前缀需要加上war包名。端口后加上war包名前缀访问成功。
6)在虚拟机可以访问到但是在主机访问访问不到,防火墙的问题,直接开放端口重启防火墙就可以:
安装防火墙
yum install firewalld systemd -y
查看已经开放的端口:
firewall-cmd --list-ports
开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙:
systemctl reload firewalld
重启之后访问成功。