Your hosting at a glance
#After logging in, open My Hosting and click Manage on a package. That opens the hosting dashboard — a searchable grid of tools grouped into Files, Domains, Email, Databases, Software, Security, Advanced and Metrics, with a left sidebar to move between them and a panel on the right showing live CPU, RAM, disk and bandwidth plus counters for your domains, databases and email.
-
1
Log in at the client area and open My Hosting.
-
2
Click Manage on the package you want to work on.
-
3
Search, or pick a tool from the grid or the left sidebar (Domains, Databases, Email, Setup App, …).
Add a domain
#Open your hosting → Domains, then add your domain or subdomain. First point its DNS to your server with these records at your registrar:
-
1
At your registrar, add an A record for
@,wwwand*pointing to your server IP (shown on the Domains page). -
2
Back in the panel, click Add domain and enter the name.
-
3
Wait for DNS to propagate, then install SSL (next section).
Cloudflare users: set the domain to DNS Only (grey cloud) before adding it or installing SSL, so Let's Encrypt can verify it. Re-enable the proxy (orange cloud) after the certificate is issued.
Free SSL (HTTPS)
#Every domain can get a free Let's Encrypt certificate. On the Domains page, click Install SSL next to the domain. It renews automatically.
Set up an app — pick your stack
#Every new domain serves a welcome page until you set up an app. Open Setup App (under Software), pick the domain and choose your framework. Upload your code into the app folder first (use File Manager, or SFTP) — it lives at /var/www/apps/<your-domain>. Then follow the guide for your stack below.
Plain PHP
#For a plain PHP site with no framework:
-
1
In Setup App, choose PHP (FPM).
-
2
Leave Document root blank if your
index.phpis at the top of the app folder, or set it to the sub-folder that holdsindex.php. -
3
Upload your files in File Manager and open the domain — done.
Static site / SPA (React, Vite, Vue)
#Host a built single-page app or any static site — no PHP or Node server, just files served straight off disk. In Setup App choose Static / SPA and set Document root to your build output folder (dist for Vite, build for Create React App). Client-side routing (React Router, Vue Router) and deep-link refreshes work automatically — any unknown path falls back to index.html.
-
1
Build your app — locally / in CI with
npm run build, or on the server from Command Runner (npm install, thennpm run build). -
2
Upload the build (the
dist/buildfolder) in File Manager. -
3
In Setup App pick Static / SPA and set Document root to
dist(orbuild). -
4
Install SSL and open the site — there is no port to set and no restart needed.
VITE_*) and CRA (REACT_APP_*) bake env into the JS bundle when you run npm run build — set them in .env before building, not on the server. They are public (anyone can read them in the browser), so only put public config like an API URL there — never secrets or keys.Laravel (PHP-FPM)
#Standard Laravel on PHP-FPM. After uploading your code:
-
1
In Setup App choose PHP (FPM) and set Document root to
public. -
2
Open Command Runner, set the folder to your domain, and click
composer install. -
3
Click
artisan storage:linkso uploaded files underpublic/storageare reachable. -
4
Create a database in Databases, then put the credentials into your
.env(edit it in File Manager). -
5
Click
artisan migrate --force, then Restart the domain. -
6
Need background jobs or scheduled tasks? In Setup App tick Queue Worker and/or Scheduler — the panel runs
queue:workandschedule:runfor you, no crontab needed.
artisan storage:link button — it creates a relative link that works for both the website and the file manager. Running php artisan storage:link yourself over SSH makes an absolute link that 404s. After editing .env or config, click artisan config:clear / artisan optimize:clear.Laravel Octane
#High-performance Laravel served by a long-running Octane worker — faster than FPM.
-
1
Install Octane: open Command Runner, set the folder to your domain, and click install Laravel Octane (swoole). The Swoole engine is already on the server — this adds the
laravel/octanepackage your app needs. -
2
In Setup App choose Laravel Octane and set Document root to
public. -
3
From Command Runner run
composer installandartisan storage:link, set up your.envand database, thenartisan migrate --force. -
4
Click Restart after every deploy — Octane holds your app in memory, so new code only loads on restart.
queue:work or set up cron. (Available for plain PHP-FPM Laravel apps too, not just Octane.) Just deploy and Restart.WordPress
#Install and manage WordPress from the dedicated WordPress tool (under Software) — no framework to pick and no password to remember.
-
1
Open WordPress and click Install WordPress. Choose the domain and set your site title and admin account.
-
2
The panel installs WordPress with its own database automatically — the site shows Installing…, then Installed.
-
3
Click Log in to Admin for one-click, passwordless sign-in to
wp-admin; use Show login to reveal the admin username and password any time.
Node.js (Express, plain Node…)
#In Setup App choose Node.js and set the Startup file (server.js, app.js or index.js). Your app must listen on the port shown on the domain row — read it from process.env.PORT — and bind 0.0.0.0, not localhost.
const http = require('http');
const port = process.env.PORT || 3000;
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('Hello, World!');
}).listen(port, '0.0.0.0', () => console.log('Listening on ' + port));
npm install first, then Restart. A 502 means your app isn't listening on its port yet — fix the code and Restart.Next.js
#There is no startup file for Next.js, and you don't need a standalone build. Run a normal next build, upload the output, and we run it for you with npm start — you just click Restart.
-
1
Run a plain
next buildon Ubuntu / Linux (a CI runner or a Linux machine — not Windows or macOS). A Linux build is required:npm startloads the Linux-native binaries innode_modules, so a Windows/macOS build will crash on the server. -
2
In Setup App choose Next.js. You don't set a startup file, a port, or a run command — we run
npm startfor you. -
3
Upload the build output into the app folder — these four items:
-
4
Click Restart. We launch
npm startbound to0.0.0.0on the correct port; nginx serves.next/staticandpublicstraight from disk.
app-folder/
├─ .next/ # the full `next build` output (do NOT use output: 'standalone')
├─ node_modules/ # installed on Linux — never ship Windows/macOS ones
├─ public/ # your static assets
├─ package.json # we read its "start" script
└─ next.config.js # include it if you have one (rewrites, images, …)
package.json needs a start script (the default next start is fine). A 502 right after Restart usually means the build is still starting, or node_modules was built on the wrong OS — rebuild on Linux and upload again.NestJS
#NestJS runs from its compiled output.
-
1
Run
npm run build(locally or in CI) to producedist/. -
2
In Setup App choose NestJS and set Startup file to
dist/main.js. -
3
Open Command Runner →
npm install, then Restart. -
4
Listen on
process.env.PORTand bind0.0.0.0.
Databases
#Open your hosting → Databases to create MySQL databases and users.
-
1
Click Create database; a database and user are created for you.
-
2
Use Open phpMyAdmin for one-click access — no password to type.
-
3
Use Reset password if you need fresh credentials for your app config.
Email accounts
#Open your hosting → Email to create mailboxes on your domains.
-
1
Click Create email, set the address and password.
-
2
Add the shown mail DNS records (MX, SPF, DKIM, DMARC) at your registrar so mail delivers and isn't marked spam. These values are generated for your server — copy them exactly as shown.
-
3
Use Open Webmail to read mail in the browser — one click, no password to type, and it always opens the right webmail for your server.
Email on your phone or Outlook (IMAP & SMTP)
#Any standard mail app works — Outlook, Apple Mail, Gmail app, Thunderbird. Your exact server name is shown on your hosting → Email page under Mail Client Settings; enter it with the settings below.
-
1
Username: the full email address (e.g.
[email protected]). Password: the mailbox password you set. -
2
Incoming (IMAP): the server shown on your Email page — port
993, SSL/TLS. -
3
Outgoing (SMTP): the same server — port
587, STARTTLS (or465, SSL/TLS). Tick "outgoing server requires authentication" and use the same username and password. -
4
Send yourself a test email both ways (to and from another address) to confirm sending and receiving work.
mail.rifatxtra.com, mail2.rifatxtra.com, etc. — always copy it from your own Email page. If mail suddenly stops working in your app after your hosting was moved, re-check the server name there first.File manager
#From your hosting overview, click File Manager to browse, upload, edit and delete your app files in the browser. It is locked to your own hosting — you only ever see your own files, at /var/www/apps/<your-domain>.
.env, or check logs. For larger transfers, SFTP also works.Backups and restoring
#We back your hosting up automatically, twice a day, to off-site storage — you don't schedule anything. Open Backups (under Files) to see every snapshot and restore one yourself, without opening a ticket. Three kinds are kept: your website files, each database, and each mailbox.
-
1
Website files — pick a snapshot and click Restore files. Your current files are overwritten and the container restarts; your domains, databases and plan settings are untouched.
-
2
Databases — each database lists its own dumps. Restoring overwrites that one database; the others are not affected.
-
3
Email — each mailbox lists its own snapshots. Restoring replaces the messages in that one mailbox only.
-
4
A restore runs in the background — the page shows its progress and refreshes itself when it finishes.
Command Runner (your in-app terminal)
#Instead of a raw shell, your hosting gives you a safe Command Runner (under Software) — the maintenance commands you actually need, nothing more. Each one runs inside your own container as your app user, so it can only ever touch your hosting.
-
1
Open Command Runner from the Software group.
-
2
Set the folder to the app you're working on — pick your domain (it maps to
/var/www/apps/<domain>). -
3
Click a command; its full output appears below so you can see exactly what happened.
composer install / update, npm install (and install a single package), install Laravel Octane (swoole), artisan storage:link, artisan migrate --force, composer dump-autoload, the cache clears (optimize:clear, config:clear, cache:clear, route:clear, view:clear), artisan queue:restart and artisan octane:reload. We don't expose a raw terminal for security — these cover normal deploys. For Laravel apps (Octane or PHP-FPM) the queue worker and scheduler are added for you when you tick them.Auto-deploy from GitHub (CI/CD)
#Every push builds on GitHub and ships the finished code straight to your hosting over SSH — nothing builds on the server, so it never eats your plan's CPU/RAM. Works for public and private repos. Set the key once and every push after that deploys itself. Your .env, storage/ and uploaded files are never touched.
-
1
Open Git Deploy (under Advanced), click Deploy on your app, then Enable SSH deploy. A one-time private key and your connection details (host, user
appdeploy) appear. -
2
Copy the key into your GitHub repo as an Actions secret named
DEPLOY_SSH_KEY(Settings → Secrets and variables → Actions → New repository secret). Lost it later? Click Rotate key for a fresh one. -
3
Commit the workflow below as
.github/workflows/deploy.yml, replacingYOUR_SERVER_IPwith the host shown in the panel and adjusting the build steps for your stack. Push to your branch. -
4
GitHub builds your app and rsyncs it here, then runs your migrate/restart steps — watch the Deploying… badge on the app turn live. The full build + deploy log is in your GitHub Actions run.
name: Deploy
on:
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# --- Build your app on GitHub (edit for your stack) ---
- uses: shivammathur/setup-php@v2
with: { php-version: '8.3' }
- run: composer install --no-dev --optimize-autoloader --no-interaction
# Node build (uncomment if you need it):
# - uses: actions/setup-node@v4
# with: { node-version: '20' }
# - run: npm ci && npm run build
# --- Ship the built code straight to your hosting over SSH ---
# HOST is shown in your Deploy panel; the key is the DEPLOY_SSH_KEY secret.
- name: Set up SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H YOUR_SERVER_IP >> ~/.ssh/known_hosts
- name: Push code
run: |
rsync -az --exclude='.git' --exclude='.env' --exclude='storage/' \
-e "ssh -i ~/.ssh/deploy_key" ./ appdeploy@YOUR_SERVER_IP:/
- name: Migrate & restart
run: |
ssh -i ~/.ssh/deploy_key appdeploy@YOUR_SERVER_IP "run migrate"
ssh -i ~/.ssh/deploy_key appdeploy@YOUR_SERVER_IP "run restart"
ssh -i ~/.ssh/deploy_key appdeploy@YOUR_SERVER_IP "run report ${{ github.sha }}"
run migrate, run restart, run cache:clear, run artisan:<your-command>, …) — it cannot open a shell, reach another app, or touch the server itself. Files land already owned by the web user, so permissions are always correct. Build on Linux runners (ubuntu-latest) so native modules match the server. An older artifact push method (upload a pre-built release through the panel) is still available under Advanced in the Deploy panel for builds you'd rather not send over SSH.Restart and troubleshooting
#After deploying new code — or if an app stops responding — restart it. Use the per-domain Restart button on the Domains page for one site, or Restart Hosting (under Advanced) to restart everything. It brings your sites back in a few seconds.
-
1
502 Bad Gateway on a Node app → it isn't listening on its port (or crashed). Check your code uses
process.env.PORTand binds0.0.0.0, then Restart. -
2
Images / uploads 404 under
/storage(Laravel) → re-runartisan storage:linkfrom Command Runner — the panel makes the correct relative link. -
3
Still stuck? Contact [email protected] — we manage the servers for you.
What's supported (runtimes & services)
#Everything below is included with your hosting and already running — you don't install or pay extra for any of it. Pick a runtime per app when you Setup App; the services are shared infrastructure your apps simply connect to.
-
1
PHP 8.3 or 8.4 — as classic PHP-FPM or high-performance Laravel Octane. Composer is built in.
-
2
Node.js 24 — Express / plain Node, Next.js and NestJS. npm is built in.
-
3
MySQL — create your own databases and users in Databases, and manage them in one click with phpMyAdmin.
-
4
Redis — your own private instance for cache, sessions and queues (see the next section for setup).
-
5
Free SSL (Let's Encrypt, auto-renewing) and email — mailboxes with SPF/DKIM/DMARC plus Roundcube webmail.
Redis, cache, sessions & queues
#Every package includes its own Redis server, private to your hosting — ready for cache, sessions and queues. It's already running and wired into your container, so you only point your app at it; there is no Redis server to install or configure.
-
1
It's reachable at host
redis-main, port6379, with no password —REDIS_HOSTandREDIS_PORTare already set for you. -
2
In Laravel the driver is
redis— neverpredis. SetSESSION_DRIVER=redis,CACHE_STORE=redisand/orQUEUE_CONNECTION=redisas you need them. -
3
Choose the Redis client with
REDIS_CLIENT. The reliable option is predis (pure PHP, nothing to compile): runcomposer require predis/predisonce from Command Runner, then setREDIS_CLIENT=predis. -
4
Edit your
.envin File Manager, then runartisan config:clearfrom Command Runner and Restart the app.
SESSION_DRIVER=redis
CACHE_STORE=redis
QUEUE_CONNECTION=redis
REDIS_CLIENT=predis # then run once: composer require predis/predis
REDIS_HOST=redis-main
REDIS_PORT=6379
REDIS_PASSWORD=null
Driver [predis] not supported? That means your .env set SESSION_DRIVER=predis (or CACHE_STORE=predis). predis is the client library, never the driver — the driver is always redis. Fix the value, run artisan config:clear, and Restart.Still stuck?
We manage the servers for you — reach out and we'll sort it.