1. 环境准备

    物理环境:win11专业版/Ubuntu-24.04.2

    安装 Node.js(推荐 v20+)和 pnpm(包管理器)。

    克隆项目代码:

    git clone https://github.com/CorentinTh/it-tools.git

    cd it-tools

    或者直接从GitHub下载源码

  2. 安装依赖

    pnpm install

方法 1:使用官方安装脚本(推荐)

这是 pnpm 官方推荐的安装方式,适用于大多数 Linux 系统:

首先确保系统安装了curl(如果没有可以先安装):

sudo apt update && sudo apt install -y curl

运行 pnpm 官方安装脚本:

curl -fsSL https://get.pnpm.io/install.sh | sh -

安装完成后,需要让系统识别 pnpm 命令,执行以下命令刷新环境变量:

source ~/.bashrc # 如果你用的是bash

# 或者如果是zsh:

# source ~/.zshrc

方法 2:通过 npm 安装(如果已安装 npm)

如果你已经安装了 npm(Node.js 的包管理器),也可以通过 npm 安装 pnpm:

先安装 npm(如果未安装):

sudo apt update && sudo apt install -y npm

用 npm 全局安装 pnpm:

sudo npm install -g pnpm

验证安装

安装完成后,运行以下命令确认 pnpm 已正确安装:

pnpm --version

如果输出版本号,说明安装成功,之后就可以正常运行pnpm install命令了。

  1. 构建生产版本

    pnpm build

  1. 部署静态文件

步骤1.安装 Nginx(若未安装)

根据系统类型执行命令:

Ubuntu/Debian:

sudo apt update && sudo apt install nginx

CentOS/RHEL:

sudo yum install epel-release # CentOS需先装EPEL源

sudo yum install nginx

安装后启动服务并设为开机自启:

sudo systemctl start nginx

sudo systemctl enable nginx

步骤2.复制 dist 目录到 Nginx 站点目录

确定 Nginx 站点根目录:

Nginx 默认站点目录为:

Ubuntu/Debian:/var/www/html

CentOS/RHEL:/usr/share/nginx/html

也可通过查看 Nginx 配置文件(如 /etc/nginx/sites-available/default)确认 root 字段。

创建项目部署目录(以部署到 /var/www/html/it-tools 为例):

sudo mkdir -p /var/www/html/it-tools

复制 dist 文件:

假设你的 dist 目录在项目根目录(如 ~/it-tools/dist),执行:

sudo cp -r ~/it-tools/dist/* /var/www/html/it-tools/

小tips:从GitHub直接下载项目源码时目录名是it-tools-main,建议重命名为it-tools,方便跟随步骤操作

步骤3.配置 Nginx 站点规则

创建 Nginx 配置文件:

sudo nano /etc/nginx/conf.d/it-tools.conf

写入基础配置(适配单页应用路由,避免刷新 404):

点击查看代码
server {
listen 80; # 监听80端口(HTTP)
server_name localhost; # 改为你的域名/IP,如 example.com 或 192.168.1.100 root /var/www/html/it-tools; # 指向部署目录
index index.html; # 处理单页应用路由(必配!否则刷新页面会404)
location / {
try_files $uri $uri/ /index.html;
} # 可选:优化静态文件缓存(如JS/CSS/图片)
location /static/ {
expires 30d; # 缓存30天
add_header Cache-Control "public";
}
}

代码中的`server_name`:若需通过域名访问,需替换为实际域名(需提前解析到服务器 IP);若仅本地测试,保持 localhost 即可。

步骤4.验证配置并重启 Nginx

检查配置语法:

sudo nginx -t

若输出 nginx: configuration file /etc/nginx/nginx.conf test is successful,则配置无误。

重启 Nginx 生效:

sudo systemctl restart nginx

步骤5.测试访问

打开浏览器,访问:

若 server_name 为 localhost:http://localhost

若为服务器 IP(如 192.168.1.100):http://192.168.1.100

若为域名:http://your-domain.com

若页面正常加载、跳转和刷新无 404,则部署成功。

end.常见问题处理

页面空白或资源加载失败:

检查 dist 目录是否正确复制(文件是否完整,权限是否为 Nginx 运行用户可读取)。

Nginx 运行用户:Ubuntu 是 www-data,CentOS 是 nginx。修复权限:

sudo chown -R www-data:www-data /var/www/html/it-tools # Ubuntu

sudo chown -R nginx:nginx /var/www/html/it-tools # CentOS

CentOS 下访问被拒绝(SELinux 限制):

执行以下命令开放权限:

sudo setsebool -P httpd_can_network_connect on # 允许网络访问

sudo chcon -Rv --type=httpd_sys_content_t /var/www/html/it-tools # 设置SELinux上下文

防火墙拦截端口:

开放 80 端口(HTTP):

ufw(Ubuntu):sudo ufw allow 80

firewalld(CentOS):sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload

如需 HTTPS 部署(更安全),可额外配置 Let's Encrypt 证书(通过 certbot 工具),流程可参考https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal

如果访问网站是 Nginx 默认欢迎页,说明 项目静态文件未正确部署

先检查部署目录文件:

ls /var/www/html/it-tools # 确认有index.html等dist文件

若无需重新部署

修复权限(若文件存在但无法访问):

sudo chown -R www-data:www-data /var/www/html/it-tools # Ubuntu/Debian

# sudo chown -R nginx:nginx /var/www/html/it-tools # CentOS/RHEL

执行完上述代码后,按以下顺序排查:

  1. 检查 Nginx 配置优先级

查看已启用的站点(若存在default链接,会覆盖新配置)

ls /etc/nginx/sites-enabled/

若有 default,删除它:(默认是有的)

sudo rm /etc/nginx/sites-enabled/default

2. 确认部署目录文件

ls /var/www/html/it-tools # 必须包含 index.html 等 dist 构建文件

3. 重启 + 强制刷新浏览器

sudo nginx -t && sudo systemctl restart nginx

浏览器按 Ctrl+F5 强制刷新,或换浏览器访问。

若仍无效,补充执行:

查看 Nginx 实际加载的配置(确认 it-tools.conf 已生效)

sudo nginx -T | grep -i it-tools

成功部署页面如下

如有其他问题请在评论区留言

GitHub开源项目:IT-Tools源码构建部署及其部署排错的更多相关文章

  1. 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)

    转自:http://blog.csdn.net/kuerjinjin/article/details/23563059 从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用w ...

  2. Android开源项目 Universal imageloader 源码研究之Lru算法

    https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...

  3. Android开源项目 Universal imageloader 源码研究之项目框架

    Universal imageloader 的代码并不复杂 重点是缓存,线程池任务 下面都用UML图进行了绘制 基本使用流程就是 初始化配置,设置Options参数,最后Dispaly提交下载 pub ...

  4. java开源即时通讯软件服务端openfire源码构建

    java开源即时通讯软件服务端openfire源码构建 本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件: 编译环境搭建 调试 ...

  5. 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)

    标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...

  6. 从源码构建docker-ce

    准备环境 准备一台Linux主机,并在上面安装好docker-ce,安装好make,git就可以开始编译工作了.对,就是如此简单,可能你会对此感到异或为啥要装docker,我不是准备编译这个玩意么,为 ...

  7. [Android开源项目] GitHub开源项目总结 (转)

    [Android开源项目] GitHub开源项目总结 GitHub开源项目android-styled-dialogs http://neast.cn/forum.php?mod=viewthread ...

  8. 如何参与一个 GitHub 开源项目?

    最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无 人不知,越来越多的个人和公司纷纷加入到Github的大家族里 ...

  9. 如何参与一个GitHub开源项目

    Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Git ...

  10. Flink源码分析 - 源码构建

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...

随机推荐

  1. ASP.NET Core EFCore 属性配置与DbContext 详解

    本文将深入探讨 ASP.NET Core 中 EFCore 的实体属性配置方法及 DbContext 的核心用法,帮助开发者高效管理数据模型与数据库交互. 一.属性配置 实体属性配置是定义模型与数据库 ...

  2. Django踩坑之ExtendsNode: extends 'base/base.html'> must be the first tag in the template.

    模板继承报错: extends 'base/base.html'> must be the first tag in the template base.html如下: <!-- {% l ...

  3. Hystrix 服务的隔离策略对比,信号量与线程池隔离的差异

    支持的隔离策略 Hystrix支持的 hytrix支持线程池隔离和信号量隔离 信号量的隔离: it executes on the calling thread and concurrent requ ...

  4. 装在U盘或移动固态硬盘里的系统——适用于Ventoy和VirtualBox的Win to go 和 Linux to go 系统制作教程

    写在前面 前段时间, 突然想起了大学期间折腾过的双系统, 又恰逢最近学习工作需要用到Linux系统环境, 用虚拟机又感觉性能跟不上, 因此萌生了一个用移动固态硬盘安装双系统的想法. 照着网络上各位老师 ...

  5. 运维排查 | SaltStack 远程命令执行中文乱码问题

    哈喽大家好,我是咸鱼. 问题 我在一台服务器上写了一个简单的 Python 脚本 haha.py,内容如下: [root@localhost ~]# cat haha.py print("你 ...

  6. 如何理解MVC后面的设计和思想 分层,解耦

    分层 解耦 代码复用 将复杂问题拆解为一个个小问题

  7. AI大模型应用开发入门-LangChain实现文档总结

    一.整体思路 长网页文本往往超过 LLM 单次处理的 token 限制,我们需要设计一个 map-reduce 流水线来拆分.局部总结.归并: 加载网页内容 拆分成可控大小的 chunk 对每个 ch ...

  8. C# 不写模型定义一个函数类 (类似匿名函数)

    可能有点词不达意,我是这样理解的,如果有不对,请大家指点一二.通过查资料发现这个只有在C# 7.0 中才有的,慎用 在使用前需要引用 System.ValueTuple (bool state, st ...

  9. vite vue3 全局批量注册组件

    方式1-使用import.meta.glob 同webpack的 require.context一样,这个是vite提供的一个方法 import { createApp, defineAsyncCom ...

  10. java 套接字

    简介 RT code package com.kuang; import java.io.ByteArrayOutputStream; import java.io.IOException; impo ...