Getting Resources:

mkdir /opt/paymenter && mkdir /opt/paymenter/docker && cd /opt/paymenter/docker
curl -Lo docker-compose.yml

Replace the following in docker-compose.yml:

YOUR_DB_PASSWORD -> Your desired database password.
YOUR_ROOT_PASSWORD -> Your desired MySQL root password.
YOUR_APP_KEY -> Your app key (used for encryption)
domain.tld -> Your domain (with subdomain if applicable)

Starting Everything:

docker compose up -d --force-recreate
docker compose run --rm paymenter php artisan migrate --force --seed

Creating Users:

docker compose run --rm paymenter php artisan p:user:create


An example NGINX config (with SSL) can be observed below:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name DOMAIN;
    if ($host != "DOMAIN") {
        return 403;
    root /app/public;
    index index.html index.htm index.php;
    charset utf-8;
    location ~ / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://paymenter:8080;
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    access_log off;
    error_log  /var/log/nginx/ error;
    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;
    sendfile off;
    ssl_certificate /etc/certs/cert.pem;
    ssl_certificate_key /etc/certs/cert.key;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy same-origin;
    location ~ /\.ht {
        deny all;

Make sure to replace DOMAIN with your domain and enter your SSL certificates as cert.pem and cert.key in /opt/paymenter/certs.