Basit Bir AdonisJs Uygulamasını Dockerize Etmek

Selamlar. Bu yazının konusu Basit Bir AdonisJs Uygulamasını Dockerize Etmek olacak. Bir önceki teknik yazı Vue hakkındaydı. Bu yazıda Laravel benzeri bir NodeJS framework'ü olan AdonisJS'i nasıl docker-compose yardımıyla hızlıca yayına alacağımızı anlatacağım. Yapacağımız işlemi ben Ubuntu üzerinden anlatıyorum. Sadece kullandığınız işletim sistemi ve o sistemin dağıtımlarına bağlı farklılıklar olabilir. Bunları da araştırmanız gerekiyor.

Basit Bir AdonisJs Uygulamasını Dockerize Etmek

Basit Bir AdonisJs Uygulamasını Dockerize Etmek

Başlamadan bu yazı adonisjs hakkında bilgiler sunmayacak. Sadece docker-compose ile yayına almayı anlatacağım. İsterseniz hemen başlayalım.

Ubuntu'ya Docker Kurulumu

Docker, 64 bit Ubuntu gerektiriyor. Yani sunucunuza ya da kişisel bilgisayarınıza kurmak niyetiniz var ise 64 bit sistem olduğundan emin olmalısınız. Hadi başlayalım;

1-) Resmi Docker repository'si için GPG Key'ini sisteme ekleyelim

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

2-) Docker depolarını APT kaynaklarına ekleyelim

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Yukarıdaki komut'ta lsb_release ile kullandığımız sistemin adını alıyoruz.

3-) Yeni eklenen depolar için sistemi güncelleyelim

sudo apt-get update

4-) Docker repolarının alındığından emin olmak için cache üzerinden kontrol sağlayalım

apt-cache policy docker-ce

Bu komut sonrasında şöyle bir çıktı göreceğiz:

Version table:
 *** 18.06.0~ce~3-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu artful/stable amd64 Packages
        100 /var/lib/dpkg/status
     18.03.1~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu artful/stable amd64 Packages
     18.03.0~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu artful/stable amd64 Packages
     17.12.1~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu artful/stable amd64 Packages
     17.12.0~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu artful/stable amd64 Packages

Depoları başarıyla aldığımızı bu çıktıdan anlayabiliriz.

5-) Docker Kurulumu

Depolar başarıyla alındığına göre Docker'ı kurabiliriz

sudo apt-get install -y docker-ce

Son olarak da docker'ın başarılı bir şekilde çalışıp çalışmadığını kontrol edelim

6-) Docker'ın Kontrolü

sudo systemctl status docker

Çıktı aşağıdaki gibi olmalıdır

docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e
   Active: active (running) since Sat 2018-08-11 15:24:13 +03; 1h 59min ago
     Docs: https://docs.docker.com

Bu arada belirtmem gerekiyor, docker daima super admin yetkisi istiyor yani sudo kullanacaksınız. Eğer istemiyorsanız aşağıdaki komutları verebilirsiniz:

sudo usermod -aG docker ${USER}

su - ${USER}

Bu işlemle birlikte docker kurulumunu bitirdik. Şimdi de docker-compose kurulumunu yapacağız. Bu sayede yayına alma işlemlerini bir tık daha basit hale getireceğiz.

Docker Compose Kurulumu

Kurulum ubuntu üzerinden aşağıdaki komutla yapılabiliyor.

sudo apt install docker-compose

Diğer işletim sistemlerine dair kurulum bilgisine buradan ulaşabilirsiniz. Docker tarafında şu anlık işlemlerimizi bitirdik. Şimdi hadi gidip adonisjs kurulumunu yapalım

AdonisJs Kurulumu

Aşağıdaki komutla global olarak adonis cli kuracağız.

npm i -g @adonisjs/cli

Kurulumdan sonra komut satırına adonis --help komutunu vererek çıktıyı görebiliriz. Hadi bir proje oluşturalım;

Yeni Adonis Projesi Oluşturmak

Ben projenin adına dockerize vereceğim. Siz mahmut diyebilirsiniz.

adonis new .

Sonda bulunan nokta, bulunduğum klasörde bu projeyi oluştur anlamına geliyor. Şu anda dockerize isimli bir klasördeyim. Proje oluşturulduktan sonra start klasörünün altındaki routes.js dosyasını açalım ve bir adet endpoint ekleyelim.

const Route = use('Route')

Route.on('/').render('welcome')

Route.get('/hello', async () => {
    return "Hello World"
})

Sistemi docker ile yayına almadan önce test edelim;

adonis serve --dev

Bu komut development sunucusu ile projeyi ayağa kaldırır. Yazının başındaki görseli görüyorsanız eğer sistem başarıyla çalışıyordur. Projeyi durdurup son bir ayar yapalım. Proje dizininde yer alan .env dosyasını açıp host ve port ayarlarını şöyle değiştirelim;

HOST=0.0.0.0
PORT=8080

Artık uygulama 3333 portunu değil de 8080 portunu kullanacak. Şimdi bir adet docker file oluşturacağız. Burada kodları direkt vereceğim.

Dockerfile

Dockerfile dosyası aşağıdaki gibi olacak.

FROM node:8

WORKDIR . /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080

CMD [ "npm", "start" ]

NodeJS 8 ya da latest diyebilirdik. Ben 8 dedim. Ardından çalışma dizinini belirttim. Daha sonra da package.json dosyasını bu dizine atıp, bağımlılıkları yani adonis bağımlılıklarını kuracağız. En son 8080 portunu kullanacağımızı belirtip, npm start komutlarını çalıştıracağız. Hepsi bu kadar. Buraya kadar olan bu mini açıklama yukarıdaki dosyanın ne yaptığı ile ilgiliydi.

Bu aşamadan sonra docker compose kullanacağız. Bunun için proje dizinine bir adet docker-compose.yml adında dosya oluşturacağız.

web:
  build: .
  ports:
   - "8080:8080"
  volumes:
   - .:/code

Şimdi projeyi yayına almak için sırasıyla şu komutları verelim:

sudo docker-compose build

Projeyi build ediyor. Bu aşamada henüz proje deploy edilmiş değil. Ardından aşağıdaki komutla projeyi detached mod'da up ediyoruz. Burada -d flag'i arkaplanda işlemleri çalıştırır ve sonra da sonlandırır. Eğer kullanmadan yaparsanız proje sanki dev serverda çalışıyormuş gibi olur sizden CTRL+C bekler. Yani tamamen bir çalışma gerçekleşmiyor burada. Son

sudo docker-compose up -d

Şimdi de projeyi start edelim ve tamamen çalışır duruma gelmiş olsun

sudo docker-compose start

Evet hepsi bu kadar. Projemiz şu anda 8080 portunda yayında. Eğer proje kodlarınızda değişiklik yaparsanız, docker-compose ile stop demelisiniz ve yukarıdai diğer 3 adımı tekrarlamalısınız.

sudo docker-compose stop

Yok, ben çok üşengeç bir insanım diyorsanız, projeniz aşırı basit ise aşağıdaki mini bash scripti işinizi görecektir;

sudo docker-compose stop

sudo docker-compose build

sudo docker-compose up -d

sudo docker-compose start

Evet bu yazıda Basit Bir AdonisJs Uygulamasını Dockerize Etmek hakkında bilgi aldık. Umarım yararlı olmuştur. Aslında bu yazıya Basit Bir AdonisJs Uygulamasını Dockerize Etmek olarak bakmak yerine herhangi bir NodeJS uygulamasını dockerize etmek olarak da bakabilirsiniz.

Okuduğunuz için teşekkürler. İyi çalışmalar dilerim.