Ghost node.js tabanlı open-source harika bir blog sistemi. Default olarak markdown desteklediği için özellikle yazılımcılara inanılmaz bir Wordpress ve Blogger alternatifi.

Bir tane VPS sunucum var. Zaten ona node.js kurmak çok kolay. Öyle yapıp blogumu oraya taşımayı düşünüyordum. Sonra dedim ki blog ayrı yerde dursun. Zaten blog bedava sınırını aşmaz, kur gitsin Heroku üzerine.

Bununla ilgili zaten İngilizce çok kaynak var (bkz.). Bu konuda Türkçe bir kaynak olsun istedim.

Kurulum

  • Eğer Heroku üyesi hala olmadıysanız bu link ile üye olunuz.
  • Heroku Toolbelt indirin ve kurun. Heroku deployment işlemi git ve ssh kullanıyor. Bu yüzden aşağıdaki komut size şifresiz giriş için hangi ssh key kullanacağınızı soruyor. Eğer ssh anahtarınız yoksa bu işlemler öncesinde SSH anahtarı edinmeniz gerekiyor. (SSH anahtarı almak için GitHub klavuzu)
  • Terminalinizi açın ve şunu yazın
heroku login  
  • Heroku kullanıcı adı ve şifrenizle giriş yapın.
  • Ghost.org'a gidin ve Ghost'u bilgisayarınıza indirin.
  • Eğer bilgisayarınızda hala yoksa git kurun.
  • node.js indirin ve kurun
wget http://nodejs.org/dist/node-latest.tar.gz  
tar -zxvf node-latest.tar.gz  
cd [version of node that was downloaded]  
./configure
make  
sudo make install  
  • Ghost'u yükleyin. (npm install komutu sudo yetkisi isteyebilir.)
cd /path/to/ghost/folder/  
npm install --production  
  • Daha sonra lokalde Ghost'u başlatın ve her şeyin çalıştığından emin olun:
npm start --production  
  • Şimdi Ghost'u konfigüre ederek SQLite3 yerine PostgreSQL kullanmasını sağlayacağız. İlk olarak package.json dosyasını düzenleyerek yeni bir dependency ekleyeceğiz:
sudo vi package.json  

ile dosyayı açtıktan sonra şu satırı ekleyin:

"pg": "latest",  
  • Bir sonraki konfigürasyon ile Heroku'ya Ghost'u nasıl başlatacağını söyleyeceğiz. Bunu Procfile ile yapıyoruz. Lokal Ghost klasöründe Procfile isminde bir text dosyasını oluşturun:
sudo vi Procfile  

ve aşağıdaki satırı ekleyip kaydedin.

web: node index.js --production  
  • Şimdi Ghost klasörümünüzü bir git repository'sine çevireceğiz. Aşağıdaki komutları çalıştırın. Gerekirse zor kullanın. (sudo vb.)
git init  
git add .  
git commit -m "Committing all Ghost files"  
  • Artık lokal bir git repository'sine sahipsiniz. Şimdi ise bir Heroku uygulaması oluşturup git'e nereye göndermesi gerektiğini belirteceksiniz.
heroku create  

Bu komut yeni bir Heroku uygulaması açıyor ve web arayüzünden görüp konfigüre edebiliyorsunuz. Ayrıca dosyaların gönderilebilmesi için yeni bir git remote oluşturuyor. Git remote kurulumunu şu komut ile onaylayabilirsiniz: git remote -v

heroku    git@heroku.com:shrouded-citadel-1873.git (fetch)  
heroku    git@heroku.com:shrouded-citadel-1873.git (push)  
  • Şimdi Heroku uygulamamıza PostgreSQL veritabanı ekleyeceğiz:
heroku addons:add heroku-postgresql:dev  
  • Bu komut "Attached as HEROKU_POSTGRESQL_JADE_URL" gibi bir çıktı vermeli. Burda yazan rengi aklınızda tutun ve bir sonraki satırda JADE yazan yere yazın.
heroku pg:promote HEROKU_POSTGRESQL_JADE  
  • Şimdi dosyaları Heroku'ya göndermeden önce Ghost konfigürasyonlarını değiştirelim. Uygulama her başladığında Heroku dinamik bir port verir. Ghost'un config.js dosyası bu portun her zaman aynı olduğunu zanneder fakat bu Heroku için yanlıştır. Bunun için Heroku'nun atadığı process.env.PORT ortam değişkenini kullanacağız.
  • Konfig dosyasını düzenleyin:
sudo vi config.js  
  • Port ayarını yapın:
host: '127.0.0.1',  
port: '2368'  

kısmını aşağıdaki gibi değiştirin.

host: '0.0.0.0',  
port: process.env.PORT  
  • Hazır buradayken kendinize bir hatırlatma olması için fileStorage: false satırını ekleyin. Bunun sebebi Heroku'nun periodik olarak resimleri silmesi. Bu siz post yazarken resim yükleme seçeneğini kaldıracak. URL vererek dışarıdan resim yüklemek zorunda olacaksınız.
  • Şimdi heroku.com a giderek kullandığımız veritabanını değiştireceğiz.

  • Yeni oluşturulan veritabanında "Add-ons" linkini tıklayın. Burdaki bilgileri bir sonraki aşamada kullanacağız.

  • Konfigürasyon dosyasında database kısmını bulun ve bilgileri aşağıdaki gibi değiştirin. host, user, password ve database değerleri değişecek.

database: {  
    client: 'postgres',
    connection: {
          host: 'database address',
          user: 'username',
          password: 'password',
          database: 'databasename',
          port: '5432'
    }
  • Yeni dosyalar ürettiğimiz için bunları git commit yapmamız gerekiyor.
git add .  
git commit -m 'your commit message'  
  • Şimdi artık dosyaları gönderebiliriz:
git push heroku master  
  • Bu işlem yaklaşık 1 dakika alacak. Lokaldeki tüm dosyaları Heroku'ya taşıyacak. Bittiğinde bağlanabilmeniz için bir URL ekrana yazacaktır.

Güvenlik

Database şifrelerini konfigürasyon dosyasında saklamayı engellemek için Heroku sistem değişkenlerini kullanabiliriz. Bunun için config.js dosyasını şu şekilde değiştirin.

database: {  
    client: 'postgres',
    connection: {
          host: process.env.POSTGRES_HOST,
          user: process.env.POSTGRES_USER,
          password: process.env.POSTGRES_PASSWORD,
          database: process.env.POSTGRES_DATABASE,
          port: '5432'
    }

Şimdi ise Heroku da bu değişkenleri tanımlamamız gerekiyor. Bunu şu şekilde yapabiliyoruz. Tabiki host, user gibi gerekli değerleri Heroku web sitesinden almalısınız.

heroku config:set POSTGRES_HOST=host  
heroku config:set POSTGRES_USER=user  
heroku config:set POSTGRES_PASSWORD=password  
heroku config:set POSTGRES_DATABASE=database  

Heroku değişkenlerini kullanmak kodu açık kaynak bir repoya koyduğunuzda işinize yarayacaktır.

Olası Sorunlar

Ghost'a bağlanamıyorsanız heroku ps yazarak çalıştığından yada çöktüğünden emin olun. Eğer çökmüş ise Heroku loglarına giderek soruna bakın.

Eğergit push heroku master komutuyla şu hatayı alıyorsanız:

Permission denied (publickey).  
fatal: The remote end hung up unexpectedly  

SSH anahtarınız Heroku Toolset ile gönderilememiş demektir. Anahtarınızı Heroku ya göndermelisiniz. Anahtar lokasyonunu düzelterek şu komutu çalıştırın:

heroku keys:add ~/.ssh/id_rsa.pub