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
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.