menu

Engine - Deploy websocket server Laravel in EC2(AWS) part-1


Pada tutorial sebelumnya kita sudah membuat sebuah engine chat/notifikasi menggunakan ratchet laravel, tutorial kali ini kita akan mendeploy engine tersebut ke server.

Server yang digunakan adalah EC2 instance dari AWS dengan OS Ubuntu 16.04.

Oke langsung saja kita mulai eksperimennya, pertama silahkan deploy terlebih dahulu project websocket kita ke server jika sudah coba jalankan websocket pada server dengan cara seperti di tutorial sebelumnya,
$ php artisan websocket:init
Dan coba akses di IP public server  dengan port yg sudah kita set menjadi misal 8080, hasilnya pasti akan error karena pada AWS kita harus membuka port tersebut terlebih dahulu agar bisa di akses dari public caranya,

Masuk ke halaman service EC2,


Kemudian pada bagian bawah halaman akan terlihat bagian security groups seperti ini,


Klik launch-wizard-2 karena itu merupakan settingan yang codedoct pakai, maka akan terlihat seperti gambar dibawah,


Buka tab Inbound seperti diatas kemudian klik button edit, dan akan muncul popup seperti gambar dibawah,


Tambahkan Custom TCP dan isi seperti baris paling bawah pada gambar diatas dan terakhir klik button "save"

Sekarang buka kembali page IP public kita pada browser beserta portnya dan pasti akan terbuka, selanjutnya apakah kita akan menjalankan websocket pada terminal ssh terus-menerus? tentu tidak karena ssh sendiri akan time out dan server websocket kita akan mati dengan sendirinya, oleh sebab itu kita akan menjalankan server websocket pada background processing menggunakan "supervisor" caranya mudah,

Pertama, install terlebih dahulu supervisornya,
$ sudo apt-get install supervisor
$ sudo service supervisor restart

Selanjutnya buat sebuah folder / directory pada server sebagai tempat menyimpan file configurasi supervisor kita, kita akan buat folder baru dengan nama supervisor pada path /var/www/ kemudian pada folder tersebut buat file bernama websocket.conf dan buat folder dengan nama logs dengan cara,
$ mkdir logs
$ vim websocket.conf

Kemudian isi file tersebut dengan code berikut, untuk beberapa sintax ubuntu bisa lihat disini,
[unix_http_server]
file = /tmp/supervisor.sock

[supervisord]
logfile          = ./logs/supervisord.log
logfile_maxbytes = 50MB
logfile_backups  = 10
loglevel         = info
pidfile          = /tmp/supervisord.pid
nodaemon         = false
minfds           = 1024
minprocs         = 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl = unix:///tmp/supervisor.sock

[program:ratchet]
command                 = php artisan websocket:init
directory               = /var/www/project-websocket
process_name            = Ratchet
numprocs                = 1
autostart               = true
autorestart             = true
user                    = root
stdout_logfile          = ./logs/info.log
stdout_logfile_maxbytes = 1MB
stderr_logfile          = ./logs/error.log
stderr_logfile_maxbytes = 1MB

Terakhir, jalankan websocket.conf dengan supervisor,
$ sudo supervisord -c websocket.conf
Jika tidak ada error muncul silahkan keluar dari ssh server dan coba test kembali websocket project kita dengan mengakses IP public beserta portnya, hasilnya websocket server tetap running meskipun ssh sudah tertutup.

===DONE===