Launch Your SaaS Step by Step: Docker Deploy, Managed PostgreSQL, and Your Own Domain
A practical launch checklist on alawadi.cloud: deploy a Docker app through Cloud Studio, add a managed PostgreSQL database, connect your custom domain, back up to object storage, and turn on monitoring and alerts, with every step matching what you actually do in the portal.
Between "the code runs on my machine" and "a SaaS product taking paying customers" stands a well-known task list: deploy the app, a reliable database, a custom domain, backups, monitoring. This guide walks the full list on alawadi.cloud, and every step matches what you will actually do in the portal. No theoretical steps.
Before you start
You need exactly three things:
- An account at app.alawadi.cloud: sign in with Google, no card, and claim the free trial credit inside the portal.
- A GitHub repository with your app's code.
- Docker installed locally to test the image before deploying.
Step 1: Prepare your app's Docker image
Your app runs on the platform as a Docker image that listens on port 8080 (the platform always routes to it) and runs as a non-root user. If you don't have a Dockerfile yet, here is a compliant example for a Node.js app:
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production PORT=8080
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
# node:alpine ships a non-root "node" user; the platform rejects root containers.
USER node
EXPOSE 8080
# Bind 0.0.0.0 and read PORT:
# app.listen(process.env.PORT || 8080, "0.0.0.0")
CMD ["node", "dist/server.js"]Test it locally with docker build and docker run before moving on. The requirements are detailed in the container requirements docs, and there is a dedicated Next.js walkthrough in our 5-minute deploy guide.
Step 2: Deploy through Cloud Studio
Open Cloud Studio in the portal, pick Application as what you want to deploy, give it a name, and choose public access. Cloud Studio creates the project and boots your app right away on a public *.alawadi.cloud subdomain with TLS already in place, on a placeholder image until your real image arrives in the next step.
Step 3: Turn on auto-deploy from GitHub
Here you connect your repository to the app once, and every push to main becomes an automatic deploy:
- From Registries, create a private Docker registry, link it to your project, and wait for its status to turn ready.
- On the registry's page, enter your GitHub repository (as
owner/repo) in the two OIDC forms: the first lets your repo push images, the second lets it trigger deploys. No static secrets, no passwords stored in GitHub. - Click Copy workflow: you get a ready
deploy.ymlwith every value filled in: the image address, your app's ID, and the OIDC login. Save it under.github/workflows/in your repo. - Push to
mainand watch the workflow run: GitHub Actions builds the Docker image, pushes it to your private registry, and deploys it.
The full illustrated guide is in the first-deploy docs.
Step 4: Add a managed PostgreSQL database
A SaaS product without a reliable database is not a product. From Databases in the portal, choose New database, pick Postgres, a name, and resources, and the database is created inside your project's isolated environment in seconds.
The database page shows a Connection card, and its Link to container action injects DATABASE_URL into your app automatically; you never copy or paste a password anywhere:
// lib/db.ts
import { Pool } from "pg";
export const pool = new Pool({ connectionString: process.env.DATABASE_URL });We handle operation, storage, and backups; MySQL and Redis are available the same way. Details in the managed databases docs.
Step 5: Connect your own domain
The *.alawadi.cloud subdomain is great for trying things out, but your product deserves its own address. From the app's page, add your custom domain, point the DNS record the portal shows you, and the TLS certificate is managed automatically via Cloudflare. Custom domain rates and every other line item are on the pricing page.
Step 6: Backups and object storage
Two layers protect your data:
- What the platform handles: daily encrypted backups of persistent volumes stored off-server for 14 days, plus full weekly backups kept for 8 weeks.
- What you own yourself: an S3-compatible bucket on Basin for your users' files and your own backups, at $0.04 per GB-month with free egress. Set up a nightly backup with a single
rclonecommand by following the backup to object storage tutorial, and start from the storage quickstart.
And the golden rule: a backup you have never restored is not a backup.
Step 7: Monitoring, alerts, and scaling
Before you announce the launch, get your eyes on the product:
- Live logs and metrics are available from the dashboard for every app and database, with one-click restart.
- Alert policies: create up to 10 policies per service on CPU, memory, latency, or restarts, with notifications in the portal and by email once your address is verified. Explained in the alerts docs.
- Autoscaling: set a minimum and maximum instance count, and your app scales up under load and back down gradually. Details in the autoscaling docs.
Launch day: the final checklist
- You have actually restored a backup, not just theoretically.
- At least one critical alert policy is active on your main app and your database.
- Your custom domain works and the TLS certificate is green.
- Your balance comfortably covers the first month: estimate the cost with the pricing calculator, claim the $5 trial credit, and check the current voucher instructions before topping up.
- Your product's sign-in and checkout pages are tested from a real user's network, not just from your machine.
FAQ
Do you build my code straight from the repository?
No. GitHub Actions builds the Docker image inside your GitHub repository, then pushes it to your private registry on the platform and deploys it. The portal generates the workflow file for you with every value filled in, so there is almost nothing to write by hand.
Is PostgreSQL the only database option?
No. Postgres, MySQL, and Redis are all available as managed databases created inside your project in seconds, with connection details injected automatically the same way.
How long does the full launch take?
The first deploy takes a few minutes. The complete list (app, database, custom domain, backups, alerts) is one working session for one developer. You do not need a dedicated infrastructure engineer.
How much will a small SaaS cost to run?
Charges are pay-as-you-go against a USD-credit ledger, with every service as its own clear line item. The calculator can display USD, SYP, AED, or JOD. Build a precise estimate for your setup with the pricing calculator, then claim the $5 trial credit before buying a voucher.
Do I need a credit card at any step?
No. You sign in with Google and claim $5 in trial credit inside the portal. After that, prepaid vouchers priced in SYP are the only live top-up rail; card and cryptocurrency top-ups are not currently available. Another question? Open a support ticket in the portal or email [email protected].
The company behind alawadi.cloud
The company building an Arabic-first cloud platform, from the physical servers up to the developer experience.