Skip to main content

Tự host blog Ghost đa ngôn ngữ với định tuyến thư mục con

Để hỗ trợ hai ngôn ngữ, bạn cần cài đặt 2 website Ghost trên cùng một máy chủ, mỗi website là một instance riêng cho từng ngôn ngữ.

  1. Mặc định tiếng Anh - https://domain.com
  2. Tiếng Việt - https://domain.com/vi/
  3. Tiếng Đức - https://domain.com/de/

Tùy chọn 1: Hosting với SynapsMedia (Lựa chọn tốt nhất & Đơn giản nhất)

Nếu bạn không muốn tự quản lý máy chủ phức tạp, thao tác dòng lệnh, cấu hình reverse proxy hay viết các file cấu hình, sử dụng dịch vụ hosting của SynapsMedia là lựa chọn tốt nhất.

SynapsMedia là dịch vụ hosting Ghost chuyên nghiệp, được quản lý toàn diện (managed hosting) hỗ trợ cấu hình đa ngôn ngữ dạng thư mục con (subdirectory) một cách tối ưu và chính thức.

Tại sao nên chọn SynapsMedia?

  • Managed Hosting: Họ tự động xử lý thiết lập máy chủ, bảo trì, bảo mật và cập nhật phiên bản.
  • Hỗ trợ thư mục con (Subdirectory): Dễ dàng chạy site chính tại https://domain.com và các site phụ đa ngôn ngữ như https://domain.com/vi/ hoặc https://domain.com/de/.
  • Không cần biết code: Không cần cấu hình Nginx, không cần viết file cấu hình YAML hay quản lý mã khóa SSH.
  • Hỗ trợ chuyên gia: Đội ngũ kỹ thuật hỗ trợ chuyên biệt về Ghost CMS.

Lợi ích nổi bật khi thiết lập Subdirectory trên SynapsMedia

  • Chia sẻ hạn ngạch Newsletter: Các site dưới cùng một tên miền sẽ dùng chung hạn ngạch gửi email. Ví dụ: bạn có 3 site (chạy /, /vi, /de), mỗi site có hạn ngạch 2.000 email/tháng, tổng cộng bạn có 6.000 email dùng chung. Khi gửi thư, hệ thống sẽ trừ điểm theo thứ tự: site gửi thư -> site gốc (root) -> các site phụ khác dưới cùng tên miền.
  • Dùng chung Custom Sending Domain: Các site subdirectory tự động kế thừa cấu hình tên miền gửi mail (Custom Sending Domain) từ site gốc.
  • Tiết kiệm chi phí: Áp dụng chính sách giảm giá 10% khi duy trì multi-site.
  • Không giới hạn số lượng site phụ: Bạn có thể tạo bao nhiêu site subdirectory tùy ý dưới một tên miền (Ví dụ: /vi, /de, /fr, /docs, /blog).

Cách cấu hình Subdirectory trên SynapsMedia Panel

Để cài đặt định tuyến đa ngôn ngữ trên SynapsMedia, hãy làm theo các bước đơn giản sau:

  1. Tạo các site Ghost: Đảm bảo bạn đã khởi tạo ít nhất 2 website Ghost chạy trên tài khoản SynapsMedia của mình (1 site chính và 1 site phụ cho ngôn ngữ thứ hai).
  2. Vào phần Cài đặt: Trong bảng điều khiển (Panel) của SynapsMedia, chọn trang cài đặt của website Ghost mà bạn muốn chạy dưới dạng thư mục con (site phụ).
  3. Bật Subdirectory Install: Cuộn xuống mục Domains và nhấn vào nút Enable subdirectory install.
  4. Thiết lập định tuyến:
    • Tại trường Domain, chọn tên miền chính của website Ghost gốc (site chính).
    • Tại trường đường dẫn phụ, nhập thư mục con mong muốn (ví dụ: vi hoặc de).
  5. Lưu và Khởi động: Nhấn Enable Subdirectory Install. SynapsMedia sẽ tự động cấu hình lại và khởi động lại cả hai website chỉ trong vòng một phút.
Dễ dàng cài đặt định tuyến trên Synaps Media
Dễ dàng cài đặt định tuyến trên Synaps Media

Một số quy tắc và lưu ý quan trọng

  • Trang quản trị độc lập: Các trang quản lý Admin của mỗi site hoàn toàn độc lập. Bạn truy cập trang admin của site phụ qua đường dẫn: https://domain.com/{subdir}/ghost/.
  • Cấu hình Email: Email gửi đi từ các site subdirectory sẽ dùng chung cấu hình gửi của site gốc.
  • Sitemap & Robots.txt: Sitemap của site gốc không tự động gộp các site phụ; bạn cần gửi sitemap của site phụ thủ công lên Google Search Console. Tương tự, nếu có cấu hình file robots.txt riêng cho site phụ, bạn cần cập nhật gộp thủ công vào file robots.txt của site gốc.
  • Social Web: Tính năng Social Web (kết nối mạng xã hội liên hợp qua ActivityPub) sẽ bị tắt đối với các site dạng subdirectory.

Tùy chọn 2: Triển khai Ghost đa ngôn ngữ trên Railway (Khuyên dùng cho tự host)

Hosting Ghost Multilingual on Railway

Hướng dẫn này cung cấp các bước chi tiết để triển khai hệ thống Ghost đa ngôn ngữ hoàn chỉnh trên Railway bằng cách sử dụng mẫu reverse proxy.

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

  • Một tài khoản Railway.
  • Một tên miền riêng của bạn (ví dụ: your-domain.com).
  • Ít nhất hai instance Ghost được triển khai trên Railway (mỗi instance cho một ngôn ngữ).

1. Triển khai mẫu Ghost Nginx proxy

Deploy Ghost Nginx proxy template
Thêm mới 2 instance Ghost trên Railway
  1. Nhấn nút Railway wizard bên dưới để tự động triển khai mẫu của chúng tôi trên Railway. Deploy on Railway

  2. Thêm instance Ghost đầu tiên cho blog chính của bạn.

    Add new > Search “Ghost” > Thêm mẫu Ghost

  3. Thêm instance Ghost thứ hai cho blog ngôn ngữ khác của bạn.

    Add new > Search “Ghost” > Thêm mẫu Ghost

Kết thúc bước này, bạn sẽ có 2 dịch vụ Ghost riêng biệt + 1 dịch vụ Ghost Multilingual Nginx proxy chạy trong dự án Railway của mình.

2. Cấu hình Biến môi trường

Đây là phần quan trọng nhất của quá trình thiết lập. Bạn cần cấu hình các biến để cả ba dịch vụ có thể giao tiếp với nhau.

  1. Tìm URL nội bộ (Internal URL).

    Find Your Internal Service URLs on Railway
    Internal URL nằm trong mục Private Networking

    Đầu tiên, bạn cần URL nội bộ của các dịch vụ ghostghost-fr. Trong Railway, vào tab Settings của mỗi dịch vụ Ghost.

    Dưới phần Networking, bạn sẽ tìm thấy URL riêng tư kết thúc bằng .railway.internal.

    Nó sẽ có dạng như http://ghost.railway.internal:2368.

  2. Cấu hình dịch vụ Ghost Multilingual Nginx Proxy.

    Configure the Ghost Multilingual Nginx Proxy Service
    Điền các trường thông tin bắt buộc

    SERVER_NAME: Tên miền riêng của bạn (ví dụ: your-domain.com).

    GHOST_ROOT_URL: URL nội bộ của instance Ghost chính trên Railway (ví dụ: http://ghost.railway.internal:2368).

    GHOST_INSTANCES: Đường dẫn và URL nội bộ của các instance Ghost khác (ví dụ: /fr:http://ghost-fr.railway.internal:2368).

  3. Cấu hình các Instance Ghost

    Configure the Ghost Instances
    Thiết lập url mới cho mỗi instance Ghost

    Vào phần cài đặt cho instance Ghost chính trên Railway.

    Trong tab Variables, thiết lập biến url thành tên miền công khai đầy đủ của bạn.

    Ví dụ: https://your-domain.com

    Vào phần cài đặt cho instance Ghost bổ sung (ví dụ: phiên bản tiếng Pháp).

    Trong tab Variables, thiết lập biến url thành tên miền công khai đầy đủ bao gồm đường dẫn thư mục con.

    Ví dụ: https://your-domain.com/fr/

3. Thêm Tên miền riêng

Add Custom Domain

Cuối cùng, bạn cần trỏ tên miền riêng của mình về reverse proxy.

  1. Trong cài đặt dịch vụ ghost-multilingual-reverse-proxy trên Railway, vào tab Settings.
  2. Dưới phần “Networking”, nhấn + Add Domain và nhập tên miền của bạn (ví dụ: your-domain.com).
  3. Làm theo hướng dẫn của Railway để cấu hình bản ghi CNAME với nhà cung cấp DNS của bạn.
  4. Đảm bảo tên miền trỏ về cổng dịch vụ 8080.

Sau khi hoàn thành các bước này và đợi DNS cập nhật, trang Ghost đa ngôn ngữ của bạn sẽ hoạt động.

Truy cập https://your-domain.com sẽ hiển thị blog tiếng Anh, và https://your-domain.com/fr/ sẽ hiển thị blog tiếng Pháp.


Tùy chọn 3: Triển khai Ghost đa ngôn ngữ trên DigitalOcean

Sẵn sàng để chuyển sang đa ngôn ngữ? Hướng dẫn này sẽ dẫn dắt bạn qua từng bước để triển khai hệ thống Ghost hoàn chỉnh trên DigitalOcean.

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

  1. Tài khoản DigitalOcean (nếu chưa có, đăng ký tại đây)
  2. Phần mềm Termius trên máy tính (Tải miễn phí tại đây)

1. Tạo SSH Key để truy cập máy chủ

Nếu bạn chưa có SSH key, hãy làm theo các bước đơn giản sau:

  1. Mở Termius (đã tải ở bước trên).
  2. Vào Settings > Keychain > Generate Key.
  3. Đặt tên cho key và chọn loại RSA.
  4. Nhấn Generate and Save để tạo và lưu key.
Generate SSH key
Tạo SSH key

Hãy chắc chắn sao lưu và lưu trữ an toàn cả Private KeyPublic Key. Đây là hai khóa quan trọng để truy cập bảo mật vào máy chủ của bạn.

Public Key trông như thế này
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCUBJ2jKLbwL580TuD/+txGQpq7JuMVgz4ha5U097BhyU2q50GvzgKpipxxxx...

Note

Public Key sẽ được sử dụng để tạo máy chủ mới trên DigitalOcean, vì vậy hãy lưu lại để dùng cho bước tiếp theo.

2. Cài đặt Ghost bằng One-click

Tham khảo tài liệu chính thức của Ghost để xem hướng dẫn từng bước cài đặt Ghost trên DigitalOcean.

Tuy nhiên, bạn cần đảm bảo tạo một máy chủ mới với tối thiểu 2GB RAM để đáp ứng yêu cầu chạy 2 website Ghost.

Tính năng cài đặt One-click sẽ tự động cài đặt tất cả các thành phần cần thiết cho Ghost.

Play

Xem video trên để được hướng dẫn chi tiết cách cài đặt Ghost bằng One-click trên DigitalOcean.

type your domain
Nhập tên miền của bạn

Note

Trong Termius, bạn có thể dùng phím tắt Ctrl + U để xóa toàn bộ dòng hiện tại trong terminal. Nếu nhập sai, phím tắt này sẽ giúp bạn xóa nhanh dòng đó.

3. Cài đặt Ghost thứ hai

Tham khảo hướng dẫn của Aspire Themes để xem chi tiết từng bước cài đặt Ghost thứ hai trên DigitalOcean. Cảm ơn Aspire Themes.

Tuy nhiên, sẽ có một số điểm khác biệt.

Sử dụng Termius để truy cập vào máy chủ DigitalOcean.

Access DigitalOcean server
Truy cập máy chủ DigitalOcean
  1. Bạn cần biết thông tin MySQL host, username và password hiện tại.

    Terminal window
    cd /var/www/ghost/
    cat config.production.json

    Ghi chú lại các thông tin này. Bạn sẽ cần dùng ở bước 3 và 5.

  2. Tạo thư mục website ghost-de

    Terminal window
    cd /var/www/
    sudo mkdir ghost-de
    sudo chown ghost-mgr:ghost-mgr ghost-de/
  3. Đăng nhập vào MySQL và tạo database mới

    Terminal window
    sudo mysql -u root -p
    CREATE DATABASE ghost_de;
    GRANT ALL PRIVILEGES ON ghost_de.* to 'ghost'@'localhost' IDENTIFIED BY '7d150600c49e7c5860be7ce03d4f8df67259176738d926ec';
    FLUSH PRIVILEGES;
    exit

    Ghi chú lại:

    • Mật khẩu MYSQL: 7d150600c49e7c5860be7ce03d4f8df67259176738d926ec
    • Tên database: ghost_de Bạn sẽ cần dùng ở bước 5.
  4. Chuyển sang user ghost-mgr

    Terminal window
    sudo -i -u ghost-mgr
  5. Cài đặt Ghost và làm theo hướng dẫn

    Terminal window
    cd /var/www/ghost-de/
    ghost install

    Khi được hỏi Blog URL, bạn nhập https://yourdomain.com/de

    Xem thêm hướng dẫn cài đặt Ghost bằng CLI

4. Cấu hình Nginx

Play
  1. Chỉnh sửa file domain.com-ssl.conf

    Terminal window
    cd /etc/nginx/sites-availables
    ls
    nano domain.com-ssl.conf

    Note

    Thay thế bằng tên miền thật của bạn

  2. Thêm khối proxy như bên dưới

    domain.com-ssl.conf
    ...
    location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:2368;
    }
    location /de/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:2369;
    }
    ...
  3. Bây giờ bạn đã có 2 site Ghost và có thể truy cập trang quản trị tại:

    Site tiếng Anh (ngôn ngữ chính) — https://domain.com/ghost/

    Site tiếng Đức (ngôn ngữ phụ) — https://domain.com/de/ghost/

Tham khảo tài liệu cấu hình Ghost để biết cách thiết lập SMTP và các cấu hình khác cho từng instance Ghost.


Tùy chọn 4: Thuê freelancer trên Fiverr hỗ trợ

Đừng để những khó khăn kỹ thuật cản trở bạn — hãy kết nối với mạng lưới các chuyên gia Ghost trên Fiverr và đưa dự án Ghost của bạn vào hoạt động ngay lập tức!

Với kinh nghiệm phong phú, họ có thể dẫn dắt bạn vượt qua những phức tạp của Ghost, đảm bảo quy trình triển khai diễn ra suôn sẻ và hiệu quả.