2015-08-20 10 views
5

OS - Ubuntu 14.04Wykonywanie poleceń git przez php przez http

Pracuję nad wdrożeniem za pomocą webhooków GIT dla niego.

Dodałem klucze do rozmieszczenia dla repozytorium git i teraz chcę wyzwolić komendę git pull origin master, gdy nastąpi push z mojego lokalnego repo.

Jest to plik test.php nazywam poprzez przeglądarkę:

<?php  
    //echo "THis is a test file on a test repo for testing the deploy functionality using github webhooks!!!!"; 
    echo exec('whoami'); 
    echo exec('sh -x /var/www/proj/test/git.sh'); 
?> 

Jest to plik git.sh shell:

#!/bin/bash 
cd /var/www/proj-dir/test 
git pull origin master 

Gdy uruchomię to na terminalu używając php test.php uzyskać poprawny wynik z oczekiwaniami :

ubuntu From github.com:repo/test 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 

ubuntu dla whoami, a następnie wyjście git pull.

Teraz tutaj jest problem, gdy zgłoszę taką samą http://example.com/test.php przez przeglądarkę to pokazuje użytkownikowi lub whoami wyjście jako www-data, który jest apache użytkownika, ale starałem aktualizowania uprawnienia pliku php do wykonania i zmianie użytkownikowi www-data ale nie działał.
sprawdzone dzienniki apache i kiedy wykonać za pośrednictwem przeglądarki pojawia się błąd uprawnień

Please make sure you have the correct access rights and the repository exists. + cd /var/www/proj/deploy-test + git pull origin master 

Weryfikacja klucza hosta nie powiodło się. fatal: Nie można odczytać z zdalnego repozytorium. Upewnij się, że masz właściwe prawa dostępu i istnieje repozytorium.

Jakie aktualizacje należy wprowadzić, aby plik działał na żądanie przeglądarki?

Jeśli muszę zaktualizować plik sudoers, jakie powinny być aktualizacje?

Aktualizacja
dodałem .ssh klucze do var/www/ reż jako że jest domem dla apache użytkownika. Ciągle jednak uzyskuję także linię dla użytkownika danych sieci www, aby móc wykonać plik SH.

www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh 

referencyjny here Wciąż nie ma szczęścia
Aktualizacja uprawnienia dla folderu .git użytkownika www-data

sudo chown www-data:www-data /var/www/proj/test/.git

+0

Musisz się upewnić, że to właściwy użytkownik prosi o pociągnięcie. Który użytkownik ma prawa do ściągnięcia z repo? Wygląda na to, że musisz być ubuntu. – nicoX

+0

tak 'ubuntu', ale uważam, że dostęp do' http' użytkownika apache, który jest "www-dane" musi mieć pozwolenie na wykonanie skryptu.Po przejściu przez wiele postów dowiedziałem się, że muszę prawdopodobnie zaktualizować plik sudoers dla www-dane, aby mieć poprawne uprawnienia. Zastanów się, czy mój kierunek jest nieprawidłowy – KillABug

+0

Nie można po prostu chmod skryptu, aby grupa/inny ma prawa wykonania. Wygląda na to, że twój skrypt jest wykonywany. – nicoX

Odpowiedz

0

To nie wydaje się być problem PHP, ale to kwestia git config. Git jest poprawnie skonfigurowany dla użytkownika ubuntu, a nie dla użytkownika www-data.

Możesz spróbować, aby PHP działało jak ubuntu, ale to nie wydaje się najłatwiejsze ani poprawne. Sugerowałbym skonfigurowanie git poprawnie dla użytkownika www-data.

Podejrzewam można odtworzyć problem, uruchamiając na terminalu:

# become www-data user 
sudo su www-data 
# actions from your git.sh file 
cd /var/www/proj-dir/test 
git pull origin master 

Po sprawdzeniu ty rzeczywiście masz scenariusz reprodukcji można spróbować rozwiązać problem dla użytkownika www-data.

Prawdopodobieństwo wystąpienia różnicy między wartością wyjściową git config --list po uruchomieniu jako użytkownik. Aby uzyskać dodatkową pomoc dotyczącą tego wyniku, zobacz: https://git-scm.com/book/en/Getting-Started-First-Time-Git-Setup

Może się zdarzyć, że przyczyną są problemy z uprawnieniami do pliku/własność. Aby wykluczyć, sugeruję, aby użyć git clone ... jako użytkownika www-data, aby utworzyć nowy klon i kopię roboczą w innej ścieżce w systemie plików. Następnie zobacz ponownie, czy git pull działa teraz zgodnie z oczekiwaniami.

Możliwe, że mimo to podasz www-data swoją kopię roboczą (niezależnie od problemów z uprawnieniami). Zapobiegłoby to także konieczności radzenia sobie z ewentualnymi niezatwierdzonymi zmianami w kopii roboczej, które powodują problemy z łączeniem. Obsługa tych automatycznie/bez opieki z PHP/git.sh może być uciążliwa.

Proponowana workflow będzie wówczas: rozwijać jako ubuntu w bieżącym katalogu roboczym i add/commit/push zmiany. Następnie należy PHP wykonać jako samodzielną wersję().