Cara Deploy Laravel, nginx, mysql ke VPS full dengan SSL Domain
Mendeploy app ke VPS merupakan suatu pekerjaan yang susah-susah mudah. Apalagi kalau kita kurang familiar dengan linux, mendeply aplikasi ke VPS merupakan suatu pekerjaan yang menakutkan (curhat). Maka dari itu aku mendokumentasikan apa yang telah ku pelajari dalam mendeploy app ke VPS. Dalam hal ini aku mendeploy aplikasi laravel ke VPS EC2 AWS.
Hal pertama yang harus kita lakukan adalah masuk ke dalam ssh vps kita dengan perintah
ssh user@host.com
Setelah masuk lakukan update vps ubuntu kita dengan mengetikkan perintah
sudo apt update
- Install Web Server (Nginx) Setelah update selesai kita lanjutkan dengan install webserver. Dalam hal ini aku menggunakan nginx. Nginx selain bisa menjadi web server,bisa juga berfungsi menjadi load balancer, reverse proxy dan reverse email. Untuk install nginx ini cukup mudah yaitu dengan menjalankan perintah
sudo apt install nginx -y
flag -y merupakan opsi untuk menjawab yes pada pertanyaan ketika instalasi. Setelah instalasi selesai kita bisa mengecek dengan mengetikkan IP public kita di browser maka akan muncul halaman nginx. Selain itu kita juga bisa melihat status nginx dengan perintah
sudo systemctl status nginx
- Install PHP Selanjutnya kita harus menginstall php pada vps kita. Dalam hal ini aku menginstall php versi 8.2. Berikut adalah perintah perintah yang perlu dijalankan.
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
sudo apt install php8.2-fpm php8.2-common php8.2-dom php8.2-intl php8.2-mysql php8.2-xml php8.2-xmlrpc php8.2-curl php8.2-gd php8.2-imagick php8.2-cli php8.2-dev php8.2-imap php8.2-mbstring php8.2-soap php8.2-zip php8.2-bcmath -y
Setelah dirun semua untuk memastikan php telah terinstall, anda bisa jalankan perintah
sudo systemctl status php8.2-fpm
Untuk keluar tekan ctrl + c.
- Install MYSQL Selanjutnya kita install database management system dalam hal ini kita menggunakan mysql. Langsung saja
sudo apt install mysql-server -y
Seperti biasa check apakah mysql sudah berjalan atau belum dengan perintah
sudo systemctl status mysql
Selanjutnya akses mysql dan buat database yang akan digunakan untuk aplikasi laravel. Pada defaultnya user root tidak mempunyai password.
sudo mysql -u root
Buat database dan user password untuk aplikasi laravel kita
CREATE DATABASE laravel;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'adminspassword';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
- Install Composer Selanjutnya install composer untuk mendukung aplikasi laravel kita dengan perintah
sudo apt install composer -y
untuk mengecek version composer silahkan jalankan command
composer — version
- Deploy Laravel ke VPS Nah lengkap sudah persiapan deploy kita, sekarang tinggal up web app laravel kita. Langsung saja clone project anda dari repository anda ke VPS anda. Oh iya pastikan anda masuk ke /var/www/html untuk lokasi clone laravelnya. Setelah itu jalankan
sudo composer install
sudo cp .env.example .env
sudo nano .env
Edit .env anda dengan menggunakan nano
Setelah itu jalankan migrate dan key:generate
sudo php artisan migrate
sudo php artisan key:generate
selanjutnya yaitu setting configurasi nginx
sudo nano /etc/nginx/sites-available/laravel
server {
listen 80;
listen [::]:80;
server_name 13.229.120.244;
root /var/www/html/laravel-10/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
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$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Setelah itu buat sym link ke /etc/nginx/sites-enabled dan restart nginx
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
sudo systemctl restart nginx
refresh halaman public ip kita dan kita akan mendapatkan error seperti berikut.
setelah itu ubah mode untuk folder public storage dan bootstrap dengan cara
sudo chmod -R 777 public/ storage/ bootstrap/
lalu refresh lagi halaman tersebut dan kita akan mendapatkan halaman aplikasi laravel kita
dan app laravel pun berhasil di deploy di vps
- Setting Domain Selanjutnya yaitu kita assign IP public kita ke sebuah domain. Dalam hal ini kita gunakan domain gratisan fitur dari dcdg.xyz. Caranya cukup mudah kita tinggal assign mengguanakn command line (cli) saja.
curl -X POST -H "Content-type: application/json" -d "{ \"ip\": \"<public IP VPS>\" }" "https://sub.dcdg.xyz/dns/records"
setelah berhasil kita akan mendapatkan response json yang berisi nama domain kita dan IP.
{
"status":"success",
"message":"Record berhasil dibuat. Bila hostname belum bisa digunakan tunggu 1 jam untuk proses propagate.",
"data":
{
"addedDNS":
[{
"hostname":"upset-worlds-stare-truly.a276.dcdg.xyz",
"ip":"13.212.27.100"
},
{
"hostname":"www.upset-worlds-stare-truly.a276.dcdg.xyz",
"ip":"13.212.27.100"
}]
}
}
Selanjutnya kita adjust lagi untuk configurasi nginx nya. Pada bagian servername nya kita rubah dengan nama domain hasil dari generate tadi.
sudo nano /etc/nginx/sites-available/laravel
Kemudian akses alamat domain tersebut dan hasilnya akan sama seperti kita mengakses IP public sebelumnya.
- Enkripsi Domain (SSL) dengan Let’s Encrypt Kita sudah bisa mengakses web app via subdomain gratisan dari dcdg.xyz, namun masih ada tanda not secure yang berarti domain tersebut belum terenkripsi. Nah kita akan gunakan fitur enkripsi (SSL) gratisan dari let’s encrypt. Langsung saja kita eksekusi perintah perintahnya.
sudo apt-get install python3-certbot-nginx -y
sudo certbot --nginx -d <yourdomain.com> -d <www.yourdomain.com>
Catatan: Ganti dan dengan subdomain yang Anda miliki. Pada pertanyaan terbut jawan saja yes semua dan isi dengan nama email anda pada pertanyaan email.
penampakan setelah berhasil enkripsi
Setelah itu refresh halaman web anda maka yang sebelumnya not secure akan menjadi secure dengan ditandai gambar gembok. Selamat domain anda telah terenkripsi via let’s encrypt. Perlu diingat enkripsi ini berlaku untuk 3 bulan jadi setelah 3 bulan anda harus me renewal lagi. Kalau mau auto renewat anda bisa menggunakan cron.
akhir aplikasi laravel kita sudah terenkripsi.
Top comments (0)