Deploy your projects directly from your local computer to your production server easily.
Airo helps you deploying containers to your self-hosted server, without worrying about configuring pipelines, serverless services or different platforms. Just your self-hosted servers.
Deploying side-projects doesn't have to be complicated or expensive. Kubernetes, Platform as a Service (PaaS) and CI/CD pipelines are a powerful and exciting solutions, but sometimes they're more complex than your project requires. If you enjoy managing your server, it can be significantly cheaper and offer greater control over the technical details.
I want to automate this process and deploy easily to my own server. That's why I've created Airo:
- 🚀 Focus on building your product, not managing infrastructure.
- 🐳 Build and push Docker images directly from your local machine to a container registry.
- ⚡️ Deploy instantly with a single command from your computer.
- 🔑 Easily update configurations and containers securely using SSH.
- 🌐 Set up HTTPS and reverse proxy automatically using Caddy.
Deploying with Airo is easy:
- Define your services in a
compose.yml
file. - Configure your deployment details in
env.yml
(server details, Docker images, etc.). - Prepare your Dockerfile.
- Set up your Caddyfile for automatic HTTPS and reverse proxy.
After this initial setup, deploying new updates is just a simple command away:
airo deploy
git clone https://github.com/yourusername/airo.git
cd airo
make install
airo deploy
-
Create a new project directory and navigate to it:
mkdir my-project/.deploy cd my-project/.deploy
-
Configure your
env.yaml
file:server: your-server-ip user: your-ssh-user ssh_key: /path/to/your/ssh/key # add all your services that will be built here services: - name: nextjs image: your-registry/api:latest build: /home/user/your-project
-
Add a Dockerfile to your project:
FROM node:20-alpine WORKDIR /app COPY . . RUN npm install
-
Configure your
compose.yml
file with your services:services: postgres: image: postgres:latest restart: unless-stopped ports: - '5432:5432' volumes: - ./postgres_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: some-temporary-password nextjs: image: your-registry/front:latest restart: unless-stopped ports: - '3000:3000' volumes: - ./.env:/app/.env
-
Deploy your project:
airo deploy
-
If you want to deploy your project without building the docker image, you can use the
compose
subcommand:
airo compose
- Also if you want to update your Caddyfile, you can use the
caddy
subcommand:
airo caddy