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
Nasza aplikacja jest już gotowa i teraz tej i w kolejnej lekcji pokażę ci, w jaki
sposób ją wdrożyć na produkcje. Natomiast ważna uwaga jest taka, że będziesz musiał posiadać jakiekolwiek
doświadczenie w administracji takim serwerem linux'owym, bo będziemy potrzebowali
serwera VPS, który możesz wykupić już za kilkanaście złotych miesięcznie. Natomiast
dlaczego VPS, a nie hosting współdzielony. Aplikacje napisane z użyciem
laravel jest naprawdę trudno uruchomić na takim hostingu współdzielonym, gdzie być
może hostowałeś do tej pory na przykład Wordpress'a. Nawet jeżeli uda nam się to
zrobić, to czasem będą wychodzić kolejne ograniczenia takich hosting'ów, bo
tam często nie mamy dostępu do wszystkich plików konfiguracyjnych. Nie możemy wgrać sobie
dodatkowego oprogramowania, które w naszej aplikacji się przyda i tak dalej, więc generalnie w
tego typu aplikacje hostujemy na VPS'ach, a VPS jest to nic innego jak
po prostu wirtualny serwer, gdzie mamy powiedzmy czystą instalację linux'a,
tam nie ma PHP, nie ma nginx, nie ma apache, nie ma tam kompletnie
nic, wszystko musimy zainstalować sami. Ja już mam taki serwer VPS
skonfigurowany o tyle, że rzeczywiście utworzyłem sobie użytkownika, mam zainstalowane
tam PHP, MySQL i nginx. Natomiast w tej lekcji pokażę ci w jaki sposób
tego nginx'a skonfigurować i w kolejnej lekcji w jaki sposób tworzyć czy
robić automatyczny deployment. Niestety nie pokażę ci całości
konfiguracji tego serwera, bo to są już tematy typowo devops i w tym kursie musielibyśmy
jeszcze sporo czasu poświęcić na to żeby wszystko pokazać krok po kroku, ale zakładam, że
jeżeli jakąś wiedzę z tego tematu masz, to poradzisz sobie z instalacją wersji PHP
7.2 lub nawet 7.3 i MySQL i wszystkich potrzebnych
rzeczy. Co ważne warto również zerknąć na stronę dokumentacji laravel,
do sekcji deployment i tutaj możesz zobaczyć, w jaki sposób na
przykład skonfigurować nginx'a. Nasz plik konfiguracyjny, który za moment stworzymy będzie
bardzo do tego podobny, aczkolwiek ścieżki będą troszkę inne i będzie on
dostosowany do automatycznego deploymentu, który zrobimy w lekcji kolejnej, więc
to co jest dla nas istotne to będę chciał się zalogować ten serwer VPS,
ja już to zrobiłem, mam użytkownika o nazwie laravel i serwer
VPS o nazwie larablogger, to prawdziwy serwer, na który kieruje
domena larablogger.pl. W momencie kiedy ten kurs oglądasz oczywiście
ta dokmena może już nie istnieć, ale specjalnie wykupiłam ją do celów właśnie,
aby pokazać to wszystko na realnym serwerze. Mam już tutaj zainstalowany serwer nginx,
dlatego przystąpimy jego konfiguracji. Przejdziemy do etc nginx sites available
i tutaj mam utworzoną stronę, w zasadzie
jeszcze nie mam utworzonej. Jest tylko ta domyślna, czyli default. Utworzymy sobie plik za pomocą
Wima i tutaj trzeba utworzyć ten plik z użyciem
sudo, dlatego jesteśmy w katalogu, który nie należy do użytkownika laravel, czyli sudo
nano wim. W zasadzie nie nano tylko wim albo nano albo wim. Ja
wolę korzystać z wim'a, więc sudo wim i nazwiemy sobie to larablogger.pl. W
zasadzie bez znaczenia jak te pliki będziesz nazywał i teraz musimy
tutaj wkleić całą konfigurację, którą ja już mam tutaj. Pokażę ci
ją na szybko po pierwsze będziemy chcieli nasłuchiwać na http, tutaj
nie będziemy konfigurować https, bo musielibyśmy jeszcze certyfikaty generować i tak dalej
i z www będziemy przekierowywać na wersję bez www, którą
mamy tutaj. To jest blok konfiguracyjny. Będzie ten blok odpowiadał na larablogger.pl. Będzie
kierował i to jest ważne do katalogu, który za moment utworzymy www.larablogger.pl/html/current/public,
powiem o tym za chwilę więcej. No i tutaj jest miarę standardowa konfiguracja. Natomiast
jedna rzecz, która jest niesłychanie ważna to jest to, aby tutaj było realpath_root i
tutaj również realpath, dlatego że w różnych tutorialach w internecie można znaleźć wersję gdzie
tutaj jest inna zmienna, w tym momencie już nie pamiętam jej nazwy, ale ona sprawia, że
wszystko będzie działać, ale do momentu kiedy będziemy chcieli zrobić automatyczny
deployment w lekcji kolejnej, bo będzie to Zero Downtime Deployment, a więc taki
który pozwoli nam podmienić całą stronę, ale nie będzie przerwy w jej działaniu nawet
na jedną sekundę i to jest bardzo ważne i ta zmienna tutaj jest super istotna. Jeżeli
przy automatycznym deploymencie będą się pojawiać białe strony, to znaczy, że prawdopodobnie
tutaj nie masz tej zmiennej. Zatem ja to wszystko będę chciał skopiować, ważne
jeszcze tu ustawienie jest takie, że jeżeli masz wersję PHP 7.2, to należy
właśnie skierować na taki socket, jeżeli będzie to inna wersja, trzeba go będzie tutaj dostosować. Jego
nazwę również można zmienić tutaj oraz konfigurację PHP, ale są to tematy bardziej
zaawansowane. Ja zatem kopiuje cały ten plik i przejdziemy tutaj do wim'a, naciskamy
literkę i po to żeby coś wpisać i teraz insert
mode, wklejam normalnie Command V w moim przypadku albo Control V i to
tutaj się pojawiło. Teraz naciskam escape i następnie dwukropek
czyli Shift i średnik i wright quit, tak to powinno wyglądać
czyli wq i to nam się zapisze ten plik się tutaj pojawi, pamiętaj że
ja wykonuje wszystkie polecenia na serwerze VPS, to jest niezależne mojego Maca czy
Windows'a. Jesteśmy po prostu w systemie Ubuntu. Teraz musimy wykonać
symboliczny link sites-available do sites-enabled, więc
zrobimy to za pomocą sudo ln minus s i podamy pełną ścieżkę etc nginx sites-available
larablogger i będę chciał to podlinkować do etc nginx
sites-enabled larablogger.pl. To
oznacza tylko tyle, że w katalogu sites-enabled, pojawi się taki sam plik, ale
jeżeli my z tym katalogu tutaj coś zmienimy, tam też to będzie zmieniane, to jest tak jakby taki skrót,
tam utworzony, ale nginx właśnie sites-enabled korzysta. Teraz
możemy sprawdzić czy konfiguracja jest poprawna wpisując sudo nginx minus t. Jak
widzisz, widzimy, że konfiguracja jest poprawna. Nie ma tutaj żadnych błędów, ale zanim zrestartujemy nginx'a
musimy utworzyć sobie katalog, taki jak jest tutaj, więc ja
już mam utworzone var www, tego domyślnie może zupełnie nie być w systemie, więc
możesz śmiało utworzyć sobie katalog var oraz www sudo. Ja
taki katalog już utworzony mam, możemy zobaczyć var www. Natomiast
tutaj nic więcej nie ma, tutaj chciałbym utworzyć teraz właśnie takie katalogi jak
tam nam będą potrzebne czyli mk dir. Zrobimy
to również na razie sudo, mk dir minus p, żeby utworzyć również
podkatalogi i w tym miejscu chcę utworzyć katalog larablogger.pl,
następnie html. Ta struktura też jest dowolna i zobaczmy
co tam było dalej, current i public. Jeżeli chodzi o current public to
ważne jest to że ten katalog będzie tworzony automatycznie przy deployment'cie i będzie sym-linkowany
do aktualnej wersji, czyli będziemy mieli w osobnym katalogu wersję na przykład pierwszą
naszej aplikacji i link symboliczny zostanie utworzony do current, dzięki temu
nginx właśnie z tego current będzie pobierał naszą aplikację i on pokazywał użytkownikom. Jeżeli
zrobimy nową wersję to będzie utworzony katalog 2 i znowu podlinkowany
do current, więc tutaj nic nie trzeba będzie zmieniać. Okej, czyli utworzymy sobie to
ten sposób i musimy jeszcze nadać odpowiednie uprawnienia do tego katalogu,
bo jak widzisz root jest jego właścicielem, ale będziemy deployment z użyciem użytkownika
laravel, więc teraz wpiszemy sobie sudo, następnie
chown minus r, dodamy laravel
jako użytkownik, grupę również jako laravel i następnie katalog larablogger.
Okej, larablogger.pl oczywiście i teraz
jak zobaczymy to właścicielem tego katalogu jest już użytkownik laravel i o to
nam chodziło, natomiast sam katalog www nadal jest katalogiem użytkownika
root, okej. Teraz sobie przejdziemy do larablogger, przejdziemy
do html. I tutaj nic nie mamy, ale jeżeli byśmy na
szybko utworzyli sobie katalog tutaj już bez sudo, bo jestem użytkownikiem laravel i
ten katalog jest mój, więc mogę tutaj tworzyć. Jeżeli tutaj utworzymy katalog current i
public i przejdziemy do current public, a tutaj
z kolei utworzyłbym sobie za pomocą vim index.php, w który wpiszemy
coś takiego, naciskam i żeby być w insert mode, wpisze php i pod
spodem zrobimy na przykład echo Hello World, zapisuję write quit
i teraz musimy zrestartować jeszcze nginx'a, żeby on załapał wszystkie zmiany, więc
tu zrobimy sudo system ctl restart nginx,
okej. Powinno się to wszystko udać i teraz jeżeli w przeglądarce tutaj
przejdę do strony larablogger.pl. Jak
widzimy mamy Hello World, czyli wszystko działa poprawnie, zatem teraz wystarczy, żę
tutaj właśnie będzie tworzony katalog current oraz public, public będzie już naszego
release'u tak naprawdę, bo wiesz że my tutaj ten katalog public,
czyli wystarczy, że gdzieś będzie katalog z naszą całą aplikacją i on będzie
symlinkowany do katalogu current i ona już powinna działać, aczkolwiek jeszcze musimy
zrobić sobie kilka rzeczy. Wrócę dwa kroki do góry tutaj i
usunę na razie ten katalog current, bo on będzie automatycznie później tworzony. Natomiast
tutaj musimy utworzyć katalog, który będzie przechowywany poprzez różne
nasze deployment'y, czyli będzie mieć jedną wersję aplikacji, drugą, trzecią, ale
jest coś co pomiędzy nimi będzie wspólne i będzie to przede wszystkim plik konfiguracyjny env,
a także wspólny będzie katalog storage, o którym wielokrotnie mówiłem, gdzie mogą
być na przykład wgrywane przez nas do wpisów obrazki. Dlatego tutaj musimy utworzyć katalog
shared, przejdziemy do niego i w
tym katalogu będę chciał utworzyć plik storage czy w zasadzie katalog storage, bo
będzie on później linkowany oraz będę chciał otworzyć plik env, czyli napiszemy
wim env, tutaj trzeba będzie wkleić konfigurację,
właśnie taką jak mieliśmy tutaj, ale
będziemy musieli ją dostosować, więc skopiuje wszystko tutaj i żeby
wejść do insert mode i wszystko wklejam, ale musimy część rzeczy dostosować przede
wszystkim API URL, więc tutaj to już nie będzie larablogger.test,
ale larablogger.pl, APP_DEBUG musimy
ustawić na false, to oznacza, że jesteśmy już w produkcji, env również przestawiamy
na production. Od tego będzie zależało wiele rzeczy, które laravel wykonuje
czy na przykład wyświetla błędy czy nie, więc to jest istotne, żeby te dwie zmienić. Następnie
musimy ustawić połączenie z bazą danych, ja już, tak jak wspomniałem, mam zainstalowany
MySQL i utworzoną bazę danych o nazwie larablogger, natomiast użytkownik
jest inny tutaj. Też jest to larablogger i hasło
jest następujące. Pozostałe rzeczy tutaj w zasadzie mogłyby
zostać, możemy jeszcze ten mail dostosować ja go tutaj nie będę zmieniał na prawdziwy mail, pozostawimy
sobie mailtrap. Natomiast tutaj oczywiście podstawilibyśmy jakieś
dane smtp prawdziwego serwera. Natomiast może
to tak zostać. Zobaczymy czy jeszcze tutaj coś jest. Nie, więc naciskam escape
i teraz dwukropek write quit, ten plik się
tutaj powinien pojawić, oczywiście go nie widać, bo jest ukryty bo z kropką początku, ale jeżeli
zrobimy list of files to jest i możemy również podejrzeć jego treść. Jak
widzisz ten plik się tutaj znajduje i tak naprawdę to nam wystarczy w tej lekcji, a w kolejnej
pokażę ci jaki sposób możemy zautomatyzować już tutaj wdrażanie.
larablogger.pl · 3 min
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.larablogger.pl;
return 301 http://larablogger.pl$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name larablogger.pl;
charset utf-8;
root /var/www/larablogger.pl/html/current/public;
index index.php index.html index.htm;
error_page 401 403 404 405 /index.php;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}larablogger.pl · 3 min
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.larablogger.pl;
return 301 http://larablogger.pl$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name larablogger.pl;
charset utf-8;
root /var/www/larablogger.pl/html/current/public;
index index.php index.html index.htm;
error_page 401 403 404 405 /index.php;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}larablogger.pl · 3 min
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.larablogger.pl;
return 301 http://larablogger.pl$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name larablogger.pl;
charset utf-8;
root /var/www/larablogger.pl/html/current/public;
index index.php index.html index.htm;
error_page 401 403 404 405 /index.php;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}