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

一、準備工作

  1. 服務器環境要求
    銀河麒麟 V10 操作系統
    開放端口:MinIO (9000、9001)、 Redis (6379)、應用服務 jar包(18888)、前端服務(8080)
    系統用戶:具有 sudo 權限的用戶
    操作:需要先有必備的工具前端的vsCode,webStrom、后臺的idea,以及操作服務器的工具,我這邊使用的是xftp和文件上傳,把打包好的程序通過文件傳輸工具,放置到服務器中
    在這里插入圖片描述
  2. 創建數據存儲目錄
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包 部署

  1. 安裝 OpenJDK 11
# 麒麟系統通常使用 yum 包管理器
sudo yum install -y java-11-openjdk-devel# 驗證安裝
java -version#設置默認 Java 版本
sudo alternatives --config java
  1. 創建 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 cloudImages-system-3.5.4.jarSuccessExitStatus=143
Restart=always
RestartSec=30
Environment="SERVER_PORT=18888"# 添加內存限制(可選)
# Environment="JAVA_OPTS=-Xms512m -Xmx1024m"[Install]
WantedBy=multi-user.target
  1. 啟動服務操作命令
 1.重新加載 sudo systemctl daemon-reload 2.啟動服務 sudo systemctl start cloudImage3.啟用服務 sudo systemctl enable cloudImage4.停止服務:sudo systemctl stop cloudImage5.重啟服務:sudo systemctl restart cloudImage6.查看狀態:sudo systemctl status cloudImage
  1. 權限不足問題處理
    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 部署

  1. 安裝 Nginx:sudo yum install -y nginx
  2. 創建前端目錄 sudo mkdir -p /opt/frontApp # 上傳 Hbuilder 打包文件到此目錄
  3. 創建專用配置文件 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;
}
  1. 設置目錄權限
# 創建前端用戶組
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
  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

  1. 防火墻設置
    開放 8080 端口
    sudo firewall-cmd --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    驗證端口已開放
    sudo firewall-cmd --list-ports | grep 8080

四、部署redis

  1. 安裝 Redis
    sudo yum install epel-release
    sudo yum install redis
  2. 配置 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
# 保護模式關閉
protected-mode no# 數據目錄
dir /opt/data/redis
  1. 創建日志目錄并設置權限 (前面創建的可以不用創建,也可以使用xftp連接,手動創建文件夾)
sudo mkdir -p /opt/data/log/redis
sudo chown redis:redis /opt/data/log/redis
sudo chmod 755 /opt/data/log/redis
  1. 啟動 Redis 服務
sudo systemctl enable redis
sudo systemctl start redis
  1. 防火墻設置
    sudo firewall-cmd --permanent --add-port=6379/tcp # Redis
    sudo firewall-cmd --reload
    驗證端口開放
    sudo firewall-cmd --list-ports

  2. 問題處理

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

  1. 下載并安裝 MinIO,載正確的 ARM64 版本
    確定系統架構 uname -m
    在這里插入圖片描述
    如果輸出 aarch64 或 arm64,說明是 ARM 架構
    如果輸出 x86_64,說明是 AMD64 架構
  2. 下載正確的 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/linux-arm64/mc
sudo 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/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
  1. 驗證 MinIO 文件
# 檢查文件類型
file /usr/local/bin/minio# 檢查文件權限
ls -l /usr/local/bin/minio
  1. 創建 MinIO 服務文件
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.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_VOLUMESRestart=always
LimitNOFILE=65536
TimeoutStopSec=infinity
SendSIGKILL=no[Install]
WantedBy=multi-user.target
  1. 創建 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"
  1. 啟動 MinIO 服務
sudo systemctl daemon-reload
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
  1. 創建存儲桶
# 安裝 MinIO 客戶端,上面已經下載好了
chmod +x mc
sudo mv mc /usr/local/bin/# 使用 mc 客戶端,配置客戶端
mc alias set local http://localhost:9000 minioadmin minioadmin# 創建存儲桶,也可以根據ip地址登錄頁面進行手動創建
mc mb local/yyx-dev
  1. 防火墻配置
sudo firewall-cmd --permanent --add-port=9000/tcp  # MinIO
sudo firewall-cmd --permanent --add-port=9001/tcp  # MinIO Console
sudo firewall-cmd --reload
# 驗證端口開放
sudo firewall-cmd --list-ports
  1. 常見錯誤解決方案

確保數據目錄存在
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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88129.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

貪心算法:簡單而高效的求解策略C++

貪心算法詳解及C實現 1. 什么是貪心算法 貪心算法(Greedy Algorithm)是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是全局最好或最優的算法策略。 貪心算法與動態規劃不同在于它…

IDEA 中使用 <jsp:useBean>動作指令時,class屬性引用無效

問題&#xff1a;在 IDEA 中創建 Java Web項目&#xff0c;在src/model包下存在一個Student類該類中包含&#xff1a;全參構造器、私有屬性的get/set方法。然后在 jsp 頁面中使用 <jsp:useBean>創建Student類的對象&#xff1a;訪問頁面時報錯&#xff1a;原因&#xff1…

【網絡】Linux 內核優化實戰 - net.core.flow_limit_table_len

目錄參數作用查看與修改調優建議相關警告net.core.flow_limit_table_len 是 Linux 內核中的一個網絡參數&#xff0c;用于控制**流限制表&#xff08;Flow Limit Table&#xff09;**的大小。這個表主要用于限制網絡流量中單個"流"&#xff08;通常指來自同一源IP、端…

前端開發常見問題技術文章大綱

前端開發常見問題技術文章大綱 常見性能優化問題 頁面加載速度慢的原因及解決方案渲染阻塞資源的優化方法內存泄漏的檢測與修復 跨瀏覽器兼容性問題 不同瀏覽器對CSS和JavaScript的支持差異Polyfill和Shim的使用場景如何利用工具檢測兼容性問題 響應式設計挑戰 媒體查詢的最佳實…

Redis常見性能問題和解決方案有哪些?

Redis 作為高性能的內存數據庫&#xff0c;在實際使用中可能會遇到性能問題。以下是常見的性能問題及其解決方案&#xff0c;用中文總結如下&#xff1a; 1. 高延遲問題 問題描述&#xff1a;客戶端請求響應時間過長&#xff0c;可能由于網絡、命令復雜度或服務器負載導致。 解…

閃測儀應用案例丨手機中框如何突破「尺寸檢測」瓶頸?

越來越多的手機中框&#xff0c;正改為更復雜的鏤空設計&#xff0c;這種設計不僅保持了手機中框的結構強度&#xff0c;還進一步減輕了機身重量&#xff0c;同時提升了散熱性能。這讓手機中框的自動化生產增加了很多難點&#xff0c;其中的尺寸檢測就遇到了許多瓶頸。? 尺寸精…

【字節跳動】數據挖掘面試題0011:介紹下時間序列分析常用知識點

文章大綱時間序列分析全面解析一、時間序列分析的基本概念二、時間序列分析的主要方法1. 描述性分析2.統計分析方法3.預測模型&#xff08;1&#xff09;傳統統計模型&#xff08;2&#xff09;現代機器學習模型三、時間序列分析的應用場景四、模型評估五、在字節跳動的應用場景…

ubuntu中交叉編譯iperf3到目標平臺xilinx

注&#xff1a;此文為ubuntu x86系統編譯程序到xilinx aarch64系統中。 一、工具準備 x86上編譯aarch64的編譯器 sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu #保證編譯器在環境變量中&#xff0c;嘗試執行aarch64-linux-gnu-gcc 目標平臺的根文件系統rootf…

Java-數據結構-集合框架

什么是集合框架集合本質是java所實現的一組數據結構&#xff0c;提供了不同的增刪改查方法。集合就是定義了接口&#xff0c;再通過不同的類去實現定義的接口&#xff0c;這些實現了接口的類就是集合類&#xff0c;例如list&#xff0c;stack&#xff0c;map。集合框架的重要性…

黑馬點評系列問題之基礎篇16jedis redis依賴引入后仍然還是報錯

問題描述依賴已經導入進去了&#xff0c;在倉庫里有***.jar和***.pom這兩個文件&#xff0c;但是點開右面的maven還是有很多爆紅。點擊maven里的更新還是不行。解決點到配置文件pom.xml在lombok這個依賴的代碼下面&#xff0c;添加上版本號&#xff0c;刷新一下右鍵單擊pom.xml…

SQL 一鍵轉 GORM 模型,支持字段注釋、類型映射、tag 自定義!

SQL 一鍵轉 GORM 模型&#xff0c;支持字段注釋、類型映射、tag 自定義&#xff01; 在使用 Golang GORM 開發項目時&#xff0c;你是否也經歷過這些「重復性痛苦」&#xff1a; ? 拿到建表 SQL&#xff0c;要手動寫 struct? 字段多、類型復雜&#xff0c;還要寫 json、go…

前端計算機視覺:使用 OpenCV.js 在瀏覽器中實現圖像處理

一、OpenCV.js 簡介與環境搭建OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個強大的計算機視覺庫&#xff0c;廣泛應用于圖像和視頻處理領域。傳統上&#xff0c;OpenCV 主要在后端使用 Python 或 C 等語言。但隨著 WebAssembly (Wasm) 技術的發展&…

開發在線商店:基于Vue2+ElementUI的電商平臺前端實踐

Hi&#xff0c;我是布蘭妮甜 &#xff01;在當今數字化時代&#xff0c;電子商務已成為商業領域的重要組成部分。開發一個功能完善、用戶友好的在線商店應用對于企業拓展市場至關重要。本文將詳細介紹如何使用Vue2框架配合ElementUI組件庫開發一個完整的在線商店應用。 文章目錄…

vue3 隨手筆記9--組件通信方式9/2--自定義事件

一、什么是自定義事件&#xff1f; 自定義事件是 Vue 組件間通信的一種機制。子組件通過 this.$emit(事件名, 數據) 觸發一個事件。父組件監聽這個事件并執行相應的邏輯。 二、基本使用 準備工作 demo 繼續使用筆記8中的 鏈接為demo 在views文件夾下 創建新的文件夾為cust…

深入理解Reactor調試模式:Hooks.onOperatorDebug() vs ReactorDebugAgent.init()

在現代Java開發中&#xff0c;調試Reactor流是確保應用程序性能和穩定性的關鍵步驟。Reactor調試模式提供了多種初始化方法&#xff0c;其中最常用的兩種是Hooks.onOperatorDebug()和ReactorDebugAgent.init()。本文將深入探討這兩種方法的區別&#xff0c;幫助開發者選擇最適合…

QT6 源(151)模型視圖架構里的表格窗體視圖 QTableWidget 篇一:先學習倆屬性以及 public 權限的公共成員函數,

&#xff08;1&#xff09;本篇的內容因為是子類&#xff0c;內容較視圖基類簡單了一些。又因為時間緊迫&#xff0c;不再詳細舉例了。詳細的測試可以滿足好奇心&#xff0c;也可以增強寫代碼的自信心。奈何時間不夠。不完美&#xff0c;就不完美了。以后有機會&#xff0c;再補…

ffmpeg 下載、安裝、配置、基本語法、避坑指南(覆蓋 Windows、macOS、Linux 平臺)

ffmpeg 下載、安裝、配置、基本語法、避坑指南&#xff08;覆蓋 Windows、macOS、Linux 平臺&#xff09; 本文是一篇面向初學者的超詳細 FFmpeg 教程&#xff0c;包括 FFmpeg 下載、安裝、配置、基本語法 與 避坑指南。覆蓋 Windows、macOS、Linux 平臺的安裝方式與 環境變量…

Kotlin 安裝使用教程

一、Kotlin 簡介 Kotlin 是 JetBrains 開發的一種現代、靜態類型的編程語言&#xff0c;完全兼容 Java&#xff0c;主要應用于 Android 開發、后端服務開發、前端 Web 開發&#xff08;Kotlin/JS&#xff09;和多平臺開發&#xff08;Kotlin Multiplatform&#xff09;。 二、…

day08-Elasticsearch

黑馬商城作為一個電商項目&#xff0c;商品的搜索肯定是訪問頻率最高的頁面之一。目前搜索功能是基于數據庫的模糊搜索來實現的&#xff0c;存在很多問題。 首先&#xff0c;查詢效率較低。 由于數據庫模糊查詢不走索引&#xff0c;在數據量較大的時候&#xff0c;查詢性能很…

transformers 筆記:自定義模型(配置+模型+注冊為AutoCLass+本地保存加載)

Transformers 模型設計上是可定制的。每個模型的代碼都包含在 Transformers 倉庫的 model 子文件夾中&#xff08;transformers/src/transformers/models at main huggingface/transformers&#xff09;&#xff0c;每個模型文件夾通常包含&#xff1a; modeling.py&#xff1…