
Panduan ini menjelaskan langkah setup VPS Ubuntu dari awal sampai aplikasi Laravel berjalan menggunakan:
Dokumen ini cocok untuk deployment manual pada server baru.
Panduan ini menggunakan asumsi berikut:
sudo/var/www/namaproject
Contoh domain:
example.com
Ganti semua nama domain, path, dan nama database sesuai kebutuhan Anda.
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
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'
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:
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.
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.
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
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.
Buat folder project:
sudo mkdir -p /var/www/namaproject
sudo chown -R $USER:$USER /var/www/namaproject
Masuk ke folder:
cd /var/www/namaproject
git clone https://github.com/username/repository.git .
Upload source code Laravel ke folder:
/var/www/namaproject
Pastikan file seperti artisan, composer.json, dan folder public ada di root project.
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
.envCopy 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
Jika project menggunakan migration:
php artisan migrate --force
Kalau ada seeder:
php artisan db:seed --force
Install dependency frontend:
npm install
Build production asset:
npm run build
Jika project lama masih memakai Laravel Mix:
npm run prod
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.
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
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.
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:*
Edit crontab:
crontab -e
Tambahkan:
* * * * * php /var/www/namaproject/artisan schedule:run >> /dev/null 2>&1
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
Jika setelah setup aplikasi belum tampil normal, cek hal berikut:
sudo systemctl status nginx
sudo systemctl status php8.2-fpm
sudo systemctl status mysql
sudo tail -f /var/log/nginx/error.log
tail -f /var/www/namaproject/storage/logs/laravel.log
Pastikan folder berikut bisa ditulis:
storagebootstrap/cacheUji dengan:
php artisan migrate:status
.envPastikan parameter berikut benar:
APP_ENVAPP_DEBUGAPP_URLDB_DATABASEDB_USERNAMEDB_PASSWORDphp artisan optimize:clear
Lalu cache ulang:
php artisan config:cache
php artisan route:cache
php artisan view:cache
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.
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.
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:
Jika Anda sering deploy project Laravel, akan lebih efisien bila Anda menyiapkan:
.env terpisah per serverJika 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
Jika semua langkah benar, aplikasi Laravel Anda seharusnya sudah dapat diakses melalui domain atau IP VPS.