Jesteś webdeveloperem, ale Twoim najczęstszym narzędziem styczności z serwerem jest FTP? Dobrze znać choćby podstawy basha i tego, w jaki sposób do pracy wykorzystać terminal – w tym prostym wpisie pokażę Ci jak za pomocą kilku prostych poleceń szybko i bezboleśnie przenieść nawet dużą aplikację na inny serwer.
SSH pozwala na wykonywanie wszystkich komend na serwerze, między innymi takich jak kopiowanie plików, zipowanie określonych katalogów czy też ich wypakowanie. Za pomocą skryptów te działania możemy również automatyzować. Gdy poznasz już podstawowe komendy SSH będziesz mógł wykonać wiele operacji, które do tej pory były kłopotliwe.
Wyobraź sobie, że Twoja strona na wordpress, jest przenoszona przez FTP. Plik po pliku przesyłana duża ilość załączników. Może to z powodu samego procesu trwać bardzo długo. Analogicznie w przypadku SSH, nawet z zablokowanymi możliwościami przenoszenia plików możesz to zrobić znacznie szybciej. Po pierwsze, spakujemy wszystkie pliki do zipa, następnie je przeniesiemy, szybko – jako jedno archiwum, by w końcu wypakować i w kilka sekund wykonać deploy projektu.
Jeśli korzystasz z systemu linux, lub mac – posiadasz już systemowy terminal, z którego skorzystamy lokalnie. Jeśli używasz windowsa, zainstaluj narzędzie Putty – zastąpi Ci ono systemowy terminal, dodając narzędzia niezbędne do korzystania z przedstawionych tutaj komend. Jest to niezbędne, bo windowsowe cmd, to zupełnie inny program, niż te UNIXowe – to wyjaśnia też, dlaczego tak wielu developerów używa mac’a, czy linuxa 🙂
Pobierz Putty na Windows: https://www.putty.org/
Lokalne przygotowanie projektu
Na początek zakładam, że zip jest zainstalowany w Twoim systemie – nie musi tak jednak wcale być. By to sprawdzić wpisz komendę zip, jeśli wyskoczy błąd narzędzie możesz z łatwością zainstalować, za pomocą 2 komend:
sudo apt-get install zip
sudo apt-get install unzip
Po pierwsze spakujmy ZIPa lokalnie. By to zrobić musimy przejść do naszego projektu na dysku. Sprawdźmy gdzie się aktualnie znajdujemy – umożliwi to polecenie pwd
pwd
Wyświetli ono aktualną ścieżkę twojego katalogu. Czas przejść do interesującego nas katalogu, załóżmy że jest to /Users/admin/project. By przejść do katalogu należy użyć polecenia cd – a więc:
cd /Users/admin/project
Jeśli jednak aktualnie znajdujesz się w swoim katalogu domowym (/Users/admin) – wykorzystaj aktualną ścieżkę i wpisz polecenie
cd ./project
To analogiczne do tego co zrobiliśmy, istnieją specjalne ścieżki takie jak:
. – aktualny katalog
.. – katalog wyżej
. - aktualny katalog
.. - katalog wyżej
Jeśli więc jesteśmy w katalogu /Users/admin/project/wp-content możemy przejść szybko do całego projektu wpisując
cd ..
Proste – proste. Niedługo dowiesz się jak bardzo użyteczne. Na katalogu projektu wykonajmy polecenie zip.
zip -r nazwa.zip .
Utworzy on zip z wszystkimi plikami z aktualnego katalogu. Jeśli natomiast chcemy utworzyć plik z dowolnego miejsca, wcale nie musimy przechodzić do katalogu projektu – wystarczy zamiast . podać ścieżkę projektu.
zip -r nazwa.zip /Users/admin/project
Ok – to praca lokalna załatwiona 🙂
SSH na serwerze, czyli terminale wszystkich serwerów – łączmy się 😉
Zakładamy hipotetycznie, że otrzymujemy takie dane do serwera na którym aktualnie posiadamy naszą stronę:
Login: user
Hasło: supertajne
Adres SSH: ssh.cluster000.hosting.ovh.net
Port: 21 (standardowo 22, ale dla przykładu utrudnimy sobie życie)
By połączyć się przez ssh należy użyć następującej składni:
user@ssh.cluster000.hosting.ovh.net -p 21
Myślę, że wszystko jest jasne. Najpierw podajemy nazwę użytkownika, później po małpce adres a następnie podajemy port. O hasło zostaniemy zapytani od razu po połączeniu.
Przenoszenie plików między serwerami
Masz już spakowane wszystkie pliki. Czas przenieść je na inny serwer. Tutaj masz 2 możliwości – możesz to zrobić za pomocą SCP, lub standardowo, za pomocą FTP. W przypadku SCP może się jednak okazać, że spotkasz się z firewallem i ze względów bezpieczeństwa trudno będzie w ten sposób przesłać pliki. Komenda scp ma następującą strukturę:
scp login@serwer_zrodlowy:katalog login2@serwer_docelowy:katalog
Jako że nasz poradnik jest kierowany głównie do początkujących, zakładam że plik z zipem przenosimy standardowo, przez FTP. Nie każdy hosting pozwala na wykonywanie polecenia scp, stąd też łatwiej może być wykorzystać standardowego, znanego ci FTP.
Pozostaje jednak jeszcze jedna, bardzo ważna sprawa – upewnij się, że pliki które spakowałeś nie są dostępne z poziomu WWW. Gdy je pakujesz najlepiej robić to w katalogu niedostępnym publicznie (poza public_html, lub innym katalogiem bezpośrednio udostępniającym pliki). Nie chcesz przecież udostępniać całego swojego projektu, plików i pracy obcym. Na wszelki wypadek po przeniesieniu usuń pliki z FTP lub za pomocą komendy rm
rm nazwa_pliku.zip
Instalacja strony na serwerze docelowym
Zakładam, że plik ze spakowanymi źródłami udało Ci się przesłać na serwer, zostaje ostatnia sprawa – instalacja. Warto by było, byś przed rozpakowaniem plików umieścił katalog dokładnie tam, gdzie ostatecznie ma się znaleść. Możesz przenieść sam plik, możesz ustawić miejsce docelowe dla rozpakowania – wszystko zależy od Ciebie. Nie chcesz jednak męczyć się z przenoszeniem już wypakowanych plików w miejsce w które powinny być wypakowane, dlatego warto o tym pamiętać jeszcze przed wykonaniem odpowiedniej komendy.
Aby przenieść plik za pomocą konsoli możesz użyć komendy mv
mv katalog/aktualny/nazwa_pliku.zip katalog/docelowy
Czas wypakować nasze pliki, za pomocą komendy unzip.
unzip nazwa_pliku.zip
Oczywiście zakładamy, że plik znajduje się w aktualnym katalogu. Jeśli podczas wypakowania chciałbyś przenieść zawartość zipa do podanego katalogu możesz to zrobić za pomocą parametru -d.
unzip nazwa_pliku.zip -d katalog/docelowy
Pliki przeniesione i robota załatwiona. Oczywiście pozostaje jeszcze przeniesienie baz danych, maili czy innych plików, ale teraz wiesz przynajmniej jak można zrobić to szybciej 🙂
Warto poznać sposób działania SSH. Przyda Ci się to w przyszłości na Twojej dalszej developerskiej drodze 🙂