From 8597f481805e3c52424021c2ae3164f234d75fa1 Mon Sep 17 00:00:00 2001 From: Blake Ridgway Date: Wed, 18 Jun 2025 16:32:36 -0500 Subject: [PATCH] ci: Containerization of the app --- Dockerfile | 34 ++++++++++++++++++++++++ README.md | 69 +++++++++++++++++++++++++++++++++++++++++++----- appsettings.json | 4 +-- 3 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1ef1e3a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# RUN WITH docker run -e "ASPNETCORE_URLS=http://+:80" -p 8080:80 turf-tasker-app +# This is only temporary + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /src + +COPY ["turf_tasker.csproj", "./"] +RUN dotnet restore "turf_tasker.csproj" + +COPY . . + +WORKDIR "/src" + +RUN dotnet build "turf_tasker.csproj" -c Release -o /app/build + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS publish +WORKDIR /src + +COPY --from=build "/src/turf_tasker.csproj" "./" +RUN dotnet restore "turf_tasker.csproj" + +COPY . . + +WORKDIR "/src" +RUN dotnet publish "turf_tasker.csproj" -c Release -o /app/publish /p:UserAppHost=false + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final +WORKDIR /app + +COPY --from=publish /app/publish . + +COPY turf_tasker.db . + +ENTRYPOINT ["dotnet", "turf_tasker.dll"] diff --git a/README.md b/README.md index f3fc6e8..9d5a85d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# MowLog +# Turf Tasker A simple but powerful ASP.NET Core MVC application designed to track lawn care activities. **This project serves as a hands-on learning exercise to explore and master the fundamentals of the ASP.NET Core MVC framework, @@ -9,6 +9,7 @@ from data modeling with Entity Framework Core to building dynamic, data-driven v - Log lawn care events (Mowing, Watering, Fertilizing, etc.). - Track mowing patterns to ensure a healthy lawn and prevent ruts. - Dashboard homepage showing the last time key activities were performed and what the next mowing pattern should be. +- A dedicated section for general lawn care tips. - A filterable and sortable log of all past activities. - Clean, responsive UI using Bootstrap. @@ -19,11 +20,67 @@ from data modeling with Entity Framework Core to building dynamic, data-driven v - **Frontend:** HTML, CSS, Bootstrap 5, JavaScript (with jQuery) - **Development Environment:** JetBrains Rider on Fedora Linux - **Version Control:** Git with GitLab +- **Containerization:** Docker ## How to Run -1. Clone the repository. -2. Ensure you have the .NET 8 SDK installed. -3. Navigate to the project directory and run `dotnet restore`. -4. Run `dotnet ef database update` to create the initial SQLite database. -5. Run `dotnet run` to start the application. \ No newline at end of file +You can run this application either directly using the .NET SDK or via Docker. + +### Option 1: Run Natively (using .NET SDK) + +1. **Clone the repository:** + ```bash + git clone https://gitlab.com/blakeridgway/turf-tasker.git + ``` +2. **Navigate to the project directory:** + ```bash + cd turf-tasker + ``` + (If your `turf_tasker.csproj` is directly in the cloned `turf_tasker` folder, you might skip this `cd`.) +3. **Ensure .NET 8 SDK is installed:** + ```bash + dotnet --version + ``` + (Should show 8.x.x) +4. **Restore dependencies:** + ```bash + dotnet restore + ``` +5. **Create/Update the database:** + ```bash + dotnet ef database update + ``` + This will create the `turf_tasker.db` SQLite file and seed initial data. +6. **Run the application:** + ```bash + dotnet run + ``` +7. **Access in browser:** Your application will typically run on `https://localhost:5062` or a similar port, which will be displayed in the terminal output. + +### Option 2: Run with Docker + +1. **Ensure Docker is installed and running** on your system. + * [Docker Installation Guide](https://docs.docker.com/engine/install/) +2. **Clone the repository** (if you haven't already): + ```bash + git clone https://gitlab.com/blakeridgway/turf-tasker.git + ``` +3. **Navigate to the project directory**: + ```bash + cd turf_tasker + ``` +4. **Build the Docker image:** + ```bash + docker build -t turf-tasker-app . + ``` + This command builds the image and tags it as `turf-tasker-app`. +5. **Run the Docker container:** + ```bash + docker run -e "ASPNETCORE_URLS=http://+:80" -p 8080:80 turf-tasker-app + ``` + * `-e "ASPNETCORE_URLS=http://+:80"` explicitly configures the app to listen on HTTP port 80 inside the container. + * `-p 8080:80` maps port 8080 on your host machine to port 80 inside the container. +6. **Access in browser:** + ``` + http://localhost:8080 + ``` diff --git a/appsettings.json b/appsettings.json index 9a1a2aa..8fdac5c 100644 --- a/appsettings.json +++ b/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "DefaultConnection": "Data Source=MowLog.db" + "DefaultConnection": "Data Source=turf_tasker.db" }, "Logging": { "LogLevel": { @@ -9,4 +9,4 @@ } }, "AllowedHosts": "*" -} \ No newline at end of file +}