Skip to content

A complete guide from zero to deployed application, including VPS setup.

  • A VPS with Ubuntu/Debian (fresh install recommended)
  • SSH access as root
  • A domain pointing to your VPS
  • slipp installed locally
  1. SSH to your VPS as root

    Terminal window
    ssh root@your-server-ip
  2. Update system packages

    Terminal window
    apt update && apt upgrade -y
  3. Install required packages

    Terminal window
    apt install -y python3 python3-pip docker.io docker-compose-v2
    systemctl enable --now docker
  4. Create slipp service account

    From your local machine:

    Terminal window
    slipp bootstrap account your-server-ip

    This creates a slipp user with:

    • SSH key access (copied from root)
    • Passwordless sudo
    • Verified connectivity
  1. Navigate to your project

    Terminal window
    cd your-project
  2. Run launch

    Terminal window
    slipp launch --name myapp
  3. Answer the prompts

    • Host IP: Your VPS IP address
    • SSH User: slipp (created by bootstrap)
    • Domain: Your domain (e.g., app.example.com)
  4. Review generated files

    • Directoryinventory/
      • hosts
      • Directoryhost_vars/
        • Directorymyserver/
          • vars.yml
          • vault.yml
    • Directorygroup_vars/
      • all.yml
    • Directoryroles/
      • Directorymyapp/
        • Directorytasks/
        • Directorytemplates/
    • playbook.yml
    • slipp.yaml
    • Dockerfile
  1. Generate secrets for vault references

    Terminal window
    slipp secrets sync inventory/host_vars/myserver/vars.yml
  2. Encrypt the vault

    Terminal window
    ansible-vault encrypt inventory/host_vars/myserver/vault.yml

    Choose a strong password and save it securely.

  1. Run deployment

    Terminal window
    slipp deploy

    slipp launch generates a requirements.yml listing the Ansible collections your project needs, and slipp deploy installs them automatically before running the playbook — no manual ansible-galaxy step required.

    Enter your vault password when prompted.

    Every deploy restarts the service and verifies it’s active (systemctl is-active) before reporting success — a crash-looping service fails the deploy instead of silently reporting “success” with a dead process. For runtime: systemd deploys specifically, pass --health-check <path> to slipp launch to poll an HTTP endpoint after restart and automatically roll back to the previous deployment + unit file if it never comes up healthy.

  2. Verify deployment

    Terminal window
    slipp ps

    You should see your service running:

    name project host state uptime
    myapp myapp myserver running 1m
Terminal window
slipp logs myapp -f

Open https://your-domain.com in a browser.

Terminal window
# Check container status
slipp exec "docker ps -a"
# Check container logs directly
slipp exec "docker logs myapp"
# SSH for deeper debugging
slipp ssh

Now that your app is deployed:

After making changes:

Terminal window
# Redeploy everything
slipp deploy
# Use tag preset for specific changes
slipp deploy restart

Create tag presets for common operations:

Terminal window
slipp tags add restart --tags restart
slipp tags add update --tags update-app