# LifelogBB
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.
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
dotnet tool install --global dotnet-ef
appsettings.Production.json
to your needslifelogbb.db
in the LifelogBb
folder (or adjust appsettings.Production.json
)
sqlite3 lifelogbb.db "VACUUM;"
dotnet watch
in the LifelogBb
foldergit clone https://github.com/spech66/lifelogbb.git
cd lifelogbb
cd LifelogBb
dotnet watch
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"
{
"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"
}
}
}
}
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;
}
}
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
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
.