serveur Linux mise à jour en ligne et tenir un registre du projet de noeud

avant-propos

Tout d'abord, je viens de développer un front-end Android et poulet épicé, les connaissances liées au serveur fond impliqué est relativement faible, je ne comprends pas, apprendre de ce qui suit des fins purement personnelles, certainement beaucoup de problèmes avec le réel ne sont pas nécessairement les mêmes, légère pulvérisation, le meilleur ne pas vaporiser

Impliquant des points techniques: commandes communes Linux, les scripts shell, utilisez git, pare-feu, pare-feu, nginx infotify, PM2, noeud et d'autres connaissances connexes

Depuis l'année dernière, occupé à prendre le temps d'écrire un nœud avec un système comme front-end, les serveurs dorsaux ne comprennent pas les connaissances, donc je veux aller sur l'ensemble du processus:

Développement -> Domaine d'application / déploiement du serveur -> sur le projet de ligne

Sous la première, simplement publier un projet a trois entrepôts suivants:

Vous pouvez voir, le référentiel de code local et le dépôt du code serveur est le même, peut être poussée d'entrepôt relativement nu / pull, parce que les deux déjà en code natif pour fonctionner dans un entrepôt local, le code de serveur d'entrepôt à exécuter sur le serveur la raison pour l'entrepôt non torsadés directement lorsque le RAN du projet, mais obtenir un référentiel de code, car l'entrepôt nu est crypté, nous ne comprenons tout simplement pas, et encore moins comme un programme normal à terme, mais le clone sera hors de la normale montre, à se demander pourquoi git aller, le code source git pour voir.

1. Le serveur crée un référentiel nu: git initialisation --bare.

2. Créez un référentiel de code serveur, à partir du clone d'entrepôt nu

3. Créez un référentiel de code local

Puis se lier à l'entrepôt nu serveur: origine remote add git <nom d'utilisateur> @ <IP publique du serveur>: / <Adresse du serveur d'entrepôt nu>. Nom d'utilisateur J'utilise la racine, si vous sentez en danger, vous pouvez également créer d'autres utilisateurs et restreindre les autorisations en tant que root parmi le compte de la plus haute autorité, donc un grand nombre d'opérations de sécurité pour d'autres comptes tels que git va créer un compte, de limiter son autorité seulement faire un code de contrôle.

4. serveur référentiel pour toujours / code PM2 heurtons

Exécution NPM départ, après nodejs réaliser le projet, activé par défaut le port 3000, http: // localhost: 3030, nous savons que, après NPM départ nous ne pouvons pas effectuer d'autres opérations, à moins que le contrôle + c pour arrêter de courir, parce que nous ne sommes pas en cours d'exécution en arrière-plan si limité, afin qu'il puisse fonctionner en arrière-plan, nous pouvons utiliser des outils, pour toujours ou PM2, en particulier pour voir les informations pertinentes, je dans le projet est PM2, ce qui suit expliquera l'utilisation spécifique

5. Utilisez le nom de domaine est lié à ce projet, le pare-feu de pare-feu d'extension

Tels que l'accès par shudongpo.com ce nom de domaine à notre projet, vous devez lier le nom de domaine et le port 3030, afin qu'il puisse être accessible en dehors du projet de serveur, a publié ce sera considéré comme un succès, nous devons utiliser cette étape pour atteindre nginx , nginx va utiliser le transfert de domaine sur le port 3000, comme suit:

En utilisant yum install nginx: yum install -y nginx.

Une fois l'installation: nginx -t Voir emplacement du profil.

Utilisez le fichier de configuration vim éditeur de nginx pour ajouter un serveur:

    server {
        listen       80;
        server_name  xxx.xxx.cn;
        location / {
            proxy_pass http://localhost:3000;
        }
    }

Alors que lorsque vous visitez les xxx.xxx.cn vous pouvez accéder à exécuter le projet de nœud.

Remarque: S'il vous plaît port ouvert 80 mis dans un coffre-fort à l'intérieur de leurs propres serveurs, ne peut donc pas accès, pare-feu Pare-feu Si votre serveur linux est installé, il est probable que votre pare-feu pour fermer le port 80, donc il peut être ouvert: pare-feu -cmd --zone = public --add-port = 80 / tcp --permanent.

l'expansion du savoir pare-feu:

开放端口,firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
--zone #作用域
--add-port=80/tcp  #添加端口,格式为:端口/通讯协议
--permanent   #永久生效,没有此参数重启后失效
查看已开放端口,firewall-cmd --list-ports
重启,firewall-cmd --reload
查看默认防火墙状态,firewall-cmd --state

Une fois la configuration terminée, redémarrez nginx: systemctl commencer nginx, si elle a été activée redémarrage.

Ensuite, entrez domaine de liaison sur l'ordinateur peut accéder au projet.

6. Utilisez inotify, scripts shell, PM2 automatiquement élément de ligne de mise à jour [focus]

Maintenant que le projet a accumulé, alors quel est le problème? Après avoir modifié le code sur un bouton de serveur informatique à un entrepôt nu, mais le dépôt de code serveur nous ne tirez pas, le code est donc pas mis à jour, même si nous ne pas nécessaire de relancer le programme de mise à jour, ou lorsque l'accès est pas mis à jour, il est nécessaire de résoudre le problème:

Aller à nouveau> Code mise à jour du référentiel - Push code informatique - référentiel de code après mise à jour> serveur d'entrepôt nu reçoit une mise à jour

6.1. Code de poussée informatique

poussoir local pour effectuer

6.2. Serveur d'entrepôt nu après avoir reçu le code mise à jour mise à jour du référentiel

Cette étape nécessite deux étapes à suivre: 1 serveur écoute à jour de l'entrepôt nu, après deux mises à jour de l'entrepôt nu, dépôt automatique de code de mise à jour

Laissez-moi écouter les mises à jour entrepôt nu, nous pouvons également utiliser les détails de mise en œuvre du crochet git, s'il vous plaît voir les informations pertinentes sur l'affaire inotify moi, je inofity écouter

Installation inotify:

yum install inotify-tools -y

Surveiller la mise en œuvre d'écriture directe d'un script shell pour lancer, toucher update.sh:


#!/bin/bash
#监听裸仓库xxx.git改变完成后,执行xxx代码仓库进行pull
inotifywait -m -e modify -r /local/git_project/xxx.git/ |
while read events            #读取事件
do
cd /local/node_workspace/xxx #cd到代码仓库目录
git pull                     #pull代码
echo 'xxx.git裸仓库有变动,已pull最新代码到代码仓库'
echo $events                 #打印事件
done

inofity étendre les commandes liées à la connaissance:

inotifywait -m -e -r Modifier /local/git_project/xxx.git

-m exprimé gardé l'écoute, ou une seule fois, -e modifions événement d'écoute est Représenté modifier (le contenu du fichier a été modifié), - r représente un moniteur récursive, mais aussi de surveiller le fichier enfant

La fin du script, mais il est juste un fichier régulier, il faut donner les droits d'exécution: chomd + x update.sh

Exécution du script: ./ xxx.sh, donc il y aura un problème, ce n'est pas la course de fond, on ne peut pas retirer une fois l'arrière-plan, donc: ./ xxx.sh & run de fond, il y a encore des problèmes, le traitement des scripts shell est l'enfant shell processus de terminal processus, lorsque le terminal est fermé coquille, ses enfants sera éteint, de sorte que le script arrête, donc: nohup ./xxx.sh et représentent suite ininterrompue en arrière-plan, qui est, de fonctionner en arrière-plan, il ne sera pas arrêté borne enveloppe interrompue

Le script a couru, lorsque nous poussons le code sur l'ordinateur local, le serveur écoutera inotify entrepôts nus changé, cd au référentiel de code traction d'exécution, le code mettra à jour le référentiel de code

6.3. Une fois le code est mis à jour automatiquement reload, et que l'exécution du programme en arrière-plan, plutôt que NPM début a été en cours d'exécution au premier plan

Cette étape est réalisée au moyen d'outils de besoin PM2 installer: NPM installer PM2 -g

Si la recharge automatique seulement le laisser tourner en arrière-plan, sans qu'il soit nécessaire de mettre à jour le code, vous pouvez: bin début PM2 / www

Si le réarmement automatique après avoir écouté à nouveau d'exécuter les deux mises à jour de code dans l'arrière-plan, nous avons donc besoin de configurer le fichier, tout d'abord: l'écosystème PM2, générer un config.js de fichier de configuration, puis modifier:

module.exports = {
  apps : [{
    name: 'shopsystem-server-pms',
    script: './bin/www',    #主要是这里,修改启动项

    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    watch_options: {
      "usePolling": true
    },
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : '[email protected]:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

Puis: PM2 commencent config.js

Cela va automatiquement tous les dossiers et fichiers dans le répertoire courant, s'il est mis à jour rechargera automatiquement

Vous devez savoir pour faire plaisir à la connaissance PM2: https://pm2.keymetrics.io/docs/usage/application-declaration/

 

À ce stade, l'ensemble du processus d'achèvement du projet

Publié 33 articles originaux · louange won 49 · Vues 140000 +

Je suppose que tu aimes

Origine blog.csdn.net/gsw333/article/details/105176839
conseillé
Classement