Your First Deployment
8 min read
Before You Start
Make sure you have:
- A Staxa account (sign up at the login page)
- A GitHub repository with your application code (or use one of Staxa's templates)
- The Staxa GitHub App installed on your GitHub account (prompted during the wizard if not yet connected)
Step 1: Start the Creation Wizard
Navigate to Tenants → Create New Tenant (or click the "Create a Tenant" quick link from the Help Center).
Enter a tenant name: this becomes part of your subdomain. For example, naming your tenant my-app gives you https://my-app.staxa.dev. Names must be lowercase alphanumeric with hyphens, between 3 and 63 characters.
Step 2: Configure Your Service
A tenant contains one or more services. Your first service is the primary one.
Source type: Choose between GitHub (link a repository) or Container Image (use a pre-built Docker image).
GitHub flow:
- Select a repository from your connected GitHub account
- Choose a branch (defaults to
main) - Staxa automatically detects your framework, runtime version, and default port by analyzing your project files (
package.json,requirements.txt,go.mod,Cargo.toml, etc.) - You can override any detected values
Container Image flow:
- Enter the full image URL (e.g.,
ghcr.io/your-org/your-app:latest) - If the image is in a private registry, connect your registry credentials first at Settings → Container Registries
Set the port your application listens on (e.g., 3000 for Node.js, 8000 for Django, 8080 for Go).
Choose a resource size: Small, Medium, or Large. Free and Starter include Small, Growth adds Medium, and Scale includes all three. See Resource Sizes & Health Checks for the exact CPU and memory of each.
Step 3: Database Configuration
Toggle the database on if your app needs one. Choose:
- PostgreSQL (16, 15, 14, or 13), MySQL (8 or 5.7), or Redis (7 or 6)
- A database name (auto-generated from your tenant name)
Staxa provisions the database inside your tenant namespace and auto-injects connection credentials as environment variables. PostgreSQL and MySQL get DATABASE_URL, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, and DB_NAME; Redis gets REDIS_URL.
Step 4: Environment Variables
Add any environment variables your application needs. You can:
- Add them one-by-one using the key/value editor
- Paste a
.envfile for bulk import - Mark variables as secret: they'll be encrypted at rest (AES-256-GCM) and redacted in the UI
Platform variables like DATABASE_URL and STAXA_SERVICE_* URLs are injected automatically, so you don't need to add them manually.
Step 5: Review & Deploy
Review your configuration summary and click Deploy. You'll be redirected to the tenant detail page where you can watch the deployment progress in real-time:
- Cloning repository
- Building container image
- Pushing to internal registry
- Creating namespace and resources
- Provisioning database
- Starting application
- Configuring networking and SSL
- Health check passing → Ready
Once the status shows "ready," click the deployment URL to open your running application.
Troubleshooting
- Build fails: Check that your Dockerfile or auto-detected framework configuration is correct. Review build logs on the tenant detail page under the service's deployment history.
- Health check fails: Ensure your app listens on the port you specified and that the health check path returns a 2xx or 3xx response. You can change the path, switch to a TCP check, or turn the check off for workers that never listen on a port.
- Missing environment variables: Go to the Shared Env tab on the tenant detail page to verify all required variables are set. Redeploy after adding missing variables.
- Image pull errors: If using a private registry image, verify your registry credentials at Settings → Container Registries and ensure the credential is verified.
Still have questions?
Email us and a person will answer, or look it up in the API docs.