DEV Community

nozamidotid
nozamidotid

Posted on • Edited on

Cara Deploy Aplikasi Laravel ke VPS Ubuntu (EC2 AWS)

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
Enter fullscreen mode Exit fullscreen mode

Setelah masuk lakukan update vps ubuntu kita dengan mengetikkan perintah

sudo apt update
Enter fullscreen mode Exit fullscreen mode
  1. 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
Enter fullscreen mode Exit fullscreen mode

nginx

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
Enter fullscreen mode Exit fullscreen mode
  1. 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
Enter fullscreen mode Exit fullscreen mode

Setelah dirun semua untuk memastikan php telah terinstall, anda bisa jalankan perintah

sudo systemctl status php8.2-fpm
Enter fullscreen mode Exit fullscreen mode

php fpm

Untuk keluar tekan ctrl + c.

  1. Install MYSQL Selanjutnya kita install database management system dalam hal ini kita menggunakan mysql. Langsung saja
sudo apt install mysql-server -y
Enter fullscreen mode Exit fullscreen mode

Seperti biasa check apakah mysql sudah berjalan atau belum dengan perintah

sudo systemctl status mysql
Enter fullscreen mode Exit fullscreen mode

Selanjutnya akses mysql dan buat database yang akan digunakan untuk aplikasi laravel. Pada defaultnya user root tidak mempunyai password.

sudo mysql -u root
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode
  1. Install Composer Selanjutnya install composer untuk mendukung aplikasi laravel kita dengan perintah
sudo apt install composer -y
Enter fullscreen mode Exit fullscreen mode

composer version

untuk mengecek version composer silahkan jalankan command

composer — version

  1. 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
Enter fullscreen mode Exit fullscreen mode

Edit .env anda dengan menggunakan nano

.env example

Setelah itu jalankan migrate dan key:generate

sudo php artisan migrate
sudo php artisan key:generate
Enter fullscreen mode Exit fullscreen mode

selanjutnya yaitu setting configurasi nginx

sudo nano /etc/nginx/sites-available/laravel
Enter fullscreen mode Exit fullscreen mode
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;
    }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

refresh halaman public ip kita dan kita akan mendapatkan error seperti berikut.

public IP

setelah itu ubah mode untuk folder public storage dan bootstrap dengan cara

sudo chmod -R 777 public/ storage/ bootstrap/
Enter fullscreen mode Exit fullscreen mode

lalu refresh lagi halaman tersebut dan kita akan mendapatkan halaman aplikasi laravel kita

web app laravel

dan app laravel pun berhasil di deploy di vps

  1. 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"
Enter fullscreen mode Exit fullscreen mode

domain

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"
                    }]
        }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

laravel nginx config

Kemudian akses alamat domain tersebut dan hasilnya akan sama seperti kita mengakses IP public sebelumnya.

nginx config

  1. 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>
Enter fullscreen mode Exit fullscreen mode

Catatan: Ganti dan dengan subdomain yang Anda miliki. Pada pertanyaan terbut jawan saja yes semua dan isi dengan nama email anda pada pertanyaan email.

SSL let's encrypt

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.

laravel web

akhir aplikasi laravel kita sudah terenkripsi.

Top comments (0)