add docker-compose.yml, refactor for docker volume usage
user defined data should not be mixed with static application data in one directory. therefore we need to move some files like db and userconfig to separate directories, which can then be declared as docker volumes.
This commit is contained in:
@@ -55,7 +55,7 @@ namespace CarCareTracker.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
var configFileContents = System.IO.File.ReadAllText("userConfig.json");
|
||||
var configFileContents = System.IO.File.ReadAllText("config/userConfig.json");
|
||||
var existingUserConfig = System.Text.Json.JsonSerializer.Deserialize<UserConfig>(configFileContents);
|
||||
if (existingUserConfig is not null)
|
||||
{
|
||||
@@ -69,7 +69,7 @@ namespace CarCareTracker.Controllers
|
||||
userConfig.UserNameHash = string.Empty;
|
||||
userConfig.UserPasswordHash = string.Empty;
|
||||
}
|
||||
System.IO.File.WriteAllText("userConfig.json", System.Text.Json.JsonSerializer.Serialize(userConfig));
|
||||
System.IO.File.WriteAllText("config/userConfig.json", System.Text.Json.JsonSerializer.Serialize(userConfig));
|
||||
return Json(true);
|
||||
} catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace CarCareTracker.Controllers
|
||||
//compare it against hashed credentials
|
||||
try
|
||||
{
|
||||
var configFileContents = System.IO.File.ReadAllText("userConfig.json");
|
||||
var configFileContents = System.IO.File.ReadAllText("config/userConfig.json");
|
||||
var existingUserConfig = System.Text.Json.JsonSerializer.Deserialize<UserConfig>(configFileContents);
|
||||
if (existingUserConfig is not null)
|
||||
{
|
||||
@@ -74,7 +74,7 @@ namespace CarCareTracker.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
var configFileContents = System.IO.File.ReadAllText("userConfig.json");
|
||||
var configFileContents = System.IO.File.ReadAllText("config/userConfig.json");
|
||||
var existingUserConfig = JsonSerializer.Deserialize<UserConfig>(configFileContents);
|
||||
if (existingUserConfig is not null)
|
||||
{
|
||||
@@ -86,7 +86,7 @@ namespace CarCareTracker.Controllers
|
||||
existingUserConfig.UserNameHash = hashedUserName;
|
||||
existingUserConfig.UserPasswordHash = hashedPassword;
|
||||
}
|
||||
System.IO.File.WriteAllText("userConfig.json", JsonSerializer.Serialize(existingUserConfig));
|
||||
System.IO.File.WriteAllText("config/userConfig.json", JsonSerializer.Serialize(existingUserConfig));
|
||||
return Json(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -101,7 +101,7 @@ namespace CarCareTracker.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
var configFileContents = System.IO.File.ReadAllText("userConfig.json");
|
||||
var configFileContents = System.IO.File.ReadAllText("config/userConfig.json");
|
||||
var existingUserConfig = JsonSerializer.Deserialize<UserConfig>(configFileContents);
|
||||
if (existingUserConfig is not null)
|
||||
{
|
||||
@@ -110,7 +110,7 @@ namespace CarCareTracker.Controllers
|
||||
existingUserConfig.UserNameHash = string.Empty;
|
||||
existingUserConfig.UserPasswordHash = string.Empty;
|
||||
}
|
||||
System.IO.File.WriteAllText("userConfig.json", JsonSerializer.Serialize(existingUserConfig));
|
||||
System.IO.File.WriteAllText("config/userConfig.json", JsonSerializer.Serialize(existingUserConfig));
|
||||
//destroy any login cookies.
|
||||
Response.Cookies.Delete("ACCESS_TOKEN");
|
||||
return Json(true);
|
||||
|
||||
@@ -23,7 +23,7 @@ if (!Directory.Exists("data"))
|
||||
}
|
||||
|
||||
//Additional JsonFile
|
||||
builder.Configuration.AddJsonFile("userConfig.json", optional: true, reloadOnChange: true);
|
||||
builder.Configuration.AddJsonFile("config/userConfig.json", optional: true, reloadOnChange: true);
|
||||
|
||||
//Configure Auth
|
||||
builder.Services.AddDataProtection();
|
||||
|
||||
32
README.md
32
README.md
@@ -19,3 +19,35 @@ Because nobody should have to deal with a homemade spreadsheet or a shoebox full
|
||||
- SweetAlert2
|
||||
- CsvHelper
|
||||
- Chart.js
|
||||
|
||||
## Docker
|
||||
|
||||
### manual
|
||||
|
||||
- build
|
||||
|
||||
```
|
||||
docker build -t hargata/lubelog:latest .
|
||||
```
|
||||
|
||||
- run
|
||||
|
||||
```
|
||||
docker run -d hargata/lubelog:latest
|
||||
```
|
||||
|
||||
add `-v` for persistent volumes as needed. Have a look at the docker-compose.yml for examples.
|
||||
|
||||
## docker-compose
|
||||
|
||||
- build image
|
||||
|
||||
```
|
||||
docker compose build
|
||||
```
|
||||
|
||||
- run
|
||||
|
||||
```
|
||||
docker compose build
|
||||
```
|
||||
|
||||
47
docker-compose.yml
Normal file
47
docker-compose.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
version: "3.4"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: hargata/lubelog:latest
|
||||
build: .
|
||||
restart: unless-stopped
|
||||
# volumes used to keep data persistent
|
||||
volumes:
|
||||
- config:/App/config
|
||||
- data:/App/data
|
||||
- documents:/App/wwwroot/documents
|
||||
- images:/App/wwwroot/images
|
||||
- log:/App/log
|
||||
# expose port and/or use serving via traefik
|
||||
ports:
|
||||
- 8080:8080
|
||||
# traefik configurations, including networks can be commented out if not needed
|
||||
networks:
|
||||
- traefik-ingress
|
||||
labels:
|
||||
## Traefik General
|
||||
# We set 'enable by default' to false, so this tells Traefik we want it to connect here
|
||||
traefik.enable: true
|
||||
# define network for traefik<>app communication
|
||||
traefik.docker.network: traefik-ingress
|
||||
## HTTP Routers
|
||||
traefik.http.routers.whoami.entrypoints: https
|
||||
traefik.http.routers.whoami.rule: Host(`lubelog.mydomain.tld`)
|
||||
## Middlewares
|
||||
#traefik.http.routers.whoami.middlewares: authentik@docker
|
||||
# none
|
||||
## HTTP Services
|
||||
traefik.http.services.whoami.loadbalancer.server.port: 5000
|
||||
|
||||
volumes:
|
||||
config:
|
||||
data:
|
||||
documents:
|
||||
images:
|
||||
log:
|
||||
|
||||
networks:
|
||||
app:
|
||||
traefik-ingress:
|
||||
external: true
|
||||
Reference in New Issue
Block a user