CtrlOps
|Docs
Product Modules

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 .env block 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 .env later from the Folder Details page.

Before you start

RequirementWhy
An active connection to a Linux serverThe deploy runs on whichever server you opened
A GitHub repository for the appPublic 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 NginxCtrlOps 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

FieldWhat to enter
Application NameA friendly name like My Node.js App. The folder name preview appears below the field.
EnvironmentDevelopment, Staging, or Production. Pick whichever fits.
GitHub RepositoryToggle 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

FieldWhat to enter
Application TypeNode.js, React, Next.js, or Build Folder
Install CommandDefaults to npm install. Change to yarn install or pnpm install if needed.
Build CommandAuto-fills with npm run build for React and Next.js. Leave empty for plain Node.js.
Start CommandDefaults to npm start. For static React, use serve -s build -l <port>.
Local Redis Server NeededToggle 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 ignored

Confirm. 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.

FieldWhat to enter
Setup SSL certificates for domains (using Certbot)Toggle on to enable HTTPS automatically
PortThe port your app listens on, e.g. 3000. Required when SSL is enabled.
Add DomainClick 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:

FieldWhat to enter
Variable NameThe key, e.g. API_KEY
ValueThe 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.

CommandWhat it does
pm2 listSee 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.

Troubleshooting