Skip to content

Commit 85d3edc

Browse files
authored
feat(eventownik): add local backend setup instructions (#104)
* feat(eventownik): add local backend instructions * docs(eventownik): update local setup instructions * docs(eventownik): add review suggestions and adjustments
1 parent d6417aa commit 85d3edc

File tree

1 file changed

+241
-0
lines changed

1 file changed

+241
-0
lines changed
Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
---
2+
title: Lokalny setup backendu
3+
description: Instrukcja lokalnej instalacji backendu dla zespołu frontendowego
4+
---
5+
6+
import { Aside } from "@astrojs/starlight/components";
7+
8+
<Aside type="note" title="Disclaimer" icon="information">
9+
Poniższa instrukcja jest przeznaczona dla zespołu frontendowego Eventownika.
10+
</Aside>
11+
12+
W przypadku jakichkolwiek problemów z backendem, przez które zdeployowana wersja może być czasowo niedostępna lub niestabilna, warto znać sposób uruchomienia całego stacku backendowego lokalnie. Dotyczy to zarówno Adonisowego (wkrótce Nestowego) backendu, jak i Postgresa.
13+
14+
## Wymagania
15+
16+
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](https://www.docker.com/products/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 zkonteneryzowanego Postgresa. Jeśli nie wiesz czym jest Docker, najlepiej na początku zapoznaj się z [dokumentacją](https://docs.docker.com/get-started/docker-overview/).
17+
18+
## Postgres
19+
20+
Zanim zainstalujemy backend, musimy najpierw zainstalować Postgresa.
21+
22+
### Instalacja
23+
24+
<Steps>
25+
1. Pobierz, zainstaluj i uruchom [Docker Desktop](https://www.docker.com/products/docker-desktop/).
26+
2. 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:
27+
28+
```bash
29+
docker pull postgres:17-alpine
30+
```
31+
32+
3. Uruchom nowy kontener z obrazem Postgresa
33+
34+
- Zamiast `eventownik-local` można wybrać dowolną nazwę kontenera,
35+
- Flagi `-e` ustawiają zmienne środowiskowe,
36+
- Flaga `-p` ustawia port, na którym działa postgres. **5432** to standardowy port Postgresa. Nie zmieniaj go.
37+
38+
```bash
39+
docker run --name eventownik-local -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=root -e POSTGRES_DB=postgres -d postgres:17-alpine
40+
```
41+
42+
4. Zweryfikuj działanie kontenera. W terminalu wpisz:
43+
44+
```bash
45+
docker ps
46+
```
47+
48+
Wynikiem komendy będzie tabela z listą kontenerów.
49+
<Aside type="caution" title="Bardzo ważne">
50+
Upewnij się, że w kolumnie **PORT** w wierszu dla naszego kontenera jest napisane `0.0.0.0:5432->5432/tcp`. Jeżeli napisane jest jedynie `5432`, to kontener nie jest dostępny dla zewnętrznych połączeń - w naszym przypadku zewnętrznym połączeniem będzie backend, który w takiej sytuacji nie będzie mógł się połączyć z bazą. Wówczas, *może* być to spowodowane włączeniem kontenera z poziomu interfejsu Docker Desktop - jeśli tak zrobiłeś/aś, wyłącz kontener w panelu i włącz go komendą wskazaną w kroku 3.
51+
</Aside>
52+
</Steps>
53+
54+
### Dalsze użytkowanie
55+
56+
- Aby zatrzymać kontener (wyłączyć bazę) wpisz w terminalu `docker stop eventownik-local` lub kliknij przycisk Stop w Docker Desktop.
57+
- Aby uruchomić kontener ponownie, kliknij przycisk "Start" w Docker Desktop lub wpisz `docker start eventownik-local` w terminal - **start** włącza istniejący kontener, **run** tworzy nowy!
58+
59+
### pgAdmin
60+
61+
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`.
62+
63+
<Aside type="note" title="Etap opcjonalny">
64+
Instalacja pgAdmin nie jest wymagana aby wszystko działało, ale instalacja jest zalecana - zawsze może się przydać.
65+
</Aside>
66+
67+
#### Instalacja
68+
69+
<Steps>
70+
1. Pobierz, zainstaluj i uruchom [pgAdmin](https://www.pgadmin.org/download).
71+
2. 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.
72+
3. 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.
73+
4. W zakładce "Connection" okna konfiguracji wpisz:
74+
- Host name/address: `127.0.0.1`
75+
- Port: `5432`
76+
- Maintenance database: `postgres`
77+
- Username: `postgres`
78+
- Password: `root`
79+
80+
Dla wygody zaznacz też "Save password?" aby zapisać hasło.
81+
</Steps>
82+
83+
Po zakończeniu instalacji możesz rozwinąć drzewko dla naszej bazy w lewym sidebarze.
84+
85+
#### Tabele
86+
87+
<Steps>
88+
1. Nawiguj w drzewku wg.:
89+
90+
```
91+
Servers
92+
└── <Nazwa Bazy>
93+
└── Databases
94+
└── postgres
95+
└── Schemas
96+
└── public
97+
└── Tables
98+
├── admin_permissions
99+
├── admins
100+
├── adonis_schema
101+
└── (...pozostałe tabele)
102+
```
103+
104+
2. Zaznacz którąś z tabel.
105+
3. Na samej górze lewego sidebara opisanego jako "Object Explorer" kliknij w przycisk z ikonką tabeli (tytuł po najechaniu: All Rows).
106+
4. 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.
107+
</Steps>
108+
109+
#### Kwerendy
110+
111+
<Steps>
112+
1. Zaznacz w drzewku bazę danych ("postgres").
113+
2. Na samej górze lewego sidebara opisanego jako "Object Explorer" kliknij w pierwszy przycisk z ikonką bazy (tytuł po najechaniu: Query Tool).
114+
3. Po wpisaniu w okienku kwerendy, odpalamy ją przez `F5` lub dedykowany przycisk "Execute Script".
115+
</Steps>
116+
117+
## Backend
118+
119+
Aktualnie wciąż korzystamy z wersji **v2** backendu, która stoi na frameworku AdonisJS. W niedalekiej przyszłości będziemy przejść na wersję **v3**, która stoi na frameworku NestJS.
120+
121+
### Instalacja
122+
123+
import { Steps } from "@astrojs/starlight/components";
124+
125+
<Steps>
126+
1. Sklonuj [repozytorium backendu](https://github.com/Solvro/backend-eventownik-v2).
127+
128+
```bash
129+
git clone https://github.com/Solvro/backend-eventownik-v2.git
130+
```
131+
132+
2. Zainstaluj paczki.
133+
134+
```bash
135+
npm install
136+
```
137+
138+
3. Skonfiguruj zmienne środowiskowe. W folderze projektu stwórz plik `.env.local` i umieść w nim poniższe zmienne:
139+
140+
```bash
141+
TZ=UTC
142+
PORT=3333
143+
HOST=localhost
144+
LOG_LEVEL=info
145+
APP_KEY=dddddddddddddddddddddddddddddddddddd
146+
NODE_ENV=development
147+
DB_HOST=127.0.0.1
148+
DB_PORT=5432
149+
DB_USER=postgres
150+
DB_PASSWORD=root
151+
DB_DATABASE=postgres
152+
PHOTO_STORAGE_URL=public/
153+
TEMP_STORAGE_URL=storage/temp/
154+
FILE_STORAGE_URL=uploads/
155+
SMTP_HOST=example.com
156+
SMTP_PORT=465
157+
158+
SMTP_PASSWORD=12345678
159+
APP_DOMAIN=https://eventownik.solvro.pl
160+
SIGNOZ_HOST=http://localhost:4318
161+
HCAPTCHA_SECRET=0x0000000000000000000000000000000000000000
162+
HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001
163+
```
164+
165+
<Aside type="note" title="hCaptcha">
166+
Wskazane wartości `HCAPTCHA_SECRET` i `HCAPTCHA_SITEKEY` są testowymi wartościami podanymi w [dokumentacji hCaptcha](https://docs.hcaptcha.com/#test-key-set-publisher-or-pro-account). Są to właściwe wartości dla celów developmentowych, ponieważ dzięki nim captcha przepuszcza automatycznie i nie trzeba przy każdym logowaniu czy rejestracji na wydarzenie rozwiązywać puzzli.
167+
</Aside>
168+
169+
<Aside type="caution" title="SMTP">
170+
Ta instrukcja nie obejmuje lokalnej konfiguracji SMTP - wobec tego, na lokalnym setupie nie będzie działać wysyłanie maili. Skontaktuj się z zespołem (preferowalnie techleadem backendu) w celu uzyskania danych.
171+
</Aside>
172+
173+
<Aside type="caution" title="Sprawdź kluczowe zmienne">
174+
W kontekście Dockera, wartość `localhost` i `127.0.0.1` **NIE JEST** tym samym. Aby uniknąć potencjalnych błędów związanych z IPv4 i IPv6, dla zmiennej `DB_HOST` zawsze korzystaj z explicite adresu `127.0.0.1`.
175+
176+
Ponadto, upewnij się, że zmienne `DB_HOST`, `DB_PORT`, `DB_USER`, `DB_PASSWORD` i `DB_DATABASE` są ustawione na wartości zgadzające się z tymi ustawionymi przy odpalaniu kontenera Postgresa (krok 3. w sekcji Postgres).
177+
</Aside>
178+
179+
4. Odpal migracje (po frontasiowemu: skonfiguruj strukturę bazy danych) wpisując w terminalu:
180+
181+
```bash
182+
node ace migration:run
183+
```
184+
185+
5. Zseeduj bazę danych (po frontasiowemu: wypełnij ją jakimiś danymi). Na dzień 23.12.25 backend ma tylko jeden seeder, wobec czego w naszym przypadku wykonanie poniższej komendy doda do tabeli *permissions* w bazie kluczowe informacje na temat uprawnień organizatorów wydarzeń.
186+
187+
```bash
188+
node ace db:seed
189+
```
190+
191+
6. Uruchom serwer
192+
193+
```bash
194+
npm run dev
195+
```
196+
197+
</Steps>
198+
199+
To wszystko jeśli chodzi o lokalny setup wszystkiego co związane z backendem. Teraz należy upewnić się, czy wszystko mamy dobrze skonfigurowane po froncie.
200+
201+
### Dalsze użytkowanie
202+
203+
Przed każdym uruchomieniem backendu:
204+
- Zaktualizuj kod o najnowsze zmiany z Githuba,
205+
- Upewnij się, że wszystkie paczki są zainstalowane,
206+
- Wykonaj migracje.
207+
208+
```bash
209+
# Aktualizacja
210+
git fetch origin
211+
git pull origin
212+
npm install
213+
node ace migration:run
214+
# Uruchomienie
215+
npm run dev
216+
```
217+
218+
## Dostosowanie frontendu
219+
220+
Pamiętaj aby zmienić plik `.env.local` w folderze frontendu wg. lokalnego setupu:
221+
222+
```bash
223+
NEXT_PUBLIC_EVENTOWNIK_API=http://localhost:3333/api/v1
224+
SESSION_SECRET=abchjasdhjksadhjkdajkdh
225+
NEXT_PUBLIC_PHOTO_URL=http://localhost:3333
226+
NEXT_PUBLIC_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001
227+
```
228+
229+
<Aside type="caution" title="Ważne">
230+
- Upewnij się, że `NEXT_PUBLIC_HCAPTCHA_SITEKEY` jest taki sam co `HCAPTCHA_SITEKEY` na backendzie,
231+
- `NEXT_PUBLIC_EVENTOWNIK_API` **MUSI** mieć dopisane `/api/v1` na końcu,
232+
- Z kolei `NEXT_PUBLIC_PHOTO_URL` **NIE MA** dopisanego `/api/v1`.
233+
</Aside>
234+
235+
## Troubleshooting
236+
237+
- 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*).
238+
- 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.1` i porcie `5432`. Może być to bardzo prawdopodobna przyczyna pojawiących się ewentualnie problemów. W przypadku Windowsa, najprościej będzie wyłączyć go z poziomu menedżera usług:
239+
- Włącz menedżer usług wyszukując `services.msc` w menu start
240+
- W liście usług wyszukaj `postgresql-x64-16 - PostgreSQL Server 16` - kliknij prawym przyciskiem myszy i wybierz *Właściwości*
241+
- Zatrzymaj usługę i zmień typ uruchomienia na "Wyłączony", aby nie uruchamiał się automatycznie po starcie komputera

0 commit comments

Comments
 (0)