温馨提示×

Java项目在Ubuntu如何部署

小樊
50
2025-09-27 06:48:25
栏目: 编程语言

1. 安装Java运行环境(JDK)
在Ubuntu上部署Java项目前,需先安装JDK(Java Development Kit)。推荐使用OpenJDK(开源且稳定),以OpenJDK 11为例,操作步骤如下:

  • 更新系统软件包列表:sudo apt update
  • 安装OpenJDK 11:sudo apt install openjdk-11-jdk
  • 验证安装结果:java -version(若输出Java版本信息,则说明安装成功)。

2. 准备Java项目
确保项目已完成开发并通过测试,需将其打包为可执行文件:

  • Maven项目:在项目根目录执行mvn clean package,生成的JAR文件位于target/目录(如myapp-1.0.0.jar)。
  • Gradle项目:执行gradle build,JAR文件位于build/libs/目录。

3. 上传项目文件到服务器
使用scp(安全复制)命令将本地打包好的JAR文件上传至Ubuntu服务器。例如:
scp target/myapp-1.0.0.jar username@your_server_ip:/path/to/deploy
(替换username为服务器用户名、your_server_ip为服务器IP地址、/path/to/deploy为目标路径)。

4. 部署运行Java项目

方式一:前台运行(临时测试)

直接在终端执行以下命令,项目会在当前终端窗口运行,关闭终端则停止:
java -jar /path/to/deploy/myapp-1.0.0.jar

方式二:后台运行(nohup)

使用nohup命令让项目在后台持续运行,即使终端关闭也不会停止,日志输出到app.log文件:
nohup java -jar /path/to/deploy/myapp-1.0.0.jar > /path/to/deploy/app.log 2>&1 &

方式三:systemd服务(生产推荐)

将项目配置为系统服务,实现开机自启、自动重启等功能。操作步骤如下:

  • 创建服务文件:sudo vim /etc/systemd/system/myapp.service
  • 添加以下内容(根据实际路径修改):
    [Unit]
    Description=My Java Application
    After=network.target
    
    [Service]
    User=your_username
    WorkingDirectory=/path/to/deploy
    ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /path/to/deploy/myapp-1.0.0.jar
    Restart=always
    RestartSec=3
    Environment="JAVA_OPTS=-Xms512m -Xmx1024m"
    
    [Install]
    WantedBy=multi-user.target
    
  • 加载服务配置:sudo systemctl daemon-reload
  • 启动服务:sudo systemctl start myapp
  • 设置开机自启:sudo systemctl enable myapp
  • 查看服务状态:sudo systemctl status myapp(若显示“active (running)”,则说明启动成功)。

5. 配置防火墙(允许外部访问)
若项目需要对外提供服务(如Web应用),需开放对应端口(如8080)。以Ubuntu默认防火墙ufw为例:
sudo ufw allow 8080/tcp
验证端口是否开放:sudo ufw status(显示“8080/tcp ALLOW”则表示成功)。

6. 可选:配置反向代理(如Nginx)
若需通过域名访问项目或启用HTTPS,可使用Nginx作为反向代理。操作步骤如下:

  • 安装Nginx:sudo apt install nginx
  • 配置Nginx:编辑/etc/nginx/conf.d/myapp.conf,添加以下内容(将your_domain.com替换为你的域名,8080替换为项目端口):
    server {
        listen 80;
        server_name your_domain.com;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
  • 重启Nginx:sudo systemctl restart nginx

7. 可选:自动化部署(如GitHub Actions)
通过CI/CD工具实现代码推送后自动构建、部署,提升效率。以GitHub Actions为例:

  • 在项目根目录创建.github/workflows/deploy.yml文件,内容如下(替换your_usernameyour_server_ipyour_deploy_path等为实际值):
    name: Deploy Java App
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - name: Set up JDK 11
            uses: actions/setup-java@v3
            with:
              java-version: '11'
              distribution: 'adopt'
          - name: Build with Maven
            run: mvn -B package --file pom.xml
          - name: Upload to Server
            run: |
              sshpass -p ${{ secrets.SERVER_PASSWORD }} scp -o StrictHostKeyChecking=no target/*.jar ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }}:${{ secrets.DEPLOY_PATH }}
              sshpass -p ${{ secrets.SERVER_PASSWORD }} ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }} "systemctl restart myapp"
    

(需在GitHub仓库的“Settings > Secrets and variables > Actions”中配置SERVER_USERSERVER_PASSWORDSERVER_IPDEPLOY_PATH等密钥)。

0