Cách cài đặt và tạo blog với Hexo trên Ubuntu 20.04

theanh

Administrator
Nhân viên
Hexo là một framework viết blog tĩnh được xây dựng trên Node.js. Hexo cho phép bạn viết bài đăng ở định dạng Markdown. Các bài đăng trên blog này được xử lý và chuyển đổi thành các tệp HTML tĩnh bằng các chủ đề được xác định trước.

Hexo khác với phần mềm viết blog thông thường như WordPress vì nó tạo ra các tệp tĩnh. WordPress tải blog động bằng cách chạy mã PHP mỗi khi bạn tải lại trang web, khiến trang web dễ bị tấn công.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Hexo và sử dụng nó để tạo blog trên máy chủ chạy Ubuntu 20.04.

Điều kiện tiên quyết​


  1. Máy chủ chạy Ubuntu 20.04 với người dùng không phải root có quyền sudo.

  2. Cần cài đặt Git. Nếu bạn không cài đặt git, bạn có thể thực hiện thông qua các lệnh sau.
    Mã:
    $ sudo apt install git$ git config --global user.name "Tên của bạn"$ git config --global user.email "[emailprotected]"

  3. Một tài khoản trên Github.

Cấu hình Tường lửa​

Ubuntu 20.04 đi kèm với Tường lửa đơn giản (UFW) theo mặc định. Trong trường hợp không có, hãy cài đặt trước.
Mã:
$ sudo apt install ufw
Bật cổng SSH.
Mã:
$ sudo ufw allow "OpenSSH"
Bật tường lửa.
Mã:
$ sudo ufw enable
Bật cổng 4000 được máy chủ Hexo sử dụng.
Mã:
$ sudo ufw allow 4000
Ngoài ra, hãy mở các cổng HTTP và HTTPS mà chúng ta sẽ cần sau.
Mã:
$ sudo ufw allow http$ sudo ufw allow https
Kiểm tra trạng thái tường lửa.
Mã:
$ sudo ufw statusTrạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere4000 ALLOW Anywhere443/tcp ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)4000 (v6) ALLOW Anywhere (v6)443/tcp (v6) ALLOW Anywhere (v6)

Cài đặt Node.js​

Vì Hexo dựa trên Node.js, trước tiên bạn cần cài đặt nó.

Chạy lệnh sau để thêm Node.js Repository.
Mã:
$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
Cài đặt Node.js.
Mã:
$ sudo apt-get install nodejs
Xác nhận xem nó đã được cài đặt đúng cách chưa.
Mã:
$ node --versionv14.15.0

Cài đặt Hexo​

Chạy lệnh sau để cài đặt gói Hexo.
Mã:
$ sudo npm install hexo-cli -g
Tham số -g cài đặt gói hexo-cli trên toàn cầu, cho phép bạn cài đặt blog Hexo trong bất kỳ thư mục nào bạn chọn.

Tạo thư mục để cài đặt Hexo.
Mã:
$ sudo mkdir -p /var/www/hexo
Thiết lập các quyền và quyền sở hữu cần thiết.
Mã:
$ sudo chown -R $USER:$USER /var/www/hexo$ sudo chmod -R 755 /var/www/hexo
Tiếp theo, bạn cần khởi tạo và thiết lập các tệp cần thiết cho blog Hexo. Để thực hiện điều đó, hãy chuyển đến thư mục bạn vừa tạo.
Mã:
$ cd /var/www/hexo
Khởi tạo blog Hexo.
Mã:
$ hexo initTHÔNG TIN Sao chép hexo-starter https://github.com/hexojs/hexo-starter.gitTHÔNG TIN Cài đặt các phụ thuộcđã thêm 185 gói từ 430 người đóng góp và đã kiểm tra 191 gói trong 6,47 giây14 gói đang tìm kiếm nguồn tài trợ chạy `npm fund` để biết chi tiếttìm thấy 0 lỗ hổngTHÔNG TIN Bắt đầu viết blog với Hexo!
Cài đặt Hexo.
Mã:
$ npm installnpm WARN tùy chọn BỎ QUA TÙY CHỌN PHỤ THUỘC: [emailprotected] (node_modules/fsevents):npm WARN notsup BỎ QUA PHỤ THUỘC TÙY CHỌN: Nền tảng không được hỗ trợ cho [emailprotected]: muốn {"os":"darwin","arch":"any"} (hiện tại: {"os":"linux","arch":"x64"})đã thêm 5 gói từ 1 người đóng góp và đã kiểm tra 191 gói trong 1,567 giây14 gói đang tìm kiếm nguồn tài trợ chạy `npm fund` để biết chi tiếttìm thấy 0 lỗ hổng
Bây giờ bạn có thể kiểm tra cấu trúc thư mục.
Mã:
$ ls_config.yml node_modules package-lock.json package.json scaffolds source themes
Tệp _config.yml chứa cấu hình cho blog Hexo của bạn. Hầu hết các cài đặt blog có thể được thay đổi từ đây.

Thư mục node_modules chứa tất cả các gói mà Hexo cần và các gói mà nó phụ thuộc vào.

Tệp package.json chứa danh sách tất cả các gói và số phiên bản của chúng mà Hexo cần.

Tệp package-lock.json được npm tự động tạo ra mỗi khi bạn thực hiện cài đặt hoặc thay đổi gói Hexo. Tệp này chứa thông tin về các gói và phiên bản đã được cài đặt hoặc thay đổi.

Thư mục scaffolds chứa các mẫu mà các bài đăng và trang blog của bạn sẽ dựa trên.

Thư mục source chứa nội dung trang web thực tế ở định dạng HTML/CSS sau đó được xuất bản lên web. Bất kỳ thư mục hoặc tệp nào có tiền tố _(dấu gạch dưới) đều bị Hexo bỏ qua, ngoại trừ thư mục _posts. Hiện tại, thư mục đang trống vì chúng tôi chưa viết hoặc xuất bản bất kỳ nội dung nào.

Thư mục themes chứa các chủ đề Blog của bạn.

Cấu hình Hexo​

Mở tệp _config.yml để chỉnh sửa.
Mã:
$ nano _config.yml
Kiểm tra phần của tệp có tiêu đề Site
Mã:
# Cấu hình Hexo## Tài liệu: https://hexo.io/docs/configuration.html## Nguồn: https://github.com/hexojs/hexo/# Sitetitle: Hexosubtitle: ''description: ''keywords:author: John Doelanguage: entimezone: ''
Các tùy chọn khá dễ hiểu. Đổi tên trang web của bạn, đặt phụ đề nếu bạn thích. Thêm mô tả về trang web của bạn và một số từ khóa để mô tả trang web đó. Đổi tên tác giả và múi giờ cho trang web của bạn.

Tiếp theo, hãy kiểm tra phần URL của tệp.
Mã:
# URL## Nếu trang web của bạn được đặt trong thư mục con, hãy đặt url là 'http://example.com/child' và root là '/child/'url: http://example.comroot: /permalink: :year/:month/:day/:title/permalink_defaults:pretty_urls: trailing_index: true # Đặt thành false để xóa 'index.html' theo sau khỏi liên kết cố định trailing_html: true # Đặt thành false để xóa '.html' theo sau khỏi liên kết cố định
Đổi URL của trang web thành tên miền của bạn. Hãy đảm bảo bạn sử dụng HTTPS trong URL của mình vì chúng ta sẽ cài đặt SSL sau.

Nếu bạn không muốn URL trang web của mình hiển thị index.html ở cuối mỗi trang, bạn có thể thay đổi cả hai tùy chọn trailing_indextrailing_html thành false.

Bạn nên bật thêm một vài cài đặt nữa.

Thay đổi giá trị của biến default_layout từ post thành draft. Thao tác này sẽ tạo các bài đăng mới dưới dạng bản nháp nên bạn sẽ cần phải xuất bản chúng trước khi chúng xuất hiện trên blog.

Thay đổi giá trị của biến post_asset_folder thành true. Điều này sẽ cho phép bạn có các thư mục hình ảnh riêng cho mỗi bài đăng thay vì một thư mục hình ảnh duy nhất cho tất cả các bài đăng.

Lưu tệp bằng cách nhấn Ctrl+X và nhập Y khi được nhắc.

Cài đặt chủ đề​

Hexo đi kèm với một chủ đề mặc định có tên là Landscape. Bạn có thể chuyển sang một chủ đề khác bằng cách cài đặt một chủ đề Hexo khác có sẵn từ trang Chủ đề của chủ đề đó.

Tất cả các chủ đề Hexo đều có sẵn qua Github nên bạn cần sao chép kho lưu trữ Github của chủ đề đó.

Đối với hướng dẫn của chúng tôi, chúng tôi đang cài đặt Chủ đề tiếp theo. Chuyển đến thư mục Hexo và Sao chép kho lưu trữ Github của chủ đề vào thư mục themes.
Mã:
$ cd /var/www/hexo$ git clone https://github.com/theme-next/hexo-theme-next themes/next
Thay đổi tệp /var/www/hexo/_config.yml để thay đổi chủ đề từ Landscape thành Next.
Mã:
$ nano _config.yml
Thực hiện thay đổi đối với biến chủ đề để chuyển đổi chủ đề.
Mã:
# Tiện ích mở rộng## Plugin: https://hexo.io/plugins/## Chủ đề: https://hexo.io/themes/theme: next
Bạn có thể thay đổi cài đặt chủ đề bằng cách sửa đổi /var/www/hexo/themes/next/_config.yml tệp.

Tạo và xuất bản bài đăng​

Đã đến lúc tạo bài đăng đầu tiên của chúng ta.
Mã:
$ hexo new first-postINFO Đang xác thực cấu hìnhINFO Đã tạo: /var/www/hexo/source/_drafts/first-post.md
Mở bài đăng mới để chỉnh sửa.
Mã:
$ nano ./source/_drafts/first-post.md
Mỗi bài đăng cần thiết lập front-matter. Front-matter là một khối JSON hoặc YAML ngắn cấu hình các chi tiết cần thiết như tiêu đề bài đăng, ngày xuất bản, danh mục, thẻ, v.v. Thay thế dữ liệu mặc định bằng các tùy chọn chính xác.
Mã:
title: Bài đăng đầu tiên của Howtoforgetags: - testcategories: - Hexocomments: truedate: 2020-11-14 00:00:00---## Markdown sẽ nằm ở đây.**Đây là bài đăng đầu tiên của chúng tôi!**
Nếu bạn muốn chèn hình ảnh vào bài đăng của mình, hãy thêm mã sau vào bài đăng.
Mã:
{% asset_img "example.jpg" "Đây là hình ảnh ví dụ" %}
Sau đó, sao chép tệp example.jpg vào thư mục \source\_posts\first-post, đây là nơi lưu trữ tất cả hình ảnh cho bài đăng đầu tiên của bạn.

Lưu tệp bằng cách nhấn Ctrl+X và nhập Y khi được nhắc sau khi bạn viết xong bài đăng.

Tiếp theo, hãy xuất bản bài đăng.
Mã:
$ hexo publish first-postINFO Đang xác thực cấu hìnhINFO Đã xuất bản: /var/www/hexo/source/_posts/first-post.md
Bài đăng này sẽ là có thể nhìn thấy khi chúng tôi lưu trữ blog.

Cài đặt Plugin​

Hexo có hàng trăm plugin mà bạn có thể cài đặt. Bạn có thể cài đặt một hoặc nhiều plugin tùy thuộc vào cách sử dụng của bạn.

Tất cả các plugin Hexo đều là các gói Node.js và được lưu trữ trên Github, nơi bạn có thể tìm thấy thông tin chi tiết về cài đặt và cấu hình của chúng.

Đối với hướng dẫn của chúng tôi, chúng tôi sẽ cài đặt plugin hexo-filter-nofollow.

Trước tiên, hãy đảm bảo rằng bạn đang ở trong thư mục hexo, sau đó cài đặt plugin.
Mã:
$ cd /var/www/hexo$ npm i hexo-filter-nofollow --save
Mở tệp cấu hình Hexo để chỉnh sửa.
Mã:
$ sudo nano _config.yml
Dán mã sau vào cuối tệp.
Mã:
nofollow: enable: true field: site exclude: - 'exclude1.com' - 'exclude2.com'
Tùy chọn enable bật Plugin. Tùy chọn field xác định phạm vi của plugin trong đó site thêm thuộc tính nofollow vào các liên kết ngoài trên toàn bộ trang web và post chỉ thêm thuộc tính nofollow vào các liên kết trong bài đăng. Tùy chọn exclude đưa các tên miền vào danh sách trắng mà thuộc tính nofollow sẽ không được thêm vào.

Máy chủ thử nghiệm​

Hexo đi kèm với một máy chủ web cơ bản. Bây giờ bài đăng của chúng tôi đã được xuất bản, đã đến lúc khởi động máy chủ thử nghiệm Hexo.
Mã:
$ hexo server
Bây giờ bạn có thể khởi chạy URL http://yourserverIP:4000 trong trình duyệt của mình và bạn sẽ thấy trang sau.



Thoát khỏi máy chủ bằng cách nhấn Ctrl + C tại thiết bị đầu cuối.

Tạo tệp tĩnh Hexo​

Máy chủ thử nghiệm của Hexo có thể phục vụ blog động cũng như thông qua các tệp tĩnh. Lệnh trên đã phục vụ blog động.

Có một số cách để phục vụ blog Hexo công khai. Đối với hướng dẫn này, chúng ta sẽ phục vụ các tệp tĩnh của Hexo bằng máy chủ Nginx.

Chạy lệnh sau để tạo các tệp tĩnh.
Mã:
$ hexo generate
Lệnh trên tạo các tệp tĩnh được lưu trữ trong thư mục /var/www/hexo/public. Chúng ta sẽ sử dụng máy chủ Nginx để phục vụ các tệp từ thư mục này.

Cài đặt và cấu hình Nginx​

Cài đặt máy chủ Nginx.
Mã:
$ sudo apt install nginx
Tạo và mở tệp cấu hình Hexo cho Nginx.
Mã:
$ sudo nano /etc/nginx/sites-available/hexo.conf
Dán mã sau vào đó.
Mã:
máy chủ { server_name hexo.example.com; root /var/www/hexo/public; index index.html index.htm; lắng nghe 443 ssl http2; lắng nghe [::]:443 ssl http2; ssl_certificate /etc/letsencrypt/live/hexo.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hexo.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_session_timeout 1 ngày; ssl_session_cache shared:MozSSL:10m; # khoảng 40000 phiên ssl_session_tickets tắt; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES25> ssl_prefer_server_ciphers tắt; ssl_dhparam /etc/ssl/certs/dhparam.pem; vị trí / { try_files $uri $uri/ =404; }}máy chủ { nếu ($host = hexo.example.com) { trả về 301 https://$host$request_uri; } tên máy chủ hexo.example.com; lắng nghe 80; lắng nghe [::]:80; trả về 404;}
Lưu tệp bằng cách nhấn Ctrl+X và nhập Y khi được nhắc.

Kích hoạt cấu hình.
Mã:
$ sudo ln -s /etc/nginx/sites-available/hexo.conf /etc/nginx/sites-enabled/
Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Dán dòng sau trước dòng include /etc/nginx/conf.d/*.conf
Mã:
server_names_hash_bucket_size 64;
Thay đổi giá trị của biến types_hash_max_size từ 2048 đến 4096.
Mã:
types_hash_max_size 4096;
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Kiểm tra để đảm bảo không có lỗi cú pháp nào trong cấu hình của bạn.
Mã:
$ sudo nginx -t
Nếu không có vấn đề gì, hãy khởi động lại máy chủ Nginx.
Mã:
$ sudo systemctl restart nginx

Cài đặt SSL​

Đã đến lúc cài đặt SSL bằng dịch vụ Let's Encrypt cho blog hexo của chúng ta.

Để thực hiện, hãy cài đặt Certbot.
Mã:
$ sudo apt install certbot
Dừng Nginx vì nó sẽ can thiệp vào quá trình Certbot.
Mã:
$ sudo systemctl stop nginx
Tạo chứng chỉ. Chúng ta cũng cần tạo chứng chỉ DHParams.
Mã:
$ sudo certbot certonly --standalone -d hexo.yourdomain.com --preferred-challenges http --agree-tos -n -m [emailprotected] --keep-until-expiring$ sudo systemctl start nginx$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Chúng ta cũng cần thiết lập một tác vụ cron để tự động gia hạn SSL. Để mở trình soạn thảo crontab, hãy chạy lệnh sau.
Mã:
$ sudo crontab -eno crontab for root - using an empty oneChọn một trình soạn thảo. Để thay đổi sau, hãy chạy 'select-editor'. 1. /bin/nano
 
Back
Bên trên