云计算百科
云计算领域专业知识百科平台

前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)

一、准备工作

  • 服务器环境要求
    银河麒麟 V10 操作系统
    开放端口:MinIO (9000、9001)、 Redis (6379)、应用服务 jar包(18888)、前端服务(8080)
    系统用户:具有 sudo 权限的用户
    操作:需要先有必备的工具前端的vsCode,webStrom、后台的idea,以及操作服务器的工具,我这边使用的是xftp和文件上传,把打包好的程序通过文件传输工具,放置到服务器中
    在这里插入图片描述
  • 创建数据存储目录
  • sudo mkdir p /opt/data/minio minio #数据存储地址
    sudo mkdir p /opt/data/redis #redis日志地址
    sudo mkdir p /opt/javaApp #jar包地址
    sudo mkdir p /opt/frontApp #前端打包地址
    sudo chmod R 777 /data # 简化权限,生产环境应根据实际需求设置
    sudo chmod R 755 /opt/frontApp

    二、 jar包 部署

  • 安装 OpenJDK 11
  • # 麒麟系统通常使用 yum 包管理器
    sudo yum install y java11openjdkdevel

    # 验证安装
    java version

    #设置默认 Java 版本
    sudo alternatives config java

  • 创建 Systemd 服务
    sudo vim /etc/systemd/system/cloudImage.service
  • [Unit]
    Description=Cloud Image System Backend
    After=network.target

    [Service]
    # 使用专用用户
    User=appuser
    Group=appuser

    # 使用正确的JAR文件名
    WorkingDirectory=/opt/javaApp
    ExecStart=/usr/bin/java jar cloudImagessystem3.5.4.jar

    SuccessExitStatus=143
    Restart=always
    RestartSec=30
    Environment="SERVER_PORT=18888"

    # 添加内存限制(可选)
    # Environment="JAVA_OPTS=-Xms512m -Xmx1024m"

    [Install]
    WantedBy=multiuser.target

  • 启动服务操作命令
  • 1.重新加载 sudo systemctl daemonreload
    2.启动服务 sudo systemctl start cloudImage
    3.启用服务 sudo systemctl enable cloudImage
    4.停止服务:sudo systemctl stop cloudImage
    5.重启服务:sudo systemctl restart cloudImage
    6.查看状态:sudo systemctl status cloudImage

  • 权限不足问题处理
    Main PID: 97050 (code=exited, status=217/USER)
    1.创建专用系统用户(推荐):sudo useradd -r -s /bin/false appuser
    2.修改文件权限:sudo chown -R appuser:appuser /opt/app/backend
    3.修正服务配置文件: sudo vim /etc/systemd/system/cloudImage.service
    4.重新加载并启动服务:
  • 查找占用18888端口的进程
    sudo lsof -i :18888

    停止冲突进程
    sudo kill -9

    三、Nginx 部署

  • 安装 Nginx:sudo yum install -y nginx
  • 创建前端目录 sudo mkdir -p /opt/frontApp # 上传 Hbuilder 打包文件到此目录
  • 创建专用配置文件 sudo vim /etc/nginx/conf.d/cloud-frontend.conf #多个前端项目新增不同的配置文件即可,修改指向地址
  • # 前端主服务配置
    server {
    listen 8080;
    server_name localhost;

    # 前端文件根目录
    root /opt/frontApp/web;

    # 默认文件设置
    index index.html;

    # 静态资源缓存设置
    location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
    expires 365d;
    add_header CacheControl "public, immutable";
    try_files $uri =404;
    }

    # 前端路由处理 (Vue/React 等 SPA 应用需要)
    location / {
    try_files $uri $uri/ /index.html;
    }

    # 后端 API 代理
    location /api {
    proxy_pass http://localhost:18888;
    proxy_set_header Host $host;
    proxy_set_header XRealIP $remote_addr;
    proxy_set_header XForwardedFor $proxy_add_x_forwarded_for;
    proxy_set_header XForwardedProto $scheme;

    # 增加超时时间
    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    }

    # 直接代理后端页面 (如登录页)
    location ~ ^/(login|register) {
    proxy_pass http://localhost:18888;
    proxy_set_header Host $host;
    }

    # 禁止访问敏感文件
    location ~ /\\.(?!wellknown) {
    deny all;
    }

    # 自定义错误页面
    error_page 404 /404.html;
    location = /404.html {
    internal;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    internal;
    }
    }
    # 可选:HTTP 重定向到 HTTPS (如果有域名证书)
    server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
    }

  • 设置目录权限
  • # 创建前端用户组
    sudo groupadd frontend
    sudo useradd r s /bin/false g frontend frontuser

    # 设置目录所有权
    sudo chown R frontuser:frontend /opt/frontApp
    sudo chmod R 755 /opt/frontApp

    # 允许 Nginx 访问前端目录
    sudo semanage fcontext a t httpd_sys_content_t "/opt/frontApp(/.*)?"
    sudo restorecon Rv /opt/frontApp

    # 允许 Nginx 网络连接
    sudo setsebool P httpd_can_network_connect 1

  • 测试并重载配置
  • # 测试配置语法
    sudo nginx t

    # 重载配置 (不中断服务)
    sudo systemctl reload nginx

    检查 Nginx 服务状态
    sudo systemctl status nginx

    # 完整重启
    sudo systemctl restart nginx

    #设置开机自启
    sudo systemctl enable nginx

    检查前端文件是否存在
    ls -l /opt/frontApp/web/
    监听端口
    sudo netstat -tuln | grep 8080

  • 防火墙设置
    开放 8080 端口
    sudo firewall-cmd –permanent –add-port=8080/tcp
    sudo firewall-cmd –reload
    验证端口已开放
    sudo firewall-cmd –list-ports | grep 8080
  • 四、部署redis

  • 安装 Redis
    sudo yum install epel-release
    sudo yum install redis
  • 配置 Redis
    编辑 sudo vim /etc/redis.conf:
    1.按下“i” 进入编辑
    2.按下 esc 退出编辑 输入 :wq 保存并退出。
    3.搜索特定内容 按下 / 键,然后输入你想要搜索的内容 例如:/bind
    按下 Enter 键后,编辑器会跳转到第一个匹配项
    如果需要查找下一个匹配项,可以按 n 键。
  • # 绑定所有网络接口
    bind 0.0.0.0

    # 设置密码
    requirepass 123456

    # 选择数据库
    databases 14

    # 持久化设置
    save 900 1
    save 300 10
    save 60 10000

    # 日志文件
    logfile "/var/log/redis/redis.log"

    # 端口设置
    port 6379
    # 保护模式关闭
    protectedmode no

    # 数据目录
    dir /opt/data/redis

  • 创建日志目录并设置权限 (前面创建的可以不用创建,也可以使用xftp连接,手动创建文件夹)
  • sudo mkdir p /opt/data/log/redis
    sudo chown redis:redis /opt/data/log/redis
    sudo chmod 755 /opt/data/log/redis

  • 启动 Redis 服务
  • sudo systemctl enable redis
    sudo systemctl start redis

  • 防火墙设置
    sudo firewall-cmd –permanent –add-port=6379/tcp # Redis
    sudo firewall-cmd –reload
    验证端口开放
    sudo firewall-cmd –list-ports

  • 问题处理

  • Caused by: org.springframework.data.redis.RedisConnectionFailureException:
    Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException:
    Unable to connect to localhost:6379

    Caused by: java.net.ConnectException: 拒绝连接

    这表明:Redis 服务器未运行、Redis 未监听 6379 端口、防火墙阻止了访问、Redis 配置错误、网络连接问题
    ① 检查 Redis 服务状态

    # 检查 Redis 是否运行
    sudo systemctl status redis

    # 如果没有运行,启动服务
    sudo systemctl start redis

    # 设置开机自启
    sudo systemctl enable redis

    # 重启 Redis 服务
    sudo systemctl restart redis

    ② 检查配置
    sudo vi /etc/redis.conf

    # 监听所有网络接口
    bind 0.0.0.0

    # 保护模式关闭
    protectedmode no

    # 端口设置
    port 6379

    # 如果需要密码,设置密码
    requirepass yourstrongpassword

    ③ 检查 Redis 监听端口

    # 检查 6379 端口是否被监听
    sudo netstat tuln | grep 6379

    # 应该看到类似输出:
    # tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN

    五、部署Minio

  • 下载并安装 MinIO,载正确的 ARM64 版本
    确定系统架构 uname -m
    在这里插入图片描述
    如果输出 aarch64 或 arm64,说明是 ARM 架构
    如果输出 x86_64,说明是 AMD64 架构
  • 下载正确的 mc 版本(ARM64)
    需要删除,才进行删除,第一次配置可以不需要
    具体操作流程
  • # 删除旧版本
    sudo rm f /usr/local/bin/minio
    sudo rm f /usr/local/bin/mc

    # 下载 ARM64 版本
    wget https://dl.min.io/client/mc/release/linuxarm64/mc
    sudo wget https://dl.min.io/server/minio/release/linuxarm64/minio O /usr/local/bin/minio

    # 或者下载 AMD64 版本,根据架构来定
    wget https://dl.min.io/client/mc/release/linuxamd64/mc
    # sudo wget https://dl.min.io/server/minio/release/linuxamd64/minio O /usr/local/bin/minio

    # 创建数据目录(创建了就不用再创建了)
    sudo mkdir p /opt/data/minio
    sudo chmod R 777 /opt/data/minio

    # 设置执行权限
    sudo chmod +x /usr/local/bin/minio
    # 设置执行权限
    chmod +x mc

    # 安装到系统路径
    sudo mv mc /usr/local/bin/

    # 验证安装
    mc version

  • 验证 MinIO 文件
  • # 检查文件类型
    file /usr/local/bin/minio

    # 检查文件权限
    ls l /usr/local/bin/minio

  • 创建 MinIO 服务文件
  • [Unit]
    Description=MinIO
    Documentation=https://docs.min.io
    Wants=networkonline.target
    After=networkonline.target
    AssertFileIsExecutable=/usr/local/bin/minio

    [Service]
    User=root
    Group=root
    EnvironmentFile=/etc/default/minio
    ExecStartPre=/bin/bash c "if [ -z \\"${MINIO_VOLUMES}\\" ]; then echo \\"Variable MINIO_VOLUMES not set in /etc/default/minio\\"; exit 1; fi"

    ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

    Restart=always
    LimitNOFILE=65536
    TimeoutStopSec=infinity
    SendSIGKILL=no

    [Install]
    WantedBy=multiuser.target

  • 创建 MinIO 环境配置文件
  • # MinIO access key and secret key
    MINIO_ACCESS_KEY="minioadmin"
    MINIO_SECRET_KEY="minioadmin"

    # MinIO storage path
    MINIO_VOLUMES="/opt/data/minio"

    # MinIO server address
    MINIO_OPTS="–address :9000 –console-address :9001"

    # MinIO region
    MINIO_REGION="us-east-1"

  • 启动 MinIO 服务
  • sudo systemctl daemonreload
    sudo systemctl enable minio
    sudo systemctl start minio
    # 检查服务状态
    sudo systemctl status minio

    # 停止服务
    sudo systemctl stop minio

    # 重启服务
    sudo systemctl restart minio

    # 检查端口监听
    netstat tuln | grep 9000

    # 使用 curl 测试
    curl http://localhost:9000

  • 创建存储桶
  • # 安装 MinIO 客户端,上面已经下载好了
    chmod +x mc
    sudo mv mc /usr/local/bin/

    # 使用 mc 客户端,配置客户端
    mc alias set local http://localhost:9000 minioadmin minioadmin

    # 创建存储桶,也可以根据ip地址登录页面进行手动创建
    mc mb local/yyxdev

  • 防火墙配置
  • sudo firewallcmd permanent addport=9000/tcp # MinIO
    sudo firewallcmd permanent addport=9001/tcp # MinIO Console
    sudo firewallcmd reload
    # 验证端口开放
    sudo firewallcmd listports

  • 常见错误解决方案
  • 确保数据目录存在
    sudo mkdir -p /data/minio
    设置正确权限
    sudo chmod -R 777 /data/minio # 测试环境简化权限
    生产环境建议:sudo chown -R minio-user:minio-user /data/minio

    错误 1:No such file or directory
    安装依赖库: sudo yum install libatomic -y

    错误 2:Permission denied
    设置 SELinux 宽容模式: sudo setenforce 0
    或添加 SELinux 策略
    sudo semanage fcontext -a -t bin_t /usr/local/bin/minio
    sudo restorecon -v /usr/local/bin/minio

    错误 3:端口冲突

    # 检查端口占用
    sudo lsof i :9000

    # 修改端口配置
    sudo sed i 's/:9000/:19000/g' /etc/default/minio
    sudo sed i 's/:9001/:19001/g' /etc/default/minio
    sudo systemctl restart minio

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!