Přeskočit na hlavní obsah

Konfigurace projektu

Konfigurace a nejdůležitější nastavení projektu.

Dobrá zpráva

Po instalaci projektu není potřeba nic měnit či přenastavovat. Je ale dobré, možnosti nastavení znát.

Environment proměnné

V .env souboru najdete veškrá nastavení projektu. Od nastavení aplikace, přes přepínání do produkčního módu, logování, připojení k databázi a úložišti (AWS S3) až po SMTP a debugger.

Hlavní výhodou environment proměnných je to, že je snadno změníte pro různé prostředí (dev, staging, production). V kapitolách nasazení na server si pak ukážeme, jak je nastavit na produkčním serveru pro konkrétní projekt.

.env
APP_URL=http://localhost:8090
APP_NAME=dev-appname
APP_ENVIRONMENT=develop
APP_TIME_ZONE=Europe/Prague
APP_TRUSTED_PROXIES=192.168.0.0/16,172.16.0.0/12,10.0.0.0/8
APP_STORAGE_ADAPTER=s3

AUTH_EXPIRATION=1day
AUTH_STRICT_RESOURCES=false

LOG_MAIL=
LOG_S3_BLUESCREEN=false
LOG_SENTRY_DSN=

#DB_DRIVER=pdo_sqlite
#DB_SQLITE_FILE=db.sqlite3
DB_DRIVER=pdo_pgsql
DB_HOST=postgres
DB_PORT=5432
DB_USERNAME=root
DB_PASSWORD=root
DB_DATABASE=dev-appname

S3_ENDPOINT=https://s3.eu-central-1.amazonaws.com
S3_REGION=eu-central-1
S3_BUCKET=dev-appname
S3_KEY=
S3_SECRET=

SMTP_SENDER=fw@strategio.dev
SMTP_HOST=email-smtp.eu-central-1.amazonaws.com
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_PORT=465
SMTP_SECURE=ssl

TRACY_EDITOR=phpstorm://open?file=%file&line=%line
TRACY_EDITOR_MAPPING=/Users/jz/www/<local_project_path>

Admin panel

Admin panel je naprogramován jako Vue aplikace a je možné ho nastavit dle potřeb pro každý váš projekt. Veškeré nastavení lze upravit v souboru assets/panel.ts. Kompletní dokumentace megio panelu je zde.

assets/panel.ts
// Minimal setup
import 'megio-panel/styles'
import { createMegioPanel } from 'megio-panel'

createMegioPanel(window.location.host.includes('localhost') ? 'http://localhost:8090/' : '/')

DI container

V souboru config/app.neon můžete registrovat vlastní služby. Zároveň zde můžete načítat i další .neon soubory nebo registrovat celá DI rozšíření jako je například contributte/translations.

Long story short: Pokud do DI zaregistrujete nějakou třídu (službu), automaticky se vytvoří její továrnička. Chytrý auto-wiring zajistí, že služba bude dostupná v kterémkoli konstruktoru ostatních tříd - to vám zabezpečí, zrychlí, zpřehlední a zkrátí kód. Pokud jste se s Nette\DI ještě nesetkali, prostudujte si tuto dokumentaci.

config/app.neon
# Registrace entity manageru a user-create commandu
services:
entityManager: App\Database\EntityManager
- App\Console\UserCreateCommand

# Načtení dalších neon souborů
includes:
- ./../vendor/strategio/megio-core/config/app.neon
- ./../vendor/strategio/megio-core/config/events.neon

# Registrace vlastních event subscriberů
events:
- App\Subscriber\Collection\OnUserCreated
#- Megio\Subscriber\RedirectToWww

# Načtení dalších DI extensions
extensions:
doctrine: Megio\Extension\Doctrine\DoctrineExtension
events: Megio\Extension\Events\EventsExtension
latte: Megio\Extension\Latte\LatteExtension

Docker compose

V případě použití Dockeru pro lokální vývoj je dobré umět pracovat se souborem docker-compose.yml, ve kterém specifikujete, které serverové balíčky (images) se mají sestavit pro lokální vývoj. Pokud bychom například chtěli zapnout Postgres databázi, stačí odkomentovat řádky a spustit příkaz ./project.sh serve.

version: '3'

networks:
megio-apps:

services:
app:
build:
context: .
dockerfile: Dockerfile
restart: "no"
networks:
- megio-apps
ports:
- "8090:80"
volumes:
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/http.d/default.conf:/etc/nginx/http.d/default.conf
- ./docker/php/php.ini:/usr/local/etc/php/conf.d/php.ini
- $PWD:/var/www/html:cached

# postgres:
# image: postgres:16
# #restart: on-failure because postgres shutdown on first creation (permissions problem)
# restart: "on-failure"
# environment:
# POSTGRES_USER: ${DB_USERNAME}
# POSTGRES_PASSWORD: ${DB_PASSWORD}
# POSTGRES_DB: ${DB_DATABASE}
# networks:
# - megio-apps
# ports:
# - "${DB_PORT}:5432"
# volumes:
# - ./docker/temp/postgres:/var/lib/postgresql/data:cached