Linux不同环境变量文件的比较

0. 版本信息

  • tomcat版本:9.0.62.0
    终端进入tomcat文件夹,输入sudo ./bin/version.sh即可查看
  • Ubuntu版本:18.04
  • mysql版本:8.0.28
  • vue3
    前后端不分离方式下在tomcat9中部署war包。选择部署到根目录。
    tomcat运行在端口8848
    项目名:LabWebMS

1. 在服务器上安装java

https://zhuanlan.zhihu.com/p/137114682

  • 安装
xhf@computer24:~$ sudo apt update
xhf@computer24:~$ sudo apt install openjdk-17-jdk
xhf@computer24:~$ java -version
  • JAVA_HOME环境变量
xhf@computer24:~$ sudo update-alternative --config java //找到java安装路径
xhf@computer24:~$ sudo /usr/lib/jvm/java-17-openjdk-amd64/bin/jlink --module-path jmods --add-modules java.desktop --output jre //导出jre
xhf@computer24:~$ sudo vim /etc/profile //修改配置文件,这是系统配置文件,所有用户都可见

在文件最后添加:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
xhf@computer24:~$ source /etc/profile //使配置生效
xhf@computer24:~$ echo $JAVA_HOME //打印输出

2. 安装mysql

https://blog.csdn.net/weixx3/article/details/80782479

xhf@computer24:~$ sudo apt-get install mysql-server //安装
xhf@computer24:~$ sudo mysql_secure_installation //初始化配置
xhf@computer24:~$ systemctl status mysql.service //检查是否成功
//如果出现绿色的active (running)则代表成功

我的配置:不需要验证密码插件,即密码可以很简单;密码:123456;不移除匿名用户;仅本机可以访问,不允许远程访问;移除test数据库

升级mysql方法

  1. 官网下载.deb文件
  2. 将文件上传到服务器
  3. 依次执行以下命令
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb //将第一个选项改成8.0然后选择ok
sudo apt-get update
sudo service mysql stop
sudo apt-get install mysql-server //这一步将选第二个选项(不要强密码)
sudo service mysql start
sudo mysql -v

3. 数据库迁移

低版本数据库可以迁移到高版本,但是高版本迁移到低版本可能会出错。

  • 使用Navicat将labdb转储,生成labdb.sql文件
  • 将labdb.sql上传到服务器
xhf@computer24:~$ sudo apt install lrzsz //安装rz sz工具
xhf@computer24:~$ mkdir labMS
xhf@computer24:~$ cd labMS
xhf@computer24:~$ rz //选择labdb.sql文件进行上传,上传位置就是当前目录
  • 在服务器上创建数据库
    mysql -u root -p
    create database labdb;
    show databases;
    use labdb;
    source /home/xhf/labMS/labdb.sql;

在导入的时候遇到了问题,源数据库版本是8.0.27,服务器上mysql版本安装的是5.x,从高版本数据库导入到低版本数据库时会遇到错误。因此尝试升级服务器上数据库,再进行导入。

在数据库导入完成之后,可以用本地Navicat对远程的mysql数据库进行一个连接测试。
使用本地Navicat连接远程mysql服务器,发现报1251错误,这是因为MySQL 8.0的加密方式和5.0不一样,需要更改加密方式。

xhf@computer24:~$ sudo mysql -u root -p //进入mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; //更改加密方式
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; //更改密码
mysql> FLUSH PRIVILEGES; //刷新

完成了上面操作之后,就可以成功用Navicat连接远程数据库了,可以看到里面有之前创建的数据库以及导入进去的数据。

4. 安装Tomcat

参考这个网站进行安装,全程无坑。
我安装的版本,9.0.62
根据上面网站做了1到4步,和第六步
查看JAVA_HOME的方式,终端输入echo $JAVA_HOME
我的tomcat地址:/opt/tomcat/latest

修改tomcat默认端口为8848(与应用保持一致)
为tomcat管理页面添加用户名和密码:https://blog.csdn.net/chenghaibing2008/article/details/79848845
修改conf/tomcat-users.xml,在倒数第二行添加如下两行

xhf@compute24:/opt/tomcat/latest$ sudo vim logs/catalina.2022-04-12.log

<role rolename="manager-gui"/>
<user username="xhf" password="123456" roles="manager-gui"/>

再输入http://xxxx:8848/manager/html即可看到服务器tomcat的管理页面(将xxxx换成你的服务器ip)

5. 项目打包

1. vue项目打包

在终端输入npm run build进行打包。生成的静态文件在dist文件夹下面,将dist的所有子目录及文件,全部复制到maven项目的resource/static目录下即可。
如果你不想将项目部署到根目录下,前端代码需要进行一些修改,看最下面。

2. spring boot项目打包

1. 首先指定打包类型为war,以及打包的名称为项目名
修改pom.xml:在project标签下加入<packaging>war</packaging>,在build标签下加入<finalName>LabWebMS</finalName>
2. 将内置的tomcat移除出去(实际上这一步做不做都行)
修改pom.xml:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 添加如下标签,表示去除内置的tomcat -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 添加如下依赖,否则打包会报错-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

修改启动类:将启动类继承SpringBootServletInitializer,即

@SpringBootApplication
public class LabWebApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(LabWebApplication.class, args);
    }

}

3. 打包
终端输入mvn install,导出的包在target目录下

6. 部署在tomcat根目录下

有两种方式部署,推荐第二种方式
第一种方式
1、清空ROOT目录
sudo rm -rf /opt/tomcat/latest/webapps/ROOT/*
2、将war包解压到ROOT目录下
sudo unzip LabWebMS.war -d /opt/tomcat/latest/webapps/ROOT
3、重启tomcat
sudo systemctl restart tomcat
第二种方式
1、仍然清空ROOT目录,同上
2、配置conf/server.xml
在Host节点下新增一个Context节点

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <Context path="/" docBase="LabWebMS" debug="true" reloadable="true" />
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

3、在本地浏览器上打开tomcat管理程序
浏览器输入http://xxxx:8848/manager/html,然后使用管理界面上传已经打包好的war文件即可。

7. 我遇到的一些坑

  • 由于jdk11 之后下载的jdk包不显示的包含jre,但是很多教程都会让我们配置jre的环境,因此为了安全起见,还是手动导出jre,然后配置jre环境。实际上可能不需要进行配置也可以使用。
  • 安装mysql的时候最好和你本地的mysql版本一致,或高于你本地的版本,否则之后导入数据库的时候可能会出现问题(因为只会向下兼容)。当然也可以在服务器上手动创建数据库。
  • 我在部署的时候遇到了一个问题,浪费了我一个星期之久,就是在本地运行得好好的,但是部署到数据库的时候。用postman测试后端接口一直报500异常(没有别的异常类型进行对应的时候就会报500异常),一直以为是tomcat配置错误或者我代码哪里配置错了。实际上是后端连接服务器上的数据库出现了问题。mysql8.0之后的安全性提高了。我遇到这个错误是因为MySQL 8.0的加密方式和5.0不一样,导致后端连接不上数据库所以一直报500异常。只需要修改数据加密方式配置就能解决这个问题。所以一个好的习惯是,在部署项目之后,先检查服务器和数据库能不能连上
  • tomcat有自己自带的logger,因此不需要额外使用如log4j2这样的logger。tomcat的日志在logs/catalina.log下查看

8. 需要注意的地方

  • 由于我的前端是个单界面应用,因此实际上所有前端请求都会报404错误,因此需要在后端进行配置,将错误页面映射到index.html上
    创建error目录,新建ErrorPageRegistrar如下:
@Component
public class ErrorPageRegistrar implements org.springframework.boot.web.server.ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        ErrorPage error404 = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");
        registry.addErrorPages(error404);
    }
}
  • 因为我选择在将项目运行在跟路径,因此不需要修改配置,如果不选择在根目录下进行配置的话,还需要进行以下步骤:
    由于我使用的是history模式,且使用前后端不分离部署在tomcat下,项目名叫LabWebMS。因此需要配置publicPath以及路由器的base属性。
    在router/index.js文件夹下,为router添加base属性,如下所示
const router = createRouter({
    history: createWebHistory('/LabWebMS/'),
    routes,
});

在vue.config.js文件中,为module.exports添加一条属性:publicPath: '/LabWebMS/',

Logo

更多推荐