Blogging cùng Keystone.js (1) - Envinronment

Bạc xỉu

Khi nghĩ đến viết một blog cá nhân chắc hẳn nhiều bạn sẽ nghĩ ngay đến một vài platform có sẵn như wordpress, blogger, tumblr,... hoặc một vài static web generator phổ biến như jekyll (ruby), hexo (node.js), hugo (Go),... Cách đây vài ngày thì blog của mình vẫn dùng jekyll, tuy nhiên trong thời đại mà Javascript đang ăn cả thế giới thì mình quyết định chuyển sang sử dụng một framework khác sử dụng js - cụ thể là Keystone.js.

Keystone.js là gì?

Keystone.js là một open source content management system (CMS) và web framework được phát triển trên nền tảng Node.js bởi Jed Watson từ năm 2013. Framework này sử dụng web server được viết bằng Node.jsExpress.js, MongoDb cho storage back-end, chính vì vậy có vẻ đây sẽ là lựa chọn tốt cho những data-driven web kiểu CMS, forums, và thậm chí e-comerce nhờ sự đa dạng trong các data types cùa mình.

Về cơ bản thì keystone cung cấp cho người dùng một back-end đầy đủ và phần front-end đơn giản đề có thể tuỳ biến với những lựa chọn của người dùng. Hoàn toàn có thể dùng Angular.js để có một MEAN stack hoàn chỉnh, Vue.js hay React.js (MERN stack) tuỳ theo sở thích của bản thân :D

Tại sao chọn Keystone.js?

Cung cấp đầy đủ những chức năng của một CMS như Admin UI, quản lý session, gửi email, xử lý form và quan trọng nhất là các kiểu dữ liệu real world rất đa dạng, đáp ứng đầy đủ nhu cầu của người dùng.
Cá nhân mình nghĩ keystone cũng là một framework khá đơn giản và dễ hiểu cho các bạn đang muốn học các công nghệ có sử dụng đến javascript trong khi lại thoả mãn được nhu cầu viết lách của bản thân. Github của project đã có 11k stars và mình nghĩ nó là một framework wordpress-like khá ổn được viết bằng Node.js.

Ok, bắt đầu thôi nhỉ =))

Cài đặt môi trường

Keystone.js yêu cầu Node.js 0.10+ và MongoDB v2.4+, anh em nào có rồi thì không cần làm bước này.

Thanh niên nào lười có thể down về và sử dụng script cài đặt môi trường cho Ubuntu 16.04 dưới đây

echo "Installing nodejs v 8.x"
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

echo "Installing build tools"
sudo apt-get install -y build-essential

echo "Nodejs install check"
node -v

echo "Installing mongodb"
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

sudo apt-get update
sudo apt-get install -y mongodb-org

echo "Make database folder"
sudo mkdir /data
sudo mkdir /data/db

echo "Mongo install check"
mongo --version

echo "Install keystone generator"
npm install -g generator-keystone

echo "yo package"
npm install --global yo

echo "Setup complete"

Sau khi tải về, chạy file để cài môi trường trọn gói =)

chmod +x ./keystone.sh
./keystone.sh

Với anh em nào thích vọc vạch bằng tay hoặc thiếu tin tưởng gia chủ thì làm theo hướng dẫn sau

  1. Node.js v8.x
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential

Hướng dẫn cài đặt cho các hệ điều hành khác có thể xem tại document của nodejs

Kiểm tra quá trình cài đặt

node -v
  1. mongoDB v3.6
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
sudo apt-get update
sudo apt-get install -y mongodb-org

Hướng dẫn cài đặt cho các hệ điều hành khác có thể xem tại document của Mongodb Trước khi chạy có thể sẽ phải tạo folder tại /data/db cho mongo

sudo mkdir /data
sudo mkdir /data/db

Chạy thử mongo bằng lệnh

sudo service mongod start

Với bạn nào chưa quen sử dụng CLI của mongodb bạn có thể cài đặt và sử dùng một phần mềm có GUI rất đẹp và miễn phí (Mongo Compass).

  1. Keystone generator vs yeoman
npm install -g generator-keystone
npm install --global yo

Tạo Blog với Keystone

  • Sử dụng keystonejs generator (recommend)
mkdir myblog
cd myblog
yo keystone
npm install
  • Clone từ github
git clone https://github.com/JedWatson/keystone-demo.git
cd keystone-demo
npm install

Tạo file .env trong folder root của ứng dụng và thiết lập môi trường cho ứng dụng

COOKIE_SECRET={a random string to encrypt cookies}
MONGO_URI={your mongo connection uri} // can also be MONGOLAB_URI
PORT={the port to listen on} // defaults to 3000, automatically set by paas (e.g. heroku)

Chạy và tận hưởng

node keystone

Chúng ta đã có một blog cá nhân chạy trên port 3000 (http://localhost:3000) và giao diện admin tại http://localhost:3000/keystone

Có thể tham khảo thêm các hướng dẫn cơ bản về Keystone tại trang chủ

Blogging cùng Keystone.js phần 2 sẽ bàn về cấu trúc, data-flow, cách debug khi phát triển các tính năng mới cùng keystone.js. Sẽ có source code sẵn cho các bạn với một blog hoàn chỉnh với tag, categories và các thẻ meta cho search engines.

Tags: #blog #blogwithkeystones #javascript #nodejs #mongodb