Deplwaman Ak Sou Entènèt

i18n.site adopte yon achitekti aplikasyon yon sèl paj , ak paj antre sit entènèt la ak kontni sit entènèt yo deplwaye poukont yo.

Apre yo fin kouri tradiksyon ki anwo a, anyè htm ak v yo pral pwodwi anba anyè md/out/dev a.

Isit la, dev vle di li se bati ki baze sou .i18n/htm/dev.yml fichye a konfigirasyon.

dev anyè :

Anyè htm a se paj antre sit entènèt la.

Anyè v a gen kontni sit entènèt ak nimewo vèsyon.

Aperçu lokal pa okipe nimewo vèsyon an epi li pral kopye tout fichye yo nan anyè out/dev/v/0.1.0 a.

Pou lage ofisyèl, yo pral kopye dosye ki chanje yo nan nouvo anyè nimewo vèsyon an.

Espesifye Fichye Konfigirasyon Ak -c

Fichye konfigirasyon diferan pral kreye repèrtwar korespondan nan anyè out a.

Pa egzanp, .i18n/htm/main.yml pral kreye out/main anyè.

dev.yml ak main.yml se konfigirasyon default yo.

dev se abrevyasyon nan development , ki endike anviwònman devlopman, yo itilize pou preview lokal yo, epi li se tou dosye konfigirasyon default la. ol se abrevyasyon la nan online , ki endike anviwònman an sou entènèt, ki se itilize pou lage ofisyèl Li se tou dosye a konfigirasyon default lè w ap itilize paramèt liy lòd -n a npm yo lage.

Ou kapab tou kreye lòt fichye konfigirasyon. Sèvi ak --htm_conf sou liy lòd la pou presize non fichye konfigirasyon pou itilize:

pou egzanp:

i18n.site --htm_conf dist --save

Isit la --save reprezante nimewo vèsyon an aktyalizasyon.

Pibliye kontni sou npmjs.com

Pibliye kontni nan npmjs.com se solisyon an default rekòmande (gade Front-end High Availability ).

npm & Post

Enstale nodejs , konekte ak npm login .

Edit md/.i18n/htm/main.yml epi chanje valè md: YOUR_NPM_PACKAGE kòm pwòp non pakè npm pa w npmjs.com ap fè.

Lè sa a, modifye md/.i18n/htm/main.package.json

Kouri i18n.site --npm oswa i18n.site -n nan anyè md a pou tradui ak pibliye.

Si ou itilize yon anviwònman entegrasyon kontinyèl pou pibliye, pa gen okenn nesesite pou enstale nodejs Jis kopye otorizasyon ki konekte ak pibliye ~/.npmrc nan anviwònman an.

Si ou modifye non pake a nan v: nan main.yml , tanpri asire w ke ou efase .i18n/v/main dabò epi pibliye li.

Proxy Sèvè Pibliye Pa npm

Si itilizatè yo nan Lachin tè pwensipal rankontre pwoblèm rezo epi yo pa kapab pibliye pakè npm , yo ka mete varyab anviwònman an https_proxy pou konfigirasyon sèvè prokurasyon an.

Si nou sipoze pò sèvè proxy ou a se 7890 , ou ka ekri:

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

Kontni Pwòp Tèt Ou Akomode

Si ou vle pwòp tèt ou òganize kontni an, premye modifye md/.i18n/htm/main.yml epi chanje v: //unpkg.com/i18n.site nan prefiks URL ou a, tankou v: //i18n-v.xxx.com .

Antre anyè md a epi kouri

i18n.site --htm_conf ol --save

oswa abrevyasyon

i18n.site -c ol -s

Lè sa a, konfigirasyon kontni an nan anyè a md/out/main/v nan chemen an prefiks URL mete nan v: .

Finalman, konfigirasyon tan an kachèt nan chemen an fini nan /.v a 1s , otreman kontni an ki fèk lage pa ka jwenn aksè imedyatman.

Tan kachèt pou lòt chemen yo ka mete sou yon ane oswa plis pou diminye demann ki pa nesesè yo.

Mete Kontni Nan s3

Pou pwòp tèt CDN òganize kontni, anplis de itilize pwòp sèvè ou, yon lòt opsyon komen se sèvi ak S3 + .

Ou ka itilize rclone pou konekte sou sèvè S3 a, epi fè referans ak modifye script sa a, epi sèlman kopye chanjman incrémentielles yo nan S3 pou chak lage.

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

Sonje konfigirasyon CDN pou tan kachèt chemen an ki fini nan /.v se 1s , otreman kontni ki fèk pibliye pa ka jwenn aksè imedyatman.

Pibliye Sit Entènèt

Sit entènèt la ka deplwaye nenpòt kote, github page cloudflare page se bon chwa.

Paske sit entènèt la itilize yon achitekti aplikasyon pou yon sèl paj , sonje reekri chemen URL ki pa genyen . a index.html .

Paj antre sit entènèt la sèlman bezwen deplwaye yon fwa, epi pa gen okenn nesesite pou re-deplwaye paj antre sit entènèt la pou mizajou kontni ki vin apre yo.

Deplwaye Sou Paj github

Premye klike isit github pou kreye yon òganizasyon non sa a se i18n-demo kòm yon egzanp.

Apre sa, kreye depo i18n-demo.github.io anba òganizasyon sa a (tanpri ranplase i18n-demo ak non òganizasyon ou te kreye a):

Lè pibliye kontni an nan atik anvan an, out/main/htm te pwodwi Tanpri antre nan anyè sa a epi kouri :

ln -s index.html 404.html

Paske github page pa sipòte reekri chemen URL, 404.html yo itilize pito.

Lè sa a, kouri lòd sa a nan anyè htm a (sonje ranplase i18n-demo/i18n-demo.github.io.git ak adrès depo pwòp ou a) :

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

Apre ou fin pouse kòd la, tann pou deplwaman github page a kouri avèk siksè (jan yo montre anba a) anvan ou ka jwenn aksè nan li.

Pou paj Demo tanpri gade:

https://i18n-demo.github.io

Deplwaye Sou Paj cloudflare

cloudflare page ak github page , li bay reekri chemen epi li pi zanmitay ak Lachin tè pwensipal li pi aksesib.

Deplwaman cloudflare page anjeneral baze sou deplwaman github page pi wo a.

Kreye yon pwojè epi mare i18n-demo.github.io depo ki anwo a.

Pwosesis la montre nan figi ki anba a:

Tanpri klike sou Add Account pou bay aksè a òganizasyon i18n-demo .

Si ou te mare depo yon lòt òganizasyon, ou ka bezwen klike sou Add Account de fwa pou otorize de fwa anvan nouvo òganizasyon an ap parèt.

Apre sa, chwazi depo i18n-demo.github.io , Lè sa a, klike sou Begin setup , epi sèvi ak valè yo default pou etap ki vin apre yo.

Apre obligatwa pou premye fwa, ou bezwen tann kèk minit anvan ou ka jwenn aksè nan li.

Apre deplwaman, ou ka mare yon non domèn koutim.

Apre ou fin mare non domèn koutim lan, tanpri ale nan non domèn pou configured reekri chemen aplikasyon an yon sèl paj, jan yo montre anba a:

Règ ki nan foto ki anwo a se jan sa a Tanpri ranplase i18n.site nan premye liy ki anba a ak non domèn ou mare.

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

Anplis de sa, tanpri konfigirasyon règ yo kachèt, jan yo montre anba a, epi mete dire a kachèt nan yon mwa.

Tanpri chanje non domèn matche nan dezyèm etap la nan foto ki anwo a ak non domèn ou mare.

Optimize Deplwaman Sit Entènèt Nan Tè Pwensipal Lachin

Si ou vle jwenn pi bon pèfòmans aksè nan anviwònman rezo Lachin tè pwensipal la, tanpri anrejistre yon non domèn an premye.

Lè sa a, sèvi ak depo objè nan vandè nwaj nan tè pwensipal + CDN Deplwaye kontni sa a out/main/htm .

Ou ka itilize edge computing pou reekri chemen an pou adapte yo ak aplikasyon pou yon sèl paj. Pou egzanp, Baidu Smart Cloud CDN ka konfigirasyon konsa:

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
  // Tèt repons yo ka mete debug pwodiksyon, tankou out.XXX = 'MSG';
})

Paske dosye MX ak dosye CNAME pa ka viv ansanm, si ou vle resevwa imèl non domèn an menm tan, ou bezwen kolabore ak cname_flatten la nan nivo CNAME nan dosye A .

Anplis de sa, paske chaj yo trafik lòt bò dlo nan vandè nwaj yo nan tè pwensipal Lachin yo relativman chè, si ou vle optimize depans, ou ka itilize DNS gratis Huawei Cloud ak non domèn koutim Cloudflare for SaaS (jan yo montre anba a) reyalize Detounman trafik──Trafik routage nan tè pwensipal Lachin Baidu Cloud CDN , trafik entènasyonal ale cloudflare .

Solisyon optimize deplwaman sa yo pi konplèks epi yo pral prezante nan chapit separe nan lavni.

Redireksyon Non Domèn Jenerik

Si ou itilize i18n.site pou jenere yon sit entènèt kòm sit entènèt prensipal ou, anjeneral ou bezwen konfigirasyon redireksyon pan-domèn, se sa ki, redireksyon aksè a *.xxx.com (ki gen ladan www.xxx.com ) a xxx.com .

Egzijans sa a ka reyalize avèk èd Alibaba Cloud CDN EdgeScript ( dokiman angle / Dokiman Chinwa )

Ajoute non domèn nan Alibaba CDN epi montre non domèn *.xxx.com a CNAME nan Alibaba Cloud CDN .

Pou egzanp, konfigirasyon redireksyon non pan-domèn nan *.i18n.site nan foto ki anwo a se jan sa a:

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

Deplwaye Ak nginx

Tanpri ajoute yon konfigirasyon ki sanble ak sa ki annapre yo nan paragraf server nan nginx Tanpri chanje /root/i18n/md/out/main/htm nan chemen pwòp pwojè ou a 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;
  }
}

Ki Baze Sou github action Entegrasyon Kontinyèl

Ou ka fè referans a sa ki annapre yo pou konfigirasyon github action ou a:

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

Kòm ou ka wè nan konfigirasyon an, se workflow sa a deklanche lè pouse nan branch main ak branch dist .

Workflow la pral sèvi ak fichye konfigirasyon ki koresponn ak non branch lan pou pibliye dokiman an. Isit la, .i18n/htm/main.yml ak .i18n/htm/dist.yml yo pral itilize kòm konfigirasyon piblikasyon an.

Nou rekòmande pi bon pratik sa yo pou pwosesis piblikasyon dokiman an:

Lè chanjman yo pouse nan branch main , dokiman an deklanche pou yo bati ak deplwaye nan estasyon preview la (estasyon preview la disponib github page ).

Apre konfime ke dokiman an kòrèk sou sit la aperçu, kòd la pral fizyone ak pouse nan branch dist , ak bati ofisyèl la ak deplwaman pral ale sou entènèt.

Natirèlman, aplike pwosesis ki anwo a mande pou ekri plis konfigirasyon.

Ou ka refere a pwojè aktyèl github.com/fcdoc/doc pou scripting workflow.

secrets.I18N_SITE_TOKEN ak secrets.NPM_TOKEN nan konfigirasyon an mande pou ou konfigirasyon varyab sekrè nan baz kòd la.

I18N_SITE_TOKEN i18n.site/token

NPM_TOKEN se jeton piblikasyon pakè npm nan Konfigirasyon an npmjs.com epi kreye yon jeton ak otorizasyon pou pibliye (jan yo montre anba a).

Estrikti Anyè

public

Fichye estatik nan sit entènèt la, tankou favicon.ico , robots.txt , elatriye.

Fichye icon yo isit la ka pwodwi ak realfavicongenerator.net

.i18n

Anba anyè .i18n yo se fichye konfigirasyon yo, kachèt tradiksyon, elatriye nan i18n.site Gade pwochen chapit "Konfigirasyon" pou plis detay.

en

Anyè lang sous, ki koresponn ak en nan fromTo nan .i18n/conf.yml fichye konfigirasyon

i18n:
  fromTo:
    en: zh

Tanpri gade nan konfigirasyon tradiksyon an i18