Vejledning til selvhosting
Nibomo understøtter to adskilte veje: et lokalt udviklingsmiljø og en produktionsudrulning på AWS. Docker Compose kører PostgreSQL og migreringer til lokal udvikling; det er ikke metoden til produktionsudrulning.
Krav til lokal udvikling
- Git
- Bash
- GNU Make
- Docker med Docker Compose
- Node.js 24
- npm
Den medfølgende Docker Compose-fil kører i øjeblikket PostgreSQL 18.4. Du behøver ikke en separat lokal installation af PostgreSQL.
Lokal hurtigstart
git clone https://github.com/kirill-markin/flashcards-open-source-app.git
cd flashcards-open-source-app
cp .env.example .env
make db-up
npm install --prefix api
npm install --prefix apps/auth
npm install --prefix apps/backend
npm install --prefix apps/web
npm install --prefix apps/admin
make db-up starter PostgreSQL og kører scripts/deploy/migrate.sh via migreringscontaineren. Med standardadgangskoderne kopieret fra .env.example opretter migreringen disse lokale runtime-forbindelser:
- backend:
postgresql://backend_app:backend_app@localhost:5432/flashcards - auth:
postgresql://auth_app:auth_app@localhost:5432/flashcards - reporting:
postgresql://reporting_readonly:reporting_readonly@localhost:5432/flashcards
Hvis du ændrer BACKEND_DB_PASSWORD, AUTH_DB_PASSWORD eller REPORTING_DB_PASSWORD i .env, skal du bruge den samme ændrede adgangskode i den tilsvarende forbindelses-URL.
Hurtig start kun til lokal brug
Backendens Make-target indlæser ikke .env i roden. Angiv de lokale indstillinger, den kræver, eksplicit:
AUTH_MODE=none \
ALLOW_INSECURE_LOCAL_AUTH=true \
DATABASE_URL=postgresql://backend_app:backend_app@localhost:5432/flashcards \
REPORTING_DATABASE_URL=postgresql://reporting_readonly:reporting_readonly@localhost:5432/flashcards \
make backend-dev
Kør klienterne i separate terminaler:
make web-dev
make admin-dev
Denne vej starter bevidst ikke make auth-dev. AUTH_MODE=none er en udtrykkeligt usikker tilstand udelukkende til localhost; brug den aldrig i et udrullet miljø.
Den dækker udvikling af kernebackenden, den offentlige discovery i Agent API, web og admin, men den gør ikke Chat V2 tilgængelig.
Fuldt lokalt Cognito-flow
Auth-targetet indlæser .env i roden, mens backend-targetet ikke gør. Erstat først den gamle DATABASE_URL i den kopierede .env med URL'en for auth-rollen, og tilføj dine rigtige Cognito-værdier:
DATABASE_URL=postgresql://auth_app:auth_app@localhost:5432/flashcards
AUTH_MODE=cognito
COGNITO_USER_POOL_ID=<your-user-pool-id>
COGNITO_CLIENT_ID=<your-client-id>
COGNITO_REGION=<your-aws-region>
SESSION_ENCRYPTION_KEY=<64-character-hex-value>
Start auth:
make auth-dev
I backendterminalen skal du eksplicit indlæse .env og derefter overskrive dens database-URL for auth med URL'en for backend-rollen for netop den proces:
set -a
source .env
set +a
DATABASE_URL=postgresql://backend_app:backend_app@localhost:5432/flashcards \
make backend-dev
Kør make web-dev og make admin-dev i hver sin terminal. Begge targets indlæser .env i roden.
Tjenesterne bruger disse lokale adresser:
| Tjeneste | Adresse |
|---|---|
| PostgreSQL | localhost:5432 |
| Auth, når den er konfigureret | http://localhost:8081 |
| Backend-API | http://localhost:8080/v1 |
| Webapp | http://localhost:3000 |
| Admin-app | http://localhost:3001 |
Stop PostgreSQL og migreringscontaineren med:
make db-down
Lokal konfiguration
Start fra .env.example; den dokumenterer de tilgængelige variabler, og hvilke værdier der kun gælder lokalt. Erstat dens gamle DATABASE_URL, før du kører auth, som vist ovenfor.
De vigtigste lokale indstillinger er:
MIGRATION_DATABASE_URLtil skemamigreringer inde i DockerDATABASE_URLsat til rollenauth_appi.envi roden tilmake auth-devDATABASE_URLangivet som rollenbackend_apptilmake backend-devAUTH_MODEogALLOW_INSECURE_LOCAL_AUTHtil backendens godkendelseBACKEND_ALLOWED_ORIGINStil de lokale origins for web og adminALLOWED_REDIRECT_URISogCOOKIE_DOMAINtil godkendelse i browseren- Cognito-værdierne og værdierne til sessionskryptering, når du tester rigtig engangskode-login
Agent API er en del af backenden. Dets offentlige lokale discovery-dokument er tilgængeligt på http://localhost:8080/v1/agent, når backenden er startet. Beskyttede agentoperationer kræver ApiKey-godkendelse og er ikke tilgængelige på vejen med AUTH_MODE=none.
AI-understøttelse efter vej
De lokale kommandoer ovenfor starter ikke den asynkrone chatworker. Den hurtige vej bruger også AUTH_MODE=none, som Chat V2 afviser; en OpenAI-nøgle eller en gæstekvote gør ikke AI tilgængelig på den vej. Det fulde lokale Cognito-flow leverer en understøttet godkendelsestransport, men starter stadig ikke workeren.
AWS CDK-udrulningen opretter worker-Lambdaen og konfigurerer backenden til at kalde den. Udbyderlegitimationsoplysninger som OPENAI_API_KEY muliggør modelkald for understøttede godkendte forespørgsler. GUEST_AI_WEIGHTED_MONTHLY_TOKEN_CAP aktiverer og begrænser separat AI for gæster; den styrer ikke AI for indloggede brugere eller for brugere, der er godkendt med bearer-token. Langfuse-indstillinger er valgfri konfiguration af tracing.
Native klienter
Det samme repositorium indeholder iOS- og Android-klienterne, men de lokale web- og serverkommandoer hverken bygger eller distribuerer dem.
iOS-projektet læser lokale API- og auth-værter fra:
apps/ios/Flashcards/Config/Local.xcconfig
Opret den ud fra eksemplet, når det er nødvendigt:
cp apps/ios/Flashcards/Config/Local.xcconfig.example apps/ios/Flashcards/Config/Local.xcconfig
Se repositoriets iOS-README og Android-README for deres separate arbejdsgange til build og test.
Produktion bruger AWS CDK
Den understøttede produktionsudrulning er den medfølgende AWS CDK-stak. Den er bygget på AWS i stedet for at være leverandørneutral og omfatter:
- en VPC og private subnets
- PostgreSQL 18 på Amazon RDS
- Amazon Cognito med engangskode på e-mail uden adgangskode
- API Gateway og Lambda til backend-, auth- og MCP-tjenesterne
- en Lambda til den asynkrone chatworker og en Lambda til Cognitos brugerdefinerede e-mailafsender
- S3 og CloudFront til web- og admin-apps
- Secrets Manager til legitimationsoplysninger for database, sessioner, e-mail, overvågning og valgfri AI
- CloudWatch-alarmer, SNS-notifikationer og en backupplan for RDS
- en OIDC-udrulningsrolle til GitHub Actions
- Cloudflare-opsætningsscripts til de offentlige domæner
Udrulningen eksponerer app.<domain>, admin.<domain>, api.<domain>, auth.<domain> og mcp.<domain>. Den kan også oprette en omdirigering af apex-domænet, når roddomænet ellers ikke er i brug.
Kør produktionshjælperen fra en operatørmaskine med:
- Node.js 24 og npm
- Bash og GNU Make
- Docker, der kører
- AWS CLI logget ind på udrulningskontoen
- GitHub CLI logget ind med adgang til målrepositoriet
curl,jqog Python 3
Før udrulningen skal du konfigurere operatørværdierne i .env i roden. Det påkrævede sæt omfatter AWS-region, domæne, e-mail til alarmer, GitHub-repositorium, Cloudflare-legitimationsoplysninger, Resend-legitimationsoplysninger og Sentry-konfiguration til backenden. Legitimationsoplysninger til OpenAI og Langfuse er valgfrie.
Den foretrukne kommando til den første udrulning fra repositoriets rod er:
npm ci --prefix apps/auth
bash scripts/deploy/first-deploy.sh \
--region eu-central-1 \
--domain example.com \
--alert-email alerts@example.com
Den eksplicitte installation af auth er i øjeblikket nødvendig fra et rent checkout, fordi udrulningshjælperen bundter den pakke, men ikke installerer den. Hjælperen opretter eller ændrer rigtige ressourcer i AWS, Cloudflare og GitHub. Gennemgå repositoriets udrulningsdokumentation og cloudomkostningerne, før du kører den. Den bootstrapper CDK, udruller infrastrukturen, kører migreringer, uploader web- og admin-assets, konfigurerer de offentlige DNS-poster for app, admin, api, auth og mcp, medmindre det springes over, og udfylder manglende konfiguration af GitHub Actions.
Efter udrulningen:
-
Bekræft SNS-abonnementet, der er sendt til indbakken for
ALERT_EMAIL. -
Konfigurer og verificer de separate DNS-poster for Resends afsenderdomæne:
bash scripts/setup/setup-resend-domain.sh \ --domain example.com \ --subdomain mail
first-deploy.sh kører som standard scripts/cloudflare/setup-dns.sh for de offentlige applikationsdomæner. Scriptet kører ikke setup-resend-domain.sh; sidstnævnte opretter posterne for e-mailafsenderen til mail.<domain> og verificerer det domæne hos Resend. Hvis du udruller med --skip-dns, skal du konfigurere de offentlige poster separat som beskrevet i AWS CDK-vejledningen.
Dataportabilitet
Import og eksport af arbejdsområdepakker overfører kun kort, deres tags og tilhørende medier. Det overfører ikke repetitionshistorik, FSRS-planlæggerens tilstand, indstillinger for arbejdsområdet, fulde bunkestrukturer eller kontodata.
Betragt pakker som overførsel af indhold, ikke som en komplet migrering fra hostet til selvhostet eller som backup til katastrofegendannelse. Operatører er ansvarlige for at tage backup af og gendanne den udrullede PostgreSQL-database og medielageret.
Operatørens ansvar
Selvhosting betyder, at du leverer og vedligeholder:
- AWS-infrastruktur og dens omkostninger
- Cloudflare-DNS og domænekonfiguration
- legitimationsoplysninger og domæneposter til e-mailudsendelse via Resend
- påkrævet Sentry-konfiguration til overvågning
- valgfri legitimationsoplysninger til en AI-udbyder og Langfuse
- hemmeligheder, opgraderinger, migreringer, alarmer, backups og test af gendannelse
- native mobilbuilds og distribution, hvis du vil have dine egne iOS- eller Android-udgivelser
Stakken indeholder automatisering til mange af disse systemer, men den kræver stadig en operatør. Docker Compose erstatter ikke denne produktionsarkitektur.