Ubuntu部署飞讯应用

前言:已经将 webPortals-0.0.1-SNAPSHOT.jar jar包上传到目标机器上了。该应用程序的目标端口使用 9090

1.安装Java(推荐OpenJDK8或11)

# 更新软件源
sudo apt update

# 安装 OpenJDK 8(如果你项目要求 8)
sudo apt install openjdk-8-jdk -y

# 或者安装 OpenJDK 11(推荐版本)
sudo apt install openjdk-11-jdk -y

# 验证安装
java -version

2.安装Nginx

第一步:安装Nginx

sudo apt update
sudo apt install nginx -y

第二步:配置Nginx转发

编辑默认站点配置文件(或新建一个):

sudo vim /etc/nginx/sites-available/default

将文件内容替换或添加为如下内容(注意保留 server 结构):

server {
    listen 80;
    server_name www.flyx-logistics.com.cn;

    location / {
        proxy_pass http://127.0.0.1:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

整体作用:

这段配置定义了一个监听在 HTTP(80端口) 的 Nginx 服务器,将来自 https://www.flyx-logistics.com.cn/ 的访问请求反向代理到本地的 Spring Boot 程序(9090端口)

  • server_name www.flyx-logistics.com.cn; 指定服务器匹配的域名,当请求是这个域名时才会使用这个配置块。
  • 定义根路径 / 的反向代理规则。
  • proxy_pass 表示将所有请求转发到本地的 9090 端口,即你的 Spring Boot 应用。
  • Host:原请求的主机名。
  • X-Real-IP:客户端真实 IP 地址,Spring Boot 就可以通过这些头部识别客户端信息。

第三步:测试并重启 Nginx

sudo nginx -t         # 测试配置是否正确
sudo systemctl restart nginx

第四步:检查防火墙(可选)

如果你启用了 ufw 防火墙,需要放行 80 端口:

sudo ufw allow 80

第五步:确认域名解析

确保你的域名 flyx-logistics.com.cn 已解析到该服务器的公网 IP。你可以使用:

ping flyx-logistics.com.cn

来确认是否指向了你的服务器 IP。

启用Nginx开机自启动:

sudo systemctl enable nginx

查看 Nginx 状态:

sudo systemctl status nginx

📌 常见位置

  • Nginx 默认网站目录:/var/www/html/
  • 配置文件:/etc/nginx/nginx.conf
  • 站点配置:/etc/nginx/sites-available//etc/nginx/sites-enabled/

3.创建启停脚本

vim webPortals.sh

写入下面的内容:

#!/bin/bash

APP_NAME="webPortals-0.0.1-SNAPSHOT.jar"
PID_FILE="webPortals.pid"
LOG_FILE="webPortals.log"
PORT=9090

start() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if ps -p $PID > /dev/null 2>&1; then
            echo "⚠️ 应用已在运行 (PID=$PID)"
            exit 1
        fi
    fi

    echo "🚀 启动应用..."
    nohup java -jar $APP_NAME --server.port=$PORT > $LOG_FILE 2>&1 &
    echo $! > $PID_FILE
    echo "✅ 应用已启动 (PID=$!)"
}

stop() {
    if [ ! -f "$PID_FILE" ]; then
        echo "⚠️ 未找到 PID 文件,应用可能未运行。"
        exit 1
    fi

    PID=$(cat "$PID_FILE")
    if ps -p $PID > /dev/null 2>&1; then
        echo "🛑 正在停止应用 (PID=$PID)..."
        kill $PID
        rm -f "$PID_FILE"
        echo "✅ 应用已停止。"
    else
        echo "⚠️ PID $PID 的进程不存在。"
        rm -f "$PID_FILE"
    fi
}

status() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if ps -p $PID > /dev/null 2>&1; then
            echo "✅ 应用正在运行 (PID=$PID)"
        else
            echo "⚠️ 应用未运行,但 PID 文件存在。"
        fi
    else
        echo "ℹ️ 应用未运行。"
    fi
}

restart() {
    echo "🔁 重启应用..."
    stop
    sleep 2
    start
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo "用法: $0 {start|stop|restart|status}"
        exit 1
esac

添加执行权限:

chmod +x webPortals.sh

./webPortals.sh start     # 启动
./webPortals.sh stop      # 停止
./webPortals.sh restart   # 重启
./webPortals.sh status    # 查看状态

补充

那假设,我本地有两个springboot的程序,我都希望通过 flyx-logistics.com.cn 来访问呢?这种的话有办法么?

是的,你完全可以通过一个域名(如 flyx-logistics.com.cn)访问多个 Spring Boot 应用,只需要根据 路径(location)子域名 做区分。以下是两种常见方式:

✅ 方案一:按路径区分

比如:

  • flyx-logistics.com.cn/app1 → 映射到第一个应用(端口9090)
  • flyx-logistics.com.cn/app2 → 映射到第二个应用(端口9091)

示例配置:

server {
    listen 443 ssl;
    server_name flyx-logistics.com.cn;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location /app1/ {
        proxy_pass http://127.0.0.1:9090/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /app2/ {
        proxy_pass http://127.0.0.1:9091/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

注意事项:Spring Boot 应用需支持以 /app1/app2 为前缀的访问路径,或做 URL 前缀适配(比如加 server.servlet.context-path=/app1)。

✅ 方案二:按子域名区分

比如:

  • app1.flyx-logistics.com.cn → 第一个应用
  • app2.flyx-logistics.com.cn → 第二个应用

前提:你要能控制 DNS 配置,添加 app1.app2. 的子域名解析。

Nginx 配置示例:

server {
    listen 443 ssl;
    server_name app1.flyx-logistics.com.cn;

    ssl_certificate /path/to/app1.pem;
    ssl_certificate_key /path/to/app1.key;

    location / {
        proxy_pass http://127.0.0.1:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 443 ssl;
    server_name app2.flyx-logistics.com.cn;

    ssl_certificate /path/to/app2.pem;
    ssl_certificate_key /path/to/app2.key;

    location / {
        proxy_pass http://127.0.0.1:9091;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
posted @ 2025-05-12 23:13  LoremMoon  阅读(18)  评论(0)    收藏  举报