N
Admin Console PHP 8.2

7-Country Regional Commerce

Subdomain Live Target SSH Connect & Sync

https://food.jackpilot.co

Automated bash deployment pipeline with SSH connectivity. Easily configure your VPS, synchronize all 140 Asian dishes & PHP logic, configure Nginx, and activate free Let's Encrypt SSL.

Interactive VPS Command Generator

Enter your VPS connection details below to generate ready-to-run terminal commands.

1 Deploy & Sync Files via SSH (Local Computer to VPS)
bash deploy.sh food.jackpilot.co root 22

Uses rsync over SSH (with streaming tar fallback) to sync all code directly into /var/www/food.jackpilot.co, updates permissions, and reloads PHP-FPM.

2 One-Time VPS Stack Setup & SSL Certificate
ssh -p 22 root@food.jackpilot.co "bash -s" < setup-subdomain-vps.sh

Installs Nginx, PHP 8.2-FPM, UFW firewall, writes the VirtualHost, and requests Let's Encrypt SSL certificate for food.jackpilot.co.

3 Alternative: Direct In-Server Download & Extract
sudo mkdir -p /var/www/food.jackpilot.co && curl -sSL "http://food.jackpilot.co/api.php?action=download_bundle" | sudo tar -xzf - -C /var/www/food.jackpilot.co && sudo chown -R www-data:www-data /var/www/food.jackpilot.co

Run this single line on your VPS terminal to pull and extract the entire production project bundle in one second.

📋 Complete Step-by-Step Live Deployment Guide

Step 1. Configure DNS for Subdomain

Log in to your DNS manager (Cloudflare, Namecheap, GoDaddy, DigitalOcean) for jackpilot.co and add an A Record:

Type: A
Name / Host: food (or food.jackpilot.co)
Target IP: [YOUR_VPS_IP]
TTL: Auto / 1 min
Step 2. Provision VPS Stack (Nginx + PHP)

Connect to your VPS and run the provisioning script. It prepares the web root, creates Nginx server block, and configures PHP-FPM:

ssh root@YOUR_VPS_IP "bash -s" < setup-subdomain-vps.sh

Includes automatic Let's Encrypt Certbot SSL for HTTPS!

Step 3. Copy & Synchronize Files

Deploy all application files directly from your workspace using the automated deploy script:

bash deploy.sh YOUR_VPS_IP root 22

Automatically syncs index.php, admin.php, api.php, products.json, and data_storage/.

Step 4. Live SSL Verification

Your live store is now accessible worldwide with HTTPS and HTTP/2:

SSL certificates auto-renew every 60 days via certbot systemd timer.

⚙️ Nginx Configuration: /etc/nginx/sites-available/food.jackpilot.co

Pre-configured with gzip compression, security headers, clean admin & API routing, and PHP-FPM fastcgi proxying.

Download .conf
# /etc/nginx/sites-available/food.jackpilot.co
# Nginx VirtualHost & Reverse Proxy Configuration for https://food.jackpilot.co

# Upstream PHP Service on Port 3200 (Managed by PM2)
upstream food_backend {
    server 127.0.0.1:3200;
    keepalive 32;
}

# HTTP Server Block
server {
    listen 80;
    listen [::]:80;
    server_name food.jackpilot.co;

    client_max_body_size 64M;
    charset utf-8;

    # Gzip Compression
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

    # Security Headers
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header X-Frame-Options "SAMEORIGIN" always;

    # Let's Encrypt ACME Challenge
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
        try_files $uri =404;
    }

    # Deny access to hidden dotfiles (.env, .git, etc.)
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Protect internal data storage files
    location ^~ /data_storage/ {
        deny all;
        return 403;
    }

    location / {
        proxy_pass http://food_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 60s;
        proxy_send_timeout 180s;
        proxy_read_timeout 180s;
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
    }
}

# HTTPS Server Block (SSL)
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name food.jackpilot.co;

    client_max_body_size 64M;
    charset utf-8;

    # SSL Certificates (Auto-managed by Certbot or fallback certificate)
    ssl_certificate /etc/ssl/food.jackpilot.co/fullchain.pem;
    ssl_certificate_key /etc/ssl/food.jackpilot.co/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # Gzip Compression
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

    # Security Headers
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header X-Frame-Options "SAMEORIGIN" always;

    # Deny access to hidden dotfiles
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Protect internal data storage files
    location ^~ /data_storage/ {
        deny all;
        return 403;
    }

    location / {
        proxy_pass http://food_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 60s;
        proxy_send_timeout 180s;
        proxy_read_timeout 180s;
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
    }

    access_log /var/log/nginx/food.jackpilot.co_access.log;
    error_log /var/log/nginx/food.jackpilot.co_error.log;
}