Sebelum memulai praktik, pastikan Anda telah memahami konsep dasar pada materi kelas AI Agent & PHP di infokoding.

BAB 19

Cara Deploy AI Agent PHP ke VPS Ubuntu & Nginx

Deploy AI Agent PHP ke VPS Ubuntu dari nol: setup Nginx sebagai web server, konfigurasi SSL dengan Certbot, domain, Supervisor untuk proses daemon, dan Cron job.

Terakhir diperbarui:

Definisi: Bagaimana Standar Deployment AI Agent PHP di VPS Produksi?

Direct Answer:Deploy AI Agent PHP ke VPS Ubuntu adalah proses penerbitan aplikasi agen cerdas ke server Linux mandiri dengan mengonfigurasi Nginx sebagai reverse proxy ber-SSL Certbot (dilengkapi fastcgi_read_timeout 120s), PHP 8.3-FPM sebagai runtime interpreter, dan Supervisor sebagai manajer proses daemon (worker queue) untuk mengeksekusi pipeline LLM secara non-blocking tanpa terputus.

Menjalankan AI Agent di server produksi membutuhkan penyesuaian batas timeout soket dan isolasi permission file .env agar tidak memicu HTTP 504 Gateway Timeout saat pemanggilan model LLM memerlukan waktu inferensi lebih dari 30 detik.

TL;DR (Ringkasan Cepat)

  • Spesifikasi Minimum: VPS Ubuntu 22.04 / 24.04 LTS dengan minimal 1 vCPU dan 2GB RAM untuk PHP 8.3 & Supervisor.
  • Konfigurasi Timeout Nginx: Wajib menyetel fastcgi_read_timeout 120; dan proxy_read_timeout 120; untuk menangani latensi respons model AI.
  • Daemon Worker Supervisor: Kelola background job runner dengan numprocs=2 dan autorestart=true.
  • Keamanan Direktori: Blokir file sensitif (.env, .git) di blok virtual host Nginx dan set izin folder logs/ ke www-data.
Diagram Arsitektur: Alur Request Browser → Nginx → PHP-FPM → Worker Supervisor → LLM API
WebP Lossless • 70 KB • Schema Ready
Diagram arsitektur alur request deployment VPS AI Agent PHP: Browser klien mengirim request HTTPS ke Web Server Nginx Port 443 ber-SSL, diteruskan via FastCGI unix socket ke PHP 8.3-FPM, diproses oleh background daemon Supervisor worker.php, lalu memanggil eksternal OpenAI LLM API dan mengeksekusi tool
Gambar 19.1: Pipeline Arsitektur Deployment VPS — Request pengguna diarahkan dari Nginx SSL ke PHP-FPM dan didelegasikan ke daemon Supervisor untuk eksekusi asinkron agen tanpa risiko timeout.

Persiapan VPS Ubuntu untuk AI Agent PHP

Direct Answer:Persiapan server diawali dengan menginstal runtime PHP 8.3-FPM beserta ekstensi wajib (curl, mbstring, mysql, zip), database MySQL, Nginx web server, dan Composer package manager.

Eksekusi perintah terminal berikut di VPS Ubuntu Anda menggunakan user dengan hak akses sudo:

# 1. Update package repository & system upgrade
sudo apt update && sudo apt upgrade -y

# 2. Tambahkan repository PPA PHP resmi Ondrej
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# 3. Instal PHP 8.3 FPM, CLI, dan ekstensi yang dibutuhkan AI Agent
sudo apt install php8.3-fpm php8.3-cli php8.3-curl php8.3-mbstring \
    php8.3-json php8.3-mysql php8.3-xml php8.3-zip php8.3-redis php8.3-bcmath -y

# 4. Instal Nginx Web Server dan MySQL Server
sudo apt install nginx mysql-server -y

# 5. Instal Composer secara global
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version

Konfigurasi Nginx dan Optimasi Timeout AI Agent

Direct Answer:Konfigurasi Nginx untuk AI Agent mewajibkan direktif fastcgi_read_timeout 120; dan proteksi akses location ~ /\. { deny all; } guna mengamankan file .env dari akses peretas publik.

Buat file konfigurasi server block pada /etc/nginx/sites-available/ai-agent:

# /etc/nginx/sites-available/ai-agent
server {
    listen 80;
    server_name ai-agent.domainanda.com;
    root /var/www/ai-agent/public;
    index index.php index.html;

    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    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;

    # Routing URL Friendly
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP-FPM FastCGI Handler dengan Penambahan Timeout Inferensi AI
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;

        # Timeout ditingkatkan ke 120s agar eksekusi multi-tools agent tidak 504 Gateway Timeout
        fastcgi_read_timeout 120;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 120;
    }

    # Blokir akses ke file rahasia .env, .git, .htaccess
    location ~ /\.(?!well-known).* {
        deny all;
        access_log off;
        log_not_found off;
    }
}
# Uji sintaks Nginx dan aktifkan virtual host
sudo ln -s /etc/nginx/sites-available/ai-agent /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Pasang Sertifikat SSL Gratis dengan Certbot Let's Encrypt

Amankan jalur transmisi kunci API dan data pengguna dengan enkripsi HTTPS TLS 1.3:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ai-agent.domainanda.com --non-interactive --agree-tos -m admin@domainanda.com
# Uji auto-renewal sertifikat SSL
sudo certbot renew --dry-run

Deploy Aplikasi AI Agent PHP

Direct Answer:Deployment aplikasi mencakup cloning repositori Git, instalasi dependensi produksi via composer install --no-dev --optimize-autoloader, konfigurasi environment variable .env, dan pengaturan izin kepemilikan user web server chown -R www-data:www-data.

Lakukan cloning kode sumber dan setup direktori produksi:

cd /var/www
# Clone repositori aplikasi AI Agent Anda
git clone https://github.com/username/php-ai-agent.git ai-agent
cd /var/www/ai-agent

# Instal dependensi PHP tanpa paket development
composer install --no-dev --optimize-autoloader

# Atur perizinan kepemilikan file web server
sudo chown -R www-data:www-data /var/www/ai-agent
sudo chmod -R 755 /var/www/ai-agent
sudo chmod -R 775 /var/www/ai-agent/logs /var/www/ai-agent/storage

# Salin konfigurasi environment production
cp .env.example .env
nano .env # Masukkan OPENAI_API_KEY, JWT_SECRET, dan kredensial Database MySQL production

Setup Supervisor untuk Background Queue Worker

Direct Answer:Supervisor bertindak sebagai daemon manager yang menjaga proses eksekusi worker worker.php berjalan terus-menerus di latar belakang (*always-on*) dan secara otomatis me-restart proses jika terjadi crash akibat kehabisan memori atau error jaringan.

Instal Supervisor dan buat file konfigurasi program worker:

# /etc/supervisor/conf.d/ai-agent-worker.conf
[program:ai-agent-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/ai-agent/worker.php
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/ai-agent/logs/worker.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
# Muat ulang konfigurasi dan jalankan worker daemon
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start ai-agent-worker:*
sudo supervisorctl status

Troubleshooting Error Deploy AI Agent PHP

Direct Answer:Kendala umum pada deployment AI Agent mencakup HTTP 504 Gateway Timeout (akibat fastcgi timeout terlalu rendah), Supervisor Worker Crash / FATAL Exit (karena memory leak atau exception unhandled), dan HTTP 500 Permission Denied pada direktori log.

Tabel komparasi di bawah ini merangkum diagnosis gejala error dan solusi perbaikan teknis di level server:

Tabel Troubleshooting Error Deployment AI Agent PHP
Gejala ErrorPenyebab UtamaSolusi Perbaikan ServerLokasi Log Diagnosis
504 Gateway TimeoutInferensi model LLM atau chained tools melebihi batas default 60s Nginx.Naikkan fastcgi_read_timeout 120s di Nginx dan max_execution_time = 120 di php.ini./var/log/nginx/error.log
Worker FATAL / CrashProses worker kehabisan RAM atau terjadi Uncaught Exception tanpa try-catch.Tambahkan memory_limit = 256M, tangani Throwable, dan set autorestart=true pada Supervisor./var/www/ai-agent/logs/worker.log
HTTP 500 Internal ErrorUser www-data tidak memiliki hak tulis pada direktori logs atau session storage.Jalankan sudo chown -R www-data:www-data /var/www/ai-agent/logs dan chmod 775./var/log/php8.3-fpm.log
cURL Error 28 TimeoutKoneksi keluar (outbound) ke OpenAI/Anthropic terblokir firewall UFW atau DNS.Buka port outbound 443 pada UFW (sudo ufw allow out 443/tcp) dan cek nameserver 8.8.8.8.storage/logs/agent.log

FAQ: Tanya Jawab Teknis Deployment AI Agent PHP

1. Bagaimana cara mengatasi request AI Agent yang terputus karena timeout panjang?

Ringkasan Jawaban:Tingkatkan nilai fastcgi_read_timeout 120; dan proxy_read_timeout 120; pada blok Nginx, serta ubah max_execution_time = 120 pada konfigurasi /etc/php/8.3/fpm/php.ini.

Untuk tugas agen yang memerlukan waktu lebih dari 2 menit, pindahkan eksekusi ke background queue berbasis Redis dan Supervisor dengan polling status endpoint.

2. Mengapa daemon Supervisor ai-agent-worker sering restart sendiri?

Ringkasan Jawaban:Penyebab paling umum adalah terjadinya memory leak dalam loop pemrosesan panjang atau exception yang tidak tertangkap (uncaught exception) saat koneksi API LLM terputus.

Bungkus loop utama worker dalam blok try-catch (Throwable $e) dan panggil gc_collect_cycles() secara periodik untuk membebaskan alokasi memori RAM.

3. Bagaimana cara mengamankan file .env agar tidak bisa didownload lewat browser?

Ringkasan Jawaban:Pastikan direktori root Nginx menunjuk ke folder /var/www/ai-agent/public (bukan root folder proyek) dan tambahkan direktif location ~ /\.(?!well-known).* { deny all; } pada konfigurasi Nginx.

Dengan pemisahan folder public, file .env berada satu tingkat di atas dokumen web root sehingga secara fisik mustahil diakses via URL browser.

Key Takeaways: Rangkuman Deployment AI Agent PHP di VPS
  • Timeout Alignment: Sinkronisasi batas waktu FastCGI Nginx dan PHP-FPM ke 120 detik untuk mencegah 504 Gateway Timeout.
  • Background Worker Resiliency: Pengelolaan daemon proses worker menggunakan Supervisor dengan opsi autorestart=true dan log rotation.
  • Zero-Leak Environment Security: Isolasi direktori public web root dan pemblokiran akses file dotfile (.env) di level web server.
  • SSL & Security Headers: Enkripsi otomatis HTTPS via Certbot Let's Encrypt dengan perlindungan header HSTS dan X-Frame-Options.
RA

Rusmawan Abdullah Sani

Lead Software Engineer & System Architect

Praktisi pengembangan backend PHP modern, arsitektur AI Agent, microservices, dan otomasi server Linux. Terhubung melalui profil LinkedIn.