Skip to content

content(blog): umbraco on ddev - #724

Merged
rfay merged 7 commits into
ddev:mainfrom
millnut:feature/blog-post-umbraco-ddev
Aug 24, 2026
Merged

content(blog): umbraco on ddev#724
rfay merged 7 commits into
ddev:mainfrom
millnut:feature/blog-post-umbraco-ddev

Conversation

@millnut

@millnut millnut commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Blog post on running Umbraco with DDEV

Rendered at https://pr-724.ddev-com-fork-previews.pages.dev/blog/umbraco-on-ddev/

@rfay
rfay force-pushed the feature/blog-post-umbraco-ddev branch from 6b16200 to aa7f237 Compare August 21, 2026 17:32
@rfay

rfay commented Aug 21, 2026

Copy link
Copy Markdown
Member

Awesome, thanks! rebased.

@github-actions

Copy link
Copy Markdown

🌐 Fork Preview for PR #724

https://pr-724.ddev-com-fork-previews.pages.dev

This preview updates automatically when you push changes to your fork.

@rfay

rfay commented Aug 21, 2026

Copy link
Copy Markdown
Member

https://pr-724.ddev-com-fork-previews.pages.dev/blog/umbraco-on-ddev/

@rfay rfay left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very cool, testing it now. Minor comments and suggestions.

Comment thread src/content/blog/umbraco-on-ddev.md Outdated
Comment thread src/content/blog/umbraco-on-ddev.md Outdated
Comment thread src/content/blog/umbraco-on-ddev.md Outdated
Comment thread src/content/blog/umbraco-on-ddev.md Outdated
Comment thread src/content/blog/umbraco-on-ddev.md Outdated
https_port: 443
```

Those two port numbers being equal matters. DDEV builds the Traefik backend URL from `http_port` rather than `container_port`, so an otherwise reasonable pairing of `container_port: 8080` with `http_port: 80` sends traffic to port 80 in the container and returns a 502. I lost a while to that one before reading the router configuration it generates.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd be interested in knowing more about what you experienced here. The router definitely knows how to use port 443/80 to send to a different http port (if your webserver were running on port 8080 for example)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may be me not being familiar enough with DDEV's routing but this was the only way I could get it to serve Umbraco

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There really isn't anything that you should have to know about DDEV's routing. But sometimes an application is picky whether it can be found on the same container port as the router port (reverse proxy).

Comment thread src/content/blog/umbraco-on-ddev.md Outdated
Comment thread src/content/blog/umbraco-on-ddev.md Outdated

DDEV does have an add-on for SQL Server, [ddev-sqlsrv](https://github.com/ddev/ddev-sqlsrv), which runs full SQL Server and works on Apple Silicon through Rosetta 2 emulation. Apple has announced Rosetta is going away, and I wanted to see what was possible without installing it.

This is the choice I would most like to revisit. If Microsoft ever publishes an ARM64 image, I would rather be running full SQL Server than Azure SQL Edge.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be used in ddev/ddev-sqlsrv, or an equivalent add-on (one that's less ambitious than yours? I didn't know that this was even a possibility. It's a long-term surprise that MS continues to fail at providing ARM64 on so many things.

Maybe you can say a bit more about why azure-sql-edge can be used as a stand-in here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

azure-sql-edge was retired by Microsoft, so is purely used as an experiment on how far I could get without enabling rosetta on macOS with Apple Silicon.

Given Microsoft's recent partnerships in the ARM space I'm hoping we'll see a true full SQL Server docker image with ARM64 support.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've been following the issue about MS ARM64 on sqlsrv for several years now. They don't ever chime in really.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah yes that thread I've been watching that for awhile as well

Comment thread src/content/blog/umbraco-on-ddev.md Outdated

The healthcheck is a raw socket connection because Azure SQL Edge ships no `sqlcmd` to query with. It only proves the port is open, and the server accepts logins a moment after that, so the check is weaker than I would like. The 30 second grace period covers the initialisation of the system databases on a first run, which takes about 20 seconds and would otherwise exhaust the retries.

Only `sqlserver` and `adminer` are defined in that compose file. The web container is configured entirely through `config.yaml`, so DDEV keeps ownership of its lifecycle.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are defined in that compose file

I assume you men "in the azure-sql-edge image"?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are the compose service names, I can mention that sqlserver uses azure-sql-edge if that would make it clearer?

Co-authored-by: Randy Fay <randy@randyfay.com>
Comment thread src/content/blog/umbraco-on-ddev.md Outdated

@rfay rfay left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great, and I was able to get it going quite easily. Impressive usage.

  • I don't think the .ddev/.env relationship to the appsettings.Local.json.example are quite correct. Perhaps the created appsettings.Local.json doesn't respect the .ddev/.env in the future.
  • ddev logs and ddev logs -f are pretty useful and fun with this, it would probably be good to mention them.
  • You may want to consider performance_mode: none in the config; it's my bet that mutagen is not useful for dotnet.

So much fun, thanks! When you think it's ready we'll publish.

@millnut

millnut commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the feedback @rfay I've updated the repo with your suggestions and updated the blog content for re-review

Comment thread src/content/blog/umbraco-on-ddev.md Outdated
@rfay
rfay merged commit fba7a68 into ddev:main Aug 24, 2026
4 checks passed
@github-actions

Copy link
Copy Markdown

PR closed. The Cloudflare Pages preview is no longer updated.

@rfay

rfay commented Aug 24, 2026

Copy link
Copy Markdown
Member

Thanks! This is such a great tutorial example!

@millnut

millnut commented Aug 24, 2026

Copy link
Copy Markdown
Contributor Author

Thanks! This is such a great tutorial example!

Thanks @rfay hopefully I can do a follow up when things stablise more on the SQL Server front

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants