Laravel 12 – postavljanje aplikacija u produkciju
Laravel je PHP framework je poznat po svojim naprednim funkcionalnostima i aktivnoj zajednici. Najnovija verzija – Laravel 12 dolazi sa značajnim poboljšanjima u performansama, bezbednosti i organizaciji koda. Ipak, čak i sa svim tim unapređenjima, proces postavljanja Laravel aplikacije u produkciju može da bude izazov, posebno ako se prvi put susrećete sa nekim savremenim praksama u postavljanju aplikacija.
Zato ćemo u ovom tekstu objasniti kako da primenite neke savremene tehnike automatskog postavljanja Laravel 12 aplikacija, uz pomoć CI/CD sistema. Saznaćete kako da pripremite aplikaciju za produkciju, postavite sigurnosne parametre, podesite servere i sprovedete CI/CD procese uz minimalnu mogućnost grešaka i maksimalnu efikasnost.
Ako želite da se detaljno upoznate sa novitetima koje donosi Laravel 12, predlažemo da pročitate i naš tekst Laravel 12 – šta je novo?
Priprema aplikacije za produkciju
Pre nego što Laravel aplikaciju postavite u produkciju, važno je da pre svega budete sigurni da je ona spremna da funkcioniše optimalno, brzo i bezbedno. Laravel nudi veliki broj ugrađenih komandi za optimizaciju koje bi trebalo da pokrenete svaki put pre postavljanja. Ovo treba da uradite kako biste eliminisali nepotrebne fajlove, smanjili vreme učitavanja i povećali efikasnost.
composer install --optimize-autoloader --no-dev
npm ci
npm run build
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize
Bezbedno rukovanje .env fajlom
Nakon što optimizujete aplikaciju, sledeći korak je da pravilno podesite okruženjee. Laravel koristi .env fajl za čuvanje osetljivih informacija, ali u produkciji nikada ne bi trebalo da koristite isti fajl kao u razvojnom okruženju.
Naša preporuka je da napravite poseban .env fajl sa sledećim vrednostima, vodeći računa da zamenite sve podrazumevane lozinke, URL-ove i druge vrednosti stvarnim podacima specifičnim za vaše produkciono okruženje:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://vas-domen.com
DB_CONNECTION=mysql
DB_HOST=...
...
Ovaj fajl definiše produkciono okruženje i bezbednosne postavke. Nikada nemojte da ga ubacujete u verzionisani kod – .gitignore pravilo treba da ga isključuje.
Logging i monitoring
Nakon podešavanja okruženja, sledeći važan korak je nadzor nad radom aplikacije. Laravel koristi Monolog za logovanje i omogućava podešavanje različitih kanala za evidentiranje grešaka, informacija i obaveštenja.
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'level' => 'critical',
],
]
Izbor hosting rešenja za CI/CD – Cloud Server
Kada ste pripremili i obezbedili svoju aplikaciju, vreme je da donesete odluku o tome gde će se ona izvršavati i kako će se automatski postavljati u ta okruženja. Opšte je poznato da pravilan izbor hosting platforme ima ključnu ulogu u efikasnosti CI/CD procesa.
Za korisnike koji žele pouzdano i fleksibilno rešenje, mCloud VPS serveri pružaju odličnu osnovu za Laravel aplikacije i CI/CD automatizaciju. Pored potpune kontrole nad okruženjem, mCloud omogućava izbor između različitih konfiguracija (CPU, RAM, SSD), potpuni root pristup i mogućnost instalacije bilo koje verzije PHP-a, Node.js-a, baze podataka i ostalih servisa potrebnih za vašu Laravel aplikaciju.
mCloud VPS serveri su u potpunosti prilagodljivi i namenjeni naprednim korisnicima koji žele da upravljaju svakim aspektom serverske infrastrukture, od bezbednosti do performansi. Takođe, dostupne su opcije automatskog snapshot backup-a, kao i mogućnost skaliranja resursa kada se ukaže potreba.
Za kompleksnije potrebe, mCloud nudi i dodatne usluge kao što su firewall zaštita, i opcionalna DDoS zaštita, što omogućava bezbedno i skalabilno postavljanje Laravel aplikacija.
Automatizacija postavljanja Laravel aplikacija pomoću CI/CD
CI/CD se može implementirati na više načina, u zavisnosti od alata koji koristite i infrastrukture na kojoj hostujete aplikaciju. Laravel aplikacije se najčešće postavljaju uz pomoć GitHub Actions, GitLab CI/CD, Jenkins-a ili alata kao što su Envoyer i Laravel Forge.
U nastavku ćemo prikazati kako izgleda jedna praktična implementacija CI/CD procesa koristeći GitHub Actions, jer je jednostavan za podešavanje, direktno integriše sa GitHub repozitorijumima i odlično funkcioniše sa Laravel 12 aplikacijama.
Korišćenje GitHub Actions
GitHub Actions omogućava da direktno iz vašeg GitHub repozitorijuma definišete kompletan tok postavljanja aplikacije – od preuzimanja koda, preko instalacije zavisnosti i pokretanja testova, do postavljanja aplikacije na produkcioni server.
Prednost GitHub Actions je u njegovoj bliskoj integraciji sa GitHub platformom. Čim izvršite push na određenu granu (npr. main), automatski se pokreće unapred definisani niz koraka, poznat kao workflow. Ovakav pristup ne samo da ubrzava razvoj, već uvodi pojednostavljenje koraka, Svako postavljanje aplikacija se oslanja na iste korake, pa njihovo pojednostavljivanje smanjuje potencijalne ljudske greške.
GitHub Actions koristi YAML fajlove za opisivanje workflow-a, a Laravel projekti se savršeno uklapaju u ovaj sistem, budući da su već orijentisani ka komandnoj liniji i sadrže niz ugrađenih komandi za optimizaciju i pripremu za produkciju.
U nastavku ćemo prikazati kako izgleda jedan jednostavan, ali potpuno funkcionalan primer .yml fajla koji automatski postavlja Laravel aplikaciju svaki put kada se izvrši promena na glavnoj grani repozitorijuma.
Za Laravel 12, možete kreirati .github/workflows/deploy.yml fajl sa sledećim sadržajem:
name: Deploy Laravel Application
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, bcmath, redis
- name: Install Composer dependencies
run: composer install --no-dev --optimize-autoloader
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install NPM dependencies
run: npm ci
- name: Build assets
run: npm run build
- name: Run Laravel optimizations
run: |
php artisan config:cache
php artisan route:cache
php artisan view:cache
- name: Deploy to production server
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/laravel-app
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
Ovaj primer koristi appleboy/ssh-action za izvršavanje komandi na udaljenom serveru putem SSH pristupa. Sve osetljive vrednosti (poput hosta, korisničkog imena i privatnog ključa) čuvaju se u GitHub Secrets, čime se obezbeđuje dodatni nivo sigurnosti.
Migracije i rollback strategija
Neizostavan deo svakog postavljanja aplikacija je pravilno upravljanje bazom podataka. Laravelov sistem migracija omogućava da se struktura baze verzioniše kroz PHP kod, čime se eliminiše potreba za manuelnim izvršavanjem SQL skripti. Svaka promena, bilo da se dodaje nova kolona, tabela ili indeks, je opisana kroz migracioni fajl koji se može pokrenuti, pratiti, pa čak i vratiti unazad.
Međutim, uprkos tome što su migracije izuzetno moćan alat, u produkcionom okruženju svaka promena baze nosi rizik. Ako se neka migracija izvrši pogrešno, bilo zbog greške u kodu, neočekivane razlike u podacima ili razlike u verziji baze, može doći do ozbiljnih posledica.
Zbog toga je planiranje rollback strategije jednako važno kao i samo postavljanje koda. Prvi korak ka sigurnom procesu jeste pravljenje sigurnosne kopije baze podataka pre svakog postavljanja. Ovo se može automatizovati u okviru CI/CD pipeline-a ili obaviti ručno u manjim timovima. Idealno je da koristite alat poput mysqldump ili backup snapshot na mCloud VPS serverima.
Kada se pokrenu migracije, Laravel obezbeđuje mogućnost vraćanja promena pomoću komande:
php artisan migrate:rollback
Ova komanda će povući poslednju seriju migracija, odnosno sve one migracije koje su izvršene poslednji put zajedno.
Ukoliko želite još veću preciznost i kontrolu, možete koristiti --step opciju, koja omogućava rollback pojedinačnih migracija, redom unazad:
php artisan migrate:rollback --step=1
Ova strategija je posebno korisna kada želite da brzo reagujete u slučaju problema, bez vraćanja cele baze u prethodno stanje.
Pored toga, Laravel podržava i php artisan migrate:reset komandu, koja vraća sve migracije, ali se ona retko koristi u produkcionom okruženju i više je namenjena razvoju i testiranju.
Za dodatnu bezbednost, moguće je da kombinujete migracije sa seed-ovanjem (popunjavanjem test podataka) i --force flagom, kako bi se Laravel naterao da migracije izvrši i u produkcionom okruženju:
php artisan migrate --force
U suprotnom, Laravel će iz predostrožnosti odbiti da pokrene migracije na produkciji bez izričite dozvole.
Ukratko, bez obzira koliko su vam migracije poznate, svaki deployment mora biti strateški isplaniran: znajte šta menjate, imajte sigurnosnu kopiju i budite spremni da brzo izvršite rollback ako nešto pođe po zlu. Ovaj pristup značajno smanjuje rizike i povećava poverenje u automatizovani proces postavljanja aplikacije.
Praćenje performansi i grešaka nakon postavljanja aplikacije
Postavljanje aplikacije u produkciju nije kraj procesa. Tu tek počinje njeno pravo testiranje u stvarnom svetu. Bez obzira koliko detaljano obavite testiranje u razvoju i testnom okruženju, tek u produkciji dolazite u dodir sa stvarnim korisnicima, nepredvidivim interakcijama i raznim eksternim uslovima. Zbog toga je praćenje performansi i grešaka nakon postavljanja aplikacije ključni deo svakog ozbiljnog Laravel projekta.
Laravel nudi više načina za praćenje ponašanja aplikacije, a među najpouzdanijima su integracije sa servisima kao što su:
- Sentry – napredna platforma za otkrivanje i praćenje grešaka u realnom vremenu
- Bugsnag – analitički orijentisana alternativa, pogodna za detaljno praćenje stabilnosti
- Laravel Telescope – alat razvijen od strane Laravel tima, namenjen lokalnom praćenju zahteva, logova, upita ka bazi i još mnogo toga (idealno za debug u razvoju)
Među ovim rešenjima, Sentry se često koristi u produkcionim okruženjima zbog svoje jednostavne integracije i robusnog sistema za obaveštavanje i kategorizaciju grešaka.
Integracija sa Sentry-jem u Laravel aplikaciji zahteva samo osnovnu konfiguraciju — instalaciju Sentry SDK paketa i podešavanje DSN vrednosti u .env fajlu. U config/sentry.php, osnovna konfiguracija može da izgleda ovako:
'sentry' => [
'dsn' => env('SENTRY_LARAVEL_DSN'),
],
Kada je integracija završena, sve neočekivane greške i izuzeci biće automatski prijavljeni, zajedno sa kontekstom kao što su korisnički ID, URL, HTTP status, verzija aplikacije i drugo. Ovo vam omogućava da brzo reagujete, identifikujete uzrok i sprovedete korektivne mere bez potrebe za čekanjem reklamacija.
Pored grešaka, moderna rešenja za praćenje kao što su Sentry i Bugsnag nude i metrike performansi, poput vremena izvršavanja zahteva, brzine upita ka bazi i učestalosti određenih radnji. Time se dobija kompletna slika zdravlja aplikacije, što je ključno za proaktivno održavanje sistema.
Ako vam je potreban detaljan lokalni nadzor u fazi razvoja, Laravel Telescope je izuzetno koristan. On vam mogućava da u realnom vremenu posmatrate logove, upite, email-ove, događaje, keširanje i još mnogo toga, sve iz intuitivnog web interfejsa.
Na kraju, praćenje grešaka i performansi ne bi trebalo da se posmatra kao dodatak, već kao neodvojiv deo procesa postavljanja aplikacija. Aplikacije koje imaju postavljene sisteme za rano otkrivanje problema daleko su pouzdanije, otpornije na incidente i lakše se skaliraju i održavaju.
Zaključak
Postavljanje Laravel aplikacije u produkciono okruženje zahteva više od prostog prenosa koda na server. U pitanju je pažljivo isplaniran i tehnički precizan proces koji uključuje optimizaciju, bezbednosna podešavanja, automatizaciju, upravljanje migracijama i aktivno praćenje performansi nakon postavljanja aplikacije.
Savremene CI/CD prakse omogućavaju da se ovaj proces automatizuje i standardizuje, što ne samo da ubrzava razvoj, već i značajno smanjuje rizik od grešaka i nepredviđenih problema.
Korišćenje alata kao što su GitHub Actions, Laravelove ugrađene komande za optimizaciju, logovanje i nadzor, kao i prilagođena infrastruktura poput mCloud VPS servera, omogućava vam da napravite stabilan i skalabilan sistem za kontinuirani razvoj i postavljanje aplikacija.
