git - Comment gérez-vous les fichiers sur le serveur?
淡淡烟草味
淡淡烟草味 2017-05-02 09:27:07
0
4
626

Il y a des milliers de fichiers sur le site Web. Il est impossible de télécharger à nouveau l'intégralité du site Web via FTP à chaque fois que des dizaines de fichiers sont modifiés. Cependant, ce n'est pas une tâche facile de se rappeler quels fichiers ont été modifiés à chaque fois. Et ces fichiers modifiés sont dispersés dans de nombreux dossiers différents, ce qui rend plus difficile leur recherche un par un et leur téléchargement.

Alors, comment télécharger avec précision et commodité uniquement les fichiers modifiés à chaque fois ?

PS. Mon approche actuelle consiste à installer git sur l'environnement de développement local, à installer git sur le serveur distant, puis à pousser ici et à tirer là. Mais vous devez toujours utiliser Telnet ou SSH vers l'extrémité distante pour extraire. Existe-t-il une méthode plus automatique après le push ici, le serveur se mettra automatiquement à jour ? Vous voulez entendre les suggestions de chacun.

淡淡烟草味
淡淡烟草味

répondre à tous(4)
仅有的幸福

La méthode la plus simple consiste à télécharger à l'aide de git, qui est fourni avec des hooks, qui peuvent réaliser un déploiement automatique.
J'ai déjà fait la même chose que la personne en question, mais il est facile que plusieurs personnes gâchent le projet.

世界只因有你

Merci à @Cocbin pour le rappel, sur la base duquel j'ai soigneusement étudié le principe du hook de Git, puis j'ai fait ce qui suit en fonction de mon projet :

Tout d'abord, parce que j'ai déployé le projet sur le site Web de github, je n'ai pas besoin de configurer moi-même des hooks compliqués, mais j'utilise simplement le webhook fourni avec github. Webhook déclenchera une URL de rappel que vous avez définie lorsque vous effectuez une transmission vers GitHub, et vous pourrez ensuite effectuer l'opération d'extraction dans cette URL.

De plus, sur votre serveur, n'utilisez pas la propre clé ssh du développeur pour extraire. Au lieu de cela, générez une clé de déploiement et placez-la dans github. Cette clé ne nécessite pas de saisie manuelle de mot de passe et est spécifiquement utilisée pour extraire du contenu de github. . Down, ceci termine le déploiement automatique.

J'ai également regardé Hudson et Jenkins, qui sont tous deux de très bons outils. Si vous réalisez un projet Java, vous devriez utiliser Jenkins, car après l'acquisition d'Hudson par Oracle, il n'est progressivement plus ouvert. Mais comme mon projet est en PHP, je ne peux pas me permettre d'installer un autre ensemble de Java 8 pour cela, donc je n'y ai pas pensé. En fait, il existe également un Jenkins spécial pour PHP, mais il semble toujours trop lourd. moi. Peut-être que j'attendrai que le projet soit plus grand à l'avenir. Il est temps d'envisager de l'utiliser.

Ceci ci-dessus sont quelques expériences, j'espère que cela sera utile aux étudiants qui ont le même problème.

----------C'est la magnifique ligne de démarcation --------------------------

Supplément :

Le processus de fonctionnement réel est bien plus compliqué qu'on ne l'imaginait. Voici le code :

        $sReqData = file_get_contents('php://input');
        try {
            $payload = json_decode($sReqData);
        } catch (Exception $e) {
            exit(0);
        }

        if ($payload->ref === 'refs/heads/master') {
            exec('cd /var/www/your_repo; git pull;');
        }

À ce moment-là, lorsqu'il y a un téléchargement push, github rappellera, mais le problème est que le nom d'utilisateur Apache est utilisé lors du rappel, pas le nom d'utilisateur que vous avez utilisé lors du sshing, vous constaterez donc que le Le nom d'utilisateur Apache est différent pour cela. Le répertoire n'a pas d'autorisations d'exploitation :
error: cannot open .git/FETCH_HEAD: Permission denied
Vous devez donc d'abord ajouter ssh_user au groupe Apache :

usermod -a -G apache ssh_user

Modifiez ensuite les autorisations :

chmod -R g+w /var/www
chown -R ssh_user:apache /var/www
chmod -R g+s /var/www

La raison pour laquelle il est placé dans ce répertoire est que le répertoire par défaut de l'utilisateur Apache est /var/www. Bien sûr, vous pouvez le remplacer par un autre répertoire, qui peut être plus sûr.

Puis :

sudo -u apache git pull

Il générera un fichier known_hosts dans le dossier .ssh d'Apache. Ensuite, si vous utilisez ssh, vous devez également ajouter les deux fichiers id_rsa et id_rsa.pub dans la clé de déploiement générée ci-dessus. le dossier .ssh. Exécutez ensuite la commande suivante plusieurs fois pour vous assurer qu'aucune erreur n'est à nouveau signalée. Ensuite, vous pouvez essayer de pousser une nouvelle version depuis le client pour voir si le déploiement automatique peut réussir.

================ Version nationale =====================

Étant donné que le serveur de Github n'est pas en Chine, il entraîne souvent des problèmes d'impossibilité de pousser/tirer, alors envisagez de migrer vers git.oschina.net en Chine. Le processus de migration ne sera pas décrit en détail. Il y a juste quelques points auxquels vous devez prêter attention :

  1. Code sur les webhooks :

        $sReqData = $_POST['hook'];
        try {
            $payload = json_decode($sReqData);
            if ($payload->password === '这里是你的密码' && $payload->hook_name === 'push_hooks') {
                exec('cd /var/www/your_repo; git pull;');
            }
        } catch (Exception $e) {
            exit(0);
        }
  1. Une étape cruciale doit être exécutée. J'étais coincé ici et je n'ai pas trouvé la raison pendant longtemps :

sudo -u apache git pull
習慣沉默

Tout le monde sait que git est un contrôle de version

黄舟

Permettez-moi de parler des méthodes que j'ai utilisées :
1. Tout d'abord, vous devez disposer d'un service de contrôle de version et d'un service rsync
2. Migrez le code de version stable qui doit être déployé depuis le serveur de version vers. un dossier temporaire
3. Spécifiez le répertoire du serveur de rsync dans le dossier temporaire
4 Utilisez la commande rsync pour synchroniser le répertoire du serveur avec votre répertoire de déploiement
5. dossier temporaire (ajouter un montant), effectuer quelques opérations de mise à jour sur les fichiers du dossier temporaire (si nécessaire), rsync synchronise les fichiers du dossier temporaire avec le répertoire de déploiement (incrémental)

Après avoir terminé le processus ci-dessus, il vous suffit d'exécuter le shell au point 5 ci-dessus à chaque fois que vous soumettez le code.
Bien que ce soit un peu gênant, c'est plus efficace. Si vous ne l'aimez pas, ne le vaporisez pas.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal