This guide walks you through the full MapleDeploy lifecycle: creating a server, deploying your first application, and optionally adding a custom domain. By the end, you'll have a live app running on Canadian infrastructure.
What you'll need
- A Git repository hosted on GitHub, GitLab, Bitbucket, or any Git provider Coolify supports.
- A Dockerfile in your repository (recommended), or a project that Nixpacks can detect (Node.js, Python, Go, Ruby, PHP, Rust, and others).
- A domain name (optional, only needed for the custom domain step).
You don't need a MapleDeploy account yet. Step 1 covers that.
Step 1: Create your MapleDeploy server
Head to the pricing section and start your free trial, or sign in if you already have an account.
Pick a plan
From the dashboard, click "Create server". Choose a subdomain (this becomes your-name.mapledeploy.ca and your Coolify dashboard URL) and select a plan. Starter and Pro include a 30-day free trial, so you can deploy and test before any charges.

Wait for provisioning
After checkout, MapleDeploy provisions a dedicated VM in Toronto. The dashboard shows real-time progress through each step: creating the VM, hardening the OS, installing Coolify, configuring DNS and SSL. This typically takes 8 to 15 minutes.

You'll receive an email when your server is ready. You can also watch the dashboard, which updates every 10 seconds during provisioning.
Open your Coolify dashboard
Once provisioning completes, your server detail page shows the Coolify dashboard link. Click it to open your fully managed Coolify instance. This is where you'll deploy and manage your applications.

Step 2: Connect your Git provider
In Coolify, go to Sources in the sidebar. Click "Add" and select your provider. Coolify supports GitHub, GitLab, Bitbucket, and other Git hosts. You'll be redirected to authorize the Coolify app. Grant access to the repositories you want to deploy, or select all repositories if you prefer.
This is a one-time setup. Once authorized, your source appears in Coolify and every future project can pull code from it. If you enable webhooks during authorization, Coolify can also trigger automatic deployments when you push to a branch.

Step 3: Create a project and application
Navigate to Projects and create a new one. Projects are organizational containers, so you might group by client, team, or environment.
Inside your project, click "Add New Resource" and choose how to connect your repository. "Public Repository" works for any public repo without additional setup. "Private Repository" uses the source you connected in Step 2 and gives Coolify access to your private repos. Select your repository and branch to continue.

Step 4: Configure the build
Coolify needs to know how to build your application and which port it listens on.
Build pack
If your repository has a Dockerfile, select "Dockerfile" as the build pack. This is the most reliable option because you control exactly how the image is built. If your Dockerfile isn't in the repository root, set the "Dockerfile Location" field to its relative path (e.g., ./docker/Dockerfile).
If you don't have a Dockerfile, select "Nixpacks" instead. Nixpacks auto-detects your project's language and framework and generates a build plan automatically. It works well for standard projects, but complex setups or monorepos may need a Dockerfile for reliable builds.
Exposed port
Scroll down to the Network section and set "Ports Exposes" to match the port your application listens on:
- Node.js Express or Next.js:
3000 - Python Flask:
5000 - Go HTTP server:
8080
This must match exactly. If the port is wrong, the deployment will succeed but the health check will fail and your app won't be reachable.

Step 5: Deploy and verify
Click "Deploy" and Coolify will pull your code, build the image, and start the container. You can follow the build and deployment logs in real time to watch each step.
Once the deployment finishes, open the "Links" dropdown at the top of the application page to find your temporary URL. It will be a sslip.io address based on your server's IP.

If your application loads, the deployment is working. If not, here are the most common causes:
- Build errors: Check the build logs for compilation failures or missing dependencies.
- Port mismatch: Verify that "Ports Exposes" matches the port your app actually binds to.
- Missing environment variables: If your app requires environment variables, add them in the "Environment Variables" tab and redeploy.
Step 6: Add a custom domain
Your app is already live on the temporary URL. This step is optional, but when you're ready for a production domain, there are two parts: DNS and Coolify configuration.
Configure DNS
At your domain registrar or DNS provider, create A records pointing to your server's IP address. You can find this IP in the MapleDeploy dashboard under your server's details, or in Coolify under Settings, then Server.
| Type | Name | Value |
|---|---|---|
| A | example.com | your server IP |
| A | www | your server IP |
DNS propagation typically takes 10 to 30 minutes, though it can occasionally take up to 48 hours.
Set the domain in Coolify
In your application's General settings, find the "Domains" field and enter your domain(s) using the full URL format, separated by commas:
https://example.com,https://www.example.com

Save and redeploy. Coolify will automatically provision an SSL certificate via Let's Encrypt once the DNS records resolve to your server.
Verify
Visit your domain in a browser after the deploy completes. If the SSL certificate hasn't been issued yet, wait a few minutes and try again. Coolify retries certificate provisioning automatically. Once it's working, the "Links" dropdown will show your custom domain.

Troubleshooting
Build fails with "no matching manifest": Your Dockerfile may specify a platform that doesn't match your server's architecture. MapleDeploy servers run on AMD64. Add --platform=linux/amd64 to your FROM instruction if building on an ARM machine locally.
App deploys but returns 502: The container started, but the application inside it isn't responding on the expected port. Check that "Ports Exposes" matches your app's actual listening port, and that your app binds to 0.0.0.0, not 127.0.0.1 or localhost.
SSL certificate not issued: DNS records must point to your server's IP before Let's Encrypt can issue a certificate. Verify with dig example.com and confirm the A record resolves to the correct IP. If you just updated DNS, wait a few minutes and redeploy.
Nixpacks build fails: Nixpacks may not detect your project correctly, especially for monorepos or uncommon project structures. Switch to a Dockerfile for more control. You can generate a starting Dockerfile with nixpacks build . --out . locally, then customize it.
Environment variables not available at build time: By default, environment variables in Coolify are available at runtime. If your build process needs them (e.g., NEXT_PUBLIC_ variables in Next.js), check the "Build Variable" toggle for each variable that needs to be present during the build step.