Techniki Pracy
8 godz. 33 min · Laravel · Full-stack i Programowanie
Piotr PalarzWeb DeveloperKurs ten rozpoczniemy od omówienia czym jest framework Laravel i co może Ci zaoferować. Następnie zobaczysz jak skonfigurować środowisko do pracy lokalnej w formie wirtualnej maszyny z preinstalowanymi narzędziami, tj. PHP, MySQL czy serwerem nginx. Zobaczysz w jaki sposób tworzyć nowe projekty wykorzystujące Laravel, zrozumiesz strukturę katalogów projektu i skonfigurujesz polaczenie z baza danych.
W kursie nie znajdziesz czysto teoretycznych lekcji. Każda z części przybliżać nas bowiem będzie do finalnej wersji projektu, którym będzie aplikacja internetowego bloga. Funkcjonalności, które od podstaw zaimplementujemy, to m.in. dodawanie i wyświetlanie wpisów, tworzenie i przypisywanie tagów, komentowanie, rejestracja i logowanie użytkowników czy wyszukiwarka. Każda z nich odkryje przez Toba możliwości frameworka Laravel i jego sposoby na rozwiazywanie konkretnych problemów.
Laravel to framework oparty o wzorzec MVC. Na konkretnych przykładach zobaczysz co to oznacza. Tworzyć będziemy wspólnie kontrolery, do których przypiszemy stosowne adresy URL, modele, które reprezentować będą dane, a także widoki, które te dane sformatują, wplatając je w kod HTML.
Choć aby w pełni zrozumieć omawiane zagadnienia, należy znać podstawowe koncepcje relacyjnych baz danych, to pisanie zapytań SQL nie jest czymś, to będziemy musieli robić. Wszystko to za sprawa migracji oraz Eloquenta. Te pierwsze pozwolą nam zaprojektować strukturę tabel bazy danych i jedna komenda je utworzyć, a Eloquent posłuży nam do tworzenia, zapisywania i odczytywania modeli reprezentujących te dane. Wszystko to uzyskamy pisząc wyłącznie prosty kod PHP.W kursie nie zabraknie również informacji na temat tworzenia relacji. Zobaczysz m. in. jak skojarzyć autora w wpisem, jak dodawać tagi czy komentarze.
Te dwa pojęcia, choć podobne, różnią się od siebie. Pierwsze pozwala określić, czy logujący się użytkownik jest tym, za kogo się podaje. Drugie mówi nam, czy dana osoba może wykonać zadana akcje. Oba te koncepty zobaczysz w akcji na praktycznym przykładzie. Do naszego bloga dodamy pełen system autentykacji, tj. rejestracje, logowanie, resetowanie hasła i potwierdzanie adresu email. Zalogowani użytkownicy otrzymają dzięki temu bonus w postaci niewidocznych dla pozostałych osób wpisów premium. Aby zarządzać wpisami na blogu, stworzymy mini sekcje administracyjna, do której dostęp będzie miał wyłącznie użytkownik oznaczony jako administrator. Dowiesz się wówczas nie tylko jak pokazywać pewne widoki wyłącznie zautoryzowanym osobom, ale także jak zabezpieczyć kontrolery przed nieuprawnionym dostępem.
Oprócz wymienionych wyżej tematów, w kursie poruszymy również uploadowanie plików na serwer, sposoby tworzenia i wysyłania maili, prace z Front-endem, debugowanie aplikacji, korzystanie z rozszerzeń tworzonych przez aktywna społeczność Laravel czy techniki wdrażania aplikacji do produkcji. Ostatni temat będzie o tyle ciekawy, ze jest on często pomijany w materiałach tego typu. Z tym kursem Twoja aplikacja nie pozostanie wyłącznie na dysku Twojego komputera. Dowiesz się bowiem jak skonfigurować serwer VPS tak, aby wykorzystać tzw. zero-downtime deployment. Dwie komendy wystarcza wówczas do tego, aby w kilkanaście sekund nowa wersja Twojej aplikacji ukazała się światu. A wszystko to bez przerywania jej działania nawet na ułamek sekundy i bez wykorzystania płatnych rozwiązań!
Kurs ten jest dla wszystkich tych, którzy znają już podstawy języka PHP i koncepcje relacyjnych baz danych SQL oraz chcieliby przyjemnie i wydajnie tworzyć ambitne aplikacje internetowe. Znajomość samego frameworka Laravel lub podobnych rozwiązań nie jest jednak wymagana. Praca z frameworkiem omawiana jest stopniowo, od podstaw do bardziej zaawansowanych tematów. Jeśli zatem masz głowę pełną pomysłów, a chcesz uniknąć frustracji związanej z pisaniem wszystkiego od podstaw - koniecznie sięgnij po Laravel i zobacz jak to narzędzie pozwoli skupić Ci się na tym, co istotne!
5.8.x
W tej lekcji pokażę ci jak z użyciem deployer, a jest to takie narzędzie do
wdrażania aplikacji PHP'owych, jak możemy wdrożyć naszą aplikację
laravel. Ja korzystam na codzień z deployer'a, naprawdę świetnie to działa. Jeżeli
sobie to odpowiednio skonfigurujemy. Jest to darmowe i oferuje nam Zero Downtime Deployment. Będzie
to właśnie takie wdrażanie, które nie przerwie działania naszej strony, więc nawet jeżeli ktoś
będzie w trakcie zakupów na naszej stronie, możemy podmienić całą stronę i
nie zostanie taki proces zakupowy przerwany, więc jest bardzo ważne i
teraz to narzędzie można sobie zainstalować jeżeli masz Maca albo linux'a. Na Windowsie
niestety nie będzie działać, ale możemy go zainstalować również wewnątrz wirtualnej
maszyny, którą mamy na Linux'ie i wtedy będzie porządku, aczkolwiek, no,
to jest może bo trochę bardziej kłopotliwe, żeby z tej wirtualnej maszyny robić deployment'y, bo
musisz ją za każdym razem uruchomić, w każdym razie zainstalujemy sobie deployer'a w
takim razie w wirtualnej maszynie. Jeżeli masz Linux'a lub Maca, dokładnie te
same komendy możesz wykonać u siebie w terminalu i będzie działać. Natomiast
ja chcę je wykonać wewnątrz maszyny wirtualnej, więc zróbmy
sobie to po kolei, przejdziemy tutaj, jestem tutaj zalogowany. Pobierzemy deployer.phar,
następnie po prostu przeniesiemy go do katalogu user
local bin i nazwiemy jako dep i od tej pory on będzie dostępny pod
komendą dep po prostu, więc możemy z dep korzystać i teraz ostatnia
rzecz to będzie jeszcze nadanie mu uprawnień, żeby to był plik wykonywalny. No
i wystarczy, teraz za pomocą komendy dep zostanie utworzony plik deploy php,
ale ja już ten plik mam i on jest prekonfigurowany przeze
mnie wcześniej, więc po prostu pokażę ci jak on działa i teraz ważne, że deployer ma
różne przepisy, czyli list recipes i mamy
tutaj jedną z nich, jest to przepis na laravel. Możesz
zauważyć że tutaj są za pomocą takich różnych funkcji, to są funkcje właśnie tego deployer'a, konfigurowane
zadania laravel'owe, czyli na przykład task nazywa się artisan
app i tutaj deployer próbuje w deploy path, czyli tam gdzie jest
nasza aplikacja, uruchomić artisan, więc jak to
dokładnie wygląda, że tutaj jeździ się dobrze przyjrzysz, to są komendy artisan'owe, głównie
używane, a także linuksowe komendy, które robi deployer po to, żeby
na przykład w odpowiedni sposób nadać uprawnienia do plików i tak dalej. Tutaj
domyślnie writeable dirs to są te katalogi, więc deployer postara nadać
takie uprawnienia, żebyśmy nie mieli żadnych błędów na stronie, że na przykład
nasza aplikacja nie ma uprawnień do zapisywania w jakimś pliku. Jeżeli
chodzi o shared files to możesz zobaczyć, że tutaj jest to plik env, który
w poprzedniej lekcji zrobiliśmy, również storage, który tam otworzyliśmy. One
będą współdzielone pomiędzy poszczególnymi wdrożeniami, więc to
jest taki przepis, który możemy sobie zaimportować, więc ja tutaj utworzyłem plik deploy php,
troszeczkę jest przeze mnie on zmodyfikowany, dlatego że ja sobie dodałem jeszcze
takie sprawdzenie zaraz jak będziemy wykonywać deploy to zobaczysz
po co ono jest. Natomiast tutaj mamy właśnie ten przepis laravel. Ja sobie zawsze
go tutaj linkuje, jeżeli potrzebuje sprawdzić jak konkretne zadania wyglądają. Teraz
przejdziemy szybko przez konfigurację, możesz zobaczyć, że tutaj ustawiamy
użytkownika http na www-data. Jeżeli korzystasz z nginx'a domyślnie
tak będzie. Teraz repozytorium git'a, bo będziemy chcieli robić push repozytorium
git'a i ono będzie na naszym serwerze, a następnie deployer będzie z niego zaciągał
świeży kod, więc tutaj podajemy ścieżkę na serwerze gdzie to repozytorium się będzie
znajdować i możesz go umieścić na przykład w katalogu domowym użytkownika, ale
ja robię to zawsze w opt git i tutaj jest nasze repozytorium, więc teraz
sobie do repozytorium utworzymy. Ja jestem już tutaj na serwerze zalogowany,
przejdę do opt i chciałbym tutaj utworzyć katalog git, musimy tu zrobić
sudo, bo nie mamy dostępu do katalogu opt, więc
sudo i następnie mk dir git, okej. On się
utworzył i teraz będę chciał temu katalogowi nadać uprawnienia dla użytkownika
laravel, bo to on będzie wykonywał później push kodu, zatem wpiszemy
sudo chown minus r laravel,
to jest nazwa nazwa użytkownika, nazwa grupy i następnie nazwa katalogu,
czyli git. Teraz przejdę do git i już jako użytkownik laravel mogę tutaj sobie tworzyć
własne katalogi czy repozytoria. Na serwerze musisz mieć zainstalowanego git'a i wpiszemy
git init i następnie larablogger git,
natomiast chciałbym jeszcze zrobić tutaj bare, że to jest takie puste
repozytorium. Zauważ, że ono się tutaj pojawiło i jeżeli podejrzymy
ścieżkę to jest dokładnie ta ścieżka, którą podaliśmy tutaj, więc będzie
mógł deployer sobie stamtąd zaciągnąć zmiany. Teraz będziemy musieli skonfigurować
remote tego repozytorium u nas lokalnie, więc przejdziemy do tej wirtualnej
maszyny na które już mamy zainstalowane git. Jeżeli będziesz to robił na Macu to możesz
to zrobić nie wewnątrz wirtualnej maszyny, ale u siebie i w miejscu gdzie mamy to repozytorium,
jeżeli byśmy wpisali git status, to jak widzisz, coś nam się tutaj
pojawia, dlatego że git jest zainstalowany, a więc chcemy dodać znany, taki
adres remote, więc napiszemy git remote add
i teraz jest bardzo ważne, wpiszemy ssh, taki będzie protokół. Następnie
użytkownika, użytkownik jest to laravel. Tutaj musimy podać host,
czyli w moim przypadku jest to larablogger.pl port, domyślnie
jest to port 22 dla ssh, ale ja żeby zabezpieczyć serwer zawsze
zmieniam ten port na inny i w moim przypadku ten port jest to 2241, dlatego
tutaj podam i następnie ścieżka docelowa już do repozytorium, czyli
będzie to opt git i nazwaliśmy je larablogger git.
Okej, dodajmy sobie coś takiego, jeszcze
oczywiście nazwę musimy podać, czyli git remote add i nazwa nazwa to będzie production,
w ten sposób, jeżeli wpiszemy git
remote minus v, to widzimy, że tutaj mamy nadane różne
origin'y. Jeden z nich to jest ten, który ja mam skonfigurowany do pracy nad kursem,
a drugi to będzie teraz dodany właśnie production, czyli pierwszy to jest nazwa origin,
drugi nazwa production i teraz jak normalnie wykonujesz git push to tutaj będziesz
mógł wpisać git push production i wtedy wyślemy to na ten serwer. Natomiast ważne jest to, żeby
mieć skonfigurowane wcześniej klucze ssh, czyli musiałem na serwerze dodać
klucz ssh dla użytkownika laravel właśnie tej wirtualnej maszyny, w
której teraz jestem, po to żeby można było taki kod wysłać i to jest to o czym wspomniałem
wcześniej, to są troszeczkę bardziej zaawansowane koncepcję, z którymi jeżeli
jesteś zaznajomiony, to sobie poradzisz z tą konfiguracją, więc wtedy taki
kod będziemy mogli już wysyłać. No i spróbujemy czy to się uda zrobić, okej.
Teraz wpiszemy git push production i na
nasz serwer powinny zostać wysłane wszystkie pliki, całe repozytorium. Jak widzisz,
tak też się stało. Teraz jeżeli byśmy tutaj przeszli, mamy ten plik, jeżeli sprawdzimy
ile on zajmuje, to okaże się, że jest około megabajta, czyli
coś tutaj już pojawiło, nic tutaj nie będziemy zmieniać, tutaj po prostu będziemy wykonywać
takie push'e produkcyjne. Teraz natomiast przejdźmy sobie do var www, następnie do larablogger i
tutaj do html, jak widzisz na razie mamy tylko shared
skonfigurowany z plikiem env, natomiast będziemy chcieli wykonać
sobie właśnie deployment i to o czym wspomniałem wcześniej, że ja tutaj skonfigurowałem
parę rzeczy, bo nie chce w tym pliku, który jest dodawany do repozytorium zapisywać
nazwy użytkownika czy portu na którym mój serwer operuje, dlatego zrobiłem
to w ten sposób, że przy wykonywaniu deployer'a będziemy mogli podać użytkownika
jako zmienną właśnie taką środowiskową. Myśmy zmienną user
oraz port i one tutaj będą przechwycone i będą podstawione w odpowiednie
miejsce, dlatego że tutaj użytkownika, który po ssh się loguje oraz
port trzeba podać. Tutaj jest oczywiście nazwa hosta. Zatem teraz
prosta rzecz, mamy zainstalowane już deployer, wpiszemy
dep deploy i tyle
w zasadzie wystarczy. Powiem ci jeszcze, że tutaj można różne stage ustawiać, w razie czego
o tym doczytaj. Możesz mieć stage testowy i produkcyjny, możesz potem wpisać dep deploy na przykład test
do serwera testowego albo do tego samego serwera tylko do innych katalogów albo dep deploy
production samo dep deploy wykona nam to co tutaj mamy ustawione, ale to
nam nie zadziała, zobacz. Dlatego, że nie podaliśmy użytkownika i portu. To jest właśnie
to moje sprawdzenie, które ja sobie dodałem jakiś czas temu i żeby je podać, wpisujemy
tutaj user równa się nazwa użytkownika. W moim przypadku jest to laravel
i następnie port, w moim przypadku jest to tak jak mówiłem 2241
i dopiero teraz dep deploy i te zmiany zostaną przekazane jakby
do tego pliku i wszystko powinno się poprawnie wykonać. Nie mniej jednak
sprawdźmy. Czekamy
sobie, to może chwilę potrwać, ale fajne jest to, że oczywiście wszystko jest zautomatyzowane. Jeżeli
będą jakieś błędy, to nasza aplikacja po prostu się nie podmieni, ale o tym jeszcze za sekundę,
zadanie, które widzisz deploy vendors tak naprawdę na serwerze uruchamia composer'a
i ten composer instaluje wszystkie zależności, więc na serwerze oprócz tego, że trzeba
mieć zainstalowany php, php fpm do wykonywania właśnie
tych wszystkich procesów, nginx'a MySQL, no to jeszcze trzeba mieć composer'a. Na
koniec tej lekcji jeszcze powiem ci jak możesz zrobić to prościej. Jeżeli
nie wiesz jak skonfigurować serwer i można to za pomocą pewnego narzędzia, ona
jest płatne, dlatego pokażę go dopiero na końcu, nie będę pokazywał
jak z niego korzystać, ale zobaczysz, że również taka możliwość jest. Jeżeli
nie masz wiedzy temat zarządzania serwerami. Teraz po kolei wykonały
się wszystkie zadania. Ja jeszcze ci pokażę może w pliku, że mam kilka
zadań dodatkowo skonfigurowanych, czyli mówię po zadaniu, która nazywa się artisan config cache. Teraz skąd
ja wiem kiedy to zadanie się wykonuje? Otóż tutaj jest na samym dole lista
kiedy one się wykonują i widzę config cache to
gdzieś tutaj się znajdzie jest dokładnie tutaj. Że ono
jest tym właśnie miejscu, więc ja po nim chcę sobie wykonać zadanie artisan q restart. My w tym kursie
nie korzystaliśmy z kolejek, ale zostawiam tutaj na przyszłość, dlatego że może
to być bardzo przydatne. Dla mnie zawsze jest przydatne. Takie kolejki muszą być zrestartowane, żeby
załapały nowy kod. Następnie przed zadaniem symlink chcę wykonać
jeszcze migrate, którego domyślnie tutaj nie ma. Czyli fajne jest to, że jeżeli tutaj mamy jakieś
migracje i dodajemy na przykład jakąś nową tabelę w bazie danych, to kiedy zrobimy git
push production i wykonamy deployera, to również migrate się wykona i wszystko będzie
działać poprawnie. Jeżeli oczywiście nie popełniliśmy
jakiegoś błędu i teraz po zadaniu deploy failed, jeżeli
się z jakiegoś powodu nie uda to chcemy odblokować deploy unlock, to sprawi że będzie
można po raz kolejny skorzystać z zadania deploy, okej.
W każdym razie być może to się wszystko udało. Jeżeli teraz sobie zobaczymy co w tym katalogu
jest, to pojawił się katalog current, do którego pamiętasz być może linkowaliśmy
z nginx'a, czyli tutaj wskazuje serwer i teraz jak przyjdziemy do katalogu
current to się okaże, że jest tutaj cała nasza aplikacja, ale ten katalog current wrócę
do góry, jest symlinkowany, czyli on jest przekierowany do releases
1 i to releases jest właśnie tutaj jest. Jeżeli,
jeśli byśmy tam przeszli jest tutaj jeden. Po pierwsze sprawdźmy czy nasza strona zaczęła
działać. Jak widzisz tak, nie mamy żadnych wpisów, bo w bazie danych oczywiście
nic nie ma, ale strona już działa i teraz jeżeli byśmy tutaj przeszli
sobie to current to normalnie możemy wykonać php
artisan tinker i na przykład w tym tinkerze dodać sobie coś
do bazy danych albo możemy wykonać php artisan db:seed w
ten sposób i powinno nam się wszystko do bazy danych dodać
zobaczmy. Tutaj oczywiście ustawiliśmy w pliku env, że jesteśmy na
produkcji, więc on pyta czy pewno chcemy pewne rzeczy robić, bo jesteśmy w produkcji. Mówię
tak i pojawił nam się jakiś błąd, okej, wiemy o co chodzi. Ten
błąd się pojawił dlatego, że composer instaluje tutaj zależności tylko te, które
są potrzebne do produkcji, a pomija te development'ckie a Faker jest jedną
z development'ckich, dlatego tutaj akurat nam to seed'owanie bazy danych w ten sposób
z Faker'em nie zadziała. Moglibyśmy mieć te seeder'y napisane w inny sposób, na przykład z
pliku wczytywać jakieś dane i tak dalej. Nie mniej jednak nie jest to takie istotne, spróbujmy
sobie zarejestrować użytkownika. Wiemy, że pierwszy użytkownik zarejestrowany na naszej
stronie to będzie admin, dlatego ja się tutaj zarejestruje, wciskam
enter, i mail się jeszcze będzie wysyłał przez mailtrap'a
i mamy 500 Server Error, czyli coś poszło nie tak. Jak
widzisz już nie mamy komunikatu o błędzie, ale wygląda to w taki sposób, możemy tą templatkę
dostosować. Zatem jeżeli pojawi się błąd, to oczywiście warto będzie zerknąć
jaki to jest błąd. Przejdziemy sobie do storage, który jest też tutaj podlinkowany,
logs i tutaj zobaczymy te błędy, bo tak jak ci pokazywałem w lekcji o
błędach, one się będą pojawiać. Mogę wyświetlić taki błąd i zobaczymy na czym on
polega. To był błąd wcześniejszy z klasą faker, a
tutaj jest błąd o wysyłaniu wiadomości email. Okej, czyli jest ten sam
błąd, który mieliśmy wcześniej, jak widzisz tylko dlatego, że za dużo chcemy na sekundę wysłać
tych emaili, a nie pozwala na to mailtrap. Natomiast tutaj
domyślnie zmienilibyśmy to oczywiście na prawdziwe dane smtp,
ale wygląda na to, że użytkownik się zarejestrował tylko po prostu nie
otrzymamy maila. Okej, zatem wróćmy do aplikacji. Jeżeli teraz
tutaj przejdę to powinniśmy już być zarejestrowani. Tak też stało, jestem
od razu zalogowany, a więc ten błąd dla nas akurat tutaj nie jest kluczowy i istotny. Jestem
adminem, więc mogę utworzyć jakiś nowy wpis, spróbujmy. Może
nazwiemy go w ten sposób, wybierzemy że jest to type photo. Data będzie domyślna,
tagi możemy jakieś sobie dodać, na przykład photo image. Chcę,
żeby on był opublikowany, nie musi być wpisem premium i dodam mu jakiś obrazek,
okej. Sprawdźmy add post. No i się udało ten wpis się
pojawił. Jedna ważna uwaga. Jeżeli na przykład będziesz wysyłał obrazki
czy pliki na serwer i będziesz miał błędy że za dużo takie pik zajmuje to czasami
są to błędy konfiguracji samego php, ale często również wynika to z konfiguracji
nginx'a, który nie przyjmuje zbyt dużych plików. Tutaj ten plik nie był duży, więc
się wszystko udało i wierz mi lub nie, ale wszystko co tutaj robimy jest wykonywane na
prawdziwym serwerze. Nie jest to u mnie lokalnie. Jest to prawdziwy serwer z prawdziwą
domeną. No i jak widzisz wszystko nam tutaj ładnie działa, więc na koniec pokażę
ci jeszcze w jaki sposób możemy coś zmienić i jeżeli coś zmienisz jak
możemy zrobić deployment. Zatem wrócimy sobie do kodu, tutaj
jeszcze wykomentowałem jedno z zadań, dlatego że domyślnie deployer
wykonuje zadanie artisan cache clear i to jest w porządku, żeby wyczyścić
pamięć podręczną, ale nie zawsze. Ja w swoich aplikacjach wykorzystuje często pamięć
podręczną bazy danych redis do przechowywania kluczowych danych
i dlatego nie chcę żeby za każdym deployment'em te dane były czyszczone, a więc wtedy dodaje
sobie takie zadanie, czyli nadpisuje zadanie które w tym przepisie
znalazłem i dodaje sobie po prostu skipping, czyli chcę żeby to zadanie było pomijane.
Niemniej jednak tu może zostać to w ten sposób. Okej zatem co
możemy zmienić naszej aplikacji, żeby te zmiany na stronie zobaczyć, może
tutaj w pliku master sobie coś podmienimy, na przykład sam
tytuł. Tyle wystarczy, natomiast zapewniam cię jeżeli dodasz jakieś
migracje, zrobisz cokolwiek, co zrobiliśmy wcześniej, również będzie w porządku. Teraz przejdziemy
tutaj gdzie mamy repozytorium git'a i musimy te zmiany dodać, więc
napiszemy git add git commit. Zmiany trzeba
zacommit'ować. Napiszemy na przykład change app
version. To są jakieś zmiany, które wykonałeś, okej udało się
i teraz zrobimy git push production, czyli dwa kroki musisz
wykonać, żeby wdrożyć swoją aplikacje. Pierwszy z nich to jest git push production i
to wyślę kod na nasz serwer, a druga rzecz jest o
wpisanie tak jak mieliśmy wcześniej user laravel
podanie portu i napisanie dep deploy. Możemy tutaj również podać taką flagę
verbose i będziemy widzieć co się dokładnie dzieje. Jeżeli podamy dwa razy v,
to będziemy jeszcze mieć dokładniejsze info, a 3 razy to będzie już super dokładna
informacja jakie dokładnie komendy wykonuje deployer, więc możemy testowo sobie to
zrobić. Widzisz dokładnie każdą komendę, którą za nas wykonuje deployer,
nie musimy już przez FTP w jakiś sposób wgrywać naszej aplikacji, instalować zależności
composer'a i tak dalej. Wszystko dzieje się automatycznie i zauważ jak bardzo szybko ten
deployment się wykonał. W międzyczasie oczywiście każdy mógł korzystać z
naszej strony, bo dopiero kiedy się uda ten deployment zrobić kiedy wszystko
się zainstaluje to jest zrobione symlink i widać to tutaj czyli release,
który mieliśmy. Teraz jeśli tam przejdziemy w to
miejsce zrobię ls releases, to się okaże, że tutaj jest 1
i 2, dlatego, że możemy wykonywać również dep, zamiast deploy to
możemy wykonać rollback I wtedy cofniemy się do poprzedniego release'u,
czyli wydania. Teraz ten drugi został podlinkowany i jeżeli sobie przejdziemy
czy odświeżymy tutaj listę wpisując ll, to widzimy,
że katalog current, na który kieruje nginx, teraz kieruje już do releases 2. Jeżeli
przejdziemy na stronę i odświeżę najadę na tytuł, zauważ,
że w tym tytule pojawia się larablogger v2, czyli nasza strona została zaktualizowana
za pomocą deployer'a i jeżeli ktoś by klikał po tej stronie tutaj
coś robił, to nawet by nie zauważył momentu w to by się stało. Na
koniec jeszcze jedna ważna uwaga jeżeli chodzi o zasoby frontendowe. Powinniśmy
je tutaj budować, jeżeli zobaczymy plik package json,
to w tym pliku my uruchamialiśmy npm run watch, ale
jest tutaj również coś takiego jak run pro i to nam wykona produkcyjnego build'a,
więc warto również to robić i dopiero później wysyłać to wszystko na serwer. Możesz
skonfigurować sobie to tak, że za każdym razem jak będziesz wykonywał commit, to wykona
się również npm run prod. Możesz to zrobić z użyciem takiej paczki,
która nazywa się husky. Niemniej jednak, możemy to również zrobić ręcznie, bo już
tego husky nie będę tutaj konfigurował. Będąc tutaj wpiszemy npm run
prod. Wszystkie nasze zasoby czyli CSS,
JavaScript, one zostaną zoptymalizowane. Oczywiście plik, który tutaj mieliśmy
wcześniej mix-manifest również zaktualizuje te hash'e które są później
podstawiane tam gdzie linkujemy do tych zasobów. No i za moment
jeszcze raz wykonamy sobie deployment i te zasoby tam już będą wczytywane. Natomiast
zanim to się tutaj wykonuje, to pokażę ci że jeżeli podejrzymy źródło strony i zobaczymy
na przykład CSS to jak widzisz jest on nie zminifikowany. Za moment
jednak to ulegnie zmianie, ale zmieni się również tutaj jego hash, okej
to się udało i teraz jeszcze raz zrobimy sobie git add, dodamy wszystko git
commit, message to będzie add production assets. To
oczywiście warto robić przy każdym commit'cie, który zamierzasz wysłać na serwer, okej i
teraz znowu deployment, czyli git push production, to się wysyła dokładnie
na serwer i następnie raz jeszcze user i deploy.
Może tym razem już bez tych flag verbose. Poczekamy chwilkę i na
naszej stronie powinno być już wczytywane zoptymalizowane zasoby, ale jak wspomniałem jeżeli skorzystał byś
z husky, to jak będziesz robił commit, to automatycznie również te zasoby będą
optymalizowane. Teraz jeszcze raz przyjdziemy na naszą stronę, odświeżam i wszystkie
zasoby powinny być wczytane od nowa. Jeżeli zobaczymy main, jest to tym razem
już plik zminifikowany i podobnie będzie również z plikami JavaScript'owymi. Jak
zatem widzisz deployment jeżeli wszystko skonfigurujemy jest dziecinnie prosty. Pracuje lokalnie
nad swoją aplikacją. Dodaje ją do repozytorium git'a. Wykonuje git push production
i następnie dep deploy i aplikacja jest podmieniana w sposób
Zero Downtime, czyli cały czas można korzystać ze strony internetowej i
zostanie ona podmieniona i zsimlinkowana tak naprawdę w
ułamku sekundy, ale jest to tak zwane atomic symlink, więc nie ma możliwości,
żeby coś tutaj się popsuło. Na koniec pokażę ci jeszcze jedno rozwiązanie, jeżeli
nie potrafisz skonfigurować serwera VPS lub nie chcesz tego uczyć, mówię
tutaj o instalacji php nginx'a i wszystkich tych rzeczy. Nie jest bardzo skomplikowane,
aczkolwiek trzeba trochę nad tym popracować, to pokażę ci jak możesz to zrobić
automatycznie. Jest takie narzędzie które nazywa się laravel forge i ono
jest płatne, aczkolwiek pozwoli ci bardzo, bardzo prosty również
z użyciem tylko git'a wdrażać aplikacje. Skonfiguruję za ciebie
serwer w popularnych serwisach lub własny custom'owy VPS, który tutaj podasz
i następnie pozwoli ci git'em wysyłać tylko zmiany, a wszystko
będzie automatycznie wdrażane, czyli będzie jeszcze jeden krok mniej niż jest u nas.
U są dwa kroki git push i następnie deb deploy. Nie jest to żaden problem, tutaj
będzie jeszcze jeden krok mniej, więc w razie czego możesz również tego narzędzia skorzystać.