Umbraco 13 CMS website for Ludero, built on the uSkinned Charity starter kit.
| Layer | Technology |
|---|---|
| Runtime | .NET 8 / ASP.NET Core |
| CMS | Umbraco 13.13.0 |
| Theme | uSkinned SiteBuilder 6.4.3 (Charity starter kit) |
| Views | Razor (.cshtml) |
| Database (dev) | SQLite |
| Database (prod) | Microsoft SQL Server 2022 |
- .NET 8 SDK
- Visual Studio 2022, JetBrains Rider, or VS Code with the C# Dev Kit extension
git clone <repo-url>
cd website-umbraco
dotnet run --project Ludero.SiteOr open LuderoCMS.slnx in Visual Studio and press F5.
The site is available at http://localhost:4133 / https://localhost:44362.
On first run Umbraco performs an unattended install using appsettings.Development.json. Default admin credentials and the SQLite connection string are in that file. The backoffice is at /umbraco.
The repository ships a multi-stage Dockerfile. The image listens on HTTP port 8080 and is designed to run behind a reverse proxy that handles HTTPS termination.
docker build -t ludero-site .
docker run --rm -p 8080:8080 ludero-siteA GitHub Actions workflow (.github/workflows/docker-publish.yml) builds and pushes the image to the repository's package registry on every push to main:
ghcr.io/<owner>/website-umbraco:latest
ghcr.io/<owner>/website-umbraco:sha-<commit>
The workflow uses GITHUB_TOKEN — no extra secrets are needed.
First-time setup: The package visibility defaults to private. Go to the package settings on GitHub and set it to public, or configure pull credentials in your deployment.
docker-compose.example.yml shows a full stack with the site and a SQL Server 2022 container.
-
Copy the example files:
cp docker-compose.example.yml docker-compose.yml cp .env.example .env
-
Fill in
.env(passwords, admin email, public URL). -
Start the stack:
docker compose up -d
Umbraco will create the database and run the unattended install on first boot. Once the site is up, you can set Umbraco__CMS__Unattended__InstallUnattended=false in your env to prevent re-running the installer.
| Variable | Description |
|---|---|
ConnectionStrings__umbracoDbDSN |
Full ADO.NET connection string |
ConnectionStrings__umbracoDbDSN_ProviderName |
Microsoft.Data.SqlClient for SQL Server |
Umbraco__CMS__Unattended__InstallUnattended |
true on first run, then false |
Umbraco__CMS__Unattended__UnattendedUserEmail |
Admin account email |
Umbraco__CMS__Unattended__UnattendedUserPassword |
Admin account password |
Umbraco__CMS__WebRouting__UmbracoApplicationUrl |
Public base URL for absolute link generation |
MSSQL_SA_PASSWORD |
SQL Server SA password (also used inside the connection string) |
ACCEPT_EULA |
Must be Y to start the SQL Server container |
| Volume | Container path | Contents |
|---|---|---|
umbraco-media |
/app/wwwroot/media |
Uploaded media files |
umbraco-data |
/app/umbraco/Data |
Examine indexes, temp files |
umbraco-logs |
/app/umbraco/Logs |
Application logs |
mssql-data |
/var/opt/mssql |
SQL Server data files |
website-umbraco/
├── .github/workflows/ # CI — Docker build and publish
├── Dockerfile
├── .dockerignore
├── docker-compose.example.yml
├── .env.example
├── LuderoCMS.slnx # Solution file
└── Ludero.Site/ # ASP.NET Core application
├── App_Plugins/ # Umbraco plugins (uSkinned backoffice)
├── Views/ # Razor templates
├── wwwroot/ # Static assets (CSS, JS, images, media)
├── umbraco/ # Umbraco runtime data (logs, indexes)
├── appsettings.json # Production configuration
└── appsettings.Development.json # Local dev configuration (excluded from git)
appsettings.Development.json contains plaintext credentials and is excluded from git via .gitignore. Never commit it to a public remote. In production all secrets are passed as environment variables — never bake them into the image or docker-compose.yml.
MIT — Copyright 2026 Ludero