---
title: "How to deploy an EmDash marketing site on Rock8Cloud"
description: "Deploy a content-managed marketing site on EmDash, the Astro-native CMS, to Rock8Cloud in one click - PostgreSQL and S3 media provisioned and wired for you, every page editable as blocks in the admin."
seoTitle: "Deploy EmDash CMS with Astro in One Click"
seoDescription: "One-click EmDash marketing site on Astro and Bun: block editor, passkey login, managed PostgreSQL and S3 media wired in. Publish without a rebuild."
tech: "EmDash + Astro"
icon: emdash
category: fullstack
pubDate: 2026-10-14
image: /how-to/og/howto.png
imageAlt: "How to deploy an EmDash marketing site on Rock8Cloud"
headerImage: true
heroImage:
  src: /how-to/emdash-ui.webp
  alt: "The Acme demo landing page next to the EmDash admin editing its Hero block"
  width: 1919
  height: 1083
exampleRepo: https://github.com/rock8-cloud/astro-emdash-marketing-page
ctaTitle: "Ship your marketing site."
ctaTitleHighlight: "Edit it in the admin."
ctaSubtitle: "An EmDash site, PostgreSQL and media storage - provisioned together, live on the first deploy, every page editable as blocks."
ctaIcons: [emdash, astro, postgresql, s3]
order: 11
steps:
  - name: "Start from the blueprint"
    text: "Open the EmDash blueprint. Rock8Cloud clones the repository into your GitHub account and creates the site service from it."
  - name: "Hit Deploy"
    text: "Rock8Cloud provisions PostgreSQL and an S3 bucket, wires them into the site through env vars, and builds it from the checked-in Dockerfile."
  - name: "Run the setup wizard"
    text: "Open /_emdash/admin on your site URL, keep sample content enabled, enter your email and register a passkey. The landing, pricing and contact pages are populated right away."
faq:
  - q: "Do I need to set anything up before deploying?"
    a: "No. The blueprint clones the repo, provisions PostgreSQL and S3 media, and wires DATABASE_URL, the S3 variables and the site URL through env vars. After the first deploy you run the setup wizard in the admin, which takes a minute."
  - q: "Do content changes need a rebuild?"
    a: "No. The site is server-rendered, so publishing a page in the admin makes it live immediately. Code changes, like a new block type or a restyle, rebuild on push."
  - q: "Where do uploaded images go?"
    a: "To the S3-compatible bucket the blueprint provisions. The bucket stays private and the site serves media through its own media route, so uploads survive redeploys with no storage setup."
  - q: "What happens to passkeys if I add a custom domain?"
    a: "Passkeys are bound to the domain in EMDASH_SITE_URL. After adding a custom domain, set EMDASH_SITE_URL to it and register a new passkey there."
  - q: "Do I need EMDASH_ENCRYPTION_KEY?"
    a: "Not to run the site. It encrypts plugin secrets, so set it before you add a plugin with secret settings. Generate one with bunx emdash secrets generate and back it up together with the database."
---

A marketing site you edit in the browser - [EmDash](https://emdashcms.com), the Astro-native CMS, with [Astro](https://astro.build/) server-rendered on [Bun](https://bun.sh/). Every page is built from blocks in the EmDash admin. Rock8Cloud provisions the database and media storage and wires them in, so the site is live on the first deploy.

## Deploy in one click

The blueprint clones the repository to your GitHub and builds one service from its Dockerfile - the site and the EmDash admin together, on port 4321. PostgreSQL and an S3 media bucket are provisioned and connected for you.



[EmDash marketing site example](https://github.com/rock8-cloud/astro-emdash-marketing-page)

[1-click clone & deploy](https://app.rock8.cloud/new-deployment?blueprint=emdash-blueprint&utm_source=howto&utm_medium=landing&utm_campaign=howto&utm_content=emdash-blueprint)



Or ask an agent instead of clicking. With Rock8Cloud [connected over MCP](/how-to/connect-claude), `deploy_blueprint` with the `emdash-blueprint` slug clones the same template into your GitHub account, creates the project with its services, and starts the first build.



> **Pro tip:** Run the setup wizard at `/_emdash/admin` right after the first deploy. Until it is done, whoever opens the admin first becomes its owner.



## What you get

- A **private clone** of the repository in your GitHub account.
- **One service** running the site and the EmDash admin, with its own public URL.
- A **managed PostgreSQL** database, pre-wired via `DATABASE_URL`.
- A **managed S3 bucket** for media, pre-wired via `S3_*` env vars, so uploads survive redeploys.
- **Block-based pages** - hero, features, testimonials, pricing and FAQ, seeded with demo content for a fictional product called Acme.
- **Deploy on push** - every push to your default branch rebuilds and ships the site.

## After it's live

Open `/_emdash/admin`, complete the setup wizard and register a passkey. The wizard applies the seed, so the home, pricing and contact pages render immediately. Edit them under **Pages** and publish - there is no rebuild.

Passkeys are bound to the domain in `EMDASH_SITE_URL`, which the blueprint sets to the service URL. If you add a [custom domain](https://docs.rock8.cloud/docs/guides/custom-domains), point `EMDASH_SITE_URL` at it and register a new passkey there. Login sessions live on the container disk, so a redeploy signs editors out.

## Customize it

Pages, menus and settings are content, so most changes happen in the admin. For new block types, add them to `seed/seed.json` and render them in `src/components/blocks/` in your clone. Restyle by overriding design tokens in `src/styles/theme.css`. Push to your default branch and Rock8Cloud rebuilds. Need more services? [PostgreSQL](/how-to/provision-postgresql), [Dragonfly](/how-to/provision-dragonfly), and [S3](/how-to/provision-s3) are one click each.
