Hướng Dẫn Khắc Phục Lỗi “No Available Server” Khi Cài Ghost Trên Coolify

Ghost là một nền tảng blog rất mạnh về SEO, tốc độ và newsletter. Còn Coolify thì giống như “Vercel tự host” dành cho anh em thích làm chủ VPS của mình. Nghe thì rất mượt, cho đến khi deploy Ghost xong, mở trình duyệt và thấy dòng chữ lạnh lùng:

no available server

Cảm giác lúc đó kiểu: container thì healthy, proxy cũng healthy, nhưng website thì im lặng như người yêu cũ.

Bài viết này sẽ hướng dẫn bạn cách kiểm tra và khắc phục lỗi “no available server” khi cài Ghost trên Coolify một cách chi tiết, dễ hiểu và áp dụng được ngay.

Môi trường triển khai

  • VPS Ubuntu
  • Docker
  • Coolify 4
  • Traefik Proxy
  • Ghost 5
  • MySQL 8

Mô hình hoạt động cơ bản:

Internet
   ↓
Traefik / Coolify Proxy
   ↓
Ghost Container :2368
   ↓
MySQL

Triệu chứng lỗi

Sau khi deploy Ghost trên Coolify, bạn thấy:

  • Ghost container báo Running (healthy)
  • MySQL báo Running (healthy)
  • Coolify tạo link domain thành công

Ví dụ domain tạm:

http://ghost-abcxyz.94.72.120.172.sslip.io

Nhưng khi truy cập thì trình duyệt báo:

no available server

Nguyên nhân chính

Lỗi này thường không có nghĩa là Ghost đã chết. Trong nhiều trường hợp, Ghost vẫn chạy bình thường.

Nguyên nhân phổ biến là:

Traefik của Coolify chưa route đúng request từ domain vào container Ghost.

Nói đơn giản:

Internet → Traefik OK
Traefik → Ghost chưa OK

Bước 1: Kiểm tra container Ghost

SSH vào VPS và chạy:

docker ps

Kết quả đúng sẽ tương tự:

CONTAINER ID   IMAGE      STATUS
d2d185d2026c   ghost:5    Up 24 minutes (healthy)

Nếu Ghost ở trạng thái Exited, Restarting hoặc không xuất hiện, bạn cần xem log Ghost trước. Nhưng nếu container healthy thì chuyển sang bước tiếp theo.

Bước 2: Kiểm tra Traefik Proxy

Chạy lệnh:

docker ps | grep -i traefik

Hoặc:

docker ps | grep -i proxy

Nếu thấy container coolify-proxy đang chạy, nghĩa là Traefik vẫn hoạt động.

Ví dụ:

traefik:v3.6   Up 3 days (healthy)   coolify-proxy

Bước 3: Kiểm tra Traefik label của container Ghost

Lấy container ID của Ghost:

docker ps | grep -i ghost

Sau đó kiểm tra Traefik label:

docker inspect <container-id> | grep -i traefik

Ví dụ thực tế:

docker inspect d2d185d2026c | grep -i traefik

Kết quả đúng cần có các dòng tương tự:

"traefik.enable": "true"
"traefik.http.routers.http-0-xxxx-ghost.rule": "Host(`ghost-xxxx.94.72.120.172.sslip.io`) && PathPrefix(`/`)"
"traefik.http.services.http-0-xxxx-ghost.loadbalancer.server.port": "2368"

Dòng quan trọng nhất là:

loadbalancer.server.port = 2368

Vì Ghost mặc định chạy ở port 2368. Nếu port này sai, Traefik sẽ không biết phải đẩy request vào đâu.

Bước 4: Không test sai bằng localhost ngoài VPS

Nhiều người chạy lệnh này trên VPS:

curl -I http://localhost:2368

Và nhận lỗi:

Failed to connect to localhost port 2368

Thế là tưởng Ghost chết. Nhưng chưa chắc.

Vì Ghost đang chạy bên trong Docker network nội bộ, không nhất thiết bind trực tiếp ra localhost:2368 của VPS.

Cách test đúng là vào bên trong container Ghost:

docker exec -it <container-id> sh

Sau đó test:

wget -qO- http://localhost:2368

Lưu ý: container Ghost có thể không có curl, nên dùng wget. Nếu trả về HTML thì Ghost vẫn sống khỏe. Chỉ là proxy đang hơi “lag cảm xúc”.

Bước 5: Restart Coolify Proxy

Đây là bước thường khắc phục được lỗi trong thực tế:

docker restart coolify-proxy

Chờ khoảng 10–30 giây rồi truy cập lại domain:

http://ghost-xxxx.94.72.120.172.sslip.io

Nếu mọi thứ ổn, Ghost sẽ hiển thị trang setup đầu tiên:

/ghost/#/setup

Đến đây có thể thở phào. Website không chết, chỉ là Traefik cần được “đánh thức nhẹ nhàng”.

Vì sao restart proxy lại hết lỗi?

Khi deploy hoặc thay đổi cấu hình domain/service trong Coolify, Traefik cần nhận route mới. Đôi khi quá trình này chưa sync kịp hoặc network routing chưa cập nhật đúng.

Các nguyên nhân thường gặp:

  • Traefik chưa nhận router mới
  • Container vừa deploy nhưng proxy chưa reload đúng
  • Service đổi domain nhiều lần
  • Network attach chưa đồng bộ
  • Route cũ bị cache

Lưu ý khi dùng domain sslip.io

Coolify có thể tạo domain tạm dạng:

ghost-xxxx.94.72.120.172.sslip.io

sslip.io là dịch vụ giúp domain tự trỏ về IP nằm trong tên miền. Ví dụ:

94.72.120.172.sslip.io → 94.72.120.172

Domain này rất tiện để test nhanh. Tuy nhiên, khi chạy production, bạn nên dùng domain thật như:

https://blog.yourdomain.com

Sau khi Ghost chạy được cần làm gì?

1. Tạo tài khoản admin

Truy cập:

http://domain-cua-ban/ghost

Sau đó tạo tài khoản quản trị đầu tiên.

2. Gắn domain thật

Ví dụ:

https://blog.example.com

3. Cấu hình biến môi trường URL

Trong Coolify, bạn cần đặt biến môi trường:

url=https://blog.example.com

Ghost rất nhạy với URL. Nếu cấu hình sai, bạn có thể gặp lỗi redirect, lỗi ảnh, lỗi admin hoặc lỗi canonical SEO.

4. Bật HTTPS

Sau khi domain thật đã trỏ đúng về VPS, bật SSL/HTTPS trong Coolify.

Checklist khắc phục nhanh

Việc cần kiểm traLệnh
Kiểm tra containerdocker ps
Kiểm tra Traefikdocker ps | grep -i traefik
Kiểm tra Ghostdocker ps | grep -i ghost
Kiểm tra Traefik labelsdocker inspect <container-id> | grep -i traefik
Restart proxydocker restart coolify-proxy

Kết luận

Lỗi “no available server” khi cài Ghost trên Coolify thường khiến nhiều người nghĩ rằng Ghost bị lỗi hoặc database có vấn đề. Nhưng trong thực tế, nếu container Ghost và MySQL đều healthy, nguyên nhân rất hay nằm ở tầng reverse proxy Traefik.

Cách xử lý nhanh nhất thường là:

docker restart coolify-proxy

Sau đó kiểm tra lại domain HTTP trước. Khi Ghost chạy ổn, bạn mới nên gắn domain thật, cấu hình biến url và bật HTTPS.

Ghost + Coolify là một combo rất đáng dùng cho blog SEO, newsletter và hệ thống nội dung chuyên nghiệp. Còn lỗi “no available server” thì cứ bình tĩnh, chưa chắc website đã chết — có thể proxy chỉ đang cần một cú restart nhẹ cho tỉnh ngủ mà thôi.

Leave a Comment