2010-09-13 20 views
1

Je me suis référé à http://toroid.org/ams/git-website-howto comme point de départ pour un serveur Web de production fonctionnant sur un VPS géré. Le VPS exécute cPanel et WHM, et il hébergera éventuellement plusieurs sites Web clients, chacun avec son propre compte cPanel (ainsi, chacun avec son propre utilisateur Linux et son répertoire personnel à partir duquel les sites sont servis). Le site de chaque client est un référentiel Git distinct.Structuration d'une centrale Git distante pour servir les sites Apache de production

Actuellement, je pousse chaque référentiel via SSH vers un repo nu dans le dossier de départ du client, par ex. /home/username/git/repository.git/. Conformément au tutoriel ci-dessus, chaque dépôt a été configuré pour passer à un autre répertoire via un hook post-réception. Dans ce cas, chaque repo vérifie son propre /home/username/public_html (le DocumentRoot par défaut pour les nouveaux comptes cPanel), où les fichiers sont ensuite servis par Apache. Bien que cela fonctionne, il me demande de mettre en place (dans mon environnement de développement local) mes télécommandes comme ceci:

url = ssh://[email protected]/home/username/git/repository.git/ 

Il me faut aussi entrer le mot de passe de l'utilisateur à chaque fois que je pousse à lui, ce qui est moins qu'idéal .

Dans une tentative de centraliser tous mes référentiels dans un dossier, j'ai également essayé de pousser à /root/git/repository.git en tant que root, puis de vérifier dans le répertoire de base approprié à partir de là. Cependant, cela provoque tous les fichiers extraits à appartenir à root, ce qui empêche Apache de servir le site, avec des erreurs comme

[error] [client xx.xx.xx.xx] SoftException in Application.cpp:357: UID of script "/home/username/public_html/index.php" is smaller than min_uid 

(qui est une propriété de fichier/problème d'autorisations, pour autant que je peux dire)

Je peux résoudre que problème avec les commandes chown et chgrp dans le crochet post-réception de chaque repo - cependant, cela soulève également le drapeau "pas tout à fait raison" dans ma tête. J'ai également considéré gitosis (pour centraliser tous mes repos dans /home/git/), mais je suppose que je rencontrerais le même problème de propriété de dossier, puisque les dossiers retirés seraient alors possédés par l'utilisateur git. Est-ce que je m'approche de tout cela de la mauvaise manière? Je me sens comme si je manquais complètement une troisième solution plus élégante au problème global. Ou devrais-je m'en tenir à l'une des méthodes que j'ai décrites ci-dessus?

Répondre

1

Il me demande aussi d'entrer le mot de passe de l'utilisateur à chaque fois que je pousse à lui, ce qui est moins qu'idéal

Il ne devrait pas être nécessaire si vous publiez votre clé ssh publique sur le compte destintion Fichier ".ssh/authorized_keys".

Voir aussi locking down ssh authorized keys par exemple. Mais aussi la référence officielle Pro Git Book "Setting Up the Server".

+0

Merci! Cela va certainement aider. Cependant, une question de ma question initiale est toujours: Dois-je centraliser mes dépôts dans un endroit sur le serveur? Ou est-ce logique de se connecter à un compte distinct pour chaque référentiel séparé? – peterjmag

+0

@peterjmag: si vous adoptez une stratégie comme celle de gitolite, il vous suffit de publier la clé publique SSH de chaque utilisateur dans le compte central de votre dépôt Git. Voir la documentation de Gitolite pour plus de détails: http://github.com/sitaramc/gitolite/blob/pu/doc/2-admin.mkd#_adding_users_and_repos – VonC