npm-Deployment mit rsync

npm ist ein Paketmanager für die JavaScript-Laufzeitumgebung Node.js, und mit rsync können die Daten mit dem entfernten Server synchronisiert werden.

Erste Schritte

  1. Umgebungsvariablen einrichten

    DEPLOY_DIR

    Verzeichnis auf dem entfernten Server, in das verteilt werden soll.

    DEPLOY_HOST

    Hostname oder IP-Adresse des Servers, auf den verteilt werden soll.

    DEPLOY_KEY_FILE

    Pfad zu einem privaten SSH-Schlüssel, der zur Authentifizierung gegenüber dem Server verwendet werden soll.

    DEPLOY_USER

    Name des SSH-Accounts.

    KNOWN_HOSTS_FILE

    Pfad zu einer Datei mit vordefinierten known_hosts-Einträgen, mit denen die Verbindung überprüft werden soll.

  2. Einrichten der CI/CD-Pipeline

    .gitlab-ci.yml
    stages:
      - deploy
    
    deploy-static-assets:
      stage: deploy
      rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      environment:
        name: prod
        deployment_tier: production
      image: node:alpine
      script:
        - apk add --no-cache git nodejs npm openssh-client-default rsync
        - chmod 0600 "$DEPLOY_KEY_FILE"
        - ./deploy.sh
    
    Zeile 13

    installiert die für das Bauen und Hochladen erforderlichen Pakete

    Zeile 14

    ändert die Zugriffsberechtigungen für den ssh-Schlüssel

    Zeile 15

    ruft die deploy.sh-Datei auf

  3. Verschieben der statischen Dateien auf den Server

    deploy.sh
     1#!/bin/sh
     2set -e
     3
     4# Deploy static assets to a server via rsync.
     5
     6# Create SSH config.
     7cat >deploy.ssh_config <<-END
     8    Host deploy
     9        HostName $DEPLOY_HOST
    10        User $DEPLOY_USER
    11        IdentityFile $DEPLOY_KEY_FILE
    12        UserKnownHostsFile $KNOWN_HOSTS_FILE
    13END
    14
    15
    16# Build the JavaScript application & related files.
    17cd vite-app
    18npm ci
    19npx vite build
    20
    21# Deploy the application and GeoJSON data.
    22rsync \
    23    -rtlv \
    24    --rsh 'ssh -F ../deploy.ssh_config' \
    25    --rsync-path "mkdir -p \"$DEPLOY_DIR\" && rsync" \
    26    ../data/cusy.geojson \
    27    cusy.html \
    28    dist/cusy-map.css \
    29    dist/cusy-map.js \
    30    dist/cusy-map.js.map \
    31    "deploy:$DEPLOY_DIR"
    
    Zeile 7–13

    erstellt die ssh-Konfigurationsdatei

    Zeile 18

    installiert die Abhängigkeiten des Projekts aus der vite-app/package.json-Datei

    Siehe auch

    npm-ci

    Zeile 19

    erstellt das vite-Projekt für die Produktion.

    Zeile 24

    verschiebt die ssh-Konfiguration auf den Server

    Zeile 25–31

    verschiebt die Anwendung und GeoJSON-Daten auf den Server