Deploy an Existing Project

This guide shows how to add Haloy deployment to any existing project using AI-powered agent skills. The skills automatically detect your framework and generate the necessary configuration.

Prerequisites

1. Install Agent Skills

In your project directory, install the haloy agent skills:

npx skills add haloydev/agent-skills
pnpm dlx skills add haloydev/agent-skills
bunx skills add haloydev/agent-skills

This adds two skills to your project: dockerize and haloy-config.

2. Create a Dockerfile

Run the dockerize skill in your AI coding assistant:

/dockerize

The skill will:

  • Detect your project type (Next.js, TanStack Start, Django, Go, etc.)
  • Check for a health endpoint and offer to create one if missing
  • Generate an optimized multi-stage Dockerfile
  • Create a .dockerignore file

Supported frameworks: Next.js, TanStack Start, Vite/React, Express, FastAPI, Django, Flask, Go, Rust, Rails, Laravel, and more.

3. Create haloy.yaml

Run the haloy-config skill:

/haloy-config

The skill will:

  • Detect your configured haloy servers
  • Ask for your deployment domain
  • Infer the correct port and health check path for your framework
  • Generate a complete haloy.yaml

You’ll end up with something like:

name: my-app server: haloy.yourserver.com domains: - domain: my-app.example.com port: 3000 health_check_path: /health

4. Configure DNS

Point your domain to your haloy server’s IP address:

Record TypeNameValue
Amy-app.example.comYour server’s IP

If using a subdomain with an existing domain, you can also use a CNAME record pointing to your server’s hostname.

5. Deploy

Validate your configuration:

haloy validate-config

Deploy to your server:

haloy deploy

Haloy will build your Docker image, push it to your server, and configure HTTPS automatically.

6. Verify

# Check deployment status haloy status # View application logs haloy logs

Your app is now live at your configured domain.

Adding a Database

If your app needs a database, re-run /haloy-config. The skill will detect database dependencies (Prisma, Drizzle, SQLAlchemy, etc.) and offer to either:

  • Self-hosted: Generate a multi-target config with a PostgreSQL or MySQL container
  • External: Remind you to configure DATABASE_URL for services like Supabase, Neon, or RDS

For SQLite, you’ll need a persistent volume. The skill will configure this automatically.

Next Steps