Home / API Docs / Guides / Paymenter

Your hosting shop,
live in an hour.

Everything from a bare Debian server to a fully working Paymenter shop selling Servury VPS under your brand: automated provisioning, renewals, upgrades, client power controls, consoles and usage graphs.

01 Prerequisites

  • A server running Debian 12/13 or Ubuntu 22.04/24.04 with root access, 2 GB RAM or more. Any small VPS works.
  • A domain (or subdomain like billing.yourbrand.com) with an A record pointed at that server.
  • A Servury account. That is the whole list; reseller activation is instant and free (step 8).

Commands below assume root on Debian. On Ubuntu, replace the PHP repository step with add-apt-repository -y ppa:ondrej/php; everything else is identical.

02 Install the stack

Paymenter needs PHP 8.3 with a handful of extensions, MariaDB, nginx and Redis. Composer is not needed; the release ships with all dependencies bundled.

apt -y install apt-transport-https lsb-release ca-certificates curl gnupg tar unzip curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt update apt -y install php8.3 php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip,intl,redis} \ mariadb-server nginx redis-server

03 Create the database

mysql -u root -p
CREATE USER 'paymenter'@'127.0.0.1' IDENTIFIED BY 'ChooseAStrongPassword'; CREATE DATABASE paymenter; GRANT ALL PRIVILEGES ON paymenter.* TO 'paymenter'@'127.0.0.1' WITH GRANT OPTION; quit

04 Install Paymenter

mkdir -p /var/www/paymenter cd /var/www/paymenter curl -Lo paymenter.tar.gz https://github.com/paymenter/paymenter/releases/latest/download/paymenter.tar.gz tar -xzvf paymenter.tar.gz chmod -R 755 storage/* bootstrap/cache/

05 Configure and migrate

cp .env.example .env php artisan key:generate --force php artisan storage:link

Edit .env and set your app URL and the database credentials from step 3:

APP_URL=https://billing.yourbrand.com DB_DATABASE=paymenter DB_USERNAME=paymenter DB_PASSWORD=ChooseAStrongPassword

Then run the migrations, seed the defaults, and create your admin account:

php artisan migrate --force --seed php artisan db:seed --class=CustomPropertySeeder php artisan app:init php artisan app:user:create

Answer the app:user:create prompts and mark the user as admin.

06 Webserver and SSL

Get a certificate, then drop in the official nginx config:

apt -y install certbot python3-certbot-nginx certbot certonly --nginx -d billing.yourbrand.com

Create /etc/nginx/sites-available/paymenter.conf (replace the domain):

server { listen 80; listen [::]:80; server_name billing.yourbrand.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name billing.yourbrand.com; root /var/www/paymenter/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; ssl_certificate /etc/letsencrypt/live/billing.yourbrand.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/billing.yourbrand.com/privkey.pem; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ ^/index\.php(/|$) { fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; fastcgi_hide_header X-Powered-By; } }
chown -R www-data:www-data /var/www/paymenter/* ln -s /etc/nginx/sites-available/paymenter.conf /etc/nginx/sites-enabled/ rm -f /etc/nginx/sites-enabled/default systemctl restart nginx

Your Paymenter login page is now live at your domain.

07 Cron and queue worker

Paymenter's scheduler handles invoicing and the queue worker handles provisioning jobs. Both are required. Add the cron entry:

crontab -u www-data -e # add this line: * * * * * php /var/www/paymenter/artisan schedule:run >> /dev/null 2>&1

Create /etc/systemd/system/paymenter.service:

[Unit] Description=Paymenter Queue Worker [Service] User=www-data Group=www-data Restart=always ExecStart=/usr/bin/php /var/www/paymenter/artisan queue:work StartLimitInterval=180 StartLimitBurst=30 RestartSec=5s [Install] WantedBy=multi-user.target
systemctl enable --now paymenter.service systemctl enable --now redis-server

08 Activate Servury reseller access

  • Log in to your Servury account and open the Reseller Dashboard.
  • Click Become a Reseller. Activation is instant, free, and starts at a 5% discount off retail that grows with your volume.
  • Copy your API key from the dashboard.
  • Fund your account: top up balance (crypto or card) or save a card and set it as your reseller payment method. Every server your customers order is charged to this at your discounted rate.

Your customers never see Servury. Provisioning, consoles, graphs and all management run under your Paymenter brand.

09 Install the Servury extension

cd /var/www/paymenter/extensions/Servers curl -Lo servury.zip https://servury.com/downloads/servury-paymenter.zip unzip servury.zip && rm servury.zip chown -R www-data:www-data Servury

That's the whole install; the extension lands at extensions/Servers/Servury.

10 Connect and verify

  • In the Paymenter admin panel go to Settings > Servers and create a new server.
  • Pick Servury as the extension.
  • Servury URL: https://servury.com
  • Reseller API key: the key from step 8.
  • Hit Test configuration. Green means the key authenticated against your reseller account and you're connected.

11 Import your catalog (one command)

Instead of creating 40 products by hand, let the importer build your whole shop from the live Servury plan list:

cd /var/www/paymenter SERVURY_MARKUP_PERCENT=25 php artisan tinker \ --execute="require 'extensions/Servers/Servury/import-catalog.php';"

What it creates:

  • A category per location and a product per plan, specs included (CPU, RAM, NVMe, port speed).
  • Monthly and yearly billing plans priced at your reseller cost plus the markup you choose (SERVURY_MARKUP_PERCENT, default 20).
  • Upgrade paths wired automatically to exactly what the Servury API accepts (same location, same product line, higher tier), so customer upgrades always succeed.
  • Out-of-stock plans imported but hidden; re-run the command any time to refresh stock, prices and paths. Products you created yourself are never touched.

Review the generated prices in the admin and adjust anything you like; they're your prices.

12 Go live

  • Set your shop currency and connect a payment gateway for your customers (Stripe, PayPal, crypto...) under Paymenter's settings; see the Paymenter docs.
  • Place a test order in your own shop. On payment, the server provisions automatically and appears in the customer's dashboard within a couple of minutes, with IP, generated root password, power controls, console access and live usage graphs.
  • Check your Servury reseller dashboard; you'll see the wholesale charge for the order there.

13 How it operates day to day

  • Renewals: when a customer pays a renewal invoice, the extension automatically renews the server upstream for the same cycle. A monthly cycle maps to 31 days, which avoids Servury's short-term surcharge entirely.
  • Non-payment: Paymenter suspending a service powers the server off; unsuspending powers it back on. Termination deletes the server permanently.
  • Upgrades: paid upgrades resize the server in place (prorated wholesale charge to you). The importer only offers legal paths, so they can't fail on constraints.
  • Manage tab: customers get status, IP, password reveal, start/stop/restart, password reset, network fix, OS reinstall, browser console and CPU/RAM/network graphs, all styled to match your Paymenter theme.
  • Billing note: keep your Servury balance funded (or a card saved); renewals bill it automatically. If a renewal can't be charged, the upstream server expires like any unpaid server.
  • Help: anything odd, open a ticket with us; reseller tickets get priority.

Sell servers,
not promises.

Instant reseller activation, 5% base discount, one-command catalog import.

Start Reselling