【服务器】将本地项目部署到服务器

当我们已经有了一个服务器后 如何将本地项目部署到服务器呢

第一步,找到云服务器实例,查看公网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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;设计理…