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

Node.js 语言特定指南

Node.js 语言特定指南

本 Node.js 语言特定指南将教您如何使用 Docker 容器化 Node.js 应用程序。在本指南中,您将学习如何:

  • 容器化并运行一个 Node.js 应用程序
  • 设置一个本地环境以使用容器开发 Node.js 应用程序
  • 使用容器为 Node.js 应用程序运行测试
  • 使用 GitHub Actions 配置一个用于容器化 Node.js 应用程序的 CI/CD 流水线
  • 将容器化的 Node.js 应用程序部署到本地 Kubernetes 以测试和调试您的部署

首先,从容器化一个现有的 Node.js 应用程序开始。

容器化并运行 Node.js 应用程序

1. 准备现有的 Node.js 应用程序

确保您的项目结构类似于以下内容:

my-node-app/
├── node_modules/
├── public/
├── src/
├── views/
├── .gitignore
├── package.json
└── server.js

2. 创建 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用官方 Node.js 镜像作为基础镜像
FROM node:14# 设置工作目录
WORKDIR /usr/src/app# 复制 package.json 和 package-lock.json
COPY package*.json ./# 安装依赖
RUN npm install# 复制应用源代码
COPY . .# 暴露应用端口
EXPOSE 3000# 定义运行容器时的启动命令
CMD ["node", "server.js"]

3. 构建 Docker 镜像

在项目根目录下运行以下命令以构建 Docker 镜像:

docker build -t my-node-app .

4. 运行容器

使用以下命令运行容器:

docker run -d -p 3000:3000 my-node-app

现在,您可以通过浏览器访问 http://localhost:3000 来查看您的应用程序。

设置本地开发环境

使用 Docker 容器来设置本地开发环境有助于确保开发环境与生产环境一致。

1. 创建 docker-compose.yml 文件

在项目根目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容:

version: '3.8'
services:app:image: node:14working_dir: /usr/src/appvolumes:- .:/usr/src/app- /usr/src/app/node_modulesports:- "3000:3000"command: npm start

2. 运行 Docker Compose

在项目根目录下运行以下命令启动开发环境:

docker-compose up

现在,您的应用程序将在 http://localhost:3000 上运行,您可以进行开发并实时查看更改。

使用容器运行测试

1. 安装测试依赖

确保在 package.json 中添加必要的测试依赖,例如:

"devDependencies": {"mocha": "^8.3.2","chai": "^4.3.4"
}

2. 创建测试脚本

在项目中创建一个测试目录和测试脚本,例如 test/test.js

const { expect } = require('chai');describe('Sample Test', () => {it('should return true', () => {expect(true).to.be.true;});
});

3. 更新 Dockerfile

更新 Dockerfile 以安装开发依赖:

# 使用官方 Node.js 镜像作为基础镜像
FROM node:14# 设置工作目录
WORKDIR /usr/src/app# 复制 package.json 和 package-lock.json
COPY package*.json ./# 安装依赖,包括开发依赖
RUN npm install# 复制应用源代码
COPY . .# 暴露应用端口
EXPOSE 3000# 定义运行容器时的启动命令
CMD ["npm", "test"]

4. 构建测试镜像并运行测试

在项目根目录下运行以下命令构建测试镜像并运行测试:

docker build -t my-node-app-test .
docker run my-node-app-test

配置 CI/CD 流水线

使用 GitHub Actions 配置 CI/CD 流水线以自动化测试和部署过程。

1. 创建 GitHub Actions 工作流文件

在项目根目录下创建 .github/workflows/ci.yml 并添加以下内容:

name: CI/CD Pipelineon:push:branches:- mainpull_request:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Set up Node.jsuses: actions/setup-node@v2with:node-version: '14'- name: Install dependenciesrun: npm install- name: Run testsrun: npm test- name: Build Docker imagerun: docker build -t my-node-app .- name: Push Docker imageenv:DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}run: |echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdindocker tag my-node-app $DOCKER_USERNAME/my-node-app:latestdocker push $DOCKER_USERNAME/my-node-app:latest

确保在 GitHub 仓库中添加 Docker Hub 凭据作为秘密(secrets)。

部署到 Kubernetes

使用 Kubernetes 部署和管理容器化的 Node.js 应用程序。

1. 创建 Kubernetes 部署文件

在项目根目录下创建 k8s/deployment.yml 并添加以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-node-app
spec:replicas: 3selector:matchLabels:app: my-node-apptemplate:metadata:labels:app: my-node-appspec:containers:- name: my-node-appimage: <DOCKER_USERNAME>/my-node-app:latestports:- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:name: my-node-app-service
spec:type: NodePortselector:app: my-node-appports:- port: 3000targetPort: 3000nodePort: 30001

2. 部署到 Kubernetes

使用 kubectl 命令将应用程序部署到 Kubernetes 集群:

kubectl apply -f k8s/deployment.yml

您可以通过访问 http://<NODE_IP>:30001 查看应用程序。

通过上述步骤,您已经学会了如何容器化并运行一个 Node.js 应用程序,设置本地开发环境,使用容器运行测试,配置 CI/CD 流水线,并将应用程序部署到 Kubernetes。

相关文章:

Node.js 语言特定指南

Node.js 语言特定指南 本 Node.js 语言特定指南将教您如何使用 Docker 容器化 Node.js 应用程序。在本指南中&#xff0c;您将学习如何&#xff1a; 容器化并运行一个 Node.js 应用程序设置一个本地环境以使用容器开发 Node.js 应用程序使用容器为 Node.js 应用程序运行测试使…...

科普:什么是 BC-404 ?全方位解读最新通缩型 NFT 标准

区块链技术飞速发展的今天&#xff0c;创新从未停歇。继 ERC-404 标准问世后&#xff0c;一个名为 BC-404 的新标准应运而生&#xff0c;为 NFT 市场带来了全新的可能性。BC-404&#xff08;Bonding Curve 404&#xff09;—基于对 ERC-404 的改进&#xff0c;加密货币中第一个…...

软件测试学习笔记丨JUnit5执行顺序

本文转自测试人社区&#xff0c;原文链接&#xff1a; https://ceshiren.com/t/topic/28025 指定顺序使用场景 测试用例有业务逻辑相关集成测试(主流程测试) 排序方式 方法排序类排序Suite官方网站没有明确说明默认排序的具体规则 方法排序的类型 方法排序-Order 注解指定排序 …...

解决GPU 显存未能完全释放

一、 现象 算法同学反馈显存未能完全释放。 二、解决方法 一条命令搞定 注意&#xff1a;执行时注意不要误杀其他的python进程&#xff0c;需要确认好。 我的这条命令是将所有python进程都杀死了 ps -elf | grep python | awk {print $4} | xargs kill -s 9...

3D资产爆发,轻量化需求再度冲高,见证下一代3D崛起!

数字经济不断发展&#xff0c;3D资产和实体经济迎来深度融合的窗口期&#xff0c;3D资产应用外延催生大量新场景、新业态&#xff0c;一个3D资产构建的数字世界正出现在我们眼前。 数字经济不断发展&#xff0c;3D资产和实体经济迎来深度融合的窗口期&#xff0c;3D资产应用外…...

AI绘画的10种变现方法,逼你躺平挣钱

AI绘画到底能多挣钱&#xff01; 马上看证据&#xff0c;知乎和其它平台的收益&#xff0c;AI绘画挣的稿费&#xff0c;还有某音某瓜的稿费。 都是有AI绘画的一大功劳&#xff01; 接下来介绍AI绘画的十种挣钱方法&#xff0c;有折腾的收益&#xff0c;也有躺平的收益&#x…...

Pura 70 系列超高速风驰闪拍,捕捉美好,告别抓拍模糊

及时而准确的将画面定格&#xff0c;把事件最具有表现力的瞬间直观、真实地传达给观者&#xff0c;以使将抓拍影响的意义发挥最大化&#xff0c;由于抓拍摄影作品大多反映的是比较自然&#xff0c;真实的人和事&#xff0c;得到了社会的广泛认可&#xff0c;抓拍摄影也正日益成…...

AI作画Prompt不会写?Amazon Bedrock Claude3.5来帮忙

最新上线的Claude3.5 Sonnet按照官方介绍的数据来看&#xff0c;在多方面超越了CPT-4o&#xff0c;是迄今为止最智能的模型。 而跟上一个版本相比&#xff0c;速度是Claude 3 Opus的两倍&#xff0c;成本只有其五分之一。 Claude3.5 Sonnet不仅擅长解释图表、图形或者从不完…...

SSL证书类型解析:DV、OV、EV证书的区别与适用场景

在互联网时代&#xff0c;数据安全和用户隐私保护变得尤为重要。SSL证书作为加密网站通信的主要工具&#xff0c;为用户提供了一个安全的浏览环境。然而&#xff0c;面对市场上多种类型的SSL证书&#xff0c;许多网站所有者常常感到困惑。本文将重点解析三种常见的SSL证书类型—…...

WPF 2024 金九银十 最新 高级 架构 面试题 C#

含入门 初级 中级 高级 不同级别WPF的面试题 相关面试题 redis安装说明书 http://t.csdnimg.cn/iM260 单体并发瓶颈 redis sqlsever mysql多少 http://t.csdnimg.cn/DTXIh Redis高频面试题http://t.csdnimg.cn/FDOnv 数据库SqlServer笔试题 数据库SqlServer笔试题-CSDN博客 SQL…...

Linux上使用 git 命令行

在 Github或者 gitee 注册账号 这个比较简单 , 参考着官网提示即可 . 需要进行邮箱校验.以下以创建Github为例。 创建项目 1. 登陆成功后 , 进入个人主页 , 点击下方的 create a new repository 按钮新建项目 2. 在创建好的项目页面中复制项目的链接 , 以备接下来进行下…...

vue 中computed和watch的区别

computed与watch的区别 首先&#xff0c;computed是计算属性&#xff0c;watch是监听&#xff0c;监听data中的数据变化。 computed的计算属性它支持缓存&#xff0c;只有当依赖项发生改变的时候&#xff0c;它才会重新计算&#xff0c;否则它用的就是缓存的值。watch不支持缓…...

富豪王思聪的“爱情喜剧”从万达排片到网红聊天

王思聪&#xff0c;这位人生如戏、戏如人生的富二代&#xff0c; 在爱情的战场上可谓是屡战屡败&#xff0c;屡败屡战。 想当年&#xff0c;他向戚薇发起了猛烈的爱情攻势&#xff0c; 豪言壮语道&#xff1a;“若我以万达25%的排片量换你一笑&#xff0c;你可愿与我共舞&am…...

qt qml-http之XMLHttpRequest介绍详解使用

文章目录 QML中的XMLHttpRequest详解与示例基本用法示例代码代码详解更复杂的示例:POST请求代码详解结论QML中的XMLHttpRequest详解与示例 XMLHttpRequest 是 QML 中用于执行HTTP请求的一种机制,类似于Web中的AJAX。它可以用来进行异步的数据传输,可以从服务器获取数据,也…...

DBdoctor功能介绍

绍DBdoctor的主要功能&#xff0c;按照事件先后涵盖了事前、事中、事后三个阶段。事前的主动问题发现、SQL性能评估、自动巡检与报表、空间预测与诊断&#xff1b;事中的性能洞察、根因诊断、锁分析、优化建议&#xff1b;事后的审计分析、根因推导、问题快照。按照使用者包含了…...

Kubernetes之Kubelet详解

本文尝试从Kubelet的发展历史、实现原理、交互逻辑、伪代码实现及最佳实践5个方面对Kubelet进行详细阐述。希望对您有所帮助&#xff01; 一、kubelet发展历史 Kubelet 是 Kubernetes 中的核心组件之一&#xff0c;负责管理单个节点上的容器运行。它的发展历史和功能演进是 K…...

大模型AI技术实现语言规范练习

人工智能技术可以为语言规范练习提供多种有效的解决方案&#xff0c;帮助学习者更有效地掌握语言规范。以下是一些常见的应用场景。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 智能纠错 利用自然语言处理技术&#xff0c;可以…...

202.回溯算法:全排列||(力扣)

class Solution { public:vector<int> res; // 存储当前排列vector<vector<int>> result; // 存储所有排列// 回溯函数&#xff0c;用于生成排列void backtracing(vector<int>& nums, vector<bool>& used) {// 如果当前排列的长度等于 n…...

什么是数据库范式,为什么要反范式?

一、典型回答 数据库范式其实是数据库的设计上的一些规范&#xff0c;这些规范可以让数据库的设计更加简洁、清晰&#xff0c;同时也会更好的保证一致性。 二、三范式 第一范式&#xff08;1NF&#xff09;&#xff1a;数据库表中的属性的原子性&#xff0c;要求属性具有原子性…...

记录 Bonobo Git 服务器 SMTP 设置

Bonobo 使用标准的 .NET SMTP 设置&#xff0c;可以在 web.config 中指定这些设置。 <system.net><mailSettings><smtp deliveryMethod"network" from"bonobobonoserver.your.domain"><network host"accessible.smtp.host"…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...