Chajio Cloud
App Hosting

.NET Hosting

Push an ASP.NET Core project to GitHub and it deploys as dotnet new made it, with no Dockerfile or port code. Chajio Cloud builds it with the SDK your project targets and runs two copies on Linux, with free SSL.

$ git push origin main
▸ Detected .NET project: MyApp.csproj
▸ Detected version requirement: ^10.0
▸ Resolved .NET SDK version 10.0.402
▸ dotnet publish MyApp.csproj --runtime linux-x64
▸ Found web: ./MyApp --urls http://*:$PORT
✓ Live on 2 replicas: https://my-app.live.chajio.cloud

How it works

How we build and run your .NET app

  1. Detect

    A .csproj file marks a .NET app. There is no Dockerfile or start command to write.

  2. Pick the SDK

    The TargetFramework in your project picks the SDK: net10.0 builds with the newest .NET 10 SDK. A global.json chooses the SDK version instead, following its rollForward setting.

  3. Publish

    Your project is published in Release mode for Linux, restoring its NuGet packages on the way: the same output dotnet publish gives you locally.

  4. Run

    Your app starts with --urls http://*:$PORT, so it listens on the right port with no code, and takes visitors once its health check passes.

Get ready

Getting your .NET app ready

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHealthChecks();

var app = builder.Build();
app.MapRazorPages();
app.MapHealthChecks("/health");
app.Run();

No port code needed. A Razor Pages or MVC app answers the default health check at / as it is. A Web API has nothing at /, so map /health as above and set Health check path to /health.

Environment tab
ASPNETCORE_FORWARDEDHEADERS_ENABLED=true

HTTPS ends before your app, so without this it sees plain http and the proxy’s address. With it, sign-in redirects, absolute links and secure cookies use https, and you see each visitor’s real IP.

Program.cs: DATABASE_URL for Npgsql
static string ToNpgsql(string url)
{
    var uri = new Uri(url);
    var user = uri.UserInfo.Split(':', 2);
    return new NpgsqlConnectionStringBuilder
    {
        Host = uri.Host,
        Port = uri.Port > 0 ? uri.Port : 5432,
        Database = uri.AbsolutePath.TrimStart('/'),
        Username = Uri.UnescapeDataString(user[0]),
        Password = user.Length > 1 ? Uri.UnescapeDataString(user[1]) : null,
    }.ConnectionString;
}

builder.Services.AddDbContext<AppDbContext>(o =>
    o.UseNpgsql(ToNpgsql(Environment.GetEnvironmentVariable("DATABASE_URL")!)));

A managed database reaches your app as a postgresql:// address, which Npgsql doesn’t accept as it is. Convert it once, as here.

Works with

What you can run

Razor Pages

Deploys exactly as dotnet new webapp makes it.

ASP.NET Core MVC

Controllers and views, served the same way.

Web APIs

Minimal APIs or controllers, with a /health route.

.NET 8 and .NET 10

Both long-term-support releases, picked from your project.

EF Core + Npgsql

PostgreSQL through Entity Framework Core.

NuGet packages

Restored during the build, with no setup.

In production

Running your .NET app in production

Share data protection keys

Two copies run at once, and each makes its own keys unless told otherwise, so a form rendered by one copy and posted to the other fails with 400 Bad Request. Store the keys in your database with PersistKeysToDbContext.

Web APIs need a health route

The webapi template only maps /weatherforecast, so the default health check at / gets a 404 and the deploy never becomes ready. Add app.MapHealthChecks("/health") and point the health check at it.

Migrations, not EnsureCreated

Both copies start together on the first deploy, and two Database.EnsureCreated() calls on an empty database can crash one of them with “relation already exists”. Create your tables with EF Core migrations instead.

Two warnings you can ignore

“Failed to determine the https port for redirect” only means UseHttpsRedirection has nothing to do, because HTTPS is already handled. The warning about keys that “may not be persisted” goes once keys are shared.

Every plan

Included on every plan

2 replicas of every app

Two copies behind a load balancer, so a restart or a failed machine never takes you offline.

A managed database

PostgreSQL, MariaDB or MongoDB, with its own standby replica on another machine.

Deploy on every push

Connect GitHub once; every push to your branch builds and goes live.

One-click rollbacks

Go back to any earlier successful deployment from the Deployments tab.

Free SSL, your domain

Certificates issued and renewed for you, plus a free .live.chajio.cloud address.

Build and runtime logs

Watch builds as they run, and see what your app prints as it serves visitors.

CPU, memory and network

Metrics for every app, from the last 15 minutes to the last 30 days.

Zero-downtime deploys

A new version takes visitors only once its health check passes.

Pricing

.NET hosting plans

Free Plan

5GB DB Storage · 2GB RAM

Free 1st month

Then $3.50/mo

  • 2 vCPU
  • 2 Apps
  • 1 Database
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Start Free

Growth Plan

10GB DB Storage · 2GB RAM

$8.99/mo
  • 3 vCPU
  • 4 Apps
  • 2 Databases
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Choose Growth
Most Popular

Business Plan

20GB DB Storage · 4GB RAM

$18.99/mo
  • 4 vCPU
  • 6 Apps
  • 3 Databases
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Choose Business

Pro Plan

30GB DB Storage · 8GB RAM

$37.98/mo
  • 8 vCPU
  • 10 Apps
  • 5 Databases
  • 2 App Replicas (HA)
  • 2 Database Replicas (HA)
  • PostgreSQL, MariaDB or MongoDB
  • Deploy from GitHub
  • Auto-deploy on push
  • One-click rollbacks
  • Deployment history
  • Build & runtime logs
  • CPU, RAM, disk & network metrics
  • Disk usage tracking
  • Environment variables
  • Custom domain
  • Free SSL
Go Pro

FAQ

.NET hosting questions

The one your project targets in TargetFramework. net10.0 builds with the newest .NET 10 SDK and net8.0 with .NET 8; both have been deployed end to end. A global.json at the root of your repository chooses the SDK instead, following its rollForward setting.

No. Your app is started with --urls set to the port in PORT, so a project made with dotnet new deploys unchanged. Code that calls UseUrls with PORT still works, but isn’t needed.

The webapi template has nothing at /, so the default health check gets a 404. Add app.MapHealthChecks("/health") and set Health check path to /health.

A managed PostgreSQL database reaches your app as DATABASE_URL, a postgresql:// address. Npgsql needs Host=…;Database=… pairs instead, so convert the address once in Program.cs, as the .NET guide shows, or set ConnectionStrings__Default yourself.

No. Apps run on Linux, so they need ASP.NET Core on modern .NET. Web Forms and other .NET Framework apps have to be ported first.

Not as a managed database. Every plan includes PostgreSQL, MariaDB or MongoDB; PostgreSQL with Npgsql is the closest fit for Entity Framework Core apps.

You can start on the Free plan: free for your first month, then $3.50 a month, with 2 vCPU, 2GB RAM, 2 apps and a managed database. The Growth, Business and Pro plans add more CPU, memory, apps and databases as you grow.

Plans are priced and billed in US dollars, and you pay by card at checkout.

Deploy your .NET app today

Your first month is on us, with a managed database and two replicas from day one.