Разгортванне І Онлайн

i18n.site прымае аднастаронкавую архітэктуру прыкладання , а старонка ўваходу на вэб-сайт і змест вэб-сайта разгортваюцца незалежна.

Пасля выканання прыведзенага вышэй перакладу каталогі htm і v будуць створаны ў каталогу md/out/dev .

Тут dev азначае, што ён створаны на аснове файла канфігурацыі .i18n/htm/dev.yml .

dev каталог :

Каталог htm - гэта старонка ўваходу на сайт.

Каталог v змяшчае кантэнт вэб-сайта з нумарамі версій.

Лакальны папярэдні прагляд не клапоціцца пра нумар версіі і скапіруе ўсе файлы ў каталог out/dev/v/0.1.0 .

Для афіцыйнага выпуску змененыя файлы будуць скапіяваны ў каталог з новым нумарам версіі.

Укажыце Файл Канфігурацыі З -c

Розныя файлы канфігурацыі створаць адпаведныя каталогі ў каталогу out .

Напрыклад, .i18n/htm/main.yml створыць каталог out/main .

dev.yml і main.yml - канфігурацыі па змаўчанні.

dev - гэта абрэвіятура development , якая пазначае асяроддзе распрацоўкі, якое выкарыстоўваецца для лакальнага папярэдняга прагляду, а таксама файл канфігурацыі па змаўчанні. ol - гэта абрэвіятура online , якая паказвае на сеткавае асяроддзе, якое выкарыстоўваецца для афіцыйнага выпуску. Гэта таксама файл канфігурацыі па змаўчанні пры выкарыстанні параметраў каманднага радка -n па npm для выпуску.

Вы таксама можаце стварыць іншыя файлы канфігурацыі, выкарыстоўвайце --htm_conf у камандным радку, каб задаць імя файла канфігурацыі:

напрыклад:

i18n.site --htm_conf dist --save

Тут --save азначае нумар версіі абнаўлення.

Публікуйце кантэнт на npmjs.com

Публікацыя змесціва ў npmjs.com

npm Уваход & Паведамленне

Усталюйце nodejs , увайдзіце пад npm login .

Адрэдагуйце md/.i18n/htm/main.yml і зменіце значэнне md: YOUR_NPM_PACKAGE у якасці ўласнага імя пакета npm npmjs.com любое незанятае імя пакета.

Затым змяніце md/.i18n/htm/main.package.json

Запусціце i18n.site --npm або i18n.site -n у каталогу md , каб перакласці і апублікаваць.

Калі вы выкарыстоўваеце асяроддзе бесперапыннай інтэграцыі для публікацыі, няма неабходнасці ўсталёўваць nodejs Проста скапіруйце ў асяроддзе дазволы для ўваходу і публікацыі ~/.npmrc .

Калі вы зменіце імя пакета v: з main.yml , не забудзьцеся спачатку выдаліць .i18n/v/main , а потым апублікаваць яго.

Проксі-Сервер, Апублікаваны npm

Калі карыстальнікі ў мацерыковым Кітаі сутыкаюцца з праблемамі сеткі і не могуць апублікаваць npm пакетаў, яны могуць усталяваць зменную асяроддзя https_proxy , каб наладзіць проксі-сервер.

Мяркуючы, што порт вашага проксі-сервера роўны 7890 , вы можаце напісаць:

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

Самастойны Кантэнт

Калі вы хочаце самастойна размясціць кантэнт, спачатку адрэдагуйце md/.i18n/htm/main.yml і змяніце v: //unpkg.com/i18n.site на прэфікс URL-адраса, напрыклад v: //i18n-v.xxx.com .

Увайдзіце ў каталог md і запусціце

i18n.site --htm_conf ol --save

або абрэвіятура

i18n.site -c ol -s

Затым наладзьце змесціва ў каталогу md/out/main/v на шлях прэфікса URL, усталяваны ў v: .

Нарэшце, наладзьце час кэшавання шляху, які заканчваецца ад /.v да 1s , у адваротным выпадку доступ да толькі што выпушчанага змесціва немагчыма будзе неадкладна атрымаць.

Час захавання ў кэшы для іншых шляхоў можа быць устаноўлены на адзін год або больш, каб паменшыць непатрэбныя запыты.

Размясціце Кантэнт На s3

Для самастойнага размяшчэння змесціва, у дадатак да выкарыстання ўласнага сервера, яшчэ CDN распаўсюджаным варыянтам з'яўляецца выкарыстанне S3 +

Вы rclone ўвайсці на сервер S3 , а потым змяніць наступны сцэнарый і скапіяваць толькі дадатковыя змены ў S3 для кожнага выпуску.

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/"

Не забудзьце наладзіць CDN , каб час кэшавання шляху, які заканчваецца на /.v быў роўны 1s , у адваротным выпадку доступ да нядаўна выпушчанага кантэнту немагчымы.

Апублікаваць Сайт

Вэб-сайт можа быць разгорнуты дзе заўгодна github page і cloudflare page - добры выбар.

Паколькі на вэб-сайце выкарыстоўваецца аднастаронкавая архітэктура прыкладання , не забудзьцеся перапісаць URL-шляхі, якія не змяшчаюць . да index.html .

Старонку ўваходу вэб-сайта трэба разгарнуць толькі адзін раз, і няма неабходнасці пераразгортваць старонку ўваходу вэб-сайта для наступных абнаўленняў кантэнту.

Разгарнуць На Старонцы github

Спачатку націсніце тут github напрыклад i18n-demo назву арганізацыі.

Затым стварыце склад i18n-demo.github.io у гэтай арганізацыі (калі ласка, заменіце i18n-demo назвай арганізацыі, якую вы стварылі):

Пры публікацыі змесціва ў папярэднім артыкуле было згенеравана out/main/htm , калі ласка, увядзіце гэты каталог і запусціце :

ln -s index.html 404.html

Паколькі github page не падтрымлівае перазапіс шляху URL, замест яго выкарыстоўваецца 404.html .

Затым запусціце наступную каманду ў каталогу htm (не забудзьце замяніць i18n-demo/i18n-demo.github.io.git адрасам вашага ўласнага склада) :

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

Пасля ўвядзення кода дачакайцеся паспяховага запуску разгортвання github page (як паказана ніжэй), перш чым вы зможаце атрымаць да яго доступ.

Для дэма-старонкі, калі ласка, глядзіце:

https://i18n-demo.github.io

Разгарнуць На Старонцы cloudflare

cloudflare page У параўнанні з github page , ён забяспечвае перапісванне шляху і больш даступны для выкарыстання.

Разгортванне cloudflare page звычайна заснавана на разгортванні github page вышэй.

Стварыце праект і прывяжыце склад i18n-demo.github.io вышэй.

Працэс паказаны на малюнку ніжэй:

Націсніце Add Account , каб даць доступ арганізацыі i18n-demo .

Калі вы прывязалі склад іншай арганізацыі, вам можа спатрэбіцца двойчы націснуць Add Account для аўтарызацыі, перш чым новая арганізацыя будзе адлюстравана.

Затым абярыце склад i18n-demo.github.io , затым націсніце Begin setup і выкарыстоўвайце значэнні па змаўчанні для наступных крокаў.

Пасля першага прывязвання вам трэба пачакаць некалькі хвілін, перш чым вы зможаце атрымаць да яго доступ.

Пасля разгортвання вы можаце прывязаць карыстацкае даменнае імя.

Пасля прывязкі карыстацкага даменнага імя перайдзіце да даменнага імя, каб наладзіць перазапіс шляху аднастаронкавага прыкладання, як паказана ніжэй:

Правілы на малюнку вышэй замяняйце i18n.site у першым радку ніжэй даменным імем.

(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")
)

Акрамя таго, наладзьце правілы кэшавання, як паказана ніжэй, і ўсталюйце працягласць кэшавання на адзін месяц.

Калі ласка, змяніце даменнае імя, якое адпавядае на другім этапе на малюнку вышэй, на прывязанае даменнае імя.

Аптымізацыя Разгортвання Вэб-Сайта Ў Кітаі

Калі вы хочаце атрымаць лепшую прадукцыйнасць даступнасці ў сеткавым асяроддзі мацерыковага Кітая, спачатку зарэгіструйце даменнае імя .

Затым выкарыстоўвайце сховішча аб'ектаў пастаўшчыкоў воблака ў мацерыковым Кітаі + Разгарніце наступнае змесціва CDN out/main/htm

Вы можаце выкарыстоўваць краявыя вылічэнні, каб перапісаць шлях для адаптацыі да аднастаронкавых прыкладанняў. Напрыклад, Baidu Smart Cloud CDN можна наладзіць так:

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
  // Загалоўкі адказу могуць быць устаноўлены для выхаду адладкі, напрыклад, out.XXX = 'MSG';
})

Паколькі запіс MX і запіс CNAME не могуць суіснаваць, калі вы хочаце атрымліваць электронныя лісты з даменнымі імёнамі адначасова, вам трэба супрацоўнічаць са скрыптам cname_flatten , каб узровень CNAME ператварыць у запіс A .

Акрамя таго, паколькі зборы за замежны трафік пастаўшчыкоў воблака ў мацерыковым Кітаі адносна дарагія, калі вы хочаце аптымізаваць выдаткі, вы можаце выкарыстоўваць DNS геаграфічнае дазвол Huawei Cloud і карыстацкае даменнае імя Cloudflare for SaaS (як паказана ніжэй). перанакіраванне трафіку──маршрутызацыя трафіку ў мацерыковым Кітаі Baidu Cloud CDN , міжнародны трафік ідзе cloudflare .

Гэтыя рашэнні па аптымізацыі разгортвання больш складаныя і ў будучыні будуць прадстаўлены ў асобных раздзелах.

Універсальнае Перанакіраванне Даменнага Імя

Калі вы выкарыстоўваеце i18n.site для стварэння вэб-сайта ў якасці асноўнага вэб-сайта, вам звычайна трэба наладзіць пандаменнае перанакіраванне, гэта значыць перанакіраваць доступ з *.xxx.com (уключаючы www.xxx.com ) на xxx.com .

Гэта патрабаванне можа быць выканана з дапамогай Alibaba Cloud CDN EdgeScript ( дакумент на англійскай мове / дакумент на кітайскай мове )

Дадайце даменнае імя ў CDN Cloud і ўкажыце даменнае імя *.xxx.com да CNAME у Alibaba Cloud CDN !

Напрыклад, канфігурацыя перанакіравання пандаменнага імя *.i18n.site на малюнку вышэй выглядае наступным чынам:

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

Разгортванне З Дапамогай nginx

Калі ласка, дадайце канфігурацыю, падобную да наступнай у параграфе server nginx Калі ласка, змяніце /root/i18n/md/out/main/htm на шлях вашага ўласнага праекта out/main/htm :

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;
  }
}

На Аснове github action Бесперапыннай Інтэграцыі

Вы можаце звярнуцца да наступнага, каб наладзіць свой github action :

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 }}

Як відаць у канфігурацыі, гэты працоўны працэс запускаецца пры націску на галінку main і галінку dist .

Рабочы працэс будзе выкарыстоўваць файл канфігурацыі, які адпавядае назве філіяла, каб апублікаваць дакумент. Тут у якасці канфігурацыі публікацыі будуць выкарыстоўвацца .i18n/htm/main.yml і .i18n/htm/dist.yml .

Мы рэкамендуем наступныя лепшыя практыкі для працэсу выпуску дакументаў:

Калі змены пераносяцца ў галіну main , дакумент запускаецца для стварэння і разгортвання на станцыі папярэдняга прагляду (станцыя папярэдняга прагляду даступная github page ).

Пасля пацверджання таго, што дакумент правільны на сайце папярэдняга прагляду, код будзе аб'яднаны і перададзены ў галінку dist , і афіцыйная зборка і разгортванне выйдуць у Інтэрнэт.

Вядома, рэалізацыя вышэйзгаданага працэсу патрабуе напісання большай колькасці канфігурацый.

Вы можаце звярнуцца да фактычнага праекта для стварэння сцэнарыяў працоўнага працэсу github.com/fcdoc/doc

secrets.I18N_SITE_TOKEN і secrets.NPM_TOKEN у канфігурацыі патрабуюць канфігурацыі сакрэтных зменных у базе кода.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN - гэта маркер публікацыі пакета npm у канфігурацыі npmjs.com стварыце маркер з дазволам на публікацыю (як паказана ніжэй).

Структура Каталога

public

Статычныя файлы вэб-сайта, такія як favicon.ico , robots.txt і г.д.

Файлы значкоў тут можна стварыць з дапамогай realfavicongenerator.net

.i18n

У каталогу .i18n знаходзяцца файлы канфігурацыі, кэш перакладаў і г.д. з i18n.site Падрабязнасці глядзіце ў наступным раздзеле «Канфігурацыя» .

en

Каталог зыходнай мовы, які адпавядае файлу канфігурацыі en з fromTo у .i18n/conf.yml

i18n:
  fromTo:
    en: zh

Калі ласка, звярніцеся да канфігурацыі перакладу i18