Skip to content

Latest commit

Β 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ₯ HelseJournal

Docker FastAPI React TypeScript PostgreSQL Elasticsearch License

En sikker, personlig helsejournal for organisering av medisinske dokumenter

HelseJournal er en selvhostet webapplikasjon for Γ₯ organisere, sΓΈke i og administrere personlige medisinske dokumenter med fulltekstsΓΈk, PDF-visning, notater og sikker deling.

Dark Mode Light Mode Languages


πŸ–₯️ Systemkrav

Hardware (Testet pΓ₯)

Komponent Spesifikasjon
Plattform LXC Container pΓ₯ Proxmox
GPU 2x NVIDIA A2 + 1x NVIDIA T4
RAM 512 GB
Lagring 20 TB
IP-adresse 192.168.30.10

Minimumskrav

  • CPU: 2 kjerner
  • RAM: 4 GB (8 GB anbefalt)
  • Lagring: 10 GB + dokumentlagring
  • Docker: 20.10+
  • Docker Compose: 2.0+

πŸš€ Hurtiginstallasjon

One-liner installasjon

curl -fsSL https://raw.githubusercontent.com/dinbruker/helsejournal/main/auto-install.sh | bash

Manuell installasjon

# 1. Klon repository
git clone https://github.com/dinbruker/helsejournal.git
cd helsejournal

# 2. KjΓΈr installasjonsscript
chmod +x install.sh
./install.sh

# 3. Start tjenester
docker-compose up -d

✨ Funksjoner

Funksjon Beskrivelse Status
πŸŒ“ Tema Dark/Light mode med sol/mΓ₯ne-knapp βœ…
🌍 SprΓ₯k Engelsk og Norsk med flagg-knapper βœ…
🌳 Tre-struktur Γ…r β†’ Sykehus/Lege β†’ Dokumenter βœ…
πŸ“„ PDF-visning Innebygd PDF-leser pΓ₯ hΓΈyre side βœ…
πŸ” FulltekstsΓΈk SΓΈk i alle dokumenter med Elasticsearch βœ…
⬆️ Opplasting Last opp nye PDF-er direkte βœ…
πŸ” Autentisering Sikker innlogging (Γ©n bruker) βœ…
πŸ“ Notater Legg til notater til dokumenter βœ…
πŸ”” Varsler FΓ₯ varsler om nye dokumenter βœ…
πŸ”— Deling Lag sikre delingslenker βœ…
πŸ’Ύ Backup Automatisk backup til NAS/Cloud βœ…
πŸ“± Responsiv Mobilvennlig design βœ…

πŸ—οΈ Arkitektur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Docker Compose                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   Nginx     β”‚  β”‚   React     β”‚  β”‚     FastAPI         β”‚ β”‚
β”‚  β”‚   (Proxy)   │──│  Frontend   │──│     Backend         β”‚ β”‚
β”‚  β”‚   :80/:443  β”‚  β”‚   :3000     β”‚  β”‚     :8000           β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                              β”‚              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ PostgreSQL  β”‚  β”‚Elasticsearchβ”‚  β”‚   PDF Storage      β”‚  β”‚
β”‚  β”‚   :5432     β”‚  β”‚   :9200     β”‚  β”‚   (Volume)         β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ Konfigurasjon

MiljΓΈvariabler

Opprett en .env fil i rotmappen:

# Database
POSTGRES_USER=helsejournal
POSTGRES_PASSWORD=din_sikre_passord
POSTGRES_DB=helsejournal

# JWT Secret
JWT_SECRET_KEY=din_hemmelige_nΓΈkkel_minst_32_tegn
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=1440

# Elasticsearch
ELASTICSEARCH_URL=http://elasticsearch:9200

# App Settings
APP_NAME=HelseJournal
APP_VERSION=1.0.0
UPLOAD_DIR=/app/uploads
MAX_FILE_SIZE=50MB

# Backup
BACKUP_ENABLED=true
BACKUP_SCHEDULE=0 2 * * *
BACKUP_DESTINATION=/backup

GPU-akselerasjon (valgfritt)

For OCR med GPU-akselerasjon, aktiver i docker-compose.yml:

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: 1
          capabilities: [gpu]

πŸ“ Mappestruktur

helsejournal/
β”œβ”€β”€ docker-compose.yml          # Hoved Docker Compose
β”œβ”€β”€ README.md                   # Denne filen
β”œβ”€β”€ install.sh                  # Installasjonsscript
β”œβ”€β”€ auto-install.sh             # One-liner installer
β”œβ”€β”€ .env.example                # Eksempel pΓ₯ miljΓΈvariabler
β”œβ”€β”€ backend/                    # FastAPI backend
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ requirements.txt
β”‚   └── app/
β”‚       β”œβ”€β”€ main.py
β”‚       β”œβ”€β”€ config.py
β”‚       β”œβ”€β”€ database/
β”‚       β”œβ”€β”€ auth/
β”‚       β”œβ”€β”€ documents/
β”‚       └── pdf_processor/
└── frontend/                   # React frontend
    β”œβ”€β”€ Dockerfile
    β”œβ”€β”€ package.json
    β”œβ”€β”€ tsconfig.json
    β”œβ”€β”€ tailwind.config.js
    └── src/
        β”œβ”€β”€ main.tsx
        β”œβ”€β”€ App.tsx
        └── components/

πŸ› οΈ Utvikling

Start utviklingsmiljΓΈ

# Backend
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# Frontend
cd frontend
npm install
npm run dev

KjΓΈr tester

# Backend tester
cd backend
pytest

# Frontend tester
cd frontend
npm test

πŸ”’ Sikkerhet

  • βœ… JWT-basert autentisering
  • βœ… Passord hashing med bcrypt
  • βœ… HTTPS-stΓΈtte
  • βœ… Sikre delingslenker med utlΓΈpstid
  • βœ… Input-validering
  • βœ… SQL-injeksjon beskyttelse
  • βœ… XSS-beskyttelse

πŸ’Ύ Backup

Automatisk backup

Backup kjΓΈres automatisk daglig kl. 02:00:

# Manuell backup
docker-compose exec backend python -m app.backup

Gjenoppretting

# Gjenopprett fra backup
docker-compose exec backend python -m app.restore /backup/helsejournal_YYYYMMDD.tar.gz

πŸ› FeilsΓΈking

Sjekk logger

# Alle tjenester
docker-compose logs -f

# Spesifikk tjeneste
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f elasticsearch

Vanlige problemer

Problem: Elasticsearch starter ikke
Løsning: Øk vm.max_map_count:

sudo sysctl -w vm.max_map_count=262144

Problem: Port 80 er opptatt
LΓΈsning: Endre port i docker-compose.yml:

ports:
  - "8080:80"

πŸ“„ Lisens

Dette prosjektet er lisensiert under MIT License - se LICENSE for detaljer.


πŸ™ Takk til


πŸ“ž Support

For spΓΈrsmΓ₯l eller problemer, opprett en GitHub Issue.


Laget med ❀️ i Norge

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages