部署项目到 Linux
travel 项目介绍
travel 项目是在 IDEA 下开发的 maven 的 web 项目,可以查询旅游信息。这里练习将它部署到 linux 服务器上。
部署之前
准备数据库环境
- 连接到开发时使用的本机的 mysql 服务器,备份 travel 数据库,导出为 travel.sql。
- 使用 SQLYog 连接到本机 mysql 服务器
- 选中 travel 数据库
- 右键 → 备份/导出 → 备份数据库,转储到 SQL → 导出为 travel.sql
- 连接到部署后使用的远程的 mysql 服务器,根据 sql 文件恢复出 travel 数据库。
- 使用 SQLYog 连接到远程 mysql 服务器
- 空白处右键 → 执行 SQL 脚本 → 执行 travel.sql
修改资源地址
MySQL 服务器地址
druid.properties:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///travel?characterEncoding=utf-8
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
分析:
- 因为 mysql 服务器和 tomcat 安装在同一台计算机上,因此 url 中主机部分依然可以省略。
- 部署时用的 mysql 服务器和开发时使用的 mysql 服务器端口号、用户名、密码均相同,不必修改。
- 其他连接池配置信息也不必修改。
- 但是需要在 url 中添加 characterEncoding=utf-8,原因如下:
- 部署时使用的 mysql 服务器的默认字符集是 latin1,而 travel 数据库的字符集是 utf-8。如果不写,如果不写,则发送到 mysql 服务器的查询语句或者更新语句中的中文字符会被替换为 ?。
- 开发时使用的 mysql 服务器在安装后进行的 MySQL Server Instance Configuration Wizard 中已经将默认字符集设置为 utf-8,和 travel 数据库使用的字符集相同,这种情况下可以省略 characterEncoding=utf-8。
Redis 服务器地址
jedis.properties:
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
分析:
- 因为 redis 服务器和 tomcat 安装在同一台计算机上,因此 host=127.0.0.1 没有问题,不必修改。
- 部署时用的 redis 服务器 和 开发时使用的 redis 服务器端口号相同,不必修改。
- 其他连接池配置信息也不必修改。
修改网页资源地址
-
header.html:
location.href="http://localhost/travel/route_list.html?cid=" + cid + "&rname=" + rname; 修改为: location.href="route_list.html?cid=" + cid + "&rname=" + rname;
-
route_detail.html:
location.href="http://localhost/travel/login.html"; 修改为 location.href="login.html";
修改编译插件配置
由于 linux 服务器上安装的是 jdk 1.7,因此需要修改 pom 文件中编译插件的配置。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
- source:提供与指定发行版的源兼容性
- target:生成特定 VM 版本的类文件
指定产生的构件名
<finalName>travel</finalName>
finalName 是产生的构件的文件名,默认值是${artifactId}-${version},在这里是 travel-1.0-SNAPSHOT,改成 travel,那么打包以后会生成 travel.war,名称短一点方便项目部署以后访问。
部署
个人理解:部署就是把什么东西放到什么地方,听候调遣。部署项目就是把项目(war包)放到 tomcat 指定目录,供运行时的 tomcat 调遣。
打包
mvn clean package
- 将项目打成 war 包
-
根据控制台提示信息可以知道 war 包位置
[INFO] Building war: C:\Users\Admin\Documents\travel\travel\target\travel.war
上传
将 war 包放到 linux 服务器里的 tomcat 的 webapps 目录
- 使用 SecureCRT 连接远程 linux 服务器
-
启动 redis
cd /usr/local/redis/bin ./redis-server
-
启动 tomcat
SecureCRT 会话标签页头部右键 → 克隆会话 cd /root/apache-tomcat-7.0.57/bin ./startup.sh
-
动态查看日志
SecureCRT 会话标签页头部右键 → 克隆会话 cd /root/apache-tomcat-7.0.57/logs tail -f catalina.out
-
将 travel.war 上传至 tomcat 的 webapps 目录
SecureCRT 会话标签页头部右键 → 克隆会话 cd /root/apache-tomcat-7.0.57/webapps rz 由于 tomcat 是启动状态,当检测到 war 包之后,会自动解压缩,然后完成 travel 项目的部署。 但是上传时间较长,tomcat 会解压一个没有上传完的 war,因此在日志里有如下错误信息: java.util.zip.ZipException: error in opening zip file travel 项目也因此没有部署成功 只要先将 travel.war 上传至 linux 服务器其他目录,再移动到 webapps 下就没有上面的问题了。 cd /root/apache-tomcat-7.0.57/ rz mv travel.war webapps 不一会儿,catalina.out 中追加了这么一段 INFO: Server startup in 1515 ms Aug 28, 2020 8:04:21 AM org.apache.catalina.startup.HostConfig deployWAR INFO: Deploying web application archive /root/apache-tomcat-7.0.57/webapps/travel.war Aug 28, 2020 8:04:26 AM org.apache.catalina.startup.HostConfig deployWAR INFO: Deployment of web application archive /root/apache-tomcat-7.0.57/webapps/travel.war has finished in 4,446 ms travel 项目部署成功!
访问
部署成功之后,使用本地的火狐浏览器,地址栏输入 http://192.168.214.128:8080/travel/ 可以访问 travel项目!不要使用 Microsoft Edge 浏览器!