Kategori arşivi: Ghost

Ghost’u MySQL’den SQLite’a Taşıma

Ghost CMS kullanılarak hazırlanmış bir web sitesinde kullanılan veritabanını değiştirmek sistemin bize verdiği esneklik sayesinde çok kolay, MySQL üzerinden yedekleme işlemlerinin zorluyor olması ve bakımının uğraştırması sebebiyle SQLite geçiş yapacağız. Gelin hep birlikte nasıl yapılacağına bir göz atalım.

Ghost admin paneline bağlanıyorsunuz ve göç seçeneklerine giriş yapıyorsunuz.

ghost cms sqliteden mysql geçiş, ghost cms mysl kurulumu

“Export your content” seçeneğini seçiyorsunuz ve sitenizde yer alan ayarlar dahil bütün içeriği tek bir json dosyası olarak bilgisayarınıza indiriyorsunuz.

Config dosyanızda yer alan aşağıdaki satırları

"database": {
  "client": "mysql",
  "connection": {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "your_database_user",
    "password": "your_database_password",
    "database": "your_database_name"
  }
}

SQLite özelinde aşağıdaki satırlar ile değiştiriyorsunuz.

"database": {
  "client": "sqlite3",
  "connection": {
    "filename": "content/data/ghost.db"
  },
  "useNullAsDefault": true,
  "debug": false
}

Ardından Ghost CMS çalıştırdığınız servisi yeniden başlatmanız gerekiyor.

systemctl restart ghost

Artık sistem sıfırdan yeni bir ghost kurulumu yapılmış gibi başlayacak, burada yapmanız gereken yeni bir admin kullanıcısı oluşturmak. Ardından lab menüsüne gidin ve direk olarak “Delete all content” seçeneğini seçin, ön tanımlı gelen bütün yazıları kaldıracak.

Daha sonra tekrar lab alanından eski export ettiğiniz json dosyasını import etmeniz yeterli. Bütün içerikleriniz ve ayarlarınız eski yerlerine gelecek. Medya dosyalarını taşımadığımız içinde yerli yerinde olması gerekiyor.

Bir başka yöntem olarak isteyen arkadaşlar mysql2sqlite aracını kullanarak sql olarak aldıkları yedeği direk SQLite veritabanına dönüştürebilirler.

Ghost’u SQLite’tan MySQL’e Taşıma

Ghost CMS kullanılarak hazırlanmış bir web sitesinde kullanılan veritabanını değiştirmek sistemin bize verdiği esneklik sayesinde çok kolay, kendimi SQLite kullanırken pek fazla güvende hissetmediğim için bu göçü yapacağım. Gelin hep birlikte nasıl yapılacağına bir göz atalım.

Ghost admin paneline bağlanıyorsunuz ve göç seçeneklerine giriş yapıyorsunuz.

ghost cms sqliteden mysql geçiş, ghost cms mysl kurulumu

“Export your content” seçeneğini seçiyorsunuz ve sitenizde yer alan ayarlar dahil bütün içeriği tek bir json dosyası olarak bilgisayarınıza indiriyorsunuz. Ardından MySQL üzerinde Komut Satırı ile MySQL Kullanıcı Oluşturma makalesini kullanarak yeni bir kullanıcı ve veritabanı oluşturuyorsunuz.

Config dosyanızda yer alan aşağıdaki satırları

"database": {
  "client": "sqlite3",
  "connection": {
    "filename": "content/data/ghost.db"
  },
  "useNullAsDefault": true,
  "debug": false
}

MySQL özelinde aşağıdaki satırlar ile değiştiriyorsunuz.

"database": {
  "client": "mysql",
  "connection": {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "your_database_user",
    "password": "your_database_password",
    "database": "your_database_name"
  }
}

Ardından Ghost CMS çalıştırdığınız servisi yeniden başlatmanız gerekiyor.

systemctl restart ghost

Artık sistem sıfırdan yeni bir ghost kurulumu yapılmış gibi başlayacak, burada yapmanız gereken yeni bir admin kullanıcısı oluşturmak. Ardından lab menüsüne gidin ve direk olarak “Delete all content” seçeneğini seçin, ön tanımlı gelen bütün yazıları kaldıracak.

Daha sonra tekrar lab alanından eski export ettiğiniz json dosyasını import etmeniz yeterli. Bütün içerikleriniz ve ayarlarınız eski yerlerine gelecek. Medya dosyalarını taşımadığımız içinde yerli yerinde olması gerekiyor. Yeni sunucuya kuracaksanız o zaman iş değişir.

Centos 7 Üzerine Ghost CMS Kurulumu

Ghost oldukça hızlı ve açık kaynak kodlu bir içerik yönetim sistemidir. Ghost tamamen ölçeklendirilebilir, ayrıca birçok temada mevcuttur.

Yakın zamanda da ben Jekyll den direk olarak Ghost CMS geçiş kararı aldım. ve bende centos üzerinde kullanmaktayım.

Öncelikle Ghostu kurmamız gerekiyor. Ghostun önerilen kurulum yeri olan /var/www/ghost dizinine yerleştireceğiz. Ama bundan hemen önce sistemimizin güncel olduğundan ve aşağıdaki paketlerin kurulu olduğundan emin oluyoruz. Aksi durumda yüklüyoruz.

yum update -y
yum install epel-release -y
yum update -y
yum install nano nginx -y

Bu aşamada kuracaklarımız var şimdi direk olarak aşağıdaki komutları geçiyoruz.

yum install nodejs

ardından gerekli olan yolu ve önerilen alana gerekli dosyaları kurma zamanı bunun için internet üzerindeki tüm makalelerde geçenleri yapmamıza gerek yok zaten eski sürümde kaldı tüm bunlar bunun dışında yenilerinde mümkünse CLI yükleme aracını kullanacağız.

Dizini oluşturuyoruz.

mkdir -p /var/www/ghost

belirttiğimiz /var/www/ghost yoluna geçiş yapıyoruz. Ghost, bu işlemler tamamlandıktan sonra işlem biter, ancak Ghost’u başlatmak için kurmamız gerekir.

Dizine geçiş yapıyoruz.

cd /var/www/ghost

Aşağıdaki paketi sisteme dahil ediyoruz.

npm i -g ghost-cli

Normal şartlar altında config.example.js dosyasını config.js yaparak devam ediyorsunuz. Ancak biz en son stable sürümü çekeceğimiz için onda bu şekilde bir ayarlama yapmamız söz konusu değil

Yeni sürümde herşey json üzerinden yürüyor. ama biz kurulumu local olarak yapacağız bunun içinde aşağıdaki komut ile kurulumu tamamlayacağız

ghost install local

Kurulum tamamlandıktan sonra sisteminiz hazır URL bilgileriniz şunlar diyeyek. Ancak biz direk olarak haliyle oraya sunucuda olduğumuz için ulaşamayacağız.

Ulaşmak için ise nginx amcamız aracılığı ile proxy yapmamız gerekecek bunun içinde kurduğumuz nginx ayarlarını /etc/nginx/conf.d yoluna yeni bir conf dosyası düzenleyerek yapacağız ve içerisine aşağıdakileri ekleyeceğiz

server {
    listen 80;
    server_name 192.168.86.131;
    location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass         ;
    }
}

Ardından nginx yeniden başlattığımızda Ghost CMS ekranını göreceksiniz.

nginx -s reload

Bunlar ile uğraşmak istemezseniz şu şekilde birde betiğimiz bulunuyor.

#!/bin/bash
#
#
# v1.0  Frederik Niedernolte 
# https://www.peleke.de/ghost-1-0-aktualisierung-bei-uberspace/
# First Release
#
#
#
# v1.1 Mertcan GOKGOZ
# https://mertcangokgoz.com/centos-7-uzerine-ghost-cms-kurulumu/
# Translate English
#
#

set -e

GHOSTDIR=~/node_apps/ghost
PACKAGE_VERSION_OLD=$(sed -nE 's/^s*"version": "(.*?)",$/1/p' $GHOSTDIR/package.json)
CURRENT_GHOST=$(curl -s https://api.github.com/repos/TryGhost/Ghost/releases | grep tag_name | head -n 1 | cut -d '"' -f 4)
CURRENT_GHOST_DOWNLOAD=$(curl -s https://api.github.com/repos/TryGhost/Ghost/releases/latest | grep browser_download_url | cut -d '"' -f 4)
CURRENT_GHOST_FILE=$(echo $CURRENT_GHOST_DOWNLOAD | sed 's:.*/::')
echo "Installed version of Ghost: $PACKAGE_VERSION_OLD"
echo " Available version of Ghost: $CURRENT_GHOST"
cd $GHOSTDIR
if [[ $CURRENT_GHOST != $PACKAGE_VERSION_OLD ]]
then
	read -r -p "Is Ghost to be updated from $PACKAGE_VERSION_OLD to $CURRENT_GHOST version  [Y/n] " response
	if [[ $response =~ ^([Yy][aA]|[yY]|"")$ ]]
	then
		read -r -p "Do you want to back up the previous instance? [Y/n] " response
		if [[ $response =~ ^([Yy][aA]|[yY]|"")$ ]]
		then
			echo "Backup of previous version under $GHOSTDIR-$(date +%F@%T) is created ..."
			cp -r $GHOSTDIR $GHOSTDIR-$(date +%F@%T)
		fi	
		echo "Ghost $CURRENT_GHOST is downloaded and unpacked ..."
		curl -LOk $CURRENT_GHOST_DOWNLOAD
		unzip $GHOSTDIR/$CURRENT_GHOST_FILE -d ghost-latest
		rm $GHOSTDIR/$CURRENT_GHOST_FILE
		rm -rf $GHOSTDIR/core
		rm -rf $GHOSTDIR/content/themes/casper
		rm $GHOSTDIR/index.js
		rm $GHOSTDIR/*.md
		rsync -a --remove-source-files $GHOSTDIR/ghost-latest/* $GHOSTDIR
		rm -rf $GHOSTDIR/ghost-latest
		echo "The database of Ghost is migrated to the new version ..."
		NODE_ENV=production knex-migrator migrate
		read -r -p "Clear cache before Ghost update? [y/N] " response
		if [[ $response =~ ^([Yy][aA]|[yY])$ ]]
		then
			echo "Cache is cleared and Ghost is then updated"
					rm -rf $GHOSTDIR/node_modules && npm cache clear && npm install --python="/usr/local/bin/python2.7" --production
		else
			echo "Ghost is now updated ..."
					npm install --python="/usr/local/bin/python2.7" --production
		fi
		svc -du ~/service/ghost
		PACKAGE_VERSION=$(sed -nE 's/^s*"version": "(.*?)",$/1/p' $GHOSTDIR/package.json)
		echo "Ghost has been updated from version $PACKAGE_VERSION_OLD to version $PACKAGE_VERSION and is restarted. This may take a few seconds ..."
		echo "Check the logfile for errors: 'tail -F ~ /service/ghost/log/main/current'"
	else
		echo "-> Ghost is not updated"
	fi
else
	echo "-> Ghost is already up to date, no update is necessary"
fi