This guide covers deploying the VietQR Gateway Service on Linux environments (Ubuntu, Debian, CentOS, RHEL, Alpine) with enterprise PaaS/SaaS architecture, custom domain binding, and automated Let’s Encrypt TLS.
Copy .env.example in deploy/docker/:
cd deploy/docker
cp .env.example .env
nano .env
Set your configuration:
DOMAIN=qr.yourdomain.com
PORT=8080
SCHEME=https
ACME_EMAIL=admin@yourdomain.com
VIETQR_API_KEYS=sk_live_tenant_prod_1,sk_live_tenant_prod_2
docker-compose -f docker-compose.prod.yml up -d
The Caddy reverse proxy container automatically provisions and renews TLS certificates for qr.yourdomain.com from Let’s Encrypt and routes traffic to the Rust Gateway running on port 8080.
Verify container health:
docker-compose -f docker-compose.prod.yml ps
docker-compose -f docker-compose.prod.yml logs -f
An automated installer auto-detects CPU architecture (x86_64, aarch64/ARM64, armv7l) and provisions systemd units.
sudo bash deploy/linux/install.sh --domain qr.yourdomain.com --scheme https
The installer will:
vietqr./opt/vietqr./etc/vietqr/vietqr.env.vietqr.service systemd daemon.# Check service status
sudo systemctl status vietqr
# Restart service
sudo systemctl restart vietqr
# Stream logs
sudo journalctl -u vietqr -f
If using existing Nginx installations:
sudo cp deploy/reverse-proxy/nginx/vietqr.conf /etc/nginx/sites-available/vietqr.conf
sudo ln -s /etc/nginx/sites-available/vietqr.conf /etc/nginx/sites-enabled/
qr.yourdomain.com with your actual domain:
sudo sed -i 's/qr.yourdomain.com/your-domain.com/g' /etc/nginx/sites-available/vietqr.conf
sudo certbot --nginx -d your-domain.com
sudo systemctl reload nginx
https://qr.yourdomain.com/healthhttps://qr.yourdomain.com/studiohttps://qr.yourdomain.com/image/970436-1234567890-compact2.png?amount=50000&addInfo=Testhttps://qr.yourdomain.com/qr/pay?bin=970436&acc=1234567890&amount=50000