Application Deployment
Deploy a Node.js, React, or Next.js app from GitHub to your server with one form.
CtrlOps takes a GitHub repository and turns it into a running app on your server. Pick a Node version, point at your repo, set your env variables, optionally add a domain with HTTPS, and click Create. CtrlOps clones the repo, installs dependencies, builds, starts the app under PM2, configures Nginx, and issues an SSL certificate. You watch the whole thing happen in a live progress modal.
What you can do here
- Deploy a Node.js, React, Next.js, or static "build folder" app from a GitHub repo.
- Pick the Node.js version (and install it on the fly if it's missing).
- Set environment variables one by one, or paste a whole
.envblock at once. - Add one or more domains, with optional automatic SSL via certbot.
- Watch deployment progress live with command output and step status.
- Edit the app's
.envlater from the Folder Details page.
Before you start
| Requirement | Why |
|---|---|
| An active connection to a Linux server | The deploy runs on whichever server you opened |
| A GitHub repository for the app | Public over HTTPS, or private with the SSH key already added to the server |
| Domain DNS already pointing at the server (only if you'll use SSL) | Required so certbot can issue the certificate |
| PM2, Node, and Nginx | CtrlOps installs whatever's missing as part of the deploy |
Open the Add Application form
You can launch the form from two places.
From the File Manager toolbar
Open app → Click your server → File Manager tab → Click Add Application (top toolbar)
This is the most common path.
From an existing app folder
File Manager → Click into an app folder → The Folder Details page opens
If the folder has a package.json, you'll see the technology badge (Next.js, React, Node.js) at the top, plus the Files and Environment Variables tabs. To add a new app, use the toolbar button above.
Set up your first deployment
The form is split into five cards. Fill them in top to bottom.
Basic Information
| Field | What to enter |
|---|---|
| Application Name | A friendly name like My Node.js App. The folder name preview appears below the field. |
| Environment | Development, Staging, or Production. Pick whichever fits. |
| GitHub Repository | Toggle between HTTPS and SSH, then paste the repo URL. SSH only works if the server's SSH key is already added to the repo. |
The GitHub repo must be reachable from the server. For private repos, add the server's public key to the repo as a deploy key first.
Node.js Version
Pick the Node version from the dropdown. Versions already installed on the server show a green checkmark. Versions not yet installed show a download icon, CtrlOps will install them as part of the deploy.
Build Configuration
| Field | What to enter |
|---|---|
| Application Type | Node.js, React, Next.js, or Build Folder |
| Install Command | Defaults to npm install. Change to yarn install or pnpm install if needed. |
| Build Command | Auto-fills with npm run build for React and Next.js. Leave empty for plain Node.js. |
| Start Command | Defaults to npm start. For static React, use serve -s build -l <port>. |
| Local Redis Server Needed | Toggle on for Node.js apps that need Redis on the same machine |
Environment Variables
Two ways to add them.
One at a time
Click Add Environment Variable. A new row appears with two inputs: Key and Value. Repeat for each variable.
Paste a whole .env block
Click Bulk Paste Environment Variables. A modal opens titled Paste Environment Variables. Paste the contents of your local .env file:
DATABASE_URL=postgres://user:pass@host:5432/db
API_KEY=sk_live_abc123
# Comments are fine, lines starting with # are ignoredConfirm. All variables are added to the list at once.
Quotes (" and ') and special characters in values are fully supported.
Domains (optional)
Skip this card entirely if you don't need a domain yet, you can deploy and add one later.
| Field | What to enter |
|---|---|
| Setup SSL certificates for domains (using Certbot) | Toggle on to enable HTTPS automatically |
| Port | The port your app listens on, e.g. 3000. Required when SSL is enabled. |
| Add Domain | Click to add a domain row. Enter a domain like yoursite.com. Click again to add more. |
When SSL is on, adding yoursite.com automatically also covers www.yoursite.com. You don't need to add both.
For SSL to succeed, your domain's DNS A record must already point to this server's public IP. If DNS isn't ready yet, deploy without SSL first, then add it once DNS resolves.
Click Create
CtrlOps closes the form and opens the Deployment Progress modal. You'll see each step in a checklist (clone, install, build, start, configure Nginx, issue SSL) along with live terminal output.
Watch the deployment
Each step turns green when it succeeds, red if it fails. The terminal area shows exactly what the server is doing. When the last step finishes, you have a running app.
Edit environment variables later
Once the app is deployed, you can update its .env from the Folder Details page.
Open the app folder
File Manager → Click into your app folder
The Folder Details page opens, showing a technology badge (Next.js, React, Node.js) and version, plus two tabs.
Switch to the Environment Variables tab
Existing variables are listed with key on the left and value on the right. If there are none yet, you'll see "No environment variables found".
Add a new variable
Scroll past the list to the form at the bottom. Two inputs side by side:
| Field | What to enter |
|---|---|
| Variable Name | The key, e.g. API_KEY |
| Value | The value, e.g. sk_live_abc123 |
Click Add → The variable appears in the list above
Remove a variable
Click the red trash icon at the right of the row. The variable is removed from the .env file immediately.
Changing env variables doesn't restart the app automatically. After your edits, open the AI Terminal and run pm2 restart <app-name> to pick up the new values.
Re-deploy or pull the latest code
There's no built-in re-deploy button today. To pull new commits and restart:
cd /home/<user>/<app-folder>
git pull
npm install
npm run build # only if you have a build step
pm2 restart <app-name>You can also wrap this in a Script so it's one click next time.
Common PM2 commands
PM2 is the process manager that keeps your app running. Use these in the AI Terminal.
| Command | What it does |
|---|---|
pm2 list | See all your running apps and their status |
pm2 logs <app-name> | Tail the live logs for an app |
pm2 restart <app-name> | Restart the app, picks up new env vars and code |
pm2 stop <app-name> | Stop the app without removing it |
pm2 start <app-name> | Start a stopped app |
pm2 delete <app-name> | Remove the app from PM2 entirely |
Tips
Use Bulk Paste Environment Variables to copy from your local .env in one go. It saves a lot of clicking on a real-world app.
Deploy without SSL first if you're not sure DNS is ready. You can run certbot afterwards from the AI Terminal, see the SSL Certificates page.
Watch the deployment progress modal end to end the first time. If something goes wrong, the failing step's terminal output usually points straight to the cause.