Portfolio
HomeProjectsBlogResumeContact
Back to Blog

Portfolio

Building digital experiences with passion and precision.

Quick Links

ProjectsBlogResumeContact

Connect

© 2026 Portfolio. All rights reserved.

Back to Blog
Setup VPS Ubuntu untuk PHP, Laravel, Nginx, dan MySQL
Tutorial

Setup VPS Ubuntu untuk PHP, Laravel, Nginx, dan MySQL

22 April 2026
Setup VPS Ubuntu untuk PHP, Laravel, Nginx, dan MySQL

Setup VPS Ubuntu untuk PHP, Laravel, Nginx, dan MySQL

Panduan ini menjelaskan langkah setup VPS Ubuntu dari awal sampai aplikasi Laravel berjalan menggunakan:

  • Nginx sebagai web server
  • PHP-FPM untuk menjalankan PHP
  • MySQL sebagai database
  • Composer untuk dependency Laravel
  • Node.js + npm untuk build asset frontend Laravel

Dokumen ini cocok untuk deployment manual pada server baru.


1. Asumsi lingkungan

Panduan ini menggunakan asumsi berikut:

  • OS: Ubuntu 22.04 / 24.04
  • User non-root dengan akses sudo
  • Domain sudah diarahkan ke IP VPS (opsional, tapi disarankan)
  • Project Laravel akan diletakkan di:
/var/www/namaproject

Contoh domain:

example.com

Ganti semua nama domain, path, dan nama database sesuai kebutuhan Anda.


2. Update server

Login ke VPS lalu jalankan:

sudo apt update && sudo apt upgrade -y

Install package dasar:

sudo apt install -y curl unzip git software-properties-common ca-certificates lsb-release apt-transport-https gnupg

3. Install Nginx

sudo apt install -y nginx

Jalankan dan aktifkan saat boot:

sudo systemctl enable nginx
sudo systemctl start nginx

Cek status:

sudo systemctl status nginx

Kalau firewall aktif, izinkan HTTP dan HTTPS:

sudo ufw allow 'Nginx Full'

4. Install MySQL

sudo apt install -y mysql-server

Aktifkan service:

sudo systemctl enable mysql
sudo systemctl start mysql

Jalankan secure installation:

sudo mysql_secure_installation

Ikuti langkah-langkah berikut:

  • set password root jika diminta
  • hapus anonymous users
  • nonaktifkan remote root login
  • hapus test database
  • reload privilege tables

5. Buat database untuk Laravel

Masuk ke MySQL:

sudo mysql

Lalu buat database dan user:

CREATE DATABASE laravel_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'password_yang_kuat';
GRANT ALL PRIVILEGES ON laravel_app.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Catat data ini karena nanti dipakai di file .env Laravel.


6. Install PHP dan ekstensi yang dibutuhkan Laravel

Tambahkan repository PHP bila diperlukan:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

Install PHP 8.2 dan ekstensi umum Laravel:

sudo apt install -y php8.2 php8.2-fpm php8.2-cli php8.2-common php8.2-mysql php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-curl php8.2-zip php8.2-gd php8.2-intl php8.2-soap php8.2-readline

Cek versi PHP:

php -v

Cek service PHP-FPM:

sudo systemctl enable php8.2-fpm
sudo systemctl start php8.2-fpm
sudo systemctl status php8.2-fpm

Jika server Anda memakai PHP 8.3, sesuaikan semua nama paket dan socket PHP-FPM.


7. Install Composer

Unduh installer Composer:

cd /tmp
curl -sS https://getcomposer.org/installer -o composer-setup.php

Install Composer global:

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Cek hasil install:

composer --version

8. Install Node.js dan npm

Laravel modern biasanya memerlukan Node.js untuk build asset.

Install Node.js dan npm dari repository Ubuntu:

sudo apt install -y nodejs npm

Cek versi:

node -v
npm -v

Jika Anda butuh versi Node.js yang lebih baru, bisa gunakan NodeSource atau nvm.


9. Siapkan folder project

Buat folder project:

sudo mkdir -p /var/www/namaproject
sudo chown -R $USER:$USER /var/www/namaproject

Masuk ke folder:

cd /var/www/namaproject

10. Upload atau clone project Laravel

Opsi A: Clone dari Git

git clone https://github.com/username/repository.git .

Opsi B: Upload manual

Upload source code Laravel ke folder:

/var/www/namaproject

Pastikan file seperti artisan, composer.json, dan folder public ada di root project.


11. Install dependency Laravel

Masuk ke folder project lalu jalankan:

cd /var/www/namaproject
composer install --no-interaction --prefer-dist --optimize-autoloader

Jika environment production, nanti setelah .env siap Anda bisa jalankan kembali dengan opsi tambahan:

composer install --no-dev --optimize-autoloader

12. Setup file environment .env

Copy file env:

cp .env.example .env

Edit file .env:

nano .env

Contoh konfigurasi penting:

APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://example.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=laravel_user
DB_PASSWORD=password_yang_kuat

Generate application key:

php artisan key:generate

13. Jalankan migrasi database

Jika project menggunakan migration:

php artisan migrate --force

Kalau ada seeder:

php artisan db:seed --force

14. Build asset frontend

Install dependency frontend:

npm install

Build production asset:

npm run build

Jika project lama masih memakai Laravel Mix:

npm run prod

15. Atur permission Laravel

Laravel butuh akses tulis ke folder storage dan bootstrap/cache.

Jalankan:

sudo chown -R www-data:www-data /var/www/namaproject
sudo find /var/www/namaproject -type f -exec chmod 644 {} \;
sudo find /var/www/namaproject -type d -exec chmod 755 {} \;
sudo chmod -R 775 /var/www/namaproject/storage
sudo chmod -R 775 /var/www/namaproject/bootstrap/cache

Jika Anda ingin user deploy tetap bisa edit file project, gunakan group yang sesuai. Namun untuk setup awal, konfigurasi di atas biasanya sudah cukup.


16. Konfigurasi Nginx untuk Laravel

Buat file server block baru:

sudo nano /etc/nginx/sites-available/namaproject

Isi dengan konfigurasi berikut:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/namaproject/public;

    index index.php index.html index.htm;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Aktifkan site:

sudo ln -s /etc/nginx/sites-available/namaproject /etc/nginx/sites-enabled/

Hapus default site jika tidak dipakai:

sudo rm -f /etc/nginx/sites-enabled/default

Test konfigurasi:

sudo nginx -t

Reload Nginx:

sudo systemctl reload nginx

17. Optimasi Laravel untuk production

Masuk ke folder project:

cd /var/www/namaproject

Jalankan cache command berikut:

php artisan config:cache
php artisan route:cache
php artisan view:cache

Jika aplikasi memakai queue atau schedule, tambahkan konfigurasi berikut.


18. Setup queue worker (opsional)

Jika Laravel menggunakan queue, install Supervisor:

sudo apt install -y supervisor

Buat config:

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Isi:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/namaproject/artisan queue:work --sleep=3 --tries=3 --timeout=90
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/namaproject/storage/logs/worker.log
stopwaitsecs=3600

Reload Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

19. Setup scheduler Laravel (opsional)

Edit crontab:

crontab -e

Tambahkan:

* * * * * php /var/www/namaproject/artisan schedule:run >> /dev/null 2>&1

20. Pasang SSL dengan Let's Encrypt (opsional tapi sangat disarankan)

Install Certbot:

sudo apt install -y certbot python3-certbot-nginx

Pasang SSL:

sudo certbot --nginx -d example.com -d www.example.com

Ikuti instruksi sampai selesai.

Cek auto-renew:

sudo systemctl status certbot.timer

Test renew:

sudo certbot renew --dry-run

21. Checklist jika aplikasi belum jalan

Jika setelah setup aplikasi belum tampil normal, cek hal berikut:

Cek status service

sudo systemctl status nginx
sudo systemctl status php8.2-fpm
sudo systemctl status mysql

Cek error log Nginx

sudo tail -f /var/log/nginx/error.log

Cek log Laravel

tail -f /var/www/namaproject/storage/logs/laravel.log

Cek permission

Pastikan folder berikut bisa ditulis:

  • storage
  • bootstrap/cache

Cek koneksi database

Uji dengan:

php artisan migrate:status

Cek file .env

Pastikan parameter berikut benar:

  • APP_ENV
  • APP_DEBUG
  • APP_URL
  • DB_DATABASE
  • DB_USERNAME
  • DB_PASSWORD

Clear cache bila perlu

php artisan optimize:clear

Lalu cache ulang:

php artisan config:cache
php artisan route:cache
php artisan view:cache

22. Struktur deployment yang direkomendasikan

Minimal struktur project:

/var/www/namaproject
├── app
├── bootstrap
├── config
├── database
├── public
├── resources
├── routes
├── storage
├── vendor
├── .env
├── artisan
└── composer.json

Root web server harus diarahkan ke folder:

/var/www/namaproject/public

Bukan ke root project.


23. Urutan cepat deployment

Kalau ingin versi singkat, urutannya adalah:

sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mysql-server git unzip curl software-properties-common ca-certificates lsb-release apt-transport-https gnupg
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y php8.2 php8.2-fpm php8.2-cli php8.2-common php8.2-mysql php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-curl php8.2-zip php8.2-gd php8.2-intl
sudo apt install -y nodejs npm
cd /tmp
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
sudo mkdir -p /var/www/namaproject
sudo chown -R $USER:$USER /var/www/namaproject
cd /var/www/namaproject
git clone https://github.com/username/repository.git .
composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
nano .env
php artisan migrate --force
npm install
npm run build
sudo chown -R www-data:www-data /var/www/namaproject
sudo chmod -R 775 storage bootstrap/cache

Setelah itu buat config Nginx, aktifkan site, lalu reload Nginx.


24. Penutup

Dengan langkah di atas, VPS sudah siap menjalankan aplikasi Laravel menggunakan Nginx, PHP-FPM, dan MySQL.

Kalau Anda ingin workflow yang lebih rapi untuk production, tahap berikutnya biasanya meliputi:

  • deployment via Git hook / CI-CD
  • environment staging dan production
  • Redis untuk cache dan queue
  • fail2ban dan hardening server
  • backup database otomatis
  • monitoring log dan uptime

25. Catatan tambahan untuk project yang sering dipakai

Jika Anda sering deploy project Laravel, akan lebih efisien bila Anda menyiapkan:

  • 1 user khusus deploy
  • 1 script deployment
  • branch production yang stabil
  • .env terpisah per server
  • backup database sebelum migrate besar

26. Contoh command deploy ulang setelah update code

Jika code sudah berubah dan ingin deploy ulang:

cd /var/www/namaproject
git pull origin main
composer install --no-dev --optimize-autoloader
npm install
npm run build
php artisan migrate --force
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
sudo systemctl reload php8.2-fpm
sudo systemctl reload nginx

27. Selesai

Jika semua langkah benar, aplikasi Laravel Anda seharusnya sudah dapat diakses melalui domain atau IP VPS.