Pytanie Jaka jest preferowana strategia wdrażania php? [Zamknięte]


Zaczynam nowy projekt w PHP i chciałbym uzyskać informacje zwrotne od innych programistów na temat ich preferowanej strategii wdrażania PHP. Chciałbym trochę zautomatyzować sprawy, aby po zatwierdzeniu zmian można je było szybko przenieść na serwer programistyczny lub produkcyjny.

Mam doświadczenie z wdrożeniami przy użyciu Capistrano z Ruby oraz z podstawowymi skryptami powłoki.

Zanim sam zacznę nurkować, byłoby wspaniale usłyszeć, jak inni podeszli do tego w swoich projektach.

Dalsza informacja

Obecnie programiści pracują nad lokalnymi instalacjami witryny i zatwierdzają zmiany w repozytorium subversion. Początkowe wdrożenia są wykonywane przez eksportowanie oznaczonego wydania z svn i przesłanie go na serwer.

Dodatkowe zmiany są zazwyczaj fragmentaryczne, ręcznie przesyłając zmienione pliki.


156
2018-01-08 20:09


pochodzenie


Śliczne :) Dzięki za edytowanie splattne. - GloryFish
@Paul Tomblin: OMG Nie mogę przestać się śmiać !!!!! Nie ma lepszego sposobu :) - Andrei Rînea
Czy ktoś może odpowiedzieć na to pytanie - stackoverflow.com/questions/36034277/... - Sandeepan Nath


Odpowiedzi:


Dla PHP, SVN z Phing buduj skrypty są drogą do zrobienia. Phing jest podobny do MRÓWKA ale jest napisany w PHP, co znacznie ułatwia programistom PHP modyfikowanie ich potrzeb.

Nasza procedura wdrażania jest następująca:

  • Każdy rozwija się na tym samym lokalnym serwerze w pracy, każdy programista ma również kasę na swoim komputerze.
  • Komendy uruchamiają hak po zatwierdzeniu, który aktualizuje serwer pomostowy.
  • Testy są przeprowadzane na serwerze testowym, jeśli przekażą - kontynuuj.
  • Wygenerowano skrypt budujący phing:
  • Zrzuca serwer produkcyjny, przełączając domenę na stronę "W budowie"
  • Uruchamia aktualizację SVN na kasie produkcji
  • Uruchamia skrypt deltas schematu
  • Uruchamia testy
  • Jeśli testy się nie powiedzie - uruchom skrypt wycofania zmian
  • Jeśli testy zakończą się, serwer kieruje się z powrotem do realizacji produkcji

Jest także phpUnderControl, który jest serwerem ciągłej integracji. Nie uważam za bardzo przydatne dla projektów internetowych, mówiąc szczerze.


107
2018-01-08 20:20



Właśnie miałem opublikować listę rzeczy, które robię w moim sklepie Windows / .NET, ale mniej więcej to, co tu masz. +1 - Daniel Schaffer
czy napotkaliście jakieś wady związane z posiadaniem svn co jako środowiska produkcyjnego? Naprawdę nie mogę myśleć o żadnych wadach, ale nie wydaje się "czyste" mieć svn co jako produkcję? Dlaczego nie eksport svn lub rsync? - ChrisR
Z powodu podstawowej różnicy między zawartością a eksportem - nie możesz przesłać konkretnych zmian, musisz ponownie wyeksportować całą aplikację. To bardzo ważna różnica, która znacznie ułatwia życie - Eran Galperin
Po co umieszczać stronę w dół ekranu? Jeśli uruchomisz katalog wydań /, i wskażesz liveSite / poprzez dowiązanie symboliczne do folderu w wydaniach /, możesz całkowicie wypiąć stronę do nowego wydania / folderu i odwrócić dowiązanie symboliczne natychmiastowo po zakończeniu współpracy? Nie ma potrzeby przestojów (chyba, że ​​jesteś biednym szlochem, które wysyła żądanie podczas tego przełącznika symbolicznego). - Joseph Lust
Kto jest odpowiedzialny za wykonanie wszystkich tych zadań, takich jak aktualizacja SVN w produkcji i symlink w nowej wersji? Czy to phing? Czy to dżinsy? - Daniel Ribeiro


Obecnie wdrażam PHP używając Git. Prosta produkcja git push to wszystko, czego potrzeba, aby zaktualizować mój serwer produkcyjny najnowszą kopią Git. Jest to łatwe i szybkie, ponieważ Git jest wystarczająco inteligentny, aby wysyłać tylko porównania, a nie cały projekt. Pomaga także zachować nadmiarową kopię repozytorium na serwerze WWW w przypadku awarii sprzętu na moim końcu (chociaż ja również popieram GitHub, aby był bezpieczny).


23
2018-01-09 02:48



Od lat robię to samo w małych i średnich projektach. Muszę powiedzieć, że to działa doskonale dla mnie. Trzeba pokochać prostotę tego podejścia. - Chris Allen Lane
Jak radzisz sobie z bazą danych za pomocą tego podejścia? - 32423hjh32423
@neilc Ręcznie, niestety. Wszelkie zmiany w DB muszą być wykonane ręcznie przed naciśnięciem. - Kyle Cronin
Zwykle dołączam () plik PHP zawierający konfigurację DB i ręcznie umieszczam plik na serwerze lub maszynie testowej. W ten sposób nie przechowujesz haseł w git, a także nie działasz przypadkowo w produkcyjnej bazie danych. - Matt
Jak skonfigurować git, aby zrobić to za Ciebie? Czy jest jakiś przewodnik / samouczek? Z góry dziękuję. - Notflip


Używamy Webistrano, frontend dla Capistrano i jesteśmy z niego bardzo zadowoleni.

Webistrano umożliwia wielostopniowe, wieloaspektowe wdrożenia z SVN, GIT i innych. Posiada wbudowaną obsługę wycofywania zmian, obsługę oddzielnych ról serwera, takich jak sieć, db, aplikacja itd., A także wdraża równolegle. Pozwala to na zastąpienie parametrów konfiguracyjnych na wielu poziomach, na przykład na etapie, i rejestruje wyniki każdego wdrożenia, opcjonalnie je wysyłając.

Mimo że Capistrano i Webistrano są aplikacjami Ruby, składnia "receptur" wdrożenia jest łatwa i wystarczająco mocna, aby zrozumieć każdego programistę PHP. Oryginalnie Capistrano został zbudowany dla projektów Ruby on Rails, ale z łatwością mieści projekty PHP.

Po skonfigurowaniu jest nawet dość łatwy do użycia przez nie-programistów, takich jak testerzy wdrażający wersję etapową.

Aby zapewnić jak najszybsze wdrożenie, zainstalowaliśmy fast_remote_cache metoda, która aktualizuje pamięć podręczną kopii roboczej svn na serwerze zdalnym, a następnie tworzy twardy link do wyniku.


14
2018-04-07 10:30





używam Apache Ant wdrożyć do różnych celów (dev, QA i live). Ant jest zaprojektowany do pracy w środowisku Java, ale dostarcza całkiem użyteczne ogólne rozwiązanie do rozmieszczania dowolnych plików.

Składnia pliku build.xml jest dość łatwa do nauczenia - definiujesz różne cele i ich zależności, które działają, gdy wywołasz program ant na linii poleceń.

Na przykład mam cele dla dev, QA i live, z których każdy zależy od celu cvsbuild, który sprawdza najnowszą wersję head z naszego serwera CVS, kopiuje odpowiednie pliki do katalogu build (używając tagu zestawu plików), a następnie rsyncs katalog kompilacji do odpowiedniego serwera. Jest kilka dziwactw do nauki, a krzywa uczenia się nie jest całkowicie płaska, ale robię to w ten sposób od lat bez żadnych problemów, więc polecam go dla twojej sytuacji, chociaż jestem ciekaw, jakie inne odpowiedzi mam zobaczysz na tym wątku.


7
2018-01-08 20:24





Robię rzeczy ręcznie za pomocą Git. Jedno repozytorium dla rozwoju, które dostaje git push --mirror"do publicznego repozytorium, a serwer na żywo jest trzecim odremontowanym. Przypuszczam, że ta część jest taka sama jak twoja konfiguracja.

Główną różnicą jest to, że używam gałęzi dla prawie każdej zmiany, nad którą pracuję (mam teraz około 5) i zazwyczaj odwracam się między nimi. Gałąź główna nie jest bezpośrednio zmieniana, z wyjątkiem łączenia innych gałęzi.

Uruchomę serwer na żywo bezpośrednio z głównego oddziału, a kiedy skończę z innym oddziałem i będę gotowy do jego scalenia, przerzucam serwer do tej gałęzi na jakiś czas. Jeśli się zepsuje, powrót do mistrza zajmuje kilka sekund. Jeśli to działa, zostaje scalone w master, a kod na żywo zostaje zaktualizowany. Przypuszczam, że analogię do tego w SVN byłoby mieć dwie kopie robocze i wskazać na żywo za pomocą dowiązania symbolicznego.


6
2018-01-09 01:56





wiem Phing był już wspominany kilka razy, ale miałem szczęście phpUnderControl. Dla nas my

  1. Sprawdź poszczególne kopie oddziałów na lokalnych maszynach
  2. Oddziały są testowane, a następnie łączone w Trunk
  3. Commits to Trunk są automatycznie budowane przez phpUnderControl, uruchamia testy i kompiluje całą dokumentację, stosuje delty bazy danych
  4. Trunk zostanie poddany testom jakości, a następnie połączony z naszą gałęzią stabilną
  5. Ponownie, phpUnderControl automatycznie buduje stabilne, uruchamia testy i generuje bazę danych dokumentacji i aktualizacji
  6. Kiedy jesteśmy gotowi, aby przejść do produkcji, uruchamiamy skrypt rsync, który tworzy kopię zapasową Produkcji, aktualizuje bazę danych, a następnie przesyła pliki do góry. Polecenie rsync jest wywoływane ręcznie, aby upewnić się, że ktoś ogląda promocję.

3
2018-01-09 02:21



phpUnderControl nie działa: | - m02ph3u5


Alternatywą dla skryptów instalacyjnych wykonywanych w domu jest wdrażanie na platformie jako usługa, która usuwa dla Ciebie wiele tej pracy. PaaS zwykle oferuje własne narzędzie do wdrażania kodu, a także skalowanie, odporność na awarie (np. Nie spada, gdy sprzęt się nie powiedzie), i zazwyczaj świetny zestaw narzędzi do monitorowania, sprawdzania dzienników itp. Istnieje również korzyść z wdrożenia do znana dobra konfiguracja, która będzie aktualizowana w czasie (jeden mniejszy ból głowy dla ciebie).

Polecam PaaS, który polecam dotCloud, oprócz PHP (zobacz ich szybki start PHP) może również wdrożyć MySQL, MongoDB i całą masę dodatkowych usług. Ma też fajne gadżety, takie jak zerowe przestoje, natychmiastowe wycofywanie, pełne wsparcie dla SSL i websocket itp. A jest jeszcze darmowy poziom, który zawsze jest miły :)

Oczywiście jestem nieco stronniczy, odkąd tam pracuję! Inne opcje warte sprawdzenia oprócz dotCloud to Pagodabox i Orchestra (obecnie część Engine Yard).

Mam nadzieję że to pomoże!

Salomon


3
2017-08-03 22:41





To, że automatycznie i na ślepo wprowadzasz zmiany z repozytorium do serwerów produkcyjnych, brzmi groźnie. Co jeśli twój zatwierdzony kod zawiera błąd regresji, więc twoja aplikacja produkcyjna wpadnie w panikę?

Ale, jeśli chcesz system Continuous Integration dla PHP, myślę Phing jest najlepszym wyborem dla PHP. Nie testowałem tego jednak samodzielnie, ponieważ robię rzeczy ręcznie, np. scp.


2
2018-01-08 20:15





Spóźniłem się na imprezę, ale myślałem, że podzielę się naszymi metodami. Używamy Phing z Phingistrano, który zapewnia funkcję podobną do Capistrano do Phinga za pomocą gotowych plików kompilacji. Jest bardzo fajny, ale działa tylko wtedy, gdy używasz Gita.


2
2018-02-17 15:04





Mam kopię roboczą gałęzi wydania SVN na serwerze. Aktualizacja witryny (gdy nie ma zmian w schemacie) jest tak łatwa jak wydanie polecenia aktualizacji SVN. Nie muszę nawet wyłączać witryny.


1
2018-01-09 00:46



więc masz katalogi .svn rozproszone po całej witrynie? mój purystyczny mózg sprzeciwia się temu :) - Stann
Zajmuje się tylko kodem źródłowym. Wdrożenia często wymagają innych działań - zastosowane zmiany bazy danych, wyczyszczenie pamięci podręcznej itp. - Leonid Mamchenkov