1. cp .env.example .env
  2. docker compose up -d --build
  3. docker logs kontas-app

    Windows

    macOS

    Linux

    sudo usermod -aG docker $USER

    docker --version
    docker compose version

    Windows

    cd $HOME\Documents\kontas-download-0.1.0
    dir

    macOS

    cd ~/Documents/kontas-download-0.1.0
    ls

    Linux

    cd ~
    unzip ~/Downloads/kontas-download-0.1.0.zip
    cd ~/kontas-download-0.1.0
    sudo chown -R 1000:1000 web/prisma
    ls

    cp .env.example .env

    Windows

    $b = New-Object byte[] 32; [Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($b); ($b | ForEach-Object { $_.ToString('x2') }) -join ''
    notepad .env

    macOS

    openssl rand -hex 32
    open -e .env

    Linux

    openssl rand -hex 32
    nano .env
    chmod 600 .env

    SMTP_ENCRYPTION_KEY=
    ADMIN_EMAIL=admin@kontas.local
    ADMIN_PASSWORD=

    docker compose up -d --build

    docker ps

    docker logs kontas-app

    [bootstrap] New database created (base schema and the standard chart of accounts).
    [bootstrap] Administrator created: admin@kontas.local
    [bootstrap] One-time password (shown only now, change it after the first sign-in or reset it with scripts/set-password.cjs):
    [bootstrap]     (16 letters and digits)

                            docker exec kontas-app node -e "const D=require('better-sqlite3');new D('/app/prisma/dev.db',{readonly:true}).backup('/tmp/b.db').then(()=>console.log('ok'))"
                            docker cp kontas-app:/tmp/b.db ./kontas-backup.db

                            Windows

                            docker compose stop
                            Copy-Item -Recurse web\prisma "..\kontas-backup-$(Get-Date -Format yyyy-MM-dd)"
                            docker compose start

                            macOS

                            docker compose stop
                            cp -a web/prisma "../kontas-backup-$(date +%F)"
                            docker compose start

                            Linux

                            docker compose stop
                            sudo cp -a web/prisma "../kontas-backup-$(date +%F)"
                            docker compose start

                              1. docker compose down
                              2. Windows

                                cd $HOME\Documents
                                Copy-Item -Recurse -Force kontas-download-0.1.0\web\prisma\* kontas-download-NEW\web\prisma\
                                if (Test-Path kontas-download-0.1.0\.env) { Copy-Item kontas-download-0.1.0\.env kontas-download-NEW\ }

                                macOS

                                cd ~/Documents
                                cp -a kontas-download-0.1.0/web/prisma/. kontas-download-NEW/web/prisma/
                                [ -f kontas-download-0.1.0/.env ] && cp -a kontas-download-0.1.0/.env kontas-download-NEW/

                                Linux

                                cd ~
                                sudo cp -a kontas-download-0.1.0/web/prisma/. kontas-download-NEW/web/prisma/
                                [ -f kontas-download-0.1.0/.env ] && cp -a kontas-download-0.1.0/.env kontas-download-NEW/
                              3. cd kontas-download-NEW
                                docker compose up -d --build

                              docker compose stop
                              docker compose start
                              docker compose restart
                              docker compose up -d
                              docker compose down
                              docker ps
                              docker logs kontas-app
                              docker logs -f kontas-app

                              docker exec -it kontas-app node scripts/set-password.cjs admin@kontas.local

                              docker exec -it kontas-app node scripts/set-password.cjs admin@kontas.local 'my-long-password-2026'

                              docker exec -it kontas-app node scripts/set-password.cjs admin@kontas.local --enable

                              1. docker compose down --rmi local
                              2. docker builder prune

                                  ports:
                                    - "127.0.0.1:8080:3000"
                              APP_ORIGIN=http://localhost:8080

                              Windows

                              netstat -ano | findstr :3200

                              macOS

                              lsof -nP -iTCP:3200 -sTCP:LISTEN

                              Linux

                              sudo ss -ltnp | grep 3200
                              sudo chown -R 1000:1000 web/prisma
                              docker compose restart
                              sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
                              docker rm -f kontas-app