تعلم كيف تنشئ مدونة باستخدام Ghost و Nginx على Ubuntu


طريف

Ghost هي منصة تدوين حرّة ومفتوحة المصدر تتميّز بخفتها (~7.5MB)، سهولة استخدامها، قابليتها العاليّة للتخصيص، بالإضافة إلى توفّر العديد من السِمات themes لها عبر الإنترنت مجانًا أو بشكل مدفوع. 

ghost-nginx-ubuntu.thumb.png.fcb5c371cbf
في هذا الدرس سوف نشرح خطوات تركيب وإعداد منصة Ghost على نظام Ubuntu 14.04، بالإضافة إلى إعداد خادوم Nginx لمنافذ البروكسي proxy ports، وكذلك تركيب حزمة forever للمحافظة على تشغيل Ghost في الخلفية.

المتطلبات

لا يشترط Ghost توفّر أي حد أدنى من المساحة على الخادوم، لكن خُذ بعين الاعتبار عدد الزوار المتوقعين لمدوّنتك وكمّ المحتوى الذي ترغب بمشاركته لتتمكّن من تقدير المساحة المناسبة عند الإنشاء. في هذا الدرس ولغرضٍ تعليمي فقط سوف نختار أقلّ مساحة ممكنة. 
قبل البدء نحن نحتاج ما يلي: 

  • نظام Ubuntu 14.04 على خادومك. 
  • عنوان نطاق مُسجّل ومربوط مع الـ IP الخاص بخادومك. 
  • مستخدم عادي non-root مع صلاحيات الجذر، والذي سوف نستخدمه لتنفيذ جميع الأوامر المذكورة هنا، وفي حال كان الأمر يحتاج إلى صلاحيات الجذر فسنستخدم sudo.

الخطوة الأولى: تركيب Node.js و Npm

في البداية نحن بحاجة إلى تحديث فهارس مدير الحزم وتركيب كلًا من zip و wget حيث سنحتاجهما لاحقًا أثناء الدرس. 

sudo apt-get update 
sudo aptitude install zip wget 

يتطّلب Ghost تركيب Node.js v0.10.x (آخر إصدار مستقل)، فالإصدار غير المستقر (v0.12.x) ليس مدعومًا بعد. يوصي موقع Ghost.org تحديدًا بكلًا من Node.js v0.10.36 و npm v2.5.0. 
يمكنك تركيب Node.js باستخدام PPA على Ubuntu [من هذا الدرس][1]. 
عند الانتهاء من تثبيت Node.js، تحقّق من رقم الإصدار عبر تشغيل: 

node -v 

يُفترض أن يكون الخرج مشابهًا لهذا: 

v0.10.38 

تحقّق أيضًا من وجود npm: 

npm -v 

إذا كانت مثبّتة فهذا سيُعيد لك رقم الإصدار: 

1.4.28 

في غير ذلك ستظهر أمامك رسالة خطأ. عندها يمكنك تركيب npm بهذا الأمر: 

sudo apt-get install npm 

ثم حدّث إصدار npm إلى الرقم 2.5.0 بتشغيل الأمر: 

sudo npm install npm@2.5.0 -g 

تحقّق مجددًا من الإصدار المُثبّت: 

npm -v 

يُفترض أن يكون الخرج كهذا: 
 

2.5.0

الخطوة الثانية: تركيب Ghost

يتوجب علينا الآن تركيب Ghost، مُتبعين نصيحة موقع Ghost.org بتثبيت المنصّة على المسارvar/www/ghost/
بدايةً سنُنشئ الدليل var/www/ ثم سنحصل على أحدث إصدار من Ghost من خلال مستودع GitHub الخاص بهم: 

sudo mkdir -p /var/www 
cd /var/www/ 
sudo wget https://ghost.org/zip/ghost-latest.zip 

هكذا نكون قد حصلنا على الإصدار الأخير لـ Ghost، وعلينا الآن فكّ الضغط عن الحزمة والانتقال إلى الدليل /var/www/ghost/: 

sudo unzip -d ghost ghost-latest.zip 
cd ghost/ 

بقي علينا أخيرًا تركيب بعض الاعتماديات اللازمة للمنصّة: 

sudo npm install --production 

هكذا نكون قد أنهينا عملية تركيب Ghost. لننتقل الآن إلى إعداد المنصّة قبل البدء بتشغيلها.

الخطوة الثالثة: إعداد Ghost

ملف الضبط الخاص بمنصة Ghost يجب أن يكون على المسار التالي var/www/ghost/config.js/ إلا أنّه وعند التركيب لن يكون هناك ملف بهذا الاسم، وعوضًا عن ذلك سنجد الملف config.example.js
أنشئ نسخة من الملف config.example.js باسم config.js ضمن نفس المجلد عبر الأمر cp لاستخدامه في كتابة الإعدادات الخاصة بك. 

sudo cp config.example.js config.js 

من أهم المعلومات التي نحتاج إلى تعديلها في الملف السابق هو الرابط URL وإعدادات البريد أسفل القسم production. في غير ذلك سيأخذك الرابط إلى الصفحة الافتراضية للمدوّنة http://my-ghost-blog.com. وعلى الرغم من أنه يمكن تشغيل Ghost بدون ضبط إعدادات البريد إلا أنه لا يُنصح بذلك، فعلى سبيل المثال يُرسل Ghost كلمة مرور مُستخدم المدوّنة إلى هذا البريد في حال نسيانها. 
حرّر الملف بإحدى الأدوات التي تُفضّل: 

sudo nano config.js 

عليك أولًا تغيير قيمة url إلى عنوان نطاقك (أو استخدم رقم IP الخاص بخادومك في حال لم ترغب باستعمال عنوان النطاق حاليًا). انتبه إلى الصياغة الصحيحة لعنوان الرابط بحيث تشبه http://example.com أو http://45.55.76.126 وإلا فإن Ghost لن يعمل. 
قم أيضًا بتغيير قيمة host ضمن قسم server إلى 0.0.0.0. 
يُظهر الملف التالي النموذج المُعدّل الخاص بالدرس:

 var path = require(‘path’), config; config = { // ### Production // When running Ghost in the wild, use the production environment // Configure your URL and mail settings here production: { url: ‘http://my-ghost-blog.com’, mail: { // Your mail settings }, database: { client: ‘sqlite3’, connection: { filename: path.join(__dirname, ‘/content/data/ghost.db’) }, debug: false }, server: { // Host to be passed to node’s `net.Server#listen()` host: ‘127.0.0.1’, // Port to be passed to node’s `net.Server#listen()`, for iisnode s$ port: ‘2368’ } }, (…)

احفظ الملف واخرج من المحرّر النصيّ nano عبر الضغط على CTRL+X ثم Y واضغط Enter
تأكّد أنك لا تزال ضمن الدليل /var/www/ghost/ ثم شغّل Ghost من خلال الأمر: 

sudo npm start --production 

يُفترض أن يكون الخرج شيئًا مشابهًا لهذا:

 > ghost@0.6.4 start /var/www/ghost > node index Migrations: Database initialisation required for version 003 Migrations: Creating tables… Migrations: Creating table: posts […]

إذا كان كلّ شيء قد تمّ كما يجب؛ حينها يمكنك الوصول إلى مدونتك عبر المنفذ 2368: 
http://your_domain._name:2368 (أو http://your_servers_ip:2368). 
اضغط الآن على CTRL+C لإيقاف عمل Ghost

الخطوة الرابعة: تركيب Nginx

الخطوة التالية هي تثبيت Nginx والذي يسمح للاتصالات على المنفذ 80 أن تتمّ عبر منفذ Ghost، بعبارة أبسط يسمح لنا Nginx الوصول للمدوّنة من دون الحاجة لإضافة المنفذ 2368: 

sudo apt-get install nginx 

نحتاج الآن إلى ضبط Nginx، لننتقل أولًا إلى الدليل etc/nginx/ لحذف الملف الافتراضي etc/nginx/sites-enabled/

cd /etc/nginx/ 
sudo rm sites-enabled/default 

سنُنشئ ملف جديد في المسار /etc/nginx/sites-available/ باسم ghost ثم نحرّره باستخدام nano: 

sudo touch /etc/nginx/sites-available/ghost 
sudo nano /etc/nginx/sites-available/ghost 

الصق النصّ التالي في الملف السابق بعد تغيير المحتوى المُحدّد باللون الأحمر إلى عنوان نطاقك أو رقم الـ IP الخاص بخادومك:

 server { listen 80; server_name your_domain.tld; location / { proxy_set_header X-Real-IP remoteaddr;proxysetheaderHosthttp_host; proxy_pass http://127.0.0.1:2368; } }

سنُنشى اختصارًا لإعداداتنا في sites-enabled: 

sudo ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost 

ثم نُعيد تشغيل Nginx: 

sudo service nginx restart 

الآن سنُنشئ مستخدمًا جديدًا لأغراض أمنيّة بحيث لا يمتلك أذوات سوى على الدليل var/www/ghost/؛ ففي حال تعرّض Ghost لخطرٍ ما فإن نظامك سيظل في أمان: 

sudo adduser --shell /bin/bash --gecos 'Ghost application' ghost 

إسناد الصلاحيات المُناسبة: 

sudo chown -R ghost:ghost /var/www/ghost/ 

يمكنك الآن الولوج مستعملا المستخدم الجديد: 

su - ghost 

أخيرًا نحن بحاجة إلى إعادة تشغيل Ghost: 

cd /var/www/ghost 
npm start –production

يمكنك الآن الوصول إلى مدونتك عبر المنفذ 80 من خلال ///:http.

الخطوة الخامسة: الإبقاء على تشغيل Ghost في الخلفية

الخطوة الأخيرة هي المحافظة على تشغيل Ghost في الخلفية طوال الوقت، وسوف نستخدم لذلك الأداة forever التي تُبقي Ghost يعمل في الخلفية وتراقبه في حال انهياره بحيث تُشغّل نسخة أخرى منه من جديد. 
قم بتركيب الأداة forever بالأمر التالي ضمن مجلّد ghost /var/www/ghost، لكن أولًا عليك الخروج من المستخدم Ghost ثم الدخول بالمستخدم العادي: 

exit 
sudo npm install -g forever 

شغّل Ghost مع المستخدم ghost على أن تكون ضمن الدليل الصحيح: 

su - ghost 
cd /var/www/ghost 
forever start index.js 

يفترض أن يكون الخرج مشابهًا لهذا:

 warn: –minUptime not set. Defaulting to: 1000ms warn: –spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms info: Forever processing file: index.js

بشكل افتراضي يعمل forever ضمن وضع المطوّرين، يمكنك تعديل هذا من خلال الأمر: 

NODE_ENV=production forever start index.js 

أما إذا رغبت بإيقاف عمل forever فنفّذ الأمر الآتي ضمن دليل Ghost: 
 

forever stop index.js

أخطاء مُحتملة

إذا واجهت رسالة الخطأ التالية: 

Error: SQLITE_READONLY: attempt to write a readonly database 

شغّل forever كجذر root (اكتب exit للخروج من المستخدم الحالي أولًا): 

sudo forever start index.js 

إذا أعاد لك الأمر الأخير رسالة تفيد بعدم وجود forever استخدم الأمر مع المسار الكامل: 

sudo /usr/local/bin/forever start index.js 

إذا واجهت رسالة الخطأ التالية: 

error: Cannot start forever 
error: script /home/ghost/index.js does not exist. 

فهذا يعني أنك لست ضمن الدليل الصحيح var/www/ghost/. انتقل إليه أولًا ثم نفّذ الأمر من جديد.

الخلاصة

تهانينا. لقد تمكّنت من تثبيت Ghost وتعلّمت كيفيّة استخدام Nginx لضبط بروكسي المنافذ. كما تعلّمت كيفيّة الإبقاء على المهام تعمل ضمن الخلفية باستخدام العقدة forever.

ترجمة -وبتصرف- للمقال How To Create a Blog with Ghost and Nginx on Ubuntu 14.04 لصاحبه Hamza Shezad.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن