Multi Https pada satu VPS dengan Docker

Gilang Virga Perdana
4 min readNov 12, 2021

Pernahkah kalian merasa kesulitan pada saat deploy atau expose suatu aplikasi berbasis WEB menggunakan Docker? Terlebih lagi jika kita ingin menerapkan SSL pada masing masing aplikasi, tentu saja bagi kita orang awam akan berfikir bahwa port 443 dan 80 akan bentrok karena sudah digunakan. Ternyata, Nginx sebagai webserver memberikkan opsi yaitu dengan memanfaatkan fitur Proxy yang ada pada Nginx. Dengan begitu, kita bisa menggunakan satu VPS dalam kata lain satu Public IP untuk beberapa aplikasi WEB berabasis SSL dengan menerapkan konsep reverse proxy pada Nginx hanya dengan men-define endpoint baru pada Docker-compose nantinya. Tanpa berlama lama, langsung saja coba kita eksekusi.

Environment :

1. Ubuntu 20.04 LTS with Public IP.

2. Docker.

3. Docker Compose.

4. Domain & Domain Management Dashboard.

Practice Topology :

Langkah — Langkah :

1. Instalasi Docker :

$ apt update && apt-get full-upgrade -y$ apt install -y docker-io$ apt install -y docker-compose

2. Persiapkan Repository :

Siapkan repository Nginx-Proxy dan project kalian yang akan di deploy.

$ git clone https://github.com/gilangvperdana/Multiple-Https-Nginx-withOneServer

3. Sesuaikan Environment :

Sudah diberikan beberapa contoh docker-compose untuk aplikasi yang akan di deploy, pada directory “your-website-one.com” dan “your-website-two.com”. Silahkan untuk ikuti petunjuk/settingan seperti docker-compose yang tertera disana.

$ cd Multiple-Https-Nginx-withOneServer

Lalu sesuaikan dengan aplikasi yang akan kalian deploy.

Disini saya ingin mencoba deploy 3 aplikasi berbasis WEB, maka dari itu saya berikan 3 duplikat.

$ cp -r your-website-one.com app1$ cp -r your-website-one.com app2$ cp -r your-website-one.com app3

4. Deploy Nginx-Proxy :

Silahkan deploy nginx-proxy guna sebagai container dasar dalam practice kali ini. Kurang lebih didalam nginx-proxy ada 3 container yang akan ter-deploy, yaitu nginx itu sendiri, lalu nginx-gen dan nginx-letsencrypt.

$ cd nginx-proxy$ docker network create nginx-proxy$ docker-compose up -d

5. Sesuaikan Docker-Compose :

Silahkan sesuaikan settingan pada docker-compose.yml sesuai dengan aplikasi yang ingin kalian deploy. Untuk kasus saya, karena semua berbasih HTML dan sudah ada di dockerhub maka dari itu saya hanya tinggal pull image saja dengan men-define image pada Docker-Compose sesuai image yang ada pada docker-hub. Kurang lebih hasil akhir ke-3 aplikasi saya seperti ini.

Sesuaikan image dengan image aplikasi kalian, VIRTUAL_HOST dengan domain kalian, LETSENCRYPT_HOST dengan domain kalian.

6. Sesuaikan Domain :

Sebelum kita deploy semua docker-compose yang sudah kita desain sebelumnya. Silahkan pointing masing masing endpoint pada Dashboard DNS dengan IP VM/VPS kalian. Biasakan untuk setting A & CNAME. Berikut adalah contoh pointing endpoint.

7. Deploy semua aplikasi :

Setelah Domain sudah dipastikan terkonfigurasi pada masing masing endpoint yang akan kita deploy. Silahkan lakukan deploy di masing masing folder app kalian.

$ docker-compose up -d

8. Cek Akses WEB :

Silahkan untuk coba akses pada Endpoint yang sudah kalian definisikan pada docker-compose tadi.

Voila, ke-3 aplikasi sudah berhasil ter-deploy dengan SSL. Mudah bukan? Yup tentunya ini berkat Nginx-Proxy tadi. Mungkin ini adalah sebuah konsep dasar yang nantinya bisa kalian semua kembangkan untuk aplikasi dengan based framework lainnya. Pada intinya, semua aplikasi yang ingin disambungkan ke nginx-proxy agar kalian sesuaikan dengan network nginx-proxy pada docker-compose, dengan begitu semua aplikasi yang ter-deploy/ekspose akan terdeteksi oleh nginx-proxy melalu network nginx-proxy tersebut dan langsung akan di reverse sesuai endpoint terdefinisi dan otomatis ter-generate sertifikat SSL oleh container letsencrypt.

Demikian yang dapat saya bagikan, terima kasih.

Terima kasih bagi para pembaca, semoga bermanfaat.

--

--