Thêm một trang offline khi xây dựng lại Discourse

Hướng dẫn này dành cho những người đã sử dụng nginx bên ngoài vùng chứa docker. Như hướng dẫn trong bài Hướng dẫn Cài đặt Discouse trên server nginx.
Khi Discourse đang xây dựng lại hoặc khởi động, người dùng của bạn thường sẽ thấy thông báo lỗi từ trình duyệt của họ…

image

…hoặc thông báo lỗi 502 từ nginx

502 Bad Geteway

Nếu bạn muốn thay các trang lỗi trên thành trang có dạng như của aznet.io, thì chúng ta tiếp tục…

aznet.io errorpage

Tạo một trang lỗi

bạn sẽ phải thiết kế một trang lỗi để hiển thị khi Discourse ngoại tuyến. Hãy tạo một thư mục cho nó.

mkdir /var/www/errorpages
  • Nếu bạn là một nhà thiết kế tài năng, hãy tự mình xây dựng một trang đẹp và chia sẻ nó tại đây!
  • Nếu bạn cần sử dụng các tài nguyên bên ngoài như hình ảnh, hãy tải chúng lên /errorpages/ .
  • Bạn nên đưa <meta http-equiv="refresh" content="120"> vào trang của mình - điều này sẽ làm mới trang sau mỗi 120 giây, có nghĩa là Discourse sẽ tự động tải khi nó có sẵn trở lại.
  • Đặt tên cho tệp HTML chính của bạn aznet_offline.html và đặt tất cả các tệp vào /var/www/errorpages/ .

Lưu ý: Bạn có thể đổi tên các tệp, và cũng thay đổi chúng trong nội dung file .html và file .conf bên dưới. Cũng thay đổi aznet.io bằng tên miền của bạn.

Hoặc bạn có thể tải về các tệp tại đây và up nó lên errorpages.
Sau khi hoàn tất, hãy chỉnh sửa cấu hình Nginx để:

Phục vụ trang bạn vừa tạo:

nano /etc/nginx/sites-enabled/discourse.conf
Chỉ cần thêm

location /errorpages/ {
    alias /var/www/errorpages/;
}

Vào phần https server trong cấu hình nginx của bạn rồi tải lại nginx
service nginx reload
Kiểm tra bằng cách truy cập https://aznet.io/errorpages/aznet_offline.html trong trình duyệt của bạn - bạn sẽ thấy trang lỗi mới của mình.

Phục vụ trang lỗi của bạn

Cuối cùng, chúng ta sẽ thiết lập nginx để phân phát trang lỗi của bạn khi nó không thể truy cập Discourse hoặc khi Discourse chưa sẵn sàng. Thêm các dòng sau vào khối location / {

error_page 502 =502 /errorpages/aznet_offline.html;
proxy_intercept_errors on;

Cuối cùng, file discourse.conf của bạn sẽ có dạng như thế này:

server {
    listen 80; listen [::]:80;
    ...
}

server {
    listen 443 ssl http2;  listen [::]:443 ssl http2;
    ...

    location / {
        ...
        error_page 502 =502 /errorpages/aznet_offline.html;
        proxy_intercept_errors on;
    }
    location /errorpages/ {
    alias /var/www/errorpages/;
    }
}

Áp dụng các thay đổi của bạn:

service nginx reload

Nếu bạn muốn kiểm tra cài đặt của mình, hãy chạy

cd /var/discourse
./launcher stop app

để đưa trang web của bạn ngoại tuyến và cố gắng truy cập nó để xem kết quả.

Đừng quên chạy

cd /var/discourse
./launcher start app

sau đó để Discourse của bạn có sẵn trở lại!