温馨提示×

JSP在Ubuntu上如何实现自动化部署

小樊
31
2025-12-27 23:06:51
栏目: 编程语言

在 Ubuntu 上实现 JSP 自动化部署

一 方案总览

  • 前置准备:安装 OpenJDK 11Tomcat 9,确保环境可用。
  • 构建与打包:使用 Maven/Gradle 将项目打包为 WAR,并在构建阶段自动拉取 Servlet/JSP/JSTL 等依赖。
  • 部署方式:
    • 直连 Tomcat:将 WAR 复制到 /var/lib/tomcat9/webapps/(Tomcat 默认开启 autoDeploy,可热部署)。
    • 管理器部署:使用 tomcat7-maven-plugin 通过 Tomcat Manager 部署(需配置权限)。
    • 反向代理与 HTTPS:用 Nginx + Certbot 提供 80/443,对外暴露 HTTPS。
    • CI/CD:用 Jenkins 监听代码变更,自动构建并部署到测试/生产环境。

二 环境与构建自动化

  • 安装 Java 与 Tomcat
    • sudo apt update && sudo apt install -y openjdk-11-jdk tomcat9
    • sudo systemctl enable --now tomcat9
    • 验证:java -version、systemctl status tomcat9、访问 http://服务器IP:8080
  • Maven 项目骨架与依赖(打包为 WAR)
    • 创建:mvn archetype:generate -DgroupId=com.example -DartifactId=my-jsp-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
    • 关键依赖(pom.xml):
      • Servlet/JSP API 使用 provided(由 Tomcat 运行时提供)
      • JSTL 打包进 WAR
    • 示例依赖片段:
      <packaging>war</packaging>
      <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
      </properties>
      <dependencies>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>javax.servlet.jsp-api</artifactId>
          <version>2.3.3</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet.jsp.jstl</artifactId>
          <version>1.2.1</version>
        </dependency>
      </dependencies>
      
    • 构建:mvn clean package(产物:target/my-jsp-app.war)

三 部署自动化方式

  • 方式 A 直连 Tomcat 热部署
    • 将 WAR 复制到 /var/lib/tomcat9/webapps/(如:sudo cp target/my-jsp-app.war /var/lib/tomcat9/webapps/ROOT.war)
    • Tomcat 默认 autoDeploy=“true”,会自动解压并部署;如需重启:sudo systemctl restart tomcat9
  • 方式 B Tomcat Manager 插件部署(可选)
    • 配置 ~/.m2/settings.xml 节点,添加 Tomcat 管理账号
    • 在 pom.xml 配置插件:
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <url>http://localhost:8080/manager/text</url>
          <server>TomcatServer</server>
          <path>/my-jsp-app</path>
        </configuration>
      </plugin>
      
    • 部署命令:mvn tomcat7:deploy(或 redeploy)
  • 方式 C Nginx 反向代理与 HTTPS(推荐对外服务)
    • 安装与配置 Nginx 反向代理到 http://localhost:8080
    • 使用 Certbot 获取并自动配置 Let’s Encrypt 证书,启用 HTTPS
    • 防火墙放行:sudo ufw allow 80,443/tcp

四 CI/CD 流水线示例(Jenkins)

  • 安装与启动 Jenkins,安装 MavenGit
  • 新建任务(Freestyle 或 Pipeline),配置源码(Git),触发器(如 GitHub hook)
  • 构建步骤:Invoke top-level Maven targets → 输入 clean package
  • 构建后动作:Archive artifacts(保留 target/*.war),可结合脚本自动部署到测试/生产(如 scp 到目标机器并触发 Tomcat 部署或调用 Manager API)
  • 安全建议:为 Manager 使用最小权限账号,凭据存入 Jenkins 凭据库,生产环境通过 Nginx/HTTPS 暴露

五 常见问题与最佳实践

  • 依赖范围:将 Servlet/JSP API 设为 provided,避免与 Tomcat 内置库冲突
  • 热部署与回滚:WAR 覆盖或重命名即可触发 autoDeploy;保留上一个稳定版本 WAR,出现问题时快速回滚
  • 权限与目录:确保 tomcat9 用户对 /var/lib/tomcat9/webapps/ 有读写权限
  • 版本匹配:Tomcat 9 兼容 JDK 8+,生产推荐 OpenJDK 11 LTS
  • 安全加固:禁用或限制 Manager 访问,仅内网可达;对外统一走 Nginx + HTTPS
  • 日志与监控:关注 catalina.out、应用日志与线程/内存使用,必要时接入监控告警

0