当前位置: 首页 > article >正文

别再折腾宝塔了!用XShell+Ubuntu从GitHub克隆到Nginx部署前端项目的保姆级避坑实录

从零构建前端部署流水线告别可视化工具的命令行实战指南第一次用宝塔面板部署前端项目时那种一键完成的畅快感确实令人着迷。但当我遇到需要定制Nginx配置、调试权限问题时黑箱操作带来的无力感让我意识到是时候回归命令行的本质了。本文将带你用XShell和Ubuntu打造一条完全透明的前端部署流水线从GitHub克隆到Nginx上线每个环节都知其所以然。1. 环境准备构建纯净的Linux工作环境选择Ubuntu作为部署系统并非偶然。作为最流行的Linux发行版之一它不仅拥有丰富的社区资源其apt包管理器的易用性也大幅降低了运维门槛。在购买云服务器时建议直接选择Ubuntu最新LTS版本避免后续因系统版本过旧导致的兼容性问题。连接服务器时XShell的会话管理功能能极大提升工作效率。这里分享几个实用技巧多会话并行通过新建会话标签页同时管理多个服务器密钥对认证在用户身份验证中选择Public Key方式更安全日志记录在日志记录选项卡开启会话日志方便回溯操作历史# 首次登录后建议立即更新系统 sudo apt update sudo apt upgrade -y提示云服务器默认用户通常是ubuntu首次登录后可通过passwd命令修改密码。如果遇到连接问题检查安全组是否开放了22端口。2. 代码获取GitHub仓库的高效管理方案HTTPS克隆虽然简单但每次推送都需要输入凭证确实影响效率。其实SSH方式配置成功后可以一劳永逸下面是具体操作# 生成SSH密钥对 ssh-keygen -t ed25519 -C your_emailexample.com # 将公钥添加到GitHub cat ~/.ssh/id_ed25519.pub将输出的公钥内容复制到GitHub的SSH Keys设置页面后即可使用SSH协议克隆仓库git clone gitgithub.com:username/repo.git对于私有仓库如果遇到权限问题可能需要调整密钥权限chmod 600 ~/.ssh/id_ed255193. 运行环境现代化Node.js环境配置Ubuntu官方源的Node.js版本往往滞后于最新稳定版。推荐使用NodeSource维护的专用源# 添加NodeSource源以18.x为例 curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - # 安装Node.js和npm sudo apt install -y nodejs # 验证安装 node -v npm -v对于需要多版本管理的场景nvm是更灵活的选择# 安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash # 使用特定版本 nvm install 16 nvm use 16项目依赖安装时常见问题及解决方案问题现象可能原因解决方法ELIFECYCLE错误依赖编译失败安装build-essential:sudo apt install build-essentialEACCES权限错误全局安装权限不足使用npm install --global时加上--unsafe-perm网络超时国内访问npm源慢切换镜像源:npm config set registry https://registry.npmmirror.com4. Nginx配置生产级前端部署策略标准的Nginx安装只需一条命令sudo apt install nginx -y但真正的挑战在于配置文件编写。以下是支持SPA路由的优化配置server { listen 80; server_name your_domain.com; root /home/ubuntu/project/dist; index index.html; location / { try_files $uri $uri/ /index.html; } # 静态资源缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 1y; add_header Cache-Control public, no-transform; } }部署后常见问题排查指南403 Forbidden检查文件权限sudo chown -R www-data:www-data /home/ubuntu/project确认Nginx用户有读取权限sudo chmod -R 755 /home/ubuntu/project404 Not Found验证root路径是否正确检查nginx -t是否有语法错误查看错误日志tail -f /var/log/nginx/error.log端口占用查找占用进程sudo lsof -i :80终止冲突进程sudo kill -9 PID5. 进阶优化提升部署体验的实用技巧自动化部署脚本可以大幅减少重复劳动。创建一个deploy.sh#!/bin/bash cd /home/ubuntu/project git pull origin main npm install npm run build sudo systemctl restart nginx然后通过chmod x deploy.sh赋予执行权限后续更新只需运行./deploy.sh即可。防火墙配置是常被忽视的一环。除了开放HTTP端口还应限制SSH访问# 查看当前规则 sudo ufw status # 基础配置 sudo ufw allow 80/tcp sudo ufw allow from your_ip to any port 22 sudo ufw enable对于需要HTTPS的场合Certbot可以免费获取Lets Encrypt证书sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your_domain.com6. 监控与维护保障服务稳定运行日志分析是排查问题的第一现场。Nginx的访问日志格式可以自定义log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent; access_log /var/log/nginx/access.log main;使用systemd管理服务时这些命令非常实用# 查看服务状态 sudo systemctl status nginx # 跟踪日志输出 sudo journalctl -u nginx -f # 设置开机启动 sudo systemctl enable nginx资源监控方面内置工具就能提供丰富信息# 实时系统监控 htop # 磁盘空间检查 df -h # 内存使用情况 free -m经过三个月的纯命令行部署实践最大的收获不是记住了多少命令而是建立了对部署流程的系统性认知。当页面加载出现异常时现在我能快速定位是网络问题、权限配置还是代码本身缺陷。这种掌控感是任何可视化工具都无法替代的。

相关文章:

别再折腾宝塔了!用XShell+Ubuntu从GitHub克隆到Nginx部署前端项目的保姆级避坑实录

从零构建前端部署流水线:告别可视化工具的命令行实战指南 第一次用宝塔面板部署前端项目时,那种"一键完成"的畅快感确实令人着迷。但当我遇到需要定制Nginx配置、调试权限问题时,黑箱操作带来的无力感让我意识到:是时候…...

从Word迁移到LaTeX:如何像处理Word一样轻松管理你的图片、表格和公式?

从Word到LaTeX的无缝迁移:图片、表格与公式的高效管理指南 第一次接触LaTeX的Word用户往往会感到手足无措——那些熟悉的拖拽操作和可视化工具突然变成了需要记忆的代码命令。但别担心,LaTeX的代码化操作实际上提供了一种更精确、更自动化的文档控制方式…...

波士顿咨询:中国无人驾驶出租车上路——迈向规模化商业化 2026

这份 2026 年 4 月波士顿咨询(BCG)报告核心结论:中国 L4 级无人驾驶出租车(Robotaxi)已进入规模化商业化前夜,消费者接受度极高、技术成熟可用、市场潜力巨大,行业进入明确拐点。一、消费者端&a…...

告别if-else混乱:用行为树重构你的ROS2机器人决策逻辑(以Nav2恢复机制为例)

告别if-else混乱:用行为树重构你的ROS2机器人决策逻辑(以Nav2恢复机制为例) 在开发自主移动机器人时,最令人头疼的莫过于处理各种异常情况和恢复逻辑。当机器人遇到规划失败、传感器异常或环境突变时,传统的if-else嵌套…...

Gemini3.1Pro助你高效完成竞品分析

竞品分析最折磨人的地方在于:它不是“写一段文字”就结束,而是要把一堆零散材料变成可决策的对比结论。很多团队卡在同一个死循环:资料收集不了就凑合、收集到了又来不及整理、整理成表又发现口径不统一,最后评审时大家仍在争“到…...

避坑指南:用Open-GroundingDino训练自定义数据集,我踩过的那些环境与数据格式的坑

Open-GroundingDino实战:从数据集构建到模型训练的全流程避坑指南 当你第一次尝试用Open-GroundingDino训练自定义数据集时,可能会被各种环境配置、数据格式转换的问题搞得焦头烂额。作为一个在计算机视觉领域摸爬滚打多年的从业者,我最近刚完…...

对话系统优化实战:从数据清洗到意图识别的全流程解析

1. 项目背景与核心价值去年接手公司对话系统优化项目时,我发现现有用户对话数据的利用率不足30%。这些躺在数据库里的文本数据,实际上藏着用户行为模式的密码。通过三个月的实战,我们构建的对话分析体系将客服响应效率提升了47%,今…...

设计师如何用Gemini3.1Pro写专业交接文档

很多团队里,“设计师要不要写交接文档”这件事常常被误解成:我写得越多越像乙方,写得少就更灵活、更有主见。可现实是:研发、测试、运营拿不到清晰口径时,往往不是因为设计师不够努力,而是因为交接信息不够…...

从STM32F405到AT32F435:手把手教你升级Aocoda-RC F405V2飞控的硬件兼容性

从STM32F405到AT32F435:Aocoda-RC F405V2飞控硬件升级实战手册 当你手里那块Aocoda-RC F405V2飞控已经服役多年,而AT32F435RGT7芯片的4MB Flash和性能优势又实在诱人时,硬件升级就成了发烧友的必经之路。但别急着拿起烙铁——从引脚兼容性检…...

对比直接使用原厂 API 体验 Taotoken 聚合调用的便捷与灵活

体验 Taotoken 聚合调用的统一接入与管理优势 1. 多模型调用的统一入口 在传统开发流程中,接入不同厂商的大模型 API 需要分别申请账号、管理多个密钥,并针对每家厂商的协议差异进行适配。通过 Taotoken 平台,开发者只需使用一个 API Key 即…...

STM32F4驱动步进电机,用CubeMX配置主从定时器模式(TB6600/DRV8825通用)

STM32F4主从定时器驱动步进电机全流程实战(基于CubeMXHAL库) 第一次接触步进电机控制时,我被那些复杂的脉冲时序和寄存器配置搞得晕头转向。直到发现STM32CubeMX这个神器,配合HAL库的使用,才真正体会到嵌入式开发的效率…...

从索尼摄像机到海康威视NVR:一文讲透VISCA协议在安防监控系统中的实战集成

从索尼摄像机到海康威视NVR:VISCA协议在安防监控系统中的实战集成 在大型园区、交通枢纽等复杂场景的安防监控系统中,工程师们经常面临一个典型挑战:如何将不同品牌的PTZ摄像机与主流NVR设备无缝集成。特别是当系统需要整合索尼、松下等支持V…...

超越木甲:为饥荒联机版Mod衣服添加护甲、移速等实用属性(附完整代码)

饥荒联机版Mod进阶:打造多功能服装系统的设计哲学与实现 在《饥荒联机版》的Mod开发领域,服装类物品往往被简单地视为外观装饰。但当我们深入游戏机制底层,会发现服装系统实际上是一个未被充分开发的玩法金矿。本文将带您突破传统思维&#x…...

虚拟机网络模式笔记

虚拟机网络模式模式核心特点外网访问能力与主机通信能力典型应用场景桥接模式虚拟机与主机共享物理网卡获取同网段 IP可直接访问外网同一网路可双向通信需对外提供服务时用如搭建Web 服务器、与其他设备互相访问等等NAT 模式虚拟机用私有 IP流量经主机 NAT 转发可访问外网(依赖…...

避坑指南:RobotStudio中ABB机器人Socket通讯的3个常见错误与排查方法(IP/端口/绑定)

避坑指南:RobotStudio中ABB机器人Socket通讯的3个常见错误与排查方法(IP/端口/绑定) 在工业自动化领域,ABB机器人之间的Socket通讯是实现设备协同的重要技术手段。然而,即使对于经验丰富的工程师,在实际部署…...

初创团队在虚拟服务器上通过Taotoken低成本使用多模型能力

初创团队在虚拟服务器上通过Taotoken低成本使用多模型能力 1. 虚拟化环境中的AI能力集成挑战 初创团队在云虚拟机部署服务时,常面临AI能力接入的三大核心矛盾:模型选型灵活性需求与基础设施投入的矛盾、业务模块多样化与API管理复杂度的矛盾、研发阶段…...

无人机/机器人工程师必看:四元数姿态控制中,误差四元数到底该怎么算?

无人机与机器人姿态控制中的四元数误差计算实战指南 在无人机飞控系统和机器人运动控制领域,四元数因其计算效率和避免万向节锁等优势,已成为描述三维姿态的主流数学工具。然而,当工程师们真正开始实现基于四元数的姿态控制器时,往…...

科研绘图救星:5分钟用Mathematica画出能发论文的3D图与动态图(Plot3D/ListAnimate详解)

科研绘图救星:5分钟用Mathematica画出能发论文的3D图与动态图 第一次投稿被期刊编辑退回时,审稿意见里那句"Figures lack professional polish"让我记忆犹新。作为计算化学领域的博士生,我花了三周时间跑模拟数据,却在最…...

医疗影像数据跨院共享总出事?(MCP 2026新增“DICOM元数据级加密”强制条款深度拆解):基于国密SM4的轻量级边缘加解密实践

更多请点击: https://intelliparadigm.com 第一章:MCP 2026医疗数据安全防护方法总览 MCP 2026(Medical Confidentiality Protocol 2026)是一套面向新一代医疗信息系统的端到端数据安全框架,专为符合《中华人民共和国…...

英雄联盟玩家必备的5大效率神器:LeagueAkari本地化工具箱完全指南

英雄联盟玩家必备的5大效率神器:LeagueAkari本地化工具箱完全指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一…...

网路安全编程——使用Scapy简单实现数据包嗅探主流邮箱协议(SMTP、POP3和IMAP)

今天我们将编写一个非常简单的嗅探器来捕捉主流邮箱协议(SMTP、POP3和IMAP)的身份凭证。 之后,用这个嗅探器配合基于ARP投毒的中间人(MITM)攻击,我们就能窃取网络中其他设备的身份凭证。本文探讨基于Python…...

MySQL如何防止内部员工越权查看数据_实施严格的日志审计策略

开启MySQL通用查询日志会拖慢系统,仅在高并发写日志时明显;因其逐条记录所有语句并产生I/O压力,生产环境应禁用,改用精准审计方案。MySQL开启通用查询日志会拖慢系统吗会,但只在高并发写日志场景下明显。通用查询日志&…...

28_《智能体微服务架构企业级实战教程》Redis FastMCP服务之操作工具封装

前言 配套视频教程: 👉《智能体微服务架构企业级实战教程》共72节 更多文章专栏内容: 👉《智能体微服务架构企业级实战教程》专栏 本文为Redis FastMCP服务实现了旅行计划的存储工具。在tools/storage.py中定义了三个异步函数:storage_save_travel_plan通过redis_cli…...

FFXIVChnTextPatch:国际服客户端中文资源注入技术解析

FFXIVChnTextPatch:国际服客户端中文资源注入技术解析 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch FFXIVChnTextPatch 是一款专门为《最终幻想XIV》国际服设计的客户端本地化工具,通过智…...

26山大软院创新实训--MarketClaw(四)

本周将迎来项目的中期检查,我选择做一下内容比较简单的ppt自动生成skill,作为我的第四篇博客。一、开发初衷当完成小红书图文生成以及自动化发布后,我们准备的产品就展示给公众了。当有客户希望与我们交流合作时,PPT是必不可少的&…...

通俗数学7-质子三夸克的算法

我们身边的物质,大部分的质量来自原子,原子中质子和中子又是最高,其中质子又是最稳的。今天我叕激动着发现了它在我模型下的密码,随我来一究竟。 这时的电子已经接近且到达了能量无限聚集的界限。在其成为点粒子的时候&#xff0…...

MCP 2026医疗数据防护落地指南:5步完成等保2.0+GB/T 39725双标适配,附卫健委备案自查清单

更多请点击: https://intelliparadigm.com 第一章:MCP 2026医疗数据安全防护方法论全景图 MCP 2026(Medical Confidentiality Protocol 2026)是一套面向多源异构医疗数据环境设计的动态协同防护框架,融合零信任架构、…...

深度探索DIY Layout Creator:开源电路设计工具的设计哲学与创作实践

深度探索DIY Layout Creator:开源电路设计工具的设计哲学与创作实践 【免费下载链接】diy-layout-creator multi platform circuit layout and schematic drawing tool 项目地址: https://gitcode.com/gh_mirrors/di/diy-layout-creator 在电子设计领域&…...

3D场景生成中的遮挡感知与布局优化技术

1. 项目概述:当3D场景学会"看穿"遮挡物在3D内容生成领域,我们常常遇到这样的困境:当需要生成复杂室内场景时,传统模型会因家具间的相互遮挡而出现布局混乱——沙发可能半嵌在墙里,餐桌上的花瓶悬浮在半空。这…...

别再只会用OpenCV了!用Qt的QImage实现图片加载、缩放、滤镜(附完整代码)

别再只会用OpenCV了!用Qt的QImage实现图片加载、缩放、滤镜(附完整代码) 在C桌面应用开发中,图像处理是绕不开的刚需功能。很多开发者第一反应就是引入OpenCV这样的专业库,但对于简单的图片展示、基础编辑功能来说&…...