Synchronizacja FTP za pomocą jednego kliku myszy

Niedawno pisałem o tym jak może wyglądać pełne środowisko programisty PHP. Dzisiaj dowiesz się jak za pomocą jednego kliknięcia przenieść wszystkie zmiany z lokalnej, deweloperskiej strony PHP na serwer WWW. Możesz wykorzystać ten sposób, niezależnie od tego czy korzystasz z darmowego konta na stronę, czy płatnego.  Przeważnie zawsze masz dostęp do konta przez FTP.

Część o której dzisiaj będę pisał to “publikacja nowej wersji” zgodnie z nomenklaturą przyjętą w ostatnim poście. Diagram tej akcji przedstawiam poniżej:

Diagram synchronizacji na FTP

Przeważnie strona PHP to zbiór różnych plików w folderach, tj. plików z rozszerzeniem PHP (skrypty), JS (Javascript), CSS, grafika itp. itd. Po stworzeniu nowej wersji strony programista musi przenieść swoje dzieło na serwer.

Problem polega na tym, że w projekcie mogły zajść zmiany w wielu plikach, a jeżeli cykl produkcji nowej wersji twa np. 2 tygodnie, już nikt nie pamięta w jakich plikach te zmiany zaszły.

Aby rozpoznać które pliki się zmieniły można spojrzeć na datę modyfikacji pliku i na jego rozmiar na serwerze i lokalnie. Pliki, które się zmieniły trzeba zaktualizować, a pozostałe można zostawić w spokoju nie zaglądając do ich wnętrza.

Jednak samo szukanie zmian i wrzucanie wybranych plików to monotonna i nudna czynność. Hej! Przecież Twój komputer świetnie sobie z tym poradzi!

Jednym z programów, które mogą służyć do zrealizowania tego zadania jest WinSCP. Program jest darmowy, open source, a w dodatku w języku polskim.

Jeżeli chcesz użyć innego progamu upewnij się, że narzędzie to umożliwia:

  • Wywoływanie z linii poleceń
  • Filtrowanie plików i folderów do synchronizacji
  • Synchronizację wg. daty modyfikacji albo rozmiaru pliku
  • Tworzenie skryptów synchronizacji
  • (opcjonalnie: jest darmowe, open source i po polsku)
Czytaj podobne  Koszty konserwacji oprogramowania

WinSCP spełnia te wymagania, a ponadto zawiera GUI w którym można łatwo skonfigurować konto FTP.

Po pierwszym uruchomieniu WinSCP pojawia się okno konfiguracji sesji. W tym oknie podajemy adres hosta FTP, login i jako protokół: FTP. Nie podajemy hasła ze względów bezpieczeństwa i wybieramy Save… i podajemy krótką, łatwą do zapamiętania nazwę np. ‘polishwords’.

Po zapisaniu sesji można już zamknąć GUI aplikacji i przejść do linii poleceń (cmd.exe) i wejść do foldera  z programem WinSCP. Żeby zobaczyć wszystkie komendy wystarczy wpisać WinSCP.exe /? albo przejrzeć stronę WWW programu. Uwaga: Twój plik programu może nazywać się inaczej np. winscp421.exe.

Do realizacji naszego celu potrzebna będzie jednak tylko jedna prosta komenda:

winscp.exe <nazwa_sesji> /console /script=<skrypt>.txt

Nazwa sesji to konto FTP które skonfigurowaliśmy wcześniej (polishwords), parametr console powoduje, że program będzie wykonywać się w oknie konsoli, a parametr script określa nazwę pliku tekstowego ze skryptem. W tym pliku można umieścić wszystkie operacje jakie ma wykonać program. W moim przypadku będzie to:

winscp.exe polishwords /console /script=polishwords_synchro.txt

Dla wygody można też utworzyć plik polishwords_synchro.bat i umieścić w nim powyższą linijkę. Ale najważniejsze jest teraz, żeby wypełnić plik polishwords_synchro.txt. Po pełną listę komend dostępnych do użycia w skrypcie odsyłam tutaj, a teraz przedstawię konkretne rozwiązanie.

Jak pamiętasz pisałem, że projekt zawsze powinien być pod kontrolą wersji. Jeżeli używa się SVN, to tworzy on w każdym folderze projektu folder o nazwie .svn, gdzie trzyma swoje “śmieci”. Jest to jeden z folderów, który nie jest potrzebny na serwerze produkcyjnym. Aby go wyłączyć spod synchronizacji wpisujemy do pliku polishwords_synchro.txt:

option exclude “*.svn”

Żeby natomiast dołączyć wszystkie pliki projektu wpisujemy:

option include “*/”

W skrypcie każda z powyższych opcji może występować tylko raz. Aby więc np. wyłączyć z synchronizacji foldery svn i plik konfiguracji (na serwerze produkcyjnym mam inną konfigurację niż u siebie) bkconfigs.php wpisuję obiekty oddzielając je średnikami:

option exclude “*.svn;*/”

Teraz ważna informacja: podczas pierwszej synchronizacji warto przyjrzeć się liście plików, które są wyświetlane na bieżąco i zgodnie z obserwacjami rozszerzać powyższe maski tak, aby tylko pliki, które zmieniasz i które powinny wylądować na serwerze produkcyjnym były synchronizowane. Czym mniej do synchronizacji tym szybciej będzie ona przebiegać.

Ostatnią operacją do wykonania jest odpalenie synchronizacji. Aby to zrobić wpisujemy:

synchronize remote “C:\apache\www\polishwords332” “\www”
exit

Pierwszy argument polecenia synchronizacji to kierunek. Remote oznacza synchronizację plików z foldera lokalnego na serwer FTP. Drugi argument określa folder lokalny, w tym wypadku mój folder ze stroną Polishwords, a trzeci parametr to ścieżka na FTP, gdzie znajduje się strona. Jeżeli po zalogowaniu się np. Total Commanderem od razu widzisz folder swojej strony, to zapewne będzie to po prostu ukośnik \.

Polecenie exit zamyka wykonywanie skryptu.

Jeszcze jedna ważna rzecz: jak wspominałem na początku nie warto jest podawać w opcjach sesji hasła ze względów bezpieczeństwa. Po odpaleniu program WinSCP sam zapyta się  nas o hasło, po czym przejdzie do realizacji zadania.

Zachęcam do eksperymentowania z tym programem i szukania dalszych usprawnień tego procesu. Celem jest osiągnięcie takiego poziomu, kiedy przeniesienie strony z komputera deweloperskiego na serwer produkcyjny trwa krótko i wymaga tylko jednego kliku. Docenisz to, kiedy zbliża się deadline i musisz wielokrotnie i często aktualizować stronę na koncie WWW klienta.

A na koniec jeszcze komentarz od osoby o nicku “fajnie”:

Według mnie brakuje testów automatycznych (jednostkowych i np. sellenium), które odpalą się na serwerze beta po wgraniu nowej wersji BETA jak i oczywiście podczas pisania softu na localhoscie 😉

Obawiam się, że testy mogłby być same w sobie tematem dla całego bloga 😉 Ale postaram się później napisać trochę o testach, śledzeniu błędów i raportowaniu. Teraz jak patrzę na rysunek to jeszcze tam brakuje zupełnie robienia backupów 🙂

Przeczytaj też

Najlepsza książka do Pythona Nie wiesz, z jakiej książki/ebooka uczyć się programowania w języku Python? Postanowiłem zrobić zestawienie 10 książek z Heliona na ten temat, abyś mó...
Komplet 28 ebooków i kursów, aby zostać programist... Od jakiegoś czasu dostaję zapytania na temat tego jakie książki, kursy i ebooki polecam. W związku z tym postanowiłem przygotować dzisiaj zestaw, któr...
120 tapet programistycznych za darmo do pobrania Trochę mi się nudziło, więc przygotowałem zestaw 120 tapet dla programistów. Możesz go pobrać. Tapety są w rozdzielczości 1366x768. Podzielone ...
10 fiszek do nauki programowania w Pythonie Uczysz się programowania w Pythonie? Pobierz te 10 fiszek, które ułatwią Ci zapamiętanie funkcji wbudowanych* w Pythona! Programowanie potrafi ...
Napisano w Kolumna Tagi: , , , , , , , , , ,
5 comments on “Synchronizacja FTP za pomocą jednego kliku myszy
  1. PiotrekJ pisze:

    Osobiście wole od razu robić wszystko przez FTP’a i co jakiś czas robię backup ze stanem na dany dzień.

  2. Przydało się, dzięki 🙂

  3. Bolo pisze:

    A czy WinSCP również usunie pliki czy katalogi jeśli na tym polegała modyfikacja??

  4. x_tro pisze:

    Świetny pomysł z WinSCP, WIELKIE dzięki!
    A od siebie dodam jeśliby ktoś szukał, pod Unixami jeśli nie można Rsync’a użyć to po FTP polecam: Csync, ftpsync, lftp.

  5. x_tro pisze:

    Synchronizacja z użyciem WinSCP na przykładzie WordPress’a:

    polishwords.bat:
    winscp polishwords /script=”c:\program files\winscp\polishwords.txt”

    polishwords.txt:
    option echo on
    option include “*; */”
    option exclude “*.svn; .svn; blogs.dir; uploads; wp-config.php”
    synchronize remote c:\wamp\www\polishwords /polishwords -mirror -delete
    cd /polishwords/wp-content
    option batch continue
    mkdir blogs.dir
    mkdir uploads
    exit

Menu