AFAIK

Heroku Nedir?

Güncelleme:
Node.js ve ardından Express.js ile temel düzeyde web sunucusu oluşturma ve statik sayfalar yayınlama konularında bilgi sahibi olduk. Peki, oluşturduğumuz bu mini uygulamayı nasıl yayınlayacağız? ...
GÖRSEL

Node.js ve ardından Express.js ile temel düzeyde web sunucusu oluşturma ve statik sayfalar yayınlama konularında bilgi sahibi olduk. Peki, oluşturduğumuz bu mini uygulamayı nasıl yayınlayacağız? Öyle ya, şimdiye kadar yaptığımız tüm işlemler localhost üzerinden yayınlanmaktaydı. Elbette, daha önce bahsi geçmiş olan Ngrok başlangıç için bir alternatif olabilir. Ancak, amacımız daha kalıcı ve genel bir çözüm; uygulamamıza herkes erişebilmeli. İşte bu gibi durumlarda, uygulamamızı deploy edebileceğimiz bir servis sağlayıcıya ihtiyaç duymaktayız. DigitalOcean bir seçenek olabilir. Ancak, daha pek çok kullanılabilecek servis sağlayıcı mevcut. Bu yazının konusu olan Heroku seçeneklerden biri.

Heroku Nedir?

Heroku, bir bulut bilişim (cloud computing) uygulama altyapısı servis sağlayıcısıdır. Platform as a Service (PaaS) olarak ifade edebileceğimiz Heroku, JavaScript, Ruby, Java, PHP, Python, Golang, Scala ve Clojure ile geliştirdiğimiz web tabanlı uygulamalarımızı internete taşımamızı (deploy, manage ve scale) sağlar. Bu işlemler için Dyno adı verilen Linux temelli küçük ve hafif sanal ortamlar kullanılmaktadır.

Heroku ayrıca add-on desteği de sunmaktadır. Add-ons sayfasında Heroku ve diğer 3. parti geliştiriciler / servis sağlayıcılar tarafından oluşturulmuş olan ek paketlerin listesini görebilirsiniz. Örneğin, mLab MongoDB ile Node.js servisini veritabanı ile ilişkilendirebilirsiniz.

Ek olarak, uygulamaları git ve bitbucket gibi servislerde tutup, Heroku’ya entegre etmek de mümkün.

Heroku Nasıl Kullanılır?

Öncelikle, Heroku platformuna erişim için bir üyelik oluşturulması gerekmektedir. Bu işlem için Signup Heroku sayfasını kullanabilirsiniz. Hesabın oluşturulması ve giriş yapılmasının ardından Account Settings sayfasından SSH Key tanımlaması yapmamız gerekmekte. Böylelikle, Heroku CLI aracılığıyla bilgisayarımızda geliştirdiğimiz uygulamalarımızı SSH ile kolaylıkla Heroku’ya aktarabileceğiz. Öncelikle CLI kurulumunu yapalım.

Heroku CLI

Heroku’yu pek çok şekilde bilgisayarımıza indirebiliriz. Homebrew elbette bunlardan biri.
brew tap heroku/brew && brew install heroku
İndirme işleminin ardından sürüm kontrolü yaparak indirmenin sağlıklı bir şekilde gerçekleşip gerçekleşmediğini öğrenebiliriz.
heroku --version
Hata mesajı almasıysanız her şey yolunda demektir. Artık, heroku web sayfasında oluşturduğumuz üyeliğimizi CLI ile entegre etmemiz gerekiyor.
heroku login
Bu komutu uygulamamızın ardından ön tanımlı tarayıcımızda Heroku CLI Login sayfası açılacaktır. Kullanıcı bilgilerimizi doğru bir şekilde girmemizin ardından, artık CLI ile heroku kontrolünü sağlayabiliriz. Unutmadan, yükleme işleminin ardından autocomplete bildirimi alabilirsiniz. Autocomplete yapılandırması için aşağıdaki komutu uygulamanız yeterli.
heroku autocomplete
Komutun uygulanmasının ardından bash ve zsh için ayrı completion yolları iletilecektir:
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
 
zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
Zsh için son olarak şu komutu uygulayarak süreci sonlandırabiliriz.
printf "$(heroku autocomplete:script zsh)" >> ~/.zshrc; source ~/.zshrc
Örnek bir işlem için heroku auth yazıp TAB tuşuna basabilirsiniz.

Heroku SSH Key Tanımı

Heroku varsayılan olarak HTTP Git transport kullanmaktadır. Bunun yerine SSH kullanarak kodu deploy etmek için public/private bir anahtar çifti oluşturmanız gerekir. Bu keypair sayesinde kodlar güvenli ve benzersiz bir şekilde işlenir. O halde public key’imizi oluşturalım ve ardından heroku’ya ekleyelim.

ssh-keygen -t rsa
heroku keys:add

heroku keys:add komutu uygulandığında ön tanımlı olarak ~/.ssh/id_rsa.pub dosyasına bakılır. Farklı bir key kullanılmak isteniyorsa parametre olarak komuta eklemek yeterli olacaktır. Öncelikle, bilgisayarımızda yer alan, daha önceden tanımlanmış olan key’lerimizi listeleyelim.

ls -la ~/.ssh
Örneğin, heroku_rsa adında ayrıca oluşturulmuş bir key’imiz mevcut olsun. Bunu heroku’ya tanımlamak istiyorum.
heroku keys:add heroku_rsa.pub

Evet, bu işlemin ardından key heroku’ya uplad edilecek ve bir aksilik olmaması durumunda tanımlama işlemi başarıyla sonuçlandırılacaktır. Unutmadan, heroku içerisinde tanımlı olan (heroku keys:add ile import edilmiş) key’leri heroku keys ile listeleyebilirsiniz.

cat ~/.ssh/id_rsa.pub

Ek olarak, heroku keys:add yerine bilgisayarımızdaki key’i cat ile görüntüleyebilir, görüntülenen key içeriğini kopyalayıp Account sayfasında yer alan SSH Keys alanına yapıştırabiliriz. Sonuç her iki durumda da aynı olacaktır. Heroku key tanımlama işlemleri için Managing Your SSH Keys sayfasını inceleyebilirsiniz.

Heroku SSH KeyProje olarak heroku-app adına bir klasör oluşturdum. index.js içeriğinde de oldukça basit bir Express.js örneği yer almakta. İlgili dosyayı GitLab reposu üzerinden edinebilirsiniz.
git clone https://gitlab.com/ceaksan/heroku-app
Ya da adım adım ilerleyebilirsiniz.
mkdir heroku-app
yarn init -y
yarn add express --save
touch index.js
index.js içeriğimiz de şöyle:
const express = require('express')
const app = express()
 
const port = process.env.PORT || 3000
 
app.get('/', (req, res) => res.send('Merhaba Dünya!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Heroku Uygulama Deploy Etmek

Artık Heroku üzerindeki ilk alanımızı oluşturabilir ve geliştirdiğimiz uygulamayı Heroku’da oluşturulan bu app alanına deploy edebiliriz.

heroku create

Bu komutun uygulanmasının ardınan Creating app... bildirimi ile benzersiz bir id değerine sahip alanımız oluşturulacaktır. Benim aldığım dönüş greve-bastille-50035 şeklindeydi. İnternet tarayıcısının adres barına greve-bastille-50035.herokuapp.com yazdığımda, ilgili uygulama alanını görüntüleyebilirim.

Heroku App

Uygulama oluşturma işleminin ardından şöyle bir hata almış olabilirsiniz.

fatal: not a git repository (or any of the parent directories): .git
 ▸    128: Command failed: git remote
 ▸    fatal: not a git repository (or any of the parent directories): .git

Bu hatayı almamızın nedeni, ilgili projenin bir git repository olmaması. Aksi durumda, çalışma klasörü içerisinde .git dosyası yer alacak ve heroku bu dosyayı işleme alacaktı. Bu durumda, git init ile tanımlama işlemimizi gerçekleştirebiliriz.

git init
heroku git:remote -a https://git.heroku.com/greve-bastille-50035.git
git add .
git commit -am "Initial Commit."
git push heroku master

Deploy edeceğimiz projenin package.json dosyası Heroku için oldukça önemli. Diyelimki Express.js ile basit bir uygulama hazırladık. Package.json dosyasımız en temel haliyle şu şekilde olacaktır.

{
  "name": "heroku-app",
  "version": "1.0.0",
  "main": "index.js",
  "author": "Ceyhun Enki Aksan <ceaksan@dnomia.com>",
  "license": "MIT",
  "dependencies": {
    "express": "^4.17.1"
  }
}

Heroku’nun buradaki dependencies‘i biliyor olması lazım. Çünkü, app alanını bu gereksinimlere göre yapılandıracak. package.json dosyamızı biraz daha düzenleyebiliriz.

{
  "name": "heroku-app",
  "version": "1.0.0",
  "main": "index.js",
  "author": "Ceyhun Enki Aksan <ceaksan@dnomia.com>",
  "license": "MIT",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {},
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://git.heroku.com/piscine-fromage-14435.git"
  },
  "keywords": [
    "node.js",
    "express"
  ]
}

Tekrar heroku create komutunu uyguladığımızda bu kez app alanı oluşturulacak ve bize URL ve git yolları dönecektir. piscine-fromage-14435 adında oluşturulan app alanı için alınacak dönüşler şu şekildedir.

https://piscine-fromage-14435.herokuapp.com/ | https://git.heroku.com/piscine-fromage-14435.git
Verilen bu ismi değiştirebiliriz.
heroku rename [yeni-isim]

Eğer, belirttiğimiz isim daha önce oluşturulmuşsa bir hata mesajı dönecektir. Diğer durumda, isim değiştirme işlemi sorunsuz bir şekilde tamamlanacak ve bize yeni URL ve git yolu iletilecektir. Artık uygulamamızı açabiliriz.

heroku open
Evet, karşımızda “Merhaba Dünya!”. Elbette Heroku ile yapacağımız daha pek çok işlem olacak. Şimdilik temel işlemler yeterli. Daha detaylı bilgi edinmek için Heroku Devcenter‘a göz atabilirsiniz.
Ceyhun Enki Aksan

Kullanıcı Davranışları Analizi (User Behavior Analysis) ve Kullanıcı Deneyim Tasarımı (UX Design) üzerine çalışmalar yürütmekte, bu süreçte edindiğim teknik ve pratik bilgileri fayda sağlamak motivasyonuyla (afaik / as far as i know) paylaşmaktayım.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.