从零到一部署网站(一)

前言

        对于许多前端初学者以及职场新人来说,从零到一部署网站是一项艰巨的任务。本文将详细介绍如何在云服务器下从零到一部署网站,让每位开发者都能轻松拥有自己的网站。此外,对于过于依赖前辈完成部署工作的开发者,本文也将提供必要的知识和工作,以便在面对新的部署需求时,能够独立应对。

        源码地址:https://github.com/baburwang/web-deploy-demo.git

项目准备

        为了启动我们的网站部署流程,我们首先需要准备一个项目——这将是我们要部署的网站。在本教程中,我们将使用 Vue.js 的最新版本来快速搭建一个全新的项目。

npm create vue@latest

image.png

        在项目创建完成后,下一步是在本地环境中运行该项目,以便我们可以在浏览器中预览和测试我们的应用。通过执行以下命令来启动开发服务器:

cd vue-demo
npm install
npm run dev

image.png

image.png

        当在浏览器中看到网页内容正常显示时,这意味着项目已经在本地环境中成功运行。现在,我们已经准备好将构建好的网站内容部署到云服务器上,以便它可以在互联网上被访问。

image.png

        dist 目录中包含了准备部署的所有静态文件。

环境准备

云服务器

        首先在腾讯云购买一台云服务器,选择基于操作系统镜像的方式创建。这样创建的好处是没有预装任何软件,我们手动去安装相关软件,可以更加深刻理解网站部署流程。

image.png

image.png

下载依赖

        使用 Nginx 和 Node.js 服务是两种常见的网站部署方式。Nginx 是一个高性能的 HTTP 和反向代理服务器,通常用于静态内容的部署和代理动态请求到 Node.js 应用程序。Node.js 则是一个服务器端 JavaScript 运行环境,适合运行基于 JavaScript 的应用程序。

Nginx

sudo yum install nginx

        在安装好 Nginx 之后,我们可以尝试启动它以确保服务正常工作。

# 启动 nginx
sudo systemctl start nginx

# 查看 nginx 状态
sudo systemctl status nginx

image.png

        当 Nginx 状态显示为 “active” 时,这表明 Nginx 服务已经成功启动并正在运行。此时,你可以通过实例的公网 IP 地址来访问 Nginx。

        默认情况下,Nginx 会监听 80 端口(HTTP)和 443 端口(HTTPS,如果已配置 SSL 证书)。

image.png

        至此,我们成功完成了 Nginx 的安装并验证了 Nginx 运行正常。

Node

        由于我们还打算使用 Node.js 来托管网站,那么需要在服务器上安装 Node.js 环境。

wget https://nodejs.org/download/release/v16.20.2/node-v16.20.2-linux-x64.tar.gz

tar -xvf node-v16.20.2-linux-x64.tar.gz

        接着建立软链接,以便我们可以直接通过对应的命令运行 node,而无需使用绝对路径:

sudo ln -s /home/lighthouse/node-v16.20.2-linux-x64/bin/node /usr/local/bin/node

sudo ln -s /home/lighthouse/node-v16.20.2-linux-x64/bin/npm /usr/local/bin/npm

        我们可以通过运行如下命令,查看 Node 环境是否正常:

node -v

npm -v

image.png

        npm 默认的镜像源在国外,由于网络原因下载依赖会很慢,我们还需要将镜像源设为腾讯云镜像源。

npm config set registry https://mirrors.cloud.tencent.com/npm/

image.png

网站部署

        在安装好 Nginx 和 Node.js 之后,下一步是将网站静态资源 dist 目录上传到云服务器。点击腾讯云终端访问上的图标即可完成上传。

image.png

Nginx

        Nginx 的配置文件位置为 /etc/nginx/nginx.conf ,我们需要修改该配置文件将托管的目录变为 dist 的目录。

sudo vim /etc/nginx/nginx.conf

        修改的地方分为两处:

1、user nginx; 替换为 user root;

2、将 root /usr/share/nginx/html; 替换为 root /home/lighthouse/dist;

        /home/lighthouse/dist 为构建文件的目录。

        修改好后,记得运行 sudo nginx -t 检查配置是否存在错误:

image.png

        如果不存在错误的话,接着运行如下命令重新加载 Nginx,以便配置生效。

sudo systemctl reload nginx

        至此,我们便可以实现了在云服务器中使用 Nginx 部署网站,可以直接访问到我们的网站了。

image.png

node

        启动一个 Node.js 服务进程来托管网站是一种常见且灵活的方式。

        首先,我们云服务器中启动一个 Node Web 进程:

mkdir server

cd server

npm init -y

npm install express

vim app.js

        app.js 的内容如下,我们使用 express 启动一个 Web 服务器并托管静态资源:

const express = require('express');

const path = require('path');

const app = express();

app.use(express.static('/home/lighthouse/dist'));

app.listen(81, () => {

  console.log(`Server is start`);

});

image.png

        由于 80 端口被 Nginx 占用,这里我们选择 81 端口。绝大多数云服务器都配置了防火墙,我们还需要开放 81 端口,允许被外网访问。

image.png

        开放好 81 端口,我们便可以访问到网站了。

image.png

        还有一个问题,就是当我们关闭终端时,Web 服务会停止,网站便无法访问了,这里我们可以选择通过后台运行的方式启动。

sudo nohup node server/app.js &

最终版本

        为什么说 Node 部署网站是一个更好的选择,这样的方式用户访问网站时,会先进入 Web 服务进程中,我们可以在该进程中做许多自定义操作,如日志记录、异常拦截等。

        在实际项目中,Web 服务进程通常与特定的网站或应用程序紧密绑定。这意味着 Web 服务进程的代码通常与网站的其他代码一起存储在同一个代码库中,并且针对该网站的需求进行定制。

        我们在项目根目录下创建一个用于启动 Web 服务器的模块,如下所示:

image.png

        同时,我们需要在 server/packge.json 中指定 Web 服务器的启动命令

image.png

        由于在 app.js 中,我们指定的静态资源文件为 path.resolve(__dirname, 'dist') 也就是说我们需要将打包好的静态资源放在和 app.js 同级目录下,在 vite.config.js 文件中指定输出目录。

image.png

        为了简化部署、启动流程,单独准备了个脚本,只需 clone 下项目后,运行该脚步即可完成网站部署(云服务器中需要准备好 Node 环境)。

image.png

sudo yum install git

git clone https://github.com/baburwang/web-deploy-demo.git
cd web-deploy-demo

sh deploy.sh

image.png

总结

        在上述内容中,我们分别介绍了如何在 Nginx 以及 Node 环境下部署网站,但我们距离最终完成还差一部分工作。我们还需要完成域名绑定、后端接口交互,这部分内容将在下一篇文章中介绍。

        如果你对于以上内容存在困惑,请在评论区留言。

  • 32
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值