Skip to content
Thuan Bui's Blog
Go back

[Wordpress → Astro] Phần 2 - Cài đặt và cấu hình Astro làm blog

Updated:

Trong bài viết [Phần 1], mình đã hướng dẫn các xuất bài viết trên WordPress và chuyển đổi thành file Markdown để sử dụng với các công cụ tạo static site. Bài viết [Phần 2] hôm nay sẽ hướng dẫn cách cài đặt Astro cùng các cấu hình cần thiết để sử dụng làm blog, thay thế cho WordPress.

1. Cài đặt Astro

Mình sẽ sử dụng theme Astro Starter Pro cho tiết kiệm thời gian phát triển.

Cài đặt bằng lệnh sau

Terminal window
npm create astro@latest -- --template devgelo-labs/astro-starter-pro

Truy cập vào thư mục vừa tạo và khởi động dev server

Terminal window
cd bldl-blog
npm run dev
> bldl-blog@0.0.1 dev
> astro dev
07:10:52 [types] Generated 0ms
07:10:53 [content] Syncing content
07:10:53 [content] Synced content
astro v5.16.8 ready in 1293 ms
┃ Local http://localhost:4321/
┃ Network use --host to expose
07:10:53 watching for file changes...

Sau đó truy cập vào địa chỉ http://localhost:4321 , nếu thấy hiện ra website nghĩa là Astro đã được cài đặt thành công.

2. Copy bài viết và ảnh vào

Mình sẽ xóa các bài viết demo đi kèm theo theme và copy bài viết của blog cùng hình ảnh đã xử lý ở Phần 1 vào thư mục tương ứng

Terminal window
rm -rf src/content/blog/*
cp ~/blog-migration/output/posts/*.md src/content/blog/
mkdir -p public/images
cp -r ~/blog-migration/output/posts/images/. public/images/

3. Cập nhật Content Schema

Sau khi copy nội dung và hình ảnh vào, site dev chắc chắn sẽ bị lỗi do một số thông số không khớp. Cần phải chỉnh lại trong file src/content.config.ts

import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
const blog = defineCollection({
loader: glob({ pattern: "**/*.{md,mdx}", base: "./src/content/blog" }),
schema: z.object({
title: z.string(),
description: z.string().optional(),
pubDatetime: z.coerce.date(),
author: z.string(),
image: z.string().optional(),
tags: z.array(z.string()).optional(),
categories: z.array(z.string()).optional(),
}),
});
export const collections = { blog };

4. Chỉnh cấu trúc thư mục để khớp URL của WordPress

Trên WordPress, các bài viết được truy cập theo slug /%postname%/ — không có /blog/ nên mình cần phải di chuyển file [...slug].astro từ thư mục blog ra ngoài

Terminal window
mv src/pages/blog/[...slug].astro src/pages/[...slug].astro

Tương tự hai thư mục category và tag cũng cần phải di dời ra ngoài để khớp với URL cũ của WordPress. Cấu trúc thư mục sau khi chỉnh sửa src/pages sẽ như sau

.
├── 404.astro
├── [...slug].astro
├── about.astro
├── blog
│ └── [...page].astro
├── category
│ └── [category].astro
├── contact.astro
├── index.astro
├── robots.txt.ts
├── rss.xml.js
└── tags
└── [tag].astro

Tiếp theo, mình sẽ dọn dẹp hết tất cả các components không sử dụng, cập nhật Header, NavBar, Footer và các thông tin liên quan cho khớp với nội dung trên blog hiện tại.

Khuyến khích bạn nên dùng Visual Studio Code và git để dễ kiểm soát thay đổi và phục hồi lại khi cần.

6. Kiểm tra trên local

Sau khi hoàn tất việc cập nhật nội dung, mình cho chạy lại dev mode để kiểm tra thành quả

Terminal window
npm run dev

Trang chủ đã hiện ra ngon lành, chưa giống 100% với trang gốc bên WordPress lắm. Vậy là tạm ổn rồi! Phần giao diện có thể tùy biến sau.

Sau đó, cũng cần kiểm tra các link của bài viết, category, tag có khớp với link bên WordPress không


Vậy là xong Giai đoạn 2: blog đã được chuyển thành công từ WordPress qua Astro. Tuy nhiên hiện tại blog vẫn đang chạy trên local, chưa được đẩy lên cloud. Trong các bài viết kế tiếp, mình sẽ chia sẻ cách lưu trữ hình ảnh trên Cloudflare R2 và đưa blog lên Cloudflare Pages.


Share this post on:

Previous Post
[Wordpress → Astro] Phần 4 - Đưa blog lên Cloudflare Workers (CI/CD)
Next Post
[Wordpress → Astro] Phần 3 - Upload ảnh lên Cloudflare R2