استقرار و آنلاین

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 npmjs.com عنوان نام npm خود تغییر دهید.

سپس 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 است +

برای ورود به S3 S3 می توانید از rclone

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

در مقایسه با github page cloudflare page بازنویسی مسیر را فراهم می کند و برای سرزمین اصلی چین مناسب تر است و استفاده از آن در دسترس تر است.

استقرار cloudflare page معمولاً بر اساس استقرار github page بالا است.

یک پروژه ایجاد کنید و انبار i18n-demo.github.io بالا را متصل کنید.

فرآیند در شکل زیر نشان داده شده است:

لطفاً برای اعطای دسترسی به سازمان i18n-demo روی Add Account کلیک کنید.

اگر انبار سازمان دیگری را محدود کرده اید، ممکن است لازم باشد قبل از نمایش سازمان جدید، دو بار برای مجوز دو بار روی Add Account کلیک کنید.

در مرحله بعد، warehouse 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

می توانید از محاسبات لبه 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 وضوح جغرافیایی رایگان هواوی و نام دامنه سفارشی Cloudflare for SaaS (همانطور که در زیر نشان داده شده است) استفاده کنید انحراف ترافیک──مسیریابی ترافیک در سرزمین اصلی چین بایدو ابر CDN ، ترافیک بینالمللی cloudflare مییابد.

این راه حل های بهینه سازی استقرار پیچیده تر هستند و در فصل های جداگانه در آینده معرفی خواهند شد.

تغییر مسیر نام دامنه عمومی

اگر i18n.site برای ایجاد یک وب سایت به عنوان وب سایت اصلی خود استفاده می کنید، معمولاً باید تغییر مسیر پان دامنه را پیکربندی کنید، یعنی دسترسی به *.xxx.com (از جمله www.xxx.com ) را به xxx.com تغییر دهید.

این نیاز را می توان با کمک Alibaba Cloud CDN EdgeScript ( سند انگلیسی / سند چینی ) به دست آورد.

نام دامنه را در Alibaba CDN اضافه کنید و نام دامنه CNAME *.xxx.com 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