src/content/docs/en/guides/deploy/juno.mdx
import { Steps } from '@astrojs/starlight/components'; import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro';
Juno is an open-source serverless platform for hosting static websites, building web applications, and running serverless functions with the privacy and control of self-hosting.
Click the Launch a new satellite button (the container for your project) from the launchpad
Enter a name and select Website
Confirm with Create a Satellite
The platform will then provision its resources.
Once the process is complete, click Continue to access the overview page.
</Steps>Your Astro project can be deployed to Juno as a static site.
Create a juno.config.mjs file at the root of your project, and replace the PROD_SATELLITE_ID with the ID of the Satellite you created earlier.
import { defineConfig } from '@junobuild/config';
/** @type {import('@junobuild/config').JunoConfig} */
export default defineConfig({
satellite: {
ids: {
production: '<PROD_SATELLITE_ID>'
},
source: 'dist',
predeploy: ['npm run build']
}
});
You can deploy using either GitHub Actions or CLI (command line interface).
Click on Add an access key.
Generate a new key with the default option. Click Submit.
Upon successful creation, a Secret token will be displayed. Copy the value and save it as an encrypted secret in your GitHub repository or organization, using the key JUNO_TOKEN.
Create a deploy.yml file in the .github/workflows subfolder of your repo.
Add the following workflow configuration:
name: Deploy to Juno
on:
workflow_dispatch:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
registry-url: "https://registry.npmjs.org"
- name: Install Dependencies
run: npm ci
- name: Deploy to Juno
uses: junobuild/juno-action@main
with:
args: hosting deploy
env:
JUNO_TOKEN: ${{ secrets.JUNO_TOKEN }}
Install the CLI
<PackageManagerTabs> <Fragment slot="npm"> ```shell npm i -g @junobuild/cli ``` </Fragment> <Fragment slot="pnpm"> ```shell pnpm add -g @junobuild/cli ``` </Fragment> <Fragment slot="yarn"> ```shell yarn global add @junobuild/cli ``` </Fragment> </PackageManagerTabs>Authenticate the CLI. This will open the Juno Console.
juno login
:::tip An access token is used to identify your terminal. That's why the CLI asks whether you want to encrypt it with a password. For security reasons, it's recommended that you do so. :::
In the browser window, click Authorize to grant permission.
Deploy your site:
juno hosting deploy
Quickly scaffold a website with a ready-made Astro template.
<PackageManagerTabs> <Fragment slot="npm"> ```shell npm create juno@latest -- --template astro-starter ``` </Fragment> <Fragment slot="pnpm"> ```shell pnpm create juno -- --template astro-starter ``` </Fragment> <Fragment slot="yarn"> ```shell yarn create juno -- --template astro-starter ``` </Fragment> </PackageManagerTabs>