从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)

从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CI/CD)
目录
  1. 项目初始化:构建一个简单的 Node.js 应用
  2. 设置 Docker 环境:容器化你的应用
  3. 配置 CI/CD:自动化构建与部署
  4. 上线前的最后检查:确保项目可以无缝部署
  5. 常见问题与排查技巧

1. 项目初始化:构建一个简单的 Node.js 应用

首先,我们从构建一个简单的 Node.js 项目开始,确保你的开发环境已经安装了 Node.js 和 npm。

1.1 初始化项目

打开终端,创建一个新目录并初始化 Node.js 项目:

复制代码
mkdir my-node-app
cd my-node-app
npm init -y

这会在当前目录下创建一个 package.json 文件。

1.2 安装必要依赖

安装 Express,作为我们的 Web 框架。

复制代码
npm install express
1.3 创建基础应用

在项目根目录下创建一个 index.js 文件,简单实现一个 API 端口:

复制代码
// index.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
1.4 本地启动

通过以下命令启动本地开发服务器:

复制代码
node index.js

访问 http://localhost:3000,你应该能看到 "Hello, World!"。


2. 设置 Docker 环境:容器化你的应用

Docker 是一种非常流行的容器化工具,它允许你将应用及其所有依赖打包到一个可移植的容器中,确保无论在什么环境下都能一致地运行。

2.1 创建 Dockerfile

在项目根目录下创建一个 Dockerfile,用来构建 Docker 镜像。

复制代码
# 使用官方 Node.js 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 并安装依赖
COPY package*.json ./
RUN npm install

# 复制项目文件
COPY . .

# 设置环境变量
ENV PORT 3000

# 暴露端口
EXPOSE 3000

# 启动应用
CMD ["node", "index.js"]
2.2 构建 Docker 镜像

构建镜像并给它命名为 my-node-app

复制代码
docker build -t my-node-app .
2.3 运行 Docker 容器

运行镜像并映射到本地的 3000 端口:

复制代码
docker run -p 3000:3000 my-node-app

这时,你的应用就已经在 Docker 容器中运行了,通过访问 http://localhost:3000,你依然可以看到 "Hello, World!"。


3. 配置 CI/CD:自动化构建与部署

CI/CD(持续集成/持续部署)是现代软件开发流程中的核心组成部分,可以帮助你自动化构建、测试和部署过程。我们使用 GitHub Actions 来实现这一流程。

3.1 创建 GitHub 仓库

首先,将代码推送到 GitHub 上,创建一个新的仓库并将代码推送上去。

复制代码
git init
git add .
git commit -m "Initial commit"
git remote add origin <your-repo-url>
git push -u origin master
3.2 配置 GitHub Actions

在项目根目录下创建 .github/workflows 目录,并在该目录下创建一个 ci-cd.yml 文件:

复制代码
name: CI/CD Pipeline

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Docker
        uses: docker/setup-buildx-action@v2

      - name: Build Docker image
        run: |
          docker build -t my-node-app .

      - name: Run Docker container
        run: |
          docker run -d -p 3000:3000 my-node-app
          
      - name: Test application
        run: |
          curl http://localhost:3000
3.3 自动化流程说明
  • actions/checkout@v2:用于检查代码库。
  • docker/setup-buildx-action@v2:配置 Docker 构建工具。
  • docker build:构建 Docker 镜像。
  • docker run:启动 Docker 容器并映射端口。
  • curl http://localhost:3000 :通过 curl 测试应用是否正常运行。
3.4 提交并推送

将 GitHub Actions 配置文件提交并推送:

复制代码
git add .github/workflows/ci-cd.yml
git commit -m "Add CI/CD pipeline"
git push origin master

每次推送到 master 分支时,GitHub Actions 会自动触发该工作流,构建并部署应用。


4. 上线前的最后检查:确保项目可以无缝部署

在上线之前,确保进行以下操作:

  • 本地测试:确保 Docker 容器能够正确运行,并且 API 可访问。
  • 测试 CI/CD 流程:手动推送代码到 GitHub,查看自动化流程是否正常执行。
  • 检查日志:确保所有的日志都记录了详细的错误信息和运行状态,方便日后调试。

5. 常见问题与排查技巧
5.1 Docker 容器启动失败
  • 错误信息Error: Cannot find module 'express'
  • 解决方案:确保在 Dockerfile 中安装了依赖,并且正确复制了项目文件。
5.2 GitHub Actions 构建失败
  • 错误信息docker: buildx is not installed
  • 解决方案:检查 GitHub Actions 配置文件中的 Docker 设置是否正确,确保使用了正确的构建工具。
5.3 端口冲突
  • 错误信息Error: bind: address already in use
  • 解决方案:检查主机上的端口是否被其他应用占用,可以尝试更改容器暴露的端口。

总结

从零到上线,Node.js 项目的部署过程涉及多个步骤,包括项目初始化、Docker 容器化和 CI/CD 配置。使用 Docker,可以确保你的应用在任何环境下都能一致地运行;而配置 CI/CD,可以让你在代码更改时自动化地完成构建、测试和部署。掌握这些部署技巧,能够显著提高开发效率和系统稳定性。

希望这篇指南能够帮助你理解从零到上线的整个流程,成功部署你自己的 Node.js 项目!

相关推荐
厂里英才14 分钟前
docker无法正常拉取镜像问题的解决
linux·docker
RedCong2 小时前
K8S之QoS详解
云原生·容器·kubernetes
大得3692 小时前
docker,centos容器开机启动程序
docker·容器·centos
hansaes2 小时前
qq音乐 webpack 补环境
前端·webpack·node.js
白云千载尽2 小时前
docker入门篇
运维·docker·容器
最懒的菜鸟2 小时前
CentOS 系统安装 docker 以及常用插件
docker·eureka·centos
王军新3 小时前
Docker基础知识介绍
运维·docker·容器
Bigger3 小时前
终端美化神器——打造高颜值命令行输出
前端·node.js·命令行
Moshow郑锴3 小时前
基于SpringBoot3+Druid数据库连接池与外部PostgreSQL的Kubernetes Pod YAML全解析
数据库·容器·kubernetes
哟哟耶耶6 小时前
npm-npm init与npm init -y区别与作用(初始化一个新的node.js项目)
前端·npm·node.js