Most developers are comfortable building Docker images locally. You can write a Dockerfile, run docker build, and test your containerized
application on your own machine without breaking a sweat. But when it comes time to actually deploy that
container to a server where real users can access it, things get complicated fast.
Cloud platforms like Heroku, Render, and Railway make deployment easy — but that convenience comes at a steep price. You end up paying 3-10x what the underlying compute actually costs. For a simple app that needs 1 GB of RAM and a small database, you might be looking at $50-100/month on a managed PaaS, versus $5-10/month on a VPS.
Deployado gives you the best of both worlds: the portability and reproducibility of containers, with the simplicity of a managed platform. In this guide, we will walk through deploying a Docker app in minutes using Deployado — with infrastructure included.
Before we dive into the how, let's talk about why Deployado is a great choice for deploying Docker apps.
Cloud PaaS providers charge a significant markup over raw compute costs. A $25/month Heroku dyno gives you less resources than what Deployado includes in its plan. When you multiply that across multiple services — your app, a database, a Redis instance, a background worker — the savings add up quickly. Teams running 3-5 services can easily save $200-500/month compared to traditional PaaS providers.
With Deployado, you don't need to provision or manage servers. Infrastructure is included in your plan — servers, security, SSL certificates, and monitoring are all handled for you. Focus on building your app, not on managing infrastructure.
Since your app is packaged as a standard Docker container, you can take it anywhere. Your Dockerfile and deployment configuration are portable. No proprietary buildpacks, no custom formats — just standard Docker. If you ever want to move, your app is ready.
Managed databases, auto-rollback, uptime monitoring, cron jobs, audit logging, and MCP/AI integration — all included out of the box. No add-ons to configure, no third-party services to stitch together.
Before we get started, make sure you have the following:
A well-written Dockerfile is the foundation of a reliable deployment. Here is an example multi-stage Dockerfile for a Node.js application that follows production best practices:
# Stage 1: Install dependencies
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --only=production
# Stage 2: Build the application
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 3: Production image
FROM node:20-alpine AS runner
WORKDIR /app
# Create a non-root user
RUN addgroup --system --gid 1001 appgroup && \
adduser --system --uid 1001 appuser
# Copy only what we need
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package.json ./
# Switch to non-root user
USER appuser
EXPOSE 3000
CMD ["node", "dist/server.js"]
Let's break down the key best practices used here:
npm ci
command installs exact versions from package-lock.json,
ensuring reproducible builds every time.
Don't forget to create a
.dockerignore
file to
exclude unnecessary files from your Docker build context:
node_modules
.git
.env
*.md
.DS_Store
coverage
.nyc_output
Once you have a Deployado account, create a new project from the dashboard. Deployado handles all the infrastructure for you — no servers to provision, no Docker to install, no agents to configure.
From your dashboard, create a project and connect your GitHub repository. Deployado will automatically:
Your app's status, logs, and resource usage are all visible in real time from the dashboard.
With your server connected, you are ready to deploy. Deployado gives you two ways to get your app live.
The Deployado CLI gives you full control over your deployments from the terminal. First, install it:
npm install -g @deployado/cli
Then create your app and deploy:
# Create a new app
deployado apps:create my-app --port 3000
# Deploy the latest commit from your repo
deployado deploy my-app
# Watch the build logs in real time
deployado logs my-app --build
The CLI will clone your repository on the server, build the Docker image, and start the container. You will see the build output streamed to your terminal in real time.
For a more automated workflow, enable auto-deploy. Every time you push to your configured branch
(usually main), Deployado will
automatically build and deploy your app:
# Enable auto-deploy for the main branch
deployado apps:update my-app --auto-deploy
# Now just push your code
git push origin main
# Deployado automatically detects the push and starts building
Your app will be available at
my-app.deployado.com
within minutes. Deployado automatically provisions an SSL certificate and configures a reverse
proxy with Caddy.
Most applications need a database. Deployado provides managed PostgreSQL databases included in your plan — provisioned and configured automatically, with backups and monitoring built in.
# Create a managed PostgreSQL database
deployado databases:create my-app-db
# Connect it to your app
deployado databases:connect my-app-db my-app
# The DATABASE_URL environment variable is automatically
# injected into your app's container
When you connect a database to an app, Deployado automatically injects the
DATABASE_URL
environment variable
into your container. Most frameworks (Rails, Django, Express, Phoenix) will pick this up
automatically — no configuration changes needed.
Your database is provisioned with sensible defaults: daily automated backups, connection pooling, and monitoring out of the box.
Your app is live on a
.deployado.com
subdomain,
but you probably want to use your own domain. Adding a custom domain takes two steps:
A
record for your root domain or a
CNAME
record for a subdomain.
# Add your custom domain
deployado domains:add my-app myapp.com
# Verify DNS configuration
deployado domains:verify my-app
Deployado automatically provisions a free SSL certificate via Let's Encrypt and configures HTTPS redirection. Certificate renewal is handled automatically — you never have to think about it again. Your users will see a green padlock from day one.
You now have a Docker app running with a database, custom domain, and SSL. Here are some next steps to make your deployment production-ready:
Want to see this in action?
Check out our Getting Started guide for a complete walkthrough with screenshots, or jump straight into the CLI documentation for a full command reference.
Start deploying in minutes. No credit card required for 14 days.
Start Your Free TrialEverything you need to deploy Elixir and Phoenix applications in production: Dockerfile, releases, managed databases, and automated deployments.
Traditional PaaS means vendor lock-in. Self-hosted means DevOps overhead. Deployado eliminates the trade-offs: managed simplicity with predictable pricing.