Skip to content

Run multiple applications on a single VPS with shared infrastructure. slipp tracks projects globally so you can operate on any project from anywhere.

slipp maintains a global registry of projects:

Terminal window
slipp projects list
name path registered
myapp /home/user/projects/myapp 2024-01-15
auth-service /home/user/projects/auth-service 2024-01-10
landing /home/user/projects/landing 2024-01-05
Terminal window
cd /path/to/myproject
slipp projects add myapp
Terminal window
slipp projects remove myapp

Projects are also auto-registered on deploy.

  • Directory/home/user/
    • Directoryprojects/
      • Directorymyapp/
        • slipp.yaml
        • Directoryinventory/
      • Directoryauth-service/
        • slipp.yaml
        • Directoryinventory/
      • Directorylanding/
        • slipp.yaml
        • Directoryinventory/

All projects point to the same VPS in their inventories:

inventory/hosts
all:
hosts:
myserver:
ansible_host: 192.168.1.100
ansible_user: slipp
Terminal window
slipp ps

Shows services across ALL registered projects:

name project host state uptime
myapp myapp myserver running 2d
postgres auth-service myserver running 5d
nginx landing myserver running 5d
Terminal window
slipp ps -p auth-service
slipp logs postgres -p auth-service
Terminal window
slipp exec "df -h" # Uses current project's host
slipp host myapp --ip # Get IP for specific project

Access vault from another project:

Terminal window
slipp run dev --vault shared-secrets --cmd "npm run dev"
  1. Deploy infrastructure first

    Projects like databases should deploy before dependent apps:

    Terminal window
    cd auth-service
    slipp deploy
  2. Deploy applications

    Terminal window
    cd myapp
    slipp deploy
    cd landing
    slipp deploy
  3. Verify all services

    Terminal window
    slipp ps

Create consistent presets across projects:

slipp.yaml
tag_presets:
install: "--tags install-all"
setup: "--tags setup-all --skip-tags start"
restart: "--tags restart"

Use from any project:

Terminal window
slipp deploy install
  • Directoryprojects/
    • Directoryinfrastructure/
      • slipp.yaml
      • Directoryinventory/
      • Directoryroles/
        • Directorypostgres/
        • Directoryredis/
        • Directorytraefik/
    • Directoryapi/
      • slipp.yaml
      • Directoryinventory/
      • Directoryroles/
        • Directoryapi/
    • Directoryfrontend/
      • slipp.yaml
      • Directoryinventory/
      • Directoryroles/
        • Directoryfrontend/
Terminal window
# 1. Infrastructure (database, cache, proxy)
cd infrastructure && slipp deploy
# 2. Backend API
cd api && slipp deploy
# 3. Frontend
cd frontend && slipp deploy
Terminal window
# Frontend: tunnel to production, connect to remote API
slipp run dev \
--cmd "npm run dev" \
--tunnel-out 3000:app.example.com@myserver \
--tunnel-in api:8000@myserver
name: myapp
inventory: inventory/hosts
playbook: playbook.yml
vault: inventory/host_vars/myserver/vault.yml

Located at ~/.config/slipp/projects.json:

{
"projects": [
{
"name": "myapp",
"project_path": "/home/user/projects/myapp",
"registered_at": "2024-01-15T10:30:00Z"
}
]
}