Triển Khai Và Trực Tuyến

i18n.site áp dụng kiến trúc ứng dụng một trang và trang truy cập trang web cũng như nội dung trang web được triển khai độc lập.

Sau khi chạy bản dịch trên, thư mục htmv sẽ được tạo trong thư mục md/out/dev .

Ở đây, dev nghĩa là nó được xây dựng dựa trên file cấu hình .i18n/htm/dev.yml .

dev thư mục :

Thư mục htm là trang vào của trang web.

Thư mục v chứa nội dung trang web với số phiên bản.

Bản xem trước cục bộ không quan tâm đến số phiên bản và sẽ sao chép tất cả các tệp vào thư mục out/dev/v/0.1.0 .

Đối với bản phát hành chính thức, các tệp đã thay đổi sẽ được sao chép vào thư mục số phiên bản mới.

Chỉ Định Tệp Cấu Hình Bằng -c

Các file cấu hình khác nhau sẽ tạo các thư mục tương ứng trong thư mục out .

Ví dụ: .i18n/htm/main.yml sẽ tạo thư mục out/main .

dev.ymlmain.yml là cấu hình mặc định.

dev là tên viết tắt của development , biểu thị môi trường phát triển, được sử dụng để xem trước cục bộ và cũng là tệp cấu hình mặc định. ol là tên viết tắt của online , biểu thị môi trường trực tuyến, được sử dụng để phát hành chính thức. Đây cũng là file cấu hình mặc định khi sử dụng tham số dòng lệnh -n đến npm để phát hành.

Bạn cũng có thể tạo các tệp cấu hình khác Sử dụng --htm_conf trên dòng lệnh để chỉ định tên tệp cấu hình sẽ sử dụng:

Ví dụ:

i18n.site --htm_conf dist --save

Ở đây --save đại diện cho số phiên bản phát hành cập nhật.

Xuất bản nội dung lên npmjs.com

Xuất bản nội dung lên npmjs.com là giải pháp mặc định được đề xuất (xem Tính sẵn sàng cao của Front-end ).

npm Đăng Nhập & Đăng

Cài đặt nodejs , đăng nhập bằng npm login .

Chỉnh sửa md/.i18n/htm/main.yml npmjs.com thay đổi giá trị từ md: YOUR_NPM_PACKAGE làm tên gói npm của riêng bạn.

Sau đó sửa đổi md/.i18n/htm/main.package.json

Chạy i18n.site --npm hoặc i18n.site -n trong thư mục md để dịch và xuất bản.

Nếu bạn sử dụng môi trường tích hợp liên tục để xuất bản thì không cần cài đặt nodejs Chỉ cần sao chép quyền đăng nhập và xuất bản ~/.npmrc vào môi trường.

Nếu bạn sửa đổi tên gói v: trong main.yml , hãy nhớ xóa .i18n/v/main trước rồi xuất bản nó.

Máy Chủ Proxy Được Xuất Bản Bởi npm

Nếu người dùng ở Trung Quốc đại lục gặp sự cố mạng và không thể xuất bản npm gói, họ có thể đặt biến môi trường https_proxy để định cấu hình máy chủ proxy.

Giả sử rằng cổng máy chủ proxy của bạn là 7890 , bạn có thể viết:

https_proxy=http://127.0.0.1:7890 i18n.site -n

Nội Dung Tự Lưu Trữ

Nếu bạn muốn tự lưu trữ nội dung, trước tiên hãy chỉnh sửa md/.i18n/htm/main.yml và thay đổi v: //unpkg.com/i18n.site thành tiền tố URL của bạn, chẳng hạn như v: //i18n-v.xxx.com .

Nhập thư mục md và chạy

i18n.site --htm_conf ol --save

hoặc viết tắt

i18n.site -c ol -s

Sau đó, định cấu hình nội dung trong thư mục md/out/main/v thành đường dẫn tiền tố URL được đặt trong v: .

Cuối cùng, hãy định cấu hình thời gian bộ đệm của đường dẫn kết thúc bằng /.v đến 1s , nếu không nội dung mới phát hành sẽ không thể truy cập ngay được.

Thời gian lưu đệm cho các đường dẫn khác có thể được đặt thành một năm hoặc hơn để giảm các yêu cầu không cần thiết.

Lưu Trữ Nội Dung Vào s3

Để tự lưu trữ nội dung, ngoài việc sử dụng máy chủ của riêng bạn, một lựa chọn phổ biến CDN là sử dụng S3 +

Bạn có thể sử dụng rclone để đăng nhập vào máy chủ S3 , sau đó tham khảo và sửa đổi tập lệnh sau và chỉ sao chép các thay đổi gia tăng thành S3 cho mỗi bản phát hành.

i18n.site -c ol -s
s3=your-s3
bucket=your-bucket
ver=$(head -1 .i18n/v/main/v.hash | cut -c 2-)
rclone copy --overwrite-dir out/main/htm/v/$ver $s3:/$bucket/$ver
rclone copy out/main/v/.v "$s3:/$bucket/"

Hãy nhớ cấu hình CDN để thời gian cache của đường dẫn kết thúc bằng /.v1s , nếu không nội dung mới phát hành sẽ không thể truy cập ngay được.

Xuất Bản Trang Web

Trang web có thể được triển khai ở mọi nơi, github pagecloudflare page là những lựa chọn tốt.

Vì trang web sử dụng kiến trúc ứng dụng một trang nên hãy nhớ viết lại đường dẫn URL không chứa . đến index.html .

Trang nhập website chỉ cần triển khai một lần và không cần triển khai lại trang nhập website cho các lần cập nhật nội dung tiếp theo.

Triển Khai Trên Trang github

Đầu tiên hãy nhấp vào đây github để tạo một tổ chức . Tên tổ chức sau đây là i18n-demo làm ví dụ.

Sau đó tạo kho i18n-demo.github.io thuộc tổ chức này (vui lòng thay i18n-demo bằng tên tổ chức bạn đã tạo):

Khi xuất bản nội dung ở bài viết trước, out/main/htm đã được tạo. Hãy nhập thư mục này và chạy :

ln -s index.html 404.html

github page không hỗ trợ ghi lại đường dẫn URL nên thay vào đó, 404.html được sử dụng.

Sau đó chạy lệnh sau vào thư mục htm (nhớ thay i18n-demo/i18n-demo.github.io.git bằng địa chỉ kho của chính bạn) :

git init
git branch -M main
git remote add origin [email protected]:i18n-demo/i18n-demo.github.io.git
git push -u origin main -f

Sau khi đẩy mã, hãy đợi quá trình triển khai github page chạy thành công (như hình bên dưới) trước khi bạn có thể truy cập vào mã.

Đối với trang demo vui lòng xem:

https://i18n-demo.github.io

Triển Khai Trên Trang cloudflare

cloudflare page So với github page , nó cung cấp khả năng viết lại đường dẫn và thân thiện hơn với Trung Quốc đại lục và dễ tiếp cận hơn.

Việc triển khai cloudflare page thường dựa trên việc triển khai github page ở trên.

Tạo một dự án và liên kết kho i18n-demo.github.io ở trên.

Quá trình này được thể hiện trong hình dưới đây:

Hãy nhấn vào Add Account để cấp quyền truy cập cho tổ chức i18n-demo .

Nếu bạn đã ràng buộc kho của tổ chức khác, bạn có thể cần phải nhấp vào Add Account hai lần để ủy quyền hai lần trước khi tổ chức mới được hiển thị.

Tiếp theo, chọn kho i18n-demo.github.io , sau đó nhấp vào Begin setup và sử dụng các giá trị mặc định cho các bước tiếp theo.

Sau khi ràng buộc lần đầu tiên, bạn cần đợi vài phút trước khi có thể truy cập.

Sau khi triển khai, bạn có thể liên kết một tên miền tùy chỉnh.

Sau khi ràng buộc tên miền tùy chỉnh, vui lòng truy cập tên miền để định cấu hình ghi lại đường dẫn của ứng dụng một trang, như minh họa bên dưới:

Các quy tắc trong hình trên như sau. Vui lòng thay số i18n.site ở dòng đầu tiên bên dưới bằng tên miền bạn đã ràng buộc.

(http.host in {"i18n.site"}) and not (
substring(http.request.uri.path,-3) in {".js" ".gz"} or
substring(http.request.uri.path,-4) in {".htm" ".rss" ".css" ".svg" ".ico" ".png" ".xml" ".txt"} or
substring(http.request.uri.path,-5) in {".html" ".avif" ".json"} or
ends_with(http.request.uri.path,".webmanifest")
)

Ngoài ra, vui lòng định cấu hình quy tắc bộ đệm, như hiển thị bên dưới và đặt thời lượng bộ đệm thành một tháng.

Vui lòng thay đổi tên miền khớp ở bước thứ hai trong hình trên thành tên miền bạn đã ràng buộc.

Tối Ưu Hóa Việc Triển Khai Trang Web Ở Trung Quốc Đại Lục

Nếu bạn muốn có được hiệu suất truy cập tốt hơn trong môi trường mạng ở Trung Quốc đại lục, trước tiên hãy đăng ký một tên miền .

Sau đó, sử dụng đối tượng lưu trữ của các nhà CDN + khai nội dung sau out/main/htm .

Bạn có thể sử dụng điện toán ranh giới để viết lại đường dẫn nhằm thích ứng với các ứng dụng một trang. Ví dụ: Baidu Smart Cloud CDN có thể được định cấu hình như sau:

const uri = r.uri, p = uri.lastIndexOf(".");
if (
  p < 0 ||
  !"|js|css|htm|html|md|avif|json|ico|xml|rss|gz|mp4|png|svg|txt|webmanifest|".includes(
    "|" + uri.slice(p + 1) + "|",
  )
) {
  const ua = r.headersIn["User-Agent"].toLowerCase()
  if (/facebookexternalhit|slurp|bot|spider|curl/.test(ua)) {
    r.return(
      302,
      (/baidu|yisou|sogou|360|byte/.test(ua) ? "/zh" : "/en") + r.uri + ".htm",
    )
  } else {
    r.uri = "/index.html"
  }
}

r.respHeader(() => {
  const t = [], out = r.headersOut;
  ["Content-MD5", "Age", "Expires", "Last-Modified"].forEach(
    i => delete out[i]
  )
  r.rawHeadersOut.forEach(i => {
    const key = i[0].toLowerCase()
    if (key.startsWith("x-") || key.startsWith("ohc-")) {
      delete out[key]
    }
  })
  out["Cache-Control"] = "max-age=" + 9e5
  // Tiêu đề phản hồi có thể được đặt thành đầu ra gỡ lỗi, chẳng hạn như out.XXX = 'MSG';
})

Vì bản ghi MX và bản ghi CNAME không thể cùng tồn tại nên nếu muốn nhận email tên miền cùng lúc, bạn cần phối hợp với tập lệnh cname_flatten để cấp CNAME thành bản ghi A .

Ngoài ra, do phí lưu lượng truy cập nước ngoài của các nhà cung cấp đám mây ở Trung Quốc đại lục tương đối đắt, nếu muốn tối ưu hóa chi phí, bạn có thể sử dụng DNS phân giải địa lý miễn phí của Huawei Cloud và tên miền tùy chỉnh của Cloudflare for SaaS (như hiển thị bên dưới) để đạt được. chuyển hướng giao thông──Định tuyến giao thông ở Trung Quốc đại lục Baidu Cloud CDN , lưu lượng truy cập quốc tế tăng cloudflare .

Các giải pháp tối ưu hóa triển khai này phức tạp hơn và sẽ được giới thiệu trong các chương riêng biệt trong tương lai.

Chuyển Hướng Tên Miền Chung

Nếu bạn sử dụng i18n.site để tạo một trang web làm trang web chính của mình, bạn thường cần định cấu hình chuyển hướng tên miền pan, nghĩa là chuyển hướng quyền truy cập đến *.xxx.com (bao gồm www.xxx.com ) đến xxx.com .

Yêu cầu này có thể đạt được với sự trợ giúp của Alibaba Cloud CDN EdgeScript ( tài liệu tiếng Anh / tài liệu tiếng Trung )

Thêm tên miền vào Alibaba Cloud CDN và trỏ tên miền *.xxx.com đến CNAME trong Alibaba Cloud CDN .

Ví dụ: cấu hình chuyển hướng tên miền pan bằng *.i18n.site trong hình trên như sau:

rewrite(concat('https://i18n.site',$uri), 'redirect',301)

Triển Khai Với nginx

Vui lòng thêm cấu hình tương tự như sau trong đoạn server của nginx Vui lòng thay đổi /root/i18n/md/out/main/htm thành đường dẫn của dự án out/main/htm của riêng bạn:

location / {
  root  /root/i18n/md/out/main/htm;
  add_header Cache-Control "max-age=9999999";
  if ($uri !~* \.(avif|css|html|ico|js|json|png|svg|txt|webmanifest|xml)$) {
     rewrite ^ /index.html last;
  }
}

Dựa Trên github action Tích Hợp Liên Tục

Bạn có thể tham khảo phần sau để cấu hình github action của mình:

name: i18n.site

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - dist

jobs:
  i18n:

    permissions:
      repository-projects: write
      contents: write

    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v4

      - name: https://i18n.site
        uses: i18n-site/github-action-i18n.site@main
        with:
          I18N_SITE_TOKEN: ${{ secrets.I18N_SITE_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

Như có thể thấy trong cấu hình, quy trình làm việc này được kích hoạt khi đẩy tới nhánh main và nhánh dist .

Quy trình làm việc sẽ sử dụng tệp cấu hình tương ứng với tên chi nhánh để xuất bản tài liệu. Ở đây, .i18n/htm/main.yml.i18n/htm/dist.yml sẽ được sử dụng làm cấu hình xuất bản tương ứng.

Chúng tôi đề xuất các phương pháp hay nhất sau đây cho quy trình phát hành tài liệu:

Khi các thay đổi được đẩy đến nhánh main , tài liệu sẽ được kích hoạt để được xây dựng và triển khai đến trạm xem trước (trạm xem trước có sẵn github page ).

Sau khi xác nhận rằng tài liệu là chính xác trên trang xem trước, mã sẽ được hợp nhất và đẩy đến nhánh dist , đồng thời quá trình xây dựng và triển khai chính thức sẽ trực tuyến.

Tất nhiên, việc thực hiện quy trình trên đòi hỏi phải viết nhiều cấu hình hơn.

Bạn có thể tham khảo dự án thực tế github.com/fcdoc/doc biết kịch bản quy trình làm việc.

secrets.I18N_SITE_TOKENsecrets.NPM_TOKEN trong cấu hình yêu cầu bạn định cấu hình các biến bí mật trong cơ sở mã.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN là mã thông báo xuất bản của gói npm trong cấu hình Visit npmjs.com và tạo mã thông báo có quyền xuất bản (như hiển thị bên dưới).

Cấu Trúc Thư Mục

public

Các tệp tĩnh của trang web, chẳng hạn như favicon.ico , robots.txt , v.v.

Các tệp biểu tượng ở đây có thể được tạo bằng realfavicongenerator.net

.i18n

Trong thư mục .i18n là các tập tin cấu hình, bộ đệm dịch, v.v. của i18n.site Xem chương tiếp theo "Cấu hình" để biết chi tiết.

en

Thư mục ngôn ngữ nguồn, tương ứng với en file cấu hình fromTo trong .i18n/conf.yml

i18n:
  fromTo:
    en: zh

Mời bạn tham khảo cấu hình dịch nhé i18