Services

Per-application services, their installation settings, and how they relate to what is installed server-wide.

5 min read9 sections

The tooling and long-running processes an application needs beyond its web server: Composer, Git, PM2 processes, Python app control, and custom services.

Getting here: Servers → a server → Applications → an application → Services

What appears depends on the application's technology. A Laravel application shows Composer; a Node application shows PM2 processes; a Python application shows its own restart control.

1. Composer

PHP dependency management, for Laravel, Magento, WordPress and other PHP stacks.

Install puts Composer on the server for this application, confirming with Composer installed successfully.

Composer Version — choose Composer v1 or Composer v2.

Update Composer Settings applies a version change.

Uninstall removes it — Composer uninstalled successfully.

Failures report the reason (Failed to install Composer) rather than leaving you with a half-installed tool.

2. Git

Version control on the server.

Install and Uninstall, with the same confirmation pattern — Git installed successfully, Failed to install Git.

Git is needed for deployments that pull from a repository. An application created from a Git repo generally has it already; install it here if you added the repository later.

3. PM2 processes — Node.js applications

PM2 keeps Node processes running, restarts them if they crash, and starts them again after a reboot. This section manages them.

Adding a process

Start Process takes:

FieldExampleWhat it is
Process namemyapp-backendlaravel-workerThe name PM2 knows it by
Command / scriptserver.jsWhat to run

Both are required — Process name and command are required.

Name processes for what they do. myapp-backend and myapp-worker are manageable in a list; index and index-2 are not.

Managing processes

Each process shows a live status:

StatusMeaning
onlineRunning
stoppedNot running

Controls per process:

  • Restart process — after a deploy or a configuration change
  • Stop processAlready stopped if it was not running
  • Delete process — removes it from PM2 entirely

View logs / Hide logs shows that process's output, with Refresh logs to pull the latest. No log output or No logs available when there is nothing yet.

Status is read from PM2 on the server, not from what the panel last did — Failed to sync live status means it could not reach PM2, so what you are seeing may be stale.

Why processes stop unexpectedly

A crashed process is usually a code error, a missing environment variable, or a port already in use. The logs on this page are where the reason is, and reading them beats restarting repeatedly.

4. Python applications

For Django and Flask applications.

Python version — 3.11, 3.12, 3.13 (Latest) — selectable per application.

Restart restarts the application, confirming Python app restarted successfully or reporting Failed to restart Python app.

Restart after changing code, dependencies or environment variables. A Python application does not pick those up on its own the way an interpreted PHP page does.

5. Custom services

For anything the built-in options do not cover — a worker, a daemon, a listener.

Add Custom Service takes a service name and its content (the service definition). Both are required — Please provide both service name and content.

Edit Custom Service changes an existing one. Delete removes it, governed by its own permission (CustomService_Delete) separately from creating one.

On success: Service created and started successfully — note that it is started, not just defined.

Custom services are the escape hatch. Use them for a queue worker, a websocket server, an MQTT listener, or any process that must keep running and restart itself.

6. Common controls

Consistent across the tab:

ControlWhat it does
Install / UninstallAdd or remove the tool
Start / Stop / RestartControl a running process
View logs / Hide logsShow output inline
Refresh logsPull the latest
Edit / DeleteChange or remove a custom service

Progress is always visible — Installing…, Starting…, Uninstalling…, Processing… — so a slow operation does not look like a frozen page.

Active / Inactive describe installed tooling; online / stopped describe running processes. The distinction matters: Composer is installed or not, a PM2 process is running or not.

7. Sensible practice

  • Composer v2 unless a project pins v1.
  • Name PM2 processes after their job, not their file.
  • Read logs before restarting. A process that crashes on start will crash again; the reason is in the log.
  • One process per job. A single process doing web serving and queue work cannot be restarted independently.
  • Restart after deploying — Node and Python hold code in memory and will keep serving the old version otherwise.
  • Delete processes you no longer use. A stopped process in the list is ambiguous; a deleted one is not.

8. Common problems

ProblemCause
Process shows stopped right after startingIt crashed — View logs for the reason
Process name and command are requiredOne of the two fields is empty
Failed to sync live statusThe panel could not reach PM2; the status shown may be stale
Code deployed but old version still servedNode or Python process not restarted
Composer commands failNot installed, or the wrong version for the project
Deployment cannot cloneGit not installed
Please provide both service name and contentA custom service needs both
Custom service will not startIts definition is wrong — check the content
Already stoppedStop pressed on a process that was not running
No logs at allThe process never produced output, or never started

9. How this relates to other tabs

TabScope
Services (this one)Tooling and processes for this application
Other Services (server)Shared infrastructure — RabbitMQ, OpenSearch, SMTP — for the whole server
Packages and Services (server)System packages and system services
CronjobScheduled tasks, as opposed to processes that run continuously

The distinction that matters: a cron job runs and exits; a service keeps running. A queue worker belongs here, not in Cronjob.

Something here not matching what you see in the panel?

Tell us
Start your journey today

Ready to take control
of your hosting?

Deploy servers, run self-hosted business apps, and keep your data on your own VPS — with a dedicated DevOps manager by your side.

No lock-in contracts
No credit card required
Dedicated DevOps manager