spech66 / lifelogbb

Lifelog - All your life related things in one place.
GNU Affero General Public License v3.0
6 stars 0 forks source link
fitness journal lifelog lifelogging self-improvement sqlite workout-tracker

# LifelogBB

Dotnet Workflow CodeQL Workflow

Lifelog - All your life related things in one place. Journal, weight, Strength training, endurance training tracker, Bucket list, Vision board, ....

This service is build for a single user. Password authentication is included for the sites and API endpoints.

All data is stored in a single SQLite database for full control and portability over the data.

Features

TODO

Technical

Screenshots

Start Dashboard Weight Bucket List Vision Board

More screenshots

Run from docker

Clone the repository and run docker.

git clone https://github.com/spech66/lifelogbb.git
cd lifelogbb

Set database path to "/database" in the appsettings.

cd LifelogBb
docker build . -t lifelogbb
docker run -v lifelogbbdatabase:/database -p 80:80 -p 443:443 lifelogbb

Build and run from source

git clone https://github.com/spech66/lifelogbb.git
cd lifelogbb
cd LifelogBb
dotnet watch

Migrate database

All migrations are bundled in the efbundle file. Run it with the --connection argument. For Windows the efbundle is called efbundle.exe.

# Install dotnet-ef
dotnet tool install --global dotnet-ef | echo "already installed"

# Run efbundle
./efbundle --connection "Data Source=lifelogbb.db"

Dependencies

Helpful tools

Configuration examples

appsettings.production.json

{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "Account": {
        "Password": "xxxx" // Generate on first run in the password dialog
    },
    "Database": {
        "Path": "/opt/lifelogbb/"
    },
    "Uploads": {
        "Path": "/opt/lifelogbb/uploads/"
    },
    "Authentication": {
        "Cookie": {
            "ExpireDays": "30"
        },
        "JwtToken": {
            "Issuer": "https://localhost:6067/",
            "Audience": "https://localhost:6067/",
            "SigningKey": "xxxxxxxx", // Generate e.g. openssl genrsa -out ./jwt.key 4096
            "TokenTimeoutMinutes": "60"
        }
    },
    "Kestrel": {
        "Endpoints": {
            "Http": {
                "Url": "http://localhost:6066"
            }
        }
    }
}

nginx

server {
    listen 443 ssl http2;
    listen       [::]:443 ssl http2;

    server_name lifelog.example.org;

    index index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/lifelog.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lifelog.example.org/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;
    ssl_dhparam /etc/ssl/dhparam.pem;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    location / {
            proxy_pass http://localhost:6066; # Port of your appsettings
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Service file

Assuming a release is installed in /var/www/lifelogbb and the www-data user has write access to the database. For enhanced security you can create a dedicated user for the service.

[Unit]
Description=LifelogBbDeamon

[Service]
WorkingDirectory=/var/www/lifelogbb
ExecStart=/usr/bin/dotnet /var/www/lifelogbb/LifelogBb.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-lifelogbb
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Development

Clone the repository and either install Visual Studio or just the dotnet tools.

Run it by pressing F5 in Visual Studio or using the dotnet cli.

git clone https://github.com/spech66/lifelogbb.git
cd lifelogbb
cd LifelogBb
dotnet watch

Swagger UI at https://localhost:7290/Swagger/.

Generate database migrations using Add-Migration NAME.

Apply migrations using Update-Database.

Additional resources