From 71c2e64daf8d6fc718bab1831d3d4d224d5f63a1 Mon Sep 17 00:00:00 2001 From: Jonathon Chambers Date: Sat, 6 Jan 2024 10:42:14 -0500 Subject: [PATCH 1/3] dockerSupport: Added Basic Docker support to the application. --- .gitignore | 1 + Dockerfile | 16 ++++++++++++++++ .../Implementations/CollisionRecordDataAccess.cs | 2 +- External/Implementations/GasRecordDataAccess.cs | 2 +- External/Implementations/NoteDataAccess.cs | 2 +- .../Implementations/ServiceRecordDataAccess.cs | 2 +- External/Implementations/TaxRecordDataAccess.cs | 2 +- External/Implementations/VehicleDataAccess.cs | 2 +- README.md | 7 +++++++ appsettings.json | 2 +- data/README.MD | 3 +++ 11 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 Dockerfile create mode 100644 data/README.MD diff --git a/.gitignore b/.gitignore index d43ae1a..d8c2da9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ bin/ obj/ wwwroot/images/ cartracker.db +data/cartracker.db wwwroot/documents/ wwwroot/temp/ wwwroot/imports/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c65f04f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env + +WORKDIR /app + +COPY *.csproj ./ +RUN dotnet restore + +COPY . ./ +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime +WORKDIR /app +RUN mkdir -p /app/data +COPY --from=build-env /app/out . + +ENTRYPOINT [ "dotnet", "CarCareTracker.dll" ] \ No newline at end of file diff --git a/External/Implementations/CollisionRecordDataAccess.cs b/External/Implementations/CollisionRecordDataAccess.cs index eb4366f..1850fab 100644 --- a/External/Implementations/CollisionRecordDataAccess.cs +++ b/External/Implementations/CollisionRecordDataAccess.cs @@ -6,7 +6,7 @@ namespace CarCareTracker.External.Implementations { public class CollisionRecordDataAccess : ICollisionRecordDataAccess { - private static string dbName = "cartracker.db"; + private static string dbName = "data/cartracker.db"; private static string tableName = "collisionrecords"; public List GetCollisionRecordsByVehicleId(int vehicleId) { diff --git a/External/Implementations/GasRecordDataAccess.cs b/External/Implementations/GasRecordDataAccess.cs index dc1e3ac..68c214f 100644 --- a/External/Implementations/GasRecordDataAccess.cs +++ b/External/Implementations/GasRecordDataAccess.cs @@ -6,7 +6,7 @@ namespace CarCareTracker.External.Implementations { public class GasRecordDataAccess: IGasRecordDataAccess { - private static string dbName = "cartracker.db"; + private static string dbName = "data/cartracker.db"; private static string tableName = "gasrecords"; public List GetGasRecordsByVehicleId(int vehicleId) { diff --git a/External/Implementations/NoteDataAccess.cs b/External/Implementations/NoteDataAccess.cs index 96018c4..a8e9155 100644 --- a/External/Implementations/NoteDataAccess.cs +++ b/External/Implementations/NoteDataAccess.cs @@ -6,7 +6,7 @@ namespace CarCareTracker.External.Implementations { public class NoteDataAccess: INoteDataAccess { - private static string dbName = "cartracker.db"; + private static string dbName = "data/cartracker.db"; private static string tableName = "notes"; public Note GetNoteByVehicleId(int vehicleId) { diff --git a/External/Implementations/ServiceRecordDataAccess.cs b/External/Implementations/ServiceRecordDataAccess.cs index 146c3fe..767d253 100644 --- a/External/Implementations/ServiceRecordDataAccess.cs +++ b/External/Implementations/ServiceRecordDataAccess.cs @@ -6,7 +6,7 @@ namespace CarCareTracker.External.Implementations { public class ServiceRecordDataAccess: IServiceRecordDataAccess { - private static string dbName = "cartracker.db"; + private static string dbName = "data/cartracker.db"; private static string tableName = "servicerecords"; public List GetServiceRecordsByVehicleId(int vehicleId) { diff --git a/External/Implementations/TaxRecordDataAccess.cs b/External/Implementations/TaxRecordDataAccess.cs index 90db232..e02ec9a 100644 --- a/External/Implementations/TaxRecordDataAccess.cs +++ b/External/Implementations/TaxRecordDataAccess.cs @@ -6,7 +6,7 @@ namespace CarCareTracker.External.Implementations { public class TaxRecordDataAccess : ITaxRecordDataAccess { - private static string dbName = "cartracker.db"; + private static string dbName = "data/cartracker.db"; private static string tableName = "taxrecords"; public List GetTaxRecordsByVehicleId(int vehicleId) { diff --git a/External/Implementations/VehicleDataAccess.cs b/External/Implementations/VehicleDataAccess.cs index 9a008f8..adb2c85 100644 --- a/External/Implementations/VehicleDataAccess.cs +++ b/External/Implementations/VehicleDataAccess.cs @@ -6,7 +6,7 @@ namespace CarCareTracker.External.Implementations { public class VehicleDataAccess: IVehicleDataAccess { - private static string dbName = "cartracker.db"; + private static string dbName = "data/cartracker.db"; private static string tableName = "vehicles"; public bool SaveVehicle(Vehicle vehicle) { diff --git a/README.md b/README.md index b7e0bfa..044ad1a 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,13 @@ A self-hosted, open-source vehicle service records and maintainence tracker. ## Why Because nobody should have to deal with a homemade spreadsheet or a shoebox full of receipts when it comes to vehicle maintainence. +## Docker Setup (Recommended) +1. Install Docker +2. Clone this repo +3. Run `docker build -t lubelog .` +4. Run `docker run -d -p 80:5000 --name lubelog lubelog` + 1. Optionally, you can mount a volume to the container to persist data. For example, `docker run -d -p 80:5000 -v /path/to/data:/app/data --name lubelog lubelog` + ## Dependencies - Bootstrap - LiteDB diff --git a/appsettings.json b/appsettings.json index d621863..4de98f4 100644 --- a/appsettings.json +++ b/appsettings.json @@ -8,7 +8,7 @@ "Kestrel": { "Endpoints": { "http": { - "Url": "http://localhost:5000" + "Url": "http://0.0.0.0:5000" } } }, diff --git a/data/README.MD b/data/README.MD new file mode 100644 index 0000000..d975a2a --- /dev/null +++ b/data/README.MD @@ -0,0 +1,3 @@ +# Data Directory +## Purpose: +Used to store the LiteDB database file. This directory can be mounted as a volume in the Dockerfile. \ No newline at end of file From 997c045312a9904713216341a5cc75e9fe31f60b Mon Sep 17 00:00:00 2001 From: Jonathon Chambers Date: Sat, 6 Jan 2024 10:46:20 -0500 Subject: [PATCH 2/3] dockerSupport: Removed readme in data dir. Not needed --- data/README.MD | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 data/README.MD diff --git a/data/README.MD b/data/README.MD deleted file mode 100644 index d975a2a..0000000 --- a/data/README.MD +++ /dev/null @@ -1,3 +0,0 @@ -# Data Directory -## Purpose: -Used to store the LiteDB database file. This directory can be mounted as a volume in the Dockerfile. \ No newline at end of file From 1286974fb63115d22014642a41b33f9d2eebba1c Mon Sep 17 00:00:00 2001 From: Jonathon Chambers Date: Sat, 6 Jan 2024 10:49:25 -0500 Subject: [PATCH 3/3] dockerSupport: Added expose to the dockerfile. Can be used without but still nice to add. --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index c65f04f..787df49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,4 +13,6 @@ WORKDIR /app RUN mkdir -p /app/data COPY --from=build-env /app/out . +EXPOSE 5000 + ENTRYPOINT [ "dotnet", "CarCareTracker.dll" ] \ No newline at end of file