【服務器】將本地項目部署到服務器

當我們已經有了一個服務器后 如何將本地項目部署到服務器呢

第一步,找到云服務器實例,查看公網IP地址

第二步,推薦使用 Windows 自帶的 PowerShell?

ssh root@你的公網IP
# 例如:
ssh root@47.98.123.45

????????如果超時,首先檢查服務器實例安全組的配置里入方向有沒有開通22端口

????????如果出現root@8.133.21.96: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).說明服務器拒絕了密碼登錄,只允許使用 SSH 密鑰對進行認證。在實例里找到重置實例密碼,修改密碼后重新使用ssh

第三步,安裝 Nginx(Web 服務器)

Nginx 是一個輕量、高效的 Web 服務器,適合部署靜態網頁。

如果是 Ubuntu/Debian 系統:
# 更新軟件包
apt update# 安裝 Nginx
apt install nginx -y# 啟動 Nginx
systemctl start nginx# 設置開機自啟
systemctl enable nginx
如果是 CentOS 系統:
yum install nginx -y
systemctl start nginx
systemctl enable nginx

? 安裝完成后,在瀏覽器訪問:

http://你的公網IP

你應該看到 Nginx 歡迎頁,說明 Web 服務已運行!

第四步,創建 Nginx 配置文件:創建一個新的配置文件。例如?/etc/nginx/conf.d/tool.conf,并寫入以下內容:

server {listen 80; # 監聽80端口(HTTP)server_name tool.yourdomain.com; # 你的二級域名,此處替換為你的實際二級域名# 指定靜態文件根目錄root /var/www/tool;index index.html index.htm;# 主要配置:嘗試以文件、目錄的方式處理請求,均失敗則返回 index.html(用于支持前端路由)location / {try_files $uri $uri/ /index.html;}# 可選:配置靜態資源的緩存時間,提升性能location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";}
}

命令:

sudo tee /etc/nginx/conf.d/scmm.conf > /dev/null << 'EOL'
server {listen 80;server_name scmm.5379.com.cn;root /var/www/tool;index index.html index.htm;location / {try_files $uri $uri/ /index.html;}
EOL

然后,添加靜態資源緩存配置

sudo tee -a /etc/nginx/conf.d/scmm.conf > /dev/null << 'EOL'location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";}
}
EOL

第五步,驗證是否成功

執行完上面兩條命令后,檢查文件是否創建成功:

bash

# 查看文件內容
sudo cat /etc/nginx/conf.d/scmm.conf

如果輸出顯示完整的配置內容,說明創建成功了!

第六步,繼續完成后續步驟

現在配置文件已經創建好了,請繼續執行:

# 1. 測試Nginx配置語法
sudo nginx -t# 2. 如果測試成功,重新加載Nginx配置
sudo systemctl reload nginx# 3. 檢查Nginx狀態,確保它正常運行
sudo systemctl status nginx

第七步 使用scp命令上傳項目

如果你有一個大的React項目,里面包含多個工具,但只想把其中一個部署到特定的二級域名上,如果你的工具是通過路由區分的,可以在入口處做判斷:

// src/App.js 或 src/index.js
import React from 'react';
import { createRoot } from 'react-dom/client';
import PasswordGenerator from './tools/password-generator';// 檢查URL參數或路徑來決定渲染哪個工具
const urlParams = new URLSearchParams(window.location.search);
const toolName = urlParams.get('tool');if (window.location.hostname === 'scmm.5379.com.cn' || toolName === 'password') {// 獨立部署模式:只渲染密碼生成器const root = createRoot(document.getElementById('root'));root.render(<PasswordGenerator />);
} else {// 正常模式:渲染完整的應用const root = createRoot(document.getElementById('root'));root.render(<FullApp />); // 你的完整應用
}
1. 在本地構建項目

在你的React項目根目錄下,運行構建命令:

npm run build
2. 上傳構建好的文件到服務器,將?build?文件夾里的所有內容上傳到服務器的Nginx配置中指定的目錄?/var/www/tool/
scp -r ./build/* root@IP:/var/www/tool/

這里的IP要替換成自己的IP

注意:?是上傳?build?文件夾里的內容(*),不是上傳整個?build?文件夾本身。

3. 在服務器上檢查文件

上傳完成后,可以登錄服務器檢查文件是否到位:

ls -la /var/www/tool/

你應該能看到類似這樣的文件:

  • index.html

  • static/?文件夾

  • 可能還有?asset-manifest.json?等文件

第八步,上傳后檢查并測試:

# 1. 檢查文件是否上傳成功
ls -la /var/www/tool/# 2. 重新加載Nginx使配置生效
sudo systemctl reload nginx# 3. 在瀏覽器訪問你的二級域名進行測試:# http://

最后一步:確保Nginx配置正確,讓二級域名能夠找到你上傳的文件。

????????1. 登錄服務器? ??

????????2. 檢查Nginx配置文件

????????????????查看我們之前創建的配置文件:

cat /etc/nginx/conf.d/scmm.conf

確認配置文件中以下關鍵點是否正確:

  • server_name XXXXXXXX;?← 必須是你的二級域名

  • root /var/www/tool;?← 必須是你上傳文件的目錄

  • index index.html index.htm;?← 必須有這一行

    3. 測試Nginx配置
    sudo nginx -t

    如果顯示?syntax is ok?和?test is successful,說明配置正確。

  • 4. 重新加載Nginx

    bash

    sudo systemctl reload nginx
    5. 檢查文件是否在正確位置

    bash

    ls -la /var/www/tool/

    你應該能看到你上傳的文件,包括?index.html

? ?

以下是我自己遇到的一些錯誤:

? ? ? ? 1.在正確的目錄中執行命令,必須進入有React項目的目錄,再執行scp命令

? ? ? ? 2.如果顯示:"/var/www/tool/": No such file or directory,說明服務器上的目標目錄?/var/www/tool/?不存在!你需要先在服務器上創建這個目錄,然后再上傳文件。

首先,登錄服務器創建目錄,輸入密碼登錄后,執行:
# 創建目錄
sudo mkdir -p /var/www/tool# 設置權限(非常重要!)
sudo chmod -R 755 /var/www/tool
sudo chown -R $USER:$USER /var/www/tool# 退出服務器
exit
然后,重新使用scp上傳文件

? ? ? ? 3.Failed to load resource: the server responded with a status of 403 (Forbidden)

????????403 Forbidden?錯誤是一個權限問題?這意味著Nginx服務器進程沒有權限讀取你上傳的文件。解決方案:修改文件權限和所有權

?檢查當前文件權限和所有者
ls -la /var/www/

看看?tool?目錄的所有者和權限是什么。

修改目錄所有權(最重要的一步!)

Nginx通常以?nginx?或?www-data?用戶運行,需要讓這個用戶有權讀取文件:

# 更改 /var/www/tool 目錄及其所有文件的所有者為 nginx 用戶
sudo chown -R nginx:nginx /var/www/tool/
?設置正確的文件權限
# 給目錄設置755權限(讀+執行+列出)
sudo find /var/www/tool/ -type d -exec chmod 755 {} \;# 給文件設置644權限(讀)
sudo find /var/www/tool/ -type f -exec chmod 644 {} \;
重新加載Nginx并測試
# 重新加載Nginx配置
sudo systemctl reload nginx# 查看Nginx錯誤日志,獲取更詳細的錯誤信息
sudo tail -f /var/log/nginx/error.log

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

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

相關文章

Flink中的 BinaryRowData 以及大小端

背景 本文基于 Flink 1.17.0 寫此文章的目的是為了說明 Flink 堆內和堆外內存以及 內部 BinaryRowData 行處理的優化。 分析 堆內和堆外內存 跟Spark的內存管理不一樣&#xff0c;Flink 中的堆內和堆外一直都是存在的。 堆內內存&#xff08;JVM Heap&#xff09;存儲用戶對象和…

HTTP/3.0:網絡通信的技術革新與性能飛躍

&#x1f310; HTTP/3.0&#xff1a;網絡通信的技術革新與性能飛躍 Refer&#xff1a;PPP PRIVATE NETWORK? 2 企業級虛擬以太網接入綜合解決方案介紹 &#x1f680; 引言&#xff1a;悄然來臨的網絡革命 你是否曾期待視頻加載卡頓成為過去&#xff1f;YouTube 已經邁出了重…

【golang學習筆記 gin 】1.1 路由封裝和mysql 的使用封裝

安裝gin go get -u github.com/gin-gonic/gin go get -u github.com/go-sql-driver/mysql創建相關目錄 gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 創建用戶模型 package model imp…

SQL 層面行轉列

背景&#xff1a;如果對一些評論、點贊、收藏等互動數據&#xff0c;使用了按照 type 分類存儲&#xff0c;num 也是對應的。這樣如果創建一個帖子&#xff0c;那么就會出現 3 行數據&#xff08;type 不同&#xff0c;num 不同&#xff0c;對應評論點贊和收藏&#xff09;&…

langchain4j筆記篇(陽哥)

一 概述1.1 概述langchain4j&#xff1a;langchain for java1.2 作用langchain4j的目標是簡化將LLM集成到java應用程序中的過程。二 案例簡單helloworld2.1 大模型調用三件套1.阿里百煉平臺的通義模型&#xff1a; https://bailian.console.aliyun.com/2獲取api-key&#x…

有鹿機器人的365天奇幻日記:我在景區當掃地僧

第一章 古建守護者&#xff1a;2cm的極致藝術琉璃瓦下的秘密記得那是個晨霧繚繞的清晨&#xff0c;我接到首個重要任務&#xff1a;清掃明代琉璃碑亭。這里的每塊地磚都是文物&#xff0c;傳統清潔工具根本不敢靠近。每天以2cm的精準貼邊沿碑座作業&#xff0c;如今我每周都要為…

Objective-C方法參數標簽怎么設置

在Objective-C中&#xff0c;方法名稱可以通過幾個標簽名稱組成&#xff0c;這是跟C/C中完全不一樣的地方。每個標簽都是字段冒號的寫法&#xff0c;冒號后面是方法的參數&#xff0c;參數包括參數類型和參數變量&#xff0c;其中參數類型要用括號括起。方法參數的標簽是通過在…

20250910_《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》以10.1.1.31服務器的gtp-default數據庫為例

《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》 一、前提條件 數據庫 gtp-default 已設置為完整恢復模式 (FULL)。 每天凌晨02:00執行完整備份,保證日志備份可用。 SQL Server Agent 已啟用。 作業所有者為 sa,具有 sysadmin 權限。 Agent 服務賬號 NT Service\S…

實習項目包裝--HTTP 協議和 Web API

好的&#xff0c;完全沒問題&#xff01;你問到了一個非常核心且基礎的知識領域&#xff0c;這是現代Web開發和幾乎所有網絡應用的基石。我們暫別嵌入式系統&#xff0c;專門來上一堂關于 HTTP 協議和 Web API 的詳細課程。 我會從最根本的概念講起&#xff0c;逐步深入到你所…

ICCV-2025 | 中科院自動化所世界模型助力具身導航!NavMorph:連續環境中的視覺語言導航自演化世界模型

作者&#xff1a;Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3單位&#xff1a;1^{1}1中科院自動化所多模態人工智能系統國家重點實驗室&#xff0c;2^{2}2中國科學院大學人工智能學院&#xff0c;3^{3}3鵬城實驗室論文標題&#xff1a;NavM…

【ARDUINO】ESP8266的AT指令返回內容集合

一、基礎測試指令(確認模塊通信) 1. AT(測試模塊是否響應) 功能:檢測ESP8266與控制器(如Arduino)的串口通信是否正常。 返回內容: 成功:OK(無額外數據,僅確認通信正常) 失敗:無返回(可能是波特率不匹配、接線錯誤) 示例:發送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:開源免費的本地Mock服務工具,提升前后端聯調效率

你有沒有過這種經歷&#xff1f;做前端開發時&#xff0c;后端同事的接口還沒寫完&#xff0c;你這邊要調頁面數據&#xff0c;只能對著空控制臺發呆&#xff1f;要么手動寫個 JSON 文件當假數據&#xff0c;改一次數據就得重新保存文件、刷新頁面&#xff1b;要么用在線 Mock …

【Mysql|第一篇】Mysql的安裝與卸載、Navicat工具的使用

一、Mysql的安裝與卸載&#xff1a; 1、查看是否安裝過mysql&#xff1a; &#xff08;1&#xff09;cmd中輸入mysql看是否有顯式提醒 &#xff08;2&#xff09;右擊此電腦&#xff0c;選擇管理&#xff0c;在左側欄中找到服務&#xff0c;查看是否有與mysql相關的 2、卸載的…

貪心算法應用:流行病干預策略問題詳解

Java中的貪心算法應用&#xff1a;流行病干預策略問題詳解 貪心算法是一種在每一步選擇中都采取當前狀態下最優的選擇&#xff0c;從而希望導致全局最優解的算法策略。在流行病干預策略問題中&#xff0c;貪心算法可以有效地幫助我們做出資源分配決策&#xff0c;以達到最優的防…

git刪除最近一次提交包括歷史記錄。

方法一&#xff1a;刪除最近的一次提交&#xff08;最常見&#xff09; 如果你只是想撤銷最后一次提交&#xff0c;這是最簡單的方法。在本地刪除提交 使用 git reset --hard 命令&#xff0c;將你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…

前端拖拽功能實現全攻略

前端拖拽功能實現指南 設計一個拖拽組件確實需要考慮不少細節。下面我為你梳理了從核心思路、關鍵實現到注意事項的完整方案&#xff0c;并用表格對比了 Vue 和 React 的實現差異&#xff0c;希望能幫你全面掌握。 &#x1f9e0; 一、核心設計思路 一個拖拽組件的核心在于感…

ASP.NET MVC 連接 MySQL 數據庫查詢示例

為您創建一個完整的 ASP.NET MVC 應用程序&#xff0c;演示如何通過點擊按鈕連接 MySQL 數據庫并查詢數據表。 完整實現步驟 1. 首先安裝必要的 NuGet 包 在項目中安裝以下 NuGet 包&#xff1a; MySql.Data Dapper&#xff08;可選&#xff0c;用于簡化數據訪問&#xff0…

合理安排時間節點,避免影響正常生產——制造企業軟件系統上線的關鍵考量

在制造企業的發展中&#xff0c;引入新的軟件系統是提升管理效率、優化業務流程的重要舉措。然而&#xff0c;軟件系統的上線過程如果安排不當&#xff0c;很可能會對企業的正常生產造成負面影響。作為一名制造企業的行政經理&#xff0c;在軟件選型和推進使用的過程中&#xf…

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原機安卓4升級安卓7/安卓9-通刷包

【一包通刷】晶晨S905L(B)&#xff0f;S905L2(B)&#xff0f;S905L3(B)-原機安卓4升級安卓7&#xff0f;安卓9-通刷固件包線刷方法&#xff1a;1、準備好一根雙公頭USB線刷刷機線&#xff0c;長度30-50CM長度最佳&#xff0c;同時準備一臺電腦&#xff1b;2、電腦上安裝好刷機工…

Vite開發:從入門到精通

序章&#xff1a;構建之道現代前端的破局者前端發展簡史&#xff1a;從 Grunt、Gulp、Webpack 到 Vite構建工具的本質與未來為什么是 Vite&#xff1f;——新時代的構建哲學本書閱讀導覽與學習路徑第一篇 入門啟蒙識得 Vite 真面目第1章 Vite 初識什么是 Vite&#xff1f;設計理…