Back to Withastro

Deploy your Astro Site to Juno

src/content/docs/en/guides/deploy/juno.mdx

latest4.3 KB
Original Source

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.

Create your container

<Steps> 1. Log in to the [Juno Console](https://console.juno.build).
  1. Click the Launch a new satellite button (the container for your project) from the launchpad

  2. Enter a name and select Website

  3. Confirm with Create a Satellite

  4. The platform will then provision its resources.

  5. Once the process is complete, click Continue to access the overview page.

    </Steps>

Configure your project

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.

javascript
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']
  }
});

How to deploy

You can deploy using either GitHub Actions or CLI (command line interface).

GitHub Actions deployment

<Steps> 1. From your Satellite's overview, navigate to the **Setup** tab.
  1. Click on Add an access key.

  2. Generate a new key with the default option. Click Submit.

  3. 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.

  4. Create a deploy.yml file in the .github/workflows subfolder of your repo.

  5. Add the following workflow configuration:

    yaml
    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 }}
    
</Steps>

CLI deployment

<Steps>
  1. 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>
  2. Authenticate the CLI. This will open the Juno Console.

    bash
    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. :::

  3. In the browser window, click Authorize to grant permission.

  4. Deploy your site:

    bash
    juno hosting deploy
    
</Steps>

Guides

Examples

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>