Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions deploy/docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ This brings up the full stack on a single host:
| `admin` | `fsh/admin:local` | `FSH_ADMIN_PORT` (default 8081) | Operator console (nginx + React) |
| `dashboard` | `fsh/dashboard:local` | `FSH_DASHBOARD_PORT` (default 8082) | Tenant dashboard (nginx + React) |
| `migrator` | `fsh/dbmigrator:local` | — | One-shot: applies EF migrations + seeds the root tenant + creates the default admin user |
| `postgres` | `postgres:17-alpine` | (internal) | Identity, tenant catalog, module schemas |
| `redis` | `redis:7-alpine` | (internal) | HybridCache L2, Data Protection keys, idempotency store |
| `minio` | `minio/minio:latest` | (internal) | S3-compatible blob store for the Files module |
| `postgres` | `postgres:18-alpine` | (internal) | Identity, tenant catalog, module schemas |
| `redis` | `valkey/valkey:9.1.0-alpine` | (internal) | HybridCache L2, Data Protection keys, idempotency store |
| `minio` | `quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z` | (internal) | S3-compatible blob store for the Files module |
| `minio-init` | `quay.io/minio/mc:RELEASE.2025-08-13T08-35-41Z` | — | One-shot: creates the `fsh` bucket the Files module writes to |

The compose file does **not** include a reverse proxy or TLS terminator. You bring your own edge — Cloudflare Tunnel, AWS ALB, Tailscale Funnel, your existing nginx, anything that can route a TLS subdomain to a host:port on this machine.

Expand Down
6 changes: 4 additions & 2 deletions deploy/docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ services:
# - "6379:6379"

minio:
image: minio/minio:latest
# quay.io: minio/minio is gone from Docker Hub. Tag pinned; quay stopped moving :latest.
image: quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z
container_name: fsh-minio
restart: unless-stopped
command: ["server", "/data", "--console-address", ":9001"]
Expand All @@ -79,7 +80,8 @@ services:
# policy is set — objects are served via the API / presigned URLs, not a
# public bucket.
minio-init:
image: minio/mc:latest
# quay.io: minio/mc is gone from Docker Hub too. Tag pinned; quay stopped moving :latest.
image: quay.io/minio/mc:RELEASE.2025-08-13T08-35-41Z
container_name: fsh-minio-init
restart: "no"
depends_on:
Expand Down
10 changes: 6 additions & 4 deletions src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
<!-- Pack default lives in Directory.Build.props (false; source-ownership model). -->
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<!-- 10.x: the 8.x line pulls Microsoft.Build.Tasks.Git 8.0.0, unpatched for NU1902. -->
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="10.0.401" />
</ItemGroup>
<ItemGroup Label="Aspire">
<PackageVersion Include="Aspire.Hosting.JavaScript" Version="13.4.0" />
Expand Down Expand Up @@ -122,9 +123,10 @@
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.8" />
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.11.0" />
<PackageVersion Include="Testcontainers.Redis" Version="4.11.0" />
<PackageVersion Include="Testcontainers.Minio" Version="4.11.0" />
<!-- 4.14.0+: earlier versions pull SSH.NET 2025.1.0, NU1903. -->
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.14.0" />
<PackageVersion Include="Testcontainers.Redis" Version="4.14.0" />
<PackageVersion Include="Testcontainers.Minio" Version="4.14.0" />
</ItemGroup>
<ItemGroup Label="AWS">
<PackageVersion Include="AWSSDK.S3" Version="4.0.23.4" />
Expand Down
5 changes: 5 additions & 0 deletions src/Host/FSH.Starter.AppHost/AppHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@
var minioUser = builder.AddParameter("minio-user", "minioadmin");
var minioPassword = builder.AddParameter("minio-password", "minioadmin", secret: true);

// quay.io: minio/minio is gone from Docker Hub. Tag pinned; quay stopped moving :latest.
var minio = builder.AddContainer("minio", "minio/minio")
.WithImageRegistry("quay.io")
.WithImageTag("RELEASE.2025-09-07T16-13-09Z")
.WithArgs("server", "/data", "--console-address", ":9001")
.WithHttpEndpoint(port: 9000, targetPort: 9000, name: "api")
.WithHttpEndpoint(port: 9001, targetPort: 9001, name: "console")
Expand All @@ -73,6 +76,8 @@
""").ReplaceLineEndings("\n");

var minioInit = builder.AddContainer("minio-init", "minio/mc")
.WithImageRegistry("quay.io")
.WithImageTag("RELEASE.2025-08-13T08-35-41Z")
.WithEntrypoint("/bin/sh")
.WithArgs("-c", minioInitScript)
.WithEnvironment("MC_USER", minioUser)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ public sealed class MiddlewareWebApplicationFactory : WebApplicationFactory<Prog
.WithCleanUp(true)
.Build();

private readonly MinioContainer _minio = new MinioBuilder("minio/minio:latest")
// quay.io: minio/minio is gone from Docker Hub. Tag pinned; quay stopped moving :latest.
private readonly MinioContainer _minio = new MinioBuilder("quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z")
.WithUsername(MinioAccessKey)
.WithPassword(MinioSecretKey)
.WithAutoRemove(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public sealed class FshWebApplicationFactory : WebApplicationFactory<Program>, I
.WithCleanUp(true)
.Build();

private readonly MinioContainer _minio = new MinioBuilder("minio/minio:latest")
// quay.io: minio/minio is gone from Docker Hub. Tag pinned; quay stopped moving :latest.
private readonly MinioContainer _minio = new MinioBuilder("quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z")
.WithUsername(MinioAccessKey)
.WithPassword(MinioSecretKey)
.WithAutoRemove(true)
Expand Down
Loading