Maison  >  Article  >  interface Web  >  Une introduction à la façon de déployer efficacement des applications Node.js à l'aide de Docker

Une introduction à la façon de déployer efficacement des applications Node.js à l'aide de Docker

青灯夜游
青灯夜游avant
2020-08-28 10:11:531956parcourir

Une introduction à la façon de déployer efficacement des applications Node.js à l'aide de Docker

Une solution de déploiement raisonnable et efficace qui permet non seulement des mises à niveau rapides, une commutation fluide, un équilibrage de charge, une isolation des applications et d'autres fonctionnalités de déploiement, mais est également livrée avec un ensemble de surveillance mature et stable.

kubernetes Traitez l'application Node comme une boîte noire d'application côté serveur, qui correspond parfaitement aux conditions ci-dessus. De plus en plus d'équipes déploient Node sur k8. [Tutoriels vidéo recommandés : Tutoriel Node js, Tutoriel vidéo Docker ]

Mais avant cela, vous devez exécuter l'application Node sur un conteneur Docker. Le sujet de ce chapitre.

À propos du déploiement du front-end sur docker, l'auteur a écrit plusieurs articles :

  1. Comment déployer le front-end dans docker
  2. Prévision et production du déploiement front-end
  3. Le processus de développement du déploiement front-end

A Application Node simple

index.js

Une hello, world version de Node Web App

const http = require('http')

const app = async (req, res) => {
  res.end('hello, world')
}

http.createServer(app).listen(3000, () => console.log(3000))

package.json

Configurationnpm start Démarrons l'application

"scripts": {
  "start": "node index.js"
},

Mais ce n'est que l'application Node la plus simple. Dans l'environnement réel, il existe divers stockages de données et planification de tâches planifiées. le moment est venu. Cela suffit.

Pour une application Node légèrement plus complexe, vous pouvez consulter le projet de Shanyue whoami : un exemple le plus simple de serverless et dockerize.

NODE_ENV=production

Dans un environnement de production, il n'est pas nécessaire d'installer des dépendances dans devDependecies Lorsque la variable d'environnement NODE_ENV est définie sur production, devDep sera ignorée.

# 通过设置环境变量,只安装生产环境依赖
$ NODE_ENV=production npm ci

# 通过显式指定 flag,只安装生产环境依赖
$ npm ci --production

D'un autre côté, certains modules tiers feront des configurations inattendues basées sur la variable d'environnement NODE_ENV. Faites donc attention à la configuration de cette variable d’environnement dans l’environnement de production.

Déploiement simple d'une application Node

Une application Node typique orientée serveur s'exécute comme ceci :

  1. npm install
  2. npm run config , extrayez la configuration du service de configuration (consul/vault), telle que la base de données, le compte et le mot de passe mis en cache. À l'heure actuelle, la construction du serveur nécessite les autorisations du service de configuration
  3. npm run migrate, le script de migration de la base de données, l'exécution de la base de données. Opération de changement de ligne de colonne de table À ce stade, le serveur de build nécessite une autorisation d'accès à la base de données
  4. npm start, démarre un service Node

et traduit les étapes en cours dans Dockerfile :

# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine

# 环境变量设置为生产环境
ENV NODE_ENV production

WORKDIR /code

# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json /code
RUN npm ci

ADD . /code

# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present

EXPOSE 3000
CMD npm start

C'est suffisant pour la plupart des applications Node Si vous continuez à vous améliorer, vous pouvez passer par la prochaine construction en plusieurs étapes

node-gyp et Native Addon

Il peut y en avoir. Natifs de Node. Addon, ils sont compilés via node-gyp, qui dépend de python, make et g++.

$ apk --no-cache add python make g++

Dans la création d'images avec le processus de compilation, les fichiers sources et les outils de construction entraîneront une perte d'espace. Une utilisation efficace de l'espace peut être obtenue grâce à des constructions en plusieurs étapes en miroir. La construction de Go App et FE App suit également cette règle.

Création d'applications de nœuds Lors de la mise en miroir, la première couche de mise en miroir est utilisée pour construire node_modules.

# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine as builder

# 环境变量设置为生产环境
ENV NODE_ENV production

# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json ./
RUN npm ci

# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
FROM node:12-alpine

WORKDIR /code
ENV NODE_ENV production

ADD . .
COPY --from=builder node_modules node_modules
# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present

EXPOSE 3000
CMD npm start

Articles connexes

  1. N-API et premiers pas dans l'écriture de modules complémentaires C pour Node.js
  2. Utilisation de Docker pour Node.js en développement et production

Pour plus de connaissances liées à la programmation, veuillez visiter : Introduction à la programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer