İlk teknik sayılabilecek makalemi ele alacağım için heyecanlı olmakla beraber yanlış, eksik anlatımım olursa da şimdiden özür dileyip konuya girmek istiyorum.

Başlarken bu makaleyi niye yazdığımı da açıklamak istiyorum. Bir internet sitesi kurmayı düşündüğümde ilk kapısını çaldığım yazılım çoğu site gibi WordPress olmuştu. Fakat belli bir süre sonra benim ihtiyaçlarıma ücretsiz cevap veren bir platform olmadığından alternatifler aramaya başladım. Birkaç tane daha CMS denedikten sonra Ghost ile bu işi halledebileceğimi düşünüp kolları sıvadım. Hali hazırda Ubuntu 18.04 ve Apache kombinasyonunu kullandığım için bu sistemler üzerine kurulum rehberi bulmak hiç de kolay olmadı. Hatta bulamadım desem de yeri. Neredeyse rehberlerin bütününe yakını NGINX ile anlatmışlardı. Benim de şimdiye kadar kurduğum tüm uygulamalar Apache ile konfigüre olduklarından değiştirmek istemedim ve bu eksiği kendi çapımda biraz azaltmak için bu rehberi hazırlamaya karar verdim. Her neyse çok uzattım, başlıyorum. :)

İlk önce Ubuntu 18.04 kurulumumuzu yapıyoruz. DigitalOcean, Google Cloud Platform veya Amazon AWS gibi servislerden bu hizmeti rahatlıkla alabilirsiniz.

ssh root@[ip adresiniz]

SSH ile bağlantımızı yapıyoruz. Sonra klasik update ve upgrade işlemlerimizi yapalım.

sudo apt update ; sudo apt -y upgrade

Gerek duyup duyabileceğimiz programların kurulumlarını yapalım şimdi de.

sudo apt install -y build-essential curl gdebi aptitude cmake net-tools software-properties-common leafpad nano gdebi git synaptic vim wget libtool-bin autoconf automake python3-setuptools sqlite3 perl dpkg-dev python3-pip python3-dev libssl-dev checkinstall make git-core python libkrb5-dev imagemagick openssl mysql-server mysql-client apache2

Ghost, NodeJS ile çalıştığı için onuda kurmamız lazım. Hemen curl ile çekelim.

sudo curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh ; sudo apt install nodejs -y

Ghost, bizim root ile çalışmamızı istemediğinden burda farklı bir kullanıcı ekleyip onun üzerinden çalışmamız gerekecek. Google Cloud kullananlar zaten muhtemelen root olmadıkları bir kullanıcı kullanıyor oldukları için bu adımları yapmalarına gerek yok. Değerli DigitalOcean tayfa takip et. :)

adduser ubuntu

Bizden istediği bilgileri dolduruyoruz. Sallasak da farketmiyor gerçi. :)

usermod -aG sudo ubuntu
su - ubuntu

Kullanıcımıza sudo yetkisi veriyoruz ve ubuntu kullanıcısına geçiyoruz.

mkdir .config ; sudo chown -R $USER:$(id -gn $USER) /home/ubuntu/.config ; npm config set unsafe-perm=true ; export npm_config_loglevel=silent

Tam olarak şunu yapıyor diyemediğim birkaç ıvır zıvır kod giriyoruz. :) Girmeyip nelerin olacağını da bana yazarsanız ben de öğrenmiş olurum.

sudo npm i npm@latest -g

NPM paketini yapılandırıyoruz.

sudo mysql_secure_installation

Ve sıra geldi MySQL'imizi yapılandırmaya. Burdan root kullanıcısı için MySQL şifremizi belirleyip basit bir kurulum yapabiliriz. Ne gelirse Enter yapıp geçiyorum. :)

sudo systemctl restart mysql ; sudo systemctl enable mysql
sudo mysql -u root -p

Ne olur ne olmaz diye Türk mantığı aç kapa yapıp MySQL'imize giriyoruz.

> SELECT user,authentication_string,plugin,host FROM mysql.user;
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'toor';
> CREATE DATABASE db;
> CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'dbpassword';
> GRANT ALL ON db.* TO 'dbuser'@'localhost';
> FLUSH PRIVILEGES;
> EXIT;

"db" adında bir veritabanı "dbuser" adlı bir kullanıcı oluşturduk ve "dbpassword" yerine de istediğimiz bir şifreyi yazarak burayı tamamladık.

Biliyorum sabırsızlandınız, artık sıra Ghost'u kurma vakti demek isterdim ama önce alan adlarımızı IP adresimizle eşleştirmemiz lazım. Benim DNS'lerim CloudFlare'ye devredilmiş olduğundan gerekli düzenlemeleri oradan yapıyorum.

Gerekli düzenlemeyi de yaptığımıza göre şimdi Ghost'u kurabiliriz.

sudo npm install -g ghost-cli@latest --silent
sudo mkdir /var/www/ghost ; cd /var/www/ghost/
sudo chown -R $USER:$(id -gn $USER) /home/ubuntu/.config ; sudo chown $USER:$USER /var/www/ghost/ ; sudo chmod 755 /var/www/ghost/
ghost install --silent

Şimdi biz bunları niye yaptık, niçin yaptık bunu izaha gerek yok, yazdık ve yaptık diyerek topu size atıyorum. :)

Gerekli bilgileri veritabanında ayarladığımız gibi giriyoruz. Blog URL kısmımıza direk enter'layıp geçebiliriz. Bunu daha sonra değiştireceğiz.

localhost 2368 portunda çalışan nurtopu bir uygulamamız oldu. Şimdi yapmamız gereken Apache Konfigürasyonlarını biraz kurcalayıp Apache'nin Proxy özelliğini kullanarak bu portu (subdomain) Alt alanadımıza aktaralım.

sudo a2enmod proxy proxy_http rewrite

Öncelikle Apache'nin proxy modüllerini aktif edelim.

sudo nano /etc/apache2/sites-available/ghostdefter.conf

Nano editörü ile oluşturduğumuz ghostdefter.conf dosyasını dolduruyoruz.

<VirtualHost *:80>
        ServerName denemeblog.baykatre.com
        ServerAdmin iletisim@baykatre.com
        ProxyPass / http://localhost:2368/
        ProxyPassReverse / http://localhost:2368/
</VirtualHost>

Dosyayı kaydedip çıktıktan sonra dosya izinlerine ufak bi ayar çekiyoruz.

sudo chmod 644 /etc/apache2/sites-available/ghostdefter.conf 

Vuruk çıkık var mı diye bakıyoruz.

sudo apache2ctl configtest

"Syntax OK" yazısını aldıysak diğer uyarılara pek takılmıyoruz. :)

Opsiyonel olarak Apache'nin hali hazırda aktif olan conf dosyalarını devre dışı bırakabiliriz. (Sadece Ghost kullanılacaksa önerilir.)

sudo a2dissite 000-default.conf 

Oluşturduğumuz ghostdefter.conf dosyasını aktif ediyoruz.

sudo a2ensite ghostdefter

Herşey düzgün giderse...

Doğru bir şekilde 2368 portunu dinlediğimizi görebiliriz.

Ve hazır olun. Ghost'umuz hazır. :)

Google'ın ve birçok firmanın çok önem verdiği ve bu önemin de haklı bir çok sebebi olmasından dolayı güvenli veri iletişimi için sitemiz için SSL sertifikası oluşturacağız.

Bu yaparken sık sık kullandığım ve hizmetlerini de çok beğendiğim Let's Encrypt organizasyonuna da buradan teşekkür etmiş olayım. :)

Let's Encrypt sertifikası tanımlayabilmek için sunucumuza ufak bi yardımcı kurmamız gerekiyor. Bunun için gerekli repo'yu ekliyoruz.

sudo add-apt-repository ppa:certbot/certbot
sudo apt update

Repo güncellemizi de yaptıktan sonra Certbot'umuzu yükleyebiliriz.

sudo apt install python-certbot-apache

Daha sonra alttaki koddaki gibi alan adı, alt alan adı için istediğiniz kadar -d koyarak uzatabilirsiniz. :)

sudo certbot --apache -d teneke.com -d www.teneke.com

Ivır zıvırı onaylıyoruz. Eğer sertifika bitiş zamanı yaklaşınca hatırlatma isterseniz mail adresinizi düzgün yazın. :)

Burda bazı HTTPS konfigürasyonlarını kendi yapması için "Redirect" olan ikinci seçeneği seçiyoruz.

Eğer böyle bir yazı aldıysanız tebrikler! SSL sertifikamızı oluşturduk.

Daha bitmedi mi dediğinizi duyar gibiyim. Aslında bitti ama düzeltmemiz gereken bit bug oluştu.

Sitenin adresi sanki "localhost:2368"miş gibi kaldı ve son kullanıcıya bu şekilde hatalı linkler üretebilir.

ls -al çekip dizinimizi de tekrar kontrol edip nano ile config dosyamızı düzenleyelim.

nano config.production.json

Sadece URL kısmımızı https ile beraber tam yazıyoruz, diğer yerler aynı kalıyor. Fakat bu sefer de sitemiz komple uçtu. Şimdi oluşturduğumuz ve Certbot tarafından ssl için güncellenen ghostdefter-le-ssl.conf dosyamıza gidiyoruz ve aşağıdaki eklemeleri yapıyoruz.

sudo nano /etc/apache2/sites-available/ghostdefter-le-ssl.conf
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"

Kaydedip kapattıktan sonra headers modunu da Apache üzerinde aktif ediyoruz.

sudo a2enmod headers

Tekrardan Syntax'ımızı kontrol edelim. OK denirse işlem tamamdır.

sudo apache2ctl configtest

Son olarak Apache'yi ve Ghost'u restart edelim.

sudo systemctl restart apache2
cd /var/www/ghost ; ghost restart

Ve sanıyorum mutlu sondayız.


Detaylı şekilde anlatmaya çalıştım, yine de hatalarımız olduğunda yazmaktan çekinmeyin. Site üzerinden bana ulaşamazsanız iletisim@baykatre.com üzerinden size dönüş sağlarım. Okuduğunuz için teşekkürler. :)