前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)_jar包加nginx的部署方案
一、准备工作
- 服务器环境要求
银河麒麟 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 java-11-openjdk-devel# 验证安装java -version#设置默认 Java 版本sudo alternatives --config java
- 创建 Systemd 服务
sudo vim /etc/systemd/system/cloudImage.service
[Unit]Description=Cloud Image System BackendAfter=network.target[Service]# 使用专用用户User=appuserGroup=appuser# 使用正确的JAR文件名WorkingDirectory=/opt/javaAppExecStart=/usr/bin/java -jar cloudImages-system-3.5.4.jarSuccessExitStatus=143Restart=alwaysRestartSec=30Environment=\"SERVER_PORT=18888\"# 添加内存限制(可选)# Environment=\"JAVA_OPTS=-Xms512m -Xmx1024m\"[Install]WantedBy=multi-user.target
- 启动服务操作命令
1.重新加载 sudo systemctl daemon-reload 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 Cache-Control \"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 X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $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 ~ /\\.(?!well-known) { 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 your-domain.com; return 301 https://$host$request_uri;}
- 设置目录权限
# 创建前端用户组sudo groupadd frontendsudo useradd -r -s /bin/false -g frontend frontuser# 设置目录所有权sudo chown -R frontuser:frontend /opt/frontAppsudo 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 1save 300 10save 60 10000# 日志文件logfile \"/var/log/redis/redis.log\"# 端口设置port 6379# 保护模式关闭protected-mode no# 数据目录dir /opt/data/redis
- 创建日志目录并设置权限 (前面创建的可以不用创建,也可以使用xftp连接,手动创建文件夹)
sudo mkdir -p /opt/data/log/redissudo chown redis:redis /opt/data/log/redissudo chmod 755 /opt/data/log/redis
- 启动 Redis 服务
sudo systemctl enable redissudo 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:6379Caused 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# 保护模式关闭protected-mode 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/miniosudo rm -f /usr/local/bin/mc# 下载 ARM64 版本wget https://dl.min.io/client/mc/release/linux-arm64/mcsudo wget https://dl.min.io/server/minio/release/linux-arm64/minio -O /usr/local/bin/minio# 或者下载 AMD64 版本,根据架构来定wget https://dl.min.io/client/mc/release/linux-amd64/mc# sudo wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio# 创建数据目录(创建了就不用再创建了)sudo mkdir -p /opt/data/miniosudo 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=MinIODocumentation=https://docs.min.ioWants=network-online.targetAfter=network-online.targetAssertFileIsExecutable=/usr/local/bin/minio[Service]User=rootGroup=rootEnvironmentFile=-/etc/default/minioExecStartPre=/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_VOLUMESRestart=alwaysLimitNOFILE=65536TimeoutStopSec=infinitySendSIGKILL=no[Install]WantedBy=multi-user.target
- 创建 MinIO 环境配置文件
# MinIO access key and secret keyMINIO_ACCESS_KEY=\"minioadmin\"MINIO_SECRET_KEY=\"minioadmin\"# MinIO storage pathMINIO_VOLUMES=\"/opt/data/minio\"# MinIO server addressMINIO_OPTS=\"--address :9000 --console-address :9001\"# MinIO regionMINIO_REGION=\"us-east-1\"
- 启动 MinIO 服务
sudo systemctl daemon-reloadsudo systemctl enable miniosudo 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 mcsudo mv mc /usr/local/bin/# 使用 mc 客户端,配置客户端mc alias set local http://localhost:9000 minioadmin minioadmin# 创建存储桶,也可以根据ip地址登录页面进行手动创建mc mb local/yyx-dev
- 防火墙配置
sudo firewall-cmd --permanent --add-port=9000/tcp # MinIOsudo firewall-cmd --permanent --add-port=9001/tcp # MinIO Consolesudo firewall-cmd --reload# 验证端口开放sudo firewall-cmd --list-ports
- 常见错误解决方案
确保数据目录存在
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/miniosudo sed -i \'s/:9001/:19001/g\' /etc/default/miniosudo systemctl restart minio