2009-08-15 13 views
5

Pracowałem w firmie zajmującej się tworzeniem stron internetowych, gdzie mieliśmy nasze lokalne maszyny, serwer pomostowy i kilka serwerów produkcyjnych. Pracowaliśmy na macach w perlu i używaliśmy svn do zatwierdzania scenariusza, a perlowania skryptów do ładowania na serwery produkcyjne. Teraz pracuję nad własnym projektem i chciałbym znaleźć dobre praktyki w zakresie tworzenia stron internetowych podczas korzystania ze współdzielonego hostingu internetowego i nie działającego w środowisku opartym na systemie Unix (z całą magią, jaką mogłem zrobić przy pomocy skryptów perl/bash/zadań cron itp.)Najlepsze praktyki wdrażania (php/mysql) do dzielonego hostingu?

Więc moje pytanie jest podane moje warunki, które są:

  • używam jednego standardu wspólne hosting od dostawcy zewnętrznego (z dostępem sSH)
  • pracuję z co najmniej jedną osobą i zamierzam użyć SVN do kontroli źródła
  • Pracuję nad php/mysql pod Windows (ale przy użyciu linux jest możliwe)

Jakie ustawienia proponujesz do testowania, wdrażania, migracji kodu/danych? Mam zainstalowany serwer xampp na moim komputerze lokalnym, ale nie byłem pewien, które metody używają do migracji danych itp. W systemie Windows.

Odpowiedz

10

Mam kilka projektów personnalnych PHP na współdzielonym hostingu; Oto kilka przemyśleń, od tego, co robię na jednym z tych (ten, który jest najbardziej aktywny, i potrzebuje co najmniej półautomatycznej synchronizacji):

Kilka słów o mojej konfiguracji :

  • Jakiś czas temu, miałem wszystko na SVN; teraz używam bazaar; ale idea jest taka sama (z wyjątkiem, z bazaru, mam lokalnej historii i wszystko)
  • Mam dostęp SSH do serwera produkcyjnego, jak ty
  • pracuję na Linuksie exclusivly (tak co zrobić, może nie być tak łatwo z oknami)

teraz jak pracuję:

  • Wszystko, co ma te znajdować się na serwerze produkcyjnym (kodu źródłowego, obrazy, .. .) jest zobowiązana do SVN/bazarr/cokolwiek
  • pracuję lokalnie, z Apache/PHP/MySQL (używam zrzut DB produkcyjnej importować lokalnie raz na jakiś czas)
  • jestem jedynym praca nad tym projektem; Prawdopodobnie byłoby to w porządku dla małego zespołu złożonego z 2/3 programistów, ale nie więcej.

co zrobiłem wcześniej:

  • miałem jakiś skrypt PHP, który sprawdzany serwer SVN do modyfikacji pomiędzy "ostatniej rewizji popychany do produkcji" i szef
    • zgaduję to domowej roboty Skrypt PHP wygląda jak skrypt Perla, którego obecnie używasz ^^
  • Ten skrypt zbudował listę katalogów/plików do przesłania do produkcji
  • I przesłałem te przez FTP dostęp
  • To nie było bardzo satysfakcjonujące (były błędy w moim skrypcie, przypuszczam; Nigdy nie miałem czasu, aby je poprawić); i zmusił mnie do zapamiętania numer wersji po raz ostatni I pchnął do produkcji (dobrze, było automatycznie zapisywane w pliku przez skrypt, więc nie jest trudno ^^)

Co mam teraz zrobić:

  • po przełączeniu na bazarze nie chciałem przerobić ten skrypt, który nie działa bardzo dobrze i tak
  • I spadły skrypt całkowicie
  • Jak mam ssh dostępu do serwera produkcyjnego , Używam rsync do synchronizacji od mojej maszyny programistycznej po serwer produkcyjny, kiedy to, co mam lokalnie, jest uważane za stabilne/gotowe do produkcji.

Kilka uwag na temat tego sposobu robienia rzeczy:

  • nie mam serwera pomostowego: moja lokalna konfiguracja jest wystarczająco blisko jeden
  • nieposiadające serwera pomostowego produkcji za jest OK, z prostego projektu z jednym lub dwoma developpers
  • Gdybym serwera pomostowego, pewnie bym go z:
    • zrobić „svn update” na niego, gdy chcesz STA ge
    • gdy jest OK, uruchom polecenie rsync z serwera pomostowego (który będzie ba w najnowszej „stabilnej” wersji, więc OK, aby być przekazywane do produkcji)
  • Z większego projektu, z więcej programistów, prawdopodobnie nie chciałbym wykonywać tego rodzaju konfiguracji; ale uważam, że jest to całkiem w porządku dla (niezbyt dużego) projektu osobowości.


Jedyne "specjalne" tutaj, co może być "linux-zorientowanych" jest za pomocą rsync; szybkie wyszukiwanie wydaje się wskazywać na plik wykonywalny rsync, który można zainstalować w systemie Windows: http://www.itefix.no/i2/node/10650

Jednak nigdy tego nie próbowałem.


Jak sidenote, oto co moje polecenie rsync wygląda następująco:

rsync --checksum \ 
    --ignore-times \ 
    --human-readable \ 
    --progress \ 
    --itemize-changes \ 
    --archive \ 
    --recursive \ 
    --update \ 
    --verbose \ 
    --executability \ 
    --delay-updates \ 
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ 
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ 
    /LOCAL_PATH/ \ 
    [email protected]:/REMOTE_PATH/ 

Używam prywatne/publiczne klucze mecanism, więc rsync nie pyta o hasło, btw.

I, oczywiście, ja zazwyczaj używają tego samego polecenia w trybie „na sucho” Po pierwsze, aby zobaczyć, co dzieje się synchorised, z opcją „--dry-run

A ignore-rsync.txt zawiera listę pliki, które nie chcą być odłożony do produkcji:

.svn 
cache/cbfeed/* 
cache/cbtpl/* 
cache/dcstaticcache/* 
cache/delicious.cache.html 
cache/versions/* 

Tutaj, po prostu zapobiec katalogi cache musi być odłożony do produkcji - wydaje się logiczne, aby nie wysyłać tych, jako dane produkcja nie jest taka sama jak rozwój dane.

(Ja tylko zauważyć tam jeszcze „.svn” w tym pliku ... mogę go usunąć, ponieważ nie używam SVN już dla tego projektu ^^)


Nadziei to pomaga trochę ...

+1

Bardzo dziękuję. Wciąż zdumiewa mnie nieraz wysiłek, jaki ludzie tacy jak ty wkładają w odpowiedzi z taką szczegółowością i jasnością. – zenna

+1

Nie ma za co :-) (Niektóre odpowiedzi dostaję i/lub widzę też mnie zadziwić ;-), więc kiedy mogę pomóc ... cóż, po to właśnie jest SO!) –

1

Jeśli chodzi o SVN, proponuję, abyś poszedł z dedykowanym hostem SVN takim jak beanstalk lub użył tego samego serwera do uruchomienia serwera SVN, aby obaj programiści mogli z niego skorzystać.

W tym drugim przypadku skrypt wdrażania po prostu przenosi bity do folderu sieciowego pomostowego (dostępnego przez beta.mysite.com), a następnie inny skrypt wdrażania może przenieść go do katalogu na żywo. Wdrażanie bezpośrednio w witrynie na żywo nie jest oczywiście dobrym pomysłem.

Jeśli zdecydujesz się na dedykowanego hosta lub chcesz wdrożyć z komputera na serwerze, użyj rsync. To także moja obecna konfiguracja. RSync wykonuje synchronizację różnicową (przez SSH), więc jest szybki i został zbudowany dla tego rodzaju rzeczy.

Wraz z rozwojem możesz zacząć używać narzędzi do budowania z testami jednostkowymi i innymi. Pozostaje tylko problem z synchronizacją danych.

I tylko synchronizuję dane ze zdalnego -> lokalnego i używam pliku wsadowego DOS, który robi to przez SSH, używając mysqldump. Cygwin jest przydatny dla komputerów z systemem Windows, ale można go pominąć. Skrypt importujący SQL uruchamia również zapytanie jednoliniowe, aby zaktualizować niektóre komórki, takie jak nazwa hosta i katalog główny dla lokalnego wdrożenia.

Po skonfigurowaniu można skoncentrować się na samym pisaniu kodu i zdalnym wdrażaniu, a lokalna synchronizacja i wdrażanie staje się procesem jednokrotnego kliknięcia.

+0

Dzięki, używam assembli dla hosta SVN, więc nie mogę naprawdę wykonywać skryptów na tym serwerze. – zenna

+0

Ponieważ kod jest zsynchronizowany na twoim komputerze, możesz uruchomić skrypty z własnej maszyny (lub twój partner może je uruchomić na swoim komputerze). Skrypty można również sprawdzić w magazynie. – aleemb

1

Jedną z opcji jest użycie dedykowanego środowiska dla tego zadania. Capistrano bardzo dobrze pasuje do języków skryptowych, takich jak php. Opiera się na Ruby, ale jeśli przeprowadzasz wyszukiwanie, powinieneś być w stanie znaleźć instrukcje, jak go używać do wdrażania aplikacji php.