Przejdź do treści

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

GET /health

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

  • APP_DEBUG=false
  • HTTPS z certyfikatem SSL
  • Firewall (tylko 80/443)
  • Regularne backupy bazy
  • Aktualizacje bezpieczeństwa
  • Monitoring logów
  • Rate limiting na API