网站部署简明教程

准备工作

部署网站前,你需要准备一台云服务器,一个域名,一份网站源代码。本文中,我将以一台阿里云 ECS 云服务器为例,部署 Next.js 应用。

连接服务器

想要部署应用,首先要在本地连接服务器,以便后续进行一系列的配置。第一步,打开 Terminal 终端或是 Iterm2 等其他终端工具,通过 ssh 命令远程连接服务器:

# root 为默认用户名,115.29.203.203 替换为你的服务器公网IP
ssh root@115.29.203.203

输入购买服务器时设置的登录密码,见到类似以下的欢迎信息,代表已经成功连接上了服务器:


......
Welcome to Alibaba Cloud Elastic Compute Service !

Last login: Fri May 30 15:51:53 2025 from 114.242.59.35
......

配置 SSH 快捷访问

为避免以后每次连接服务器都手动输入服务器 ip,可以添加 ssh 配置文件简化操作。先执行 exit 退出服务器连接:

exit

随后在本机 ~/.ssh/config 文件中添加配置:

host myserver
    HostName 115.29.203.203
    User root

之后每次输入 ssh myserver 即可连接服务器。

服务器环境配置

安装 Node.js

首先更新一下包管理器以确保安装的是最新版本的软件包:

sudo apt update  # 对于基于 Debian 的系统,如 Ubuntu

我选择通过 nvm(Node Version Manager)安装 Node.js,便于后续版本管理:

  1. 使用 Git 克隆 nvm 源码到服务器

    git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
    
  2. 配置 NVM 环境变量

    echo ". ~/.nvm/nvm.sh" >> /etc/profile
    source /etc/profile
    
  3. 设置 npm 镜像源为阿里云镜像

    export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
    
  4. 查看可用的 Node.js 版本

    nvm list-remote
    
  5. 安装 LTS 版本

    nvm install v22.15.0
    
  6. 验证安装

    node -v
    

    如果成功打印出 Node.js 版本号,则安装成功。

安装 PM2

PM2 是一个流行的 Node.js 应用进程管理器,可以帮助我们在生产环境中部署、监控和管理应用。

npm install pm2@latest -g

部署应用

上传应用代码

将代码上传至服务器有多种方式,为求简单,这里我们采用在服务器上使用 Git 拉取代码的方式:

# 创建网站目录
mkdir -p /var/www
cd /var/www/

# 克隆项目代码,username 替换为你的 GitHub 用户名,repo 替换为你的仓库名
git clone https://github.com/username/repo.git

使用 https 方式克隆 GitHub 仓库时,可能需要使用 Personal Access Token 作为密码。前往 GitHub 设置页 > Developer settings > Personal access tokens > Tokens(classic) > Generate new token(classic) 即可创建。

构建与运行

拉取完代码后,进入项目目录安装依赖并构建应用:

cd /var/www/repo
pnpm install
pnpm build

到这一步就可以正式启动应用了。由于我的网站采用 Next.js 框架,并且在 package.json 中配置了

{
  "scripts": {
    "serve": "next start"
  }
}

所以只需要执行:

pnpm serve

就可以运行项目了。现在采用 PM2 启动应用:

# pnpm 可以换成 npm 或 yarn
pm2 start pnpm --name "mywebsite" -- serve

这一行命令会自动将 pnpm serve 作为启动命令,并将应用命名为 mywebsite。你可以将 name 替换为你的项目名称,将 serve 替换为你的启动命令。

检查端口监听状态确定项目是否成功运行:

ss -tuln

现在就可以通过服务器 IP 和端口访问应用了:

# 替换为你的服务器 IP 和运行端口
http://115.29.203.203:3000

如果网站无法正常访问,可能需要配置安全组规则,允许对 3000 端口的访问。具体可以参考这篇文章进行问题排查。

域名配置与 Nginx 反向代理

现在就可以开始给网站配置域名了,避免每次通过 IP 访问。

域名解析

前往域名控制台,给域名添加一条 A 类型的解析记录,将值设为服务器的公网 IP 地址,如图所示:

dns解析

设置完成后,就可以通过域名访问网站了:

# 替换为你的域名和端口
http://jmxr.fun:3000

不过这样访问网站时,URL 中会包含端口号,不太美观,输入起来也比较麻烦。因此,接下来我们使用 Nginx 进行反向代理,让用户可以通过 80 端口访问网站。

安装配置 Nginx

为了让用户可以通过正常的 80 端口访问网站,我们需要使用 Nginx 进行反向代理:

  1. 安装 Nginx

    sudo apt update
    sudo apt install nginx
    
  2. 验证 Nginx 状态

    sudo systemctl status nginx
    
  3. 创建网站配置文件

    /etc/nginx/sites-available/ 下新建 mywebsite 文件,加入以下配置:

    server {
        listen 80;
        listen [::]:80;
    
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
    
        # 填写域名或IP地址
        server_name jmxr.fun;
    
        location / {
            proxy_pass http://127.0.0.1:3000/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
    

    这个配置文件的作用是:监听 80 端口,将请求转发到 127.0.0.1:3000 端口,并设置一些请求头。

  4. 创建符号链接

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/
    sudo nginx -t
    

    这个命令的作用是创建一个符号链接,将 mywebsite 文件链接到 /etc/nginx/sites-enabled 目录下,并检查 Nginx 配置是否正确。

  5. 重启 Nginx

    sudo nginx -s reload
    

完成后,若以上步骤没有问题,即可通过 http://jmxr.fun 直接访问网站。

备案

有可能当你访问网站时,会看到类似以下的提示:

备案

你需要对你的网站进行备案,具体流程可以找教程或咨询你的域名提供商。

最后

至此,一个简单的网站就部署完成了。后续还可以配置使用 HTTPS 证书,提升网站的安全性。