Technologie
Stack technologiczny — Laravel 12, PHP 8.2+ i ekosystem narzędzi.
Backend
Framework i język
| Technologia | Wersja | Zastosowanie |
| PHP | 8.2+ | Język programowania |
| Laravel | 12.x | Framework webowy |
| Composer | 2.x | Menedżer pakietów |
Baza danych
| Technologia | Zastosowanie |
| MySQL/MariaDB | Główna baza danych, cache, kolejki, sesje |
Pakiety Laravel
Autoryzacja i bezpieczeństwo
| Pakiet | Zastosowanie |
php-open-source-saver/jwt-auth | Uwierzytelnianie JWT |
spatie/laravel-permission | Role i uprawnienia |
Przetwarzanie danych
| Pakiet | Zastosowanie |
spatie/laravel-query-builder | Filtrowanie i sortowanie API |
spatie/laravel-media-library | Zarządzanie plikami |
spatie/laravel-activitylog | Dziennik aktywności |
Monitoring
| Pakiet | Zastosowanie |
spatie/laravel-health | Health checks |
Dokumenty
| Pakiet | Zastosowanie |
phpoffice/phpword | Generowanie DOCX |
Integracje polskie
| Pakiet | Zastosowanie |
mrcnpdlk/teryt-api | Rejestr TERYT (adresy) |
Infrastruktura
Kolejki i real-time
| Technologia | Zastosowanie |
| Database Queue Driver | Kolejki oparte na bazie danych (tabela jobs) |
| Laravel Reverb | WebSockets (real-time) |
Serwer
| Technologia | Zastosowanie |
| Nginx/Apache | Serwer HTTP |
| Supervisor | Zarządzanie procesami |
| Cron | Harmonogram zadań |
Integracje zewnętrzne
Płatności
| Usługa | Zastosowanie |
| Przelewy24 | Bramka płatności online |
Maile
| Usługa | Zastosowanie |
| SMTP | Wysyłka powiadomień email |
Wymagania systemowe
Minimalne
| Komponent | Wymaganie |
| PHP | 8.2+ |
| MySQL | 8.0+ lub MariaDB 10.4+ |
| RAM | 2 GB |
| Dysk | 10 GB |
Zalecane (produkcja)
| Komponent | Wymaganie |
| PHP | 8.3+ |
| MySQL | 8.0+ |
| RAM | 4+ GB |
| Dysk | 50+ GB SSD |
| CPU | 2+ rdzenie |
Rozszerzenia PHP
Wymagane
bcmath
ctype
curl
dom
fileinfo
gd
intl
json
mbstring
openssl
pdo
pdo_mysql
tokenizer
xml
zip
Zalecane
opcache
pcntl
posix
sodium
Konfiguracja środowiska
Plik .env
# Aplikacja
APP_NAME=Zajmijto
APP_ENV=production
APP_DEBUG=false
APP_URL=https://app.zajmij.to
# Baza danych
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=zajmijto
DB_USERNAME=user
DB_PASSWORD=secret
# Kolejki
QUEUE_CONNECTION=database
# Mail
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=user
MAIL_PASSWORD=secret
MAIL_ENCRYPTION=tls
# JWT
JWT_SECRET=your-secret-key
JWT_TTL=60
JWT_REFRESH_TTL=10080
# Przelewy24
P24_MERCHANT_ID=
P24_POS_ID=
P24_CRC=
P24_REPORT_KEY=
P24_TEST_MODE=true
Uruchomienie
Rozwój lokalny
# Instalacja zależności
composer install
# Migracje
php artisan migrate
# Seedy
php artisan db:seed
# Serwer deweloperski
php artisan serve
# Kolejki (osobny terminal dla każdej)
php artisan queue:work --queue=default
# WebSockets (osobny terminal)
php artisan reverb:start --port=6002
Produkcja
# Instalacja (bez dev)
composer install --no-dev --optimize-autoloader
# Cache konfiguracji
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Migracje
php artisan migrate --force
# Kolejki (via Supervisor)
php artisan queue:work --queue=default
# Scheduler (via Cron)
* * * * * cd /path && php artisan schedule:run >> /dev/null 2>&1
Supervisor (kolejki)
/etc/supervisor/conf.d/queue-default.conf
[program:queue-default]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/zajmijto/artisan queue:work --queue=default --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/zajmijto/storage/logs/queue-default.log
stopwaitsecs=3600
Analogicznie dla pozostałych kolejek: events, errors, notifications, domain, media-library, legal-documents, reports.
Komendy
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start queue-default:*
Nginx
Przykładowa konfiguracja
server {
listen 80;
server_name app.zajmij.to;
root /var/www/zajmijto/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Monitoring
Health Checks
Sprawdza: - Połączenie z bazą danych - Status kolejek - Miejsce na dysku - Wykorzystanie pamięci
Logi
| Lokalizacja | Zawartość | Rotacja |
storage/logs/laravel-YYYY-MM-DD.log | Logi aplikacji | 14 dni (daily) |
storage/logs/n1-queries-YYYY-MM-DD.log | Wykryte zapytania N+1 | 14 dni (daily) |
storage/logs/security-YYYY-MM-DD.log | Zdarzenia bezpieczeństwa | 90 dni (daily) |
storage/logs/lazy-loading-YYYY-MM-DD.log | Lazy loading violations | 14 dni (daily) |
storage/logs/queue-*.log | Logi kolejek (Docker) | 10 MB, 5 kopii |
Bezpieczeństwo
Zalecenia produkcyjne