Lokalny setup backendu
Aktualnie dostępne są dwie wersje backendu:
- v2 - oparty na frameworku AdonisJS, aktualnie wdrożony na produkcji.
- v3 - oparty na frameworku NestJS, nowa wersja w trakcie wdrażania.
Instrukcja poniżej obejmuje setup obu wersji. W zależności od potrzeb, przełączaj się między zakładkami v2 i v3.
Wymagania
Oprócz podstawowych narzędzi, które już na pewno masz jeśli pracujesz nad frontem (Git, NodeJS etc.), dodatkowo potrzebny jest jedynie Docker Desktop. Jest to aplikacja desktopowa do zarządzania kontenerami Docker, przy której instalacji równocześnie zostaną zainstalowane wszystkie inne rzeczy potrzebne by odpalać u siebie kontenery (np. docker engine). Będzie ona potrzebna w celu łatwej, lokalnej instalacji zkonteneryzowanych serwisów. Jeśli nie wiesz czym jest Docker, najlepiej na początku zapoznaj się z dokumentacją.
Docker
Zanim zainstalujemy backend, musimy najpierw uruchomić wymagane serwisy w Dockerze.
Backend v2 wymaga jedynie Postgresa.
Instalacja
-
Pobierz, zainstaluj i uruchom Docker Desktop.
-
Pobierz oficjalny obraz Postgresa. W tym przykładzie używamy wersji 17-alpine (zajmuje mniej miejsca niż standardowe) ale możesz wybrać właściwie dowolną wersję. Obraz można pobrać z poziomu interfejsu Docker Desktop lub poniższą komendą w terminalu:
Okno terminala docker pull postgres:17-alpine -
Uruchom nowy kontener z obrazem Postgresa
- Zamiast
eventownik-localmożna wybrać dowolną nazwę kontenera, - Flagi
-eustawiają zmienne środowiskowe, - Flaga
-pustawia port, na którym działa postgres. 5432 to standardowy port Postgresa. Nie zmieniaj go.
Okno terminala docker run --name eventownik-local -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=root -e POSTGRES_DB=postgres -d postgres:17-alpine - Zamiast
-
Zweryfikuj działanie kontenera. W terminalu wpisz:
Okno terminala docker psWynikiem komendy będzie tabela z listą kontenerów.
Dalsze użytkowanie
- Aby zatrzymać kontener (wyłączyć bazę) wpisz w terminalu
docker stop eventownik-locallub kliknij przycisk Stop w Docker Desktop. - Aby uruchomić kontener ponownie, kliknij przycisk “Start” w Docker Desktop lub wpisz
docker start eventownik-localw terminal - start włącza istniejący kontener, run tworzy nowy!
Backend v3 wymaga Postgresa, Redisa oraz MinIO (lokalny odpowiednik S3 do przechowywania plików). Wszystkie trzy serwisy są skonfigurowane razem przez Docker Compose.
Instalacja
-
Pobierz, zainstaluj i uruchom Docker Desktop.
-
W katalogu głównym repozytorium backendu v3 znajdziesz plik
docker-compose.yml. Uruchom wszystkie serwisy jedną komendą:Okno terminala docker compose up -dSpowoduje to pobranie potrzebnych obrazów (przy pierwszym uruchomieniu) i uruchomienie kontenerów dla Postgresa, Redisa i MinIO w tle.
-
Zweryfikuj działanie kontenerów:
Okno terminala docker compose psWszystkie serwisy powinny mieć status
running.
Dalsze użytkowanie
- Aby zatrzymać wszystkie serwisy:
docker compose stop - Aby uruchomić je ponownie:
docker compose start - Aby zatrzymać i usunąć kontenery (dane zostają w named volumes):
docker compose down - Aby usunąć kontenery razem z danymi:
docker compose down -v⚠️
pgAdmin
Przydatne narzędzie GUI do zarządzania bazą danych, dzięki którym możemy przeglądać zawartość tabeli oraz wykonywać kwerendy. Jeżeli jesteś masochistą, alternatywą jest CLI psql.
Instalacja
- Pobierz, zainstaluj i uruchom pgAdmin.
- Będąc już na głównym ekranie, kliknij prawym przyciskiem na dropdown “Servers” na sidebarze po lewo opisanym jako “Object Explorer”. Najedź na “Register” i wybierz opcję “Server…”. W ten sposób zarejestrujemy nowy serwer na którym znajduje się baza - w naszym przypadku, serwer działający w kontenerze.
- W zakładce “General” okna konfiguracji wpisz dowolną nazwę (Name). Dla wygody zaznacz też “Connect now?” aby automatycznie nawiązać połączenie z bazą po zakończeniu konfiguracji.
- W zakładce “Connection” okna konfiguracji wpisz:
- Host name/address:
127.0.0.1 - Port:
5432 - Maintenance database:
postgres - Username:
postgres - Password:
root
- Host name/address:
Po zakończeniu instalacji możesz rozwinąć drzewko dla naszej bazy w lewym sidebarze.
Tabele
-
Nawiguj w drzewku wg.:
Servers└── <Nazwa Bazy>└── Databases└── postgres└── Schemas└── public└── Tables├── admin_permissions├── admins├── adonis_schema└── (...pozostałe tabele) -
Zaznacz którąś z tabel.
-
Na samej górze lewego sidebara opisanego jako “Object Explorer” kliknij w przycisk z ikonką tabeli (tytuł po najechaniu: All Rows).
-
Na prawo otworzy się nowe okno z kilkoma elementami. Najważniejsza jest znajdująca się na dole tabelka (Data Output), która jest tabelą danych w tej tabeli. Dane możemy intuicyjnie edytować podwójnie klikając na komórki.
Kwerendy
- Zaznacz w drzewku bazę danych (“postgres”).
- Na samej górze lewego sidebara opisanego jako “Object Explorer” kliknij w pierwszy przycisk z ikonką bazy (tytuł po najechaniu: Query Tool).
- Po wpisaniu w okienku kwerendy, odpalamy ją przez
F5lub dedykowany przycisk “Execute Script”.
Backend
Instalacja
-
Sklonuj repozytorium backendu v2.
Okno terminala git clone https://github.com/Solvro/backend-eventownik-v2.git -
Zainstaluj paczki.
Okno terminala npm install -
Skonfiguruj zmienne środowiskowe. W folderze projektu stwórz plik
.env.locali umieść w nim poniższe zmienne:Okno terminala TZ=UTCPORT=3333HOST=localhostLOG_LEVEL=infoAPP_KEY=ddddddddddddddddddddddddddddddddddddNODE_ENV=developmentDB_HOST=127.0.0.1DB_PORT=5432DB_USER=postgresDB_PASSWORD=rootDB_DATABASE=postgresPHOTO_STORAGE_URL=public/TEMP_STORAGE_URL=storage/temp/FILE_STORAGE_URL=uploads/SMTP_HOST=example.comSMTP_PORT=465SMTP_USERNAME=abcd@example.comSMTP_PASSWORD=12345678APP_DOMAIN=https://eventownik.solvro.plSIGNOZ_HOST=http://localhost:4318HCAPTCHA_SECRET=0x0000000000000000000000000000000000000000HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001 -
Odpal migracje (po frontasiowemu: skonfiguruj strukturę bazy danych) wpisując w terminalu:
Okno terminala node ace migration:run -
Zseeduj bazę danych. Backend v2 ma tylko jeden seeder, dodający do tabeli permissions w bazie kluczowe informacje na temat uprawnień organizatorów wydarzeń. W odróżnieniu od v3, nie dodaje testowych wydarzeń czy kont.
Okno terminala node ace db:seed -
Uruchom serwer
Okno terminala npm run dev
Dalsze użytkowanie
Przed każdym uruchomieniem backendu:
- Zaktualizuj kod o najnowsze zmiany z Githuba,
- Upewnij się, że wszystkie paczki są zainstalowane,
- Wykonaj migracje.
# Aktualizacjagit fetch origingit pull originnpm installnode ace migration:run# Uruchomienienpm run devInstalacja
-
Sklonuj repozytorium backendu v3.
Okno terminala git clone https://github.com/Solvro/backend-eventownik-v3.git -
Zainstaluj paczki.
Okno terminala npm install -
Skonfiguruj zmienne środowiskowe. W folderze projektu stwórz plik
.envi uzupełnij go o wymagane zmienne (skontaktuj się z techleadem backendu w celu uzyskania wrażliwych wartości). Ten sam wykaz znajdziesz również w.env.examplebackendu:Okno terminala # App:whereNODE_ENV=developmentAPP_DOMAIN="localhost" # Bare host used as the refresh-token cookie's Domain attribute - no scheme, no portFRONTEND_URL="http://localhost:3000" # Base URL of the frontend app, used to build links in emails (e.g. form links)PORT=3333# DatabaseDATABASE_URL="postgresql://eventownik:eventownik@localhost:5432/eventownik"# SecurityCORS_ORIGINS="http://localhost:3000" # Comma-separated list of allowed origins for CORS, *.domain.com for wildcard subdomainsHCAPTCHA_SECRET="super-secret-hcaptcha-key"JWT_SECRET="super-secret"JWT_EXPIRES_IN="60m"REFRESH_TOKEN_TTL_DAYS=3# RedisREDIS_HOST="localhost"REDIS_PORT=6379REDIS_USER=""REDIS_PASS=""# EmailSMTP_HOST="smtp.example.com"SMTP_PORT=587SMTP_SECURE=falseSMTP_USER="smtp-user"SMTP_PASS="smtp-password"SMTP_FROM="Eventownik <noreply@example.com>"S3_ENDPOINT=http://localhost:9000S3_ACCESS_KEY=localdevS3_SECRET_KEY=passwordS3_BUCKET_EVENTS=eventsS3_BUCKET_FORMS=formsS3_PUBLIC_URL=http://localhost:9000# UploadsUPLOAD_MAX_FILE_SIZE=10485760 # Max upload size in bytes (default: 10MB)UPLOAD_ALLOWED_MIME="application/pdf,image/jpeg,image/png,image/webp,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"UPLOAD_TTL_HOURS=24 # Hours an unclaimed uploaded file is kept before cleanup -
Wygeneruj klienta Prismy:
Okno terminala npx prisma generate -
Odpal migracje (po frontasiowemu: skonfiguruj strukturę bazy danych):
Okno terminala npx prisma migrate dev -
Zseeduj bazę danych:
Okno terminala npm run seed:dev -
Uruchom serwer:
Okno terminala npm run start:dev
Dalsze użytkowanie
Przed każdym uruchomieniem backendu:
- Zaktualizuj kod o najnowsze zmiany z Githuba,
- Upewnij się, że wszystkie paczki są zainstalowane,
- Wykonaj migracje.
# Aktualizacjagit fetch origingit pull originnpm installnpx prisma migrate dev# Uruchomienienpm run start:devLogowanie na gotowe konto
Seeder backendu v3 tworzy dwa testowe konta. Zaloguj się na konto superadmina przez email admin@solvro.pl i hasło changeme.
Automatyczna dokumentacja
Po włączeniu backendu, pod adresem http://localhost:3333/api/docs znajdzie się automatyczna dokumentacja endpointów ze Swaggera.
Dostosowanie frontendu
Pamiętaj aby zmienić plik .env.local w folderze frontendu wg. lokalnego setupu.
NEXT_PUBLIC_EVENTOWNIK_API=http://localhost:3333/api/v1SESSION_SECRET=abchjasdhjksadhjkdajkdhNEXT_PUBLIC_PHOTO_URL=http://localhost:3333NEXT_PUBLIC_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001NEXT_PUBLIC_EVENTOWNIK_API=http://localhost:3333/api/v3SESSION_SECRET=abchjasdhjksadhjkdajkdhNEXT_PUBLIC_PHOTO_URL=http://localhost:3333NEXT_PUBLIC_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001Troubleshooting
- Backend Eventownika jest wciąż w stałej rozbudowie - częste zmiany są spodziewane. Jeżeli masz jakiekolwiek problemy, zrób nowy thread na jednym z eventownikowych kanałów na discordzie (#frontend-eventownik lub #backend-eventownik).
- W trakcie opcjonalnej instalacji pgAdmina, istnieje szansa że stworzył i uruchomił się nowy defaultowy serwer Postgresa. W takiej sytuacji, będzie on kolidował z serwerem z kontenera, ponieważ oba chcą działać na
127.0.0.1i porcie5432. Może być to bardzo prawdopodobna przyczyna pojawiających się ewentualnie problemów. W przypadku Windowsa, najprościej będzie wyłączyć go z poziomu menedżera usług:- Włącz menedżer usług wyszukując
services.mscw menu start - W liście usług wyszukaj
postgresql-x64-16 - PostgreSQL Server 16- kliknij prawym przyciskiem myszy i wybierz Właściwości - Zatrzymaj usługę i zmień typ uruchomienia na “Wyłączony”, aby nie uruchamiał się automatycznie po starcie komputera
- Włącz menedżer usług wyszukując