तैनाती और ऑनलाइन
i18n.site
एकल-पृष्ठ एप्लिकेशन आर्किटेक्चर को अपनाता है, और वेबसाइट प्रवेश पृष्ठ और वेबसाइट सामग्री स्वतंत्र रूप से तैनात की जाती है।
उपरोक्त अनुवाद चलाने के बाद, md/out/dev
निर्देशिका के अंतर्गत निर्देशिका htm
और v
उत्पन्न हो जाएंगी।
यहां, 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
अनुवाद और प्रकाशन के लिए md
निर्देशिका में i18n.site --npm
या i18n.site -n
चलाएँ।
यदि आप प्रकाशित करने के लिए निरंतर एकीकरण वातावरण का उपयोग करते हैं, तो nodejs
स्थापित करने की कोई आवश्यकता नहीं है। बस लॉग-इन और प्रकाशन अनुमतियों ~/.npmrc
पर्यावरण में कॉपी करें।
यदि आप main.yml
में v:
के पैकेज नाम को संशोधित करते हैं, तो कृपया पहले .i18n/v/main
हटाना सुनिश्चित करें और फिर इसे प्रकाशित करें।
एनपीएम द्वारा प्रकाशित प्रॉक्सी सर्वर
यदि मुख्य भूमि चीन में उपयोगकर्ता नेटवर्क समस्याओं का सामना करते हैं और 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
अपने यूआरएल उपसर्ग में बदलें, जैसे कि v: //i18n-v.xxx.com
।
md
निर्देशिका दर्ज करें और चलाएँ
i18n.site --htm_conf ol --save
या संक्षिप्तीकरण
i18n.site -c ol -s
फिर, md/out/main/v
निर्देशिका में सामग्री को v:
में सेट URL उपसर्ग पथ पर कॉन्फ़िगर करें।
अंत में, /.v
से 1s
पर समाप्त होने वाले पथ के कैश समय को कॉन्फ़िगर करें , अन्यथा नई जारी सामग्री को तुरंत एक्सेस नहीं किया जा सकता है।
अनावश्यक अनुरोधों को कम करने के लिए अन्य पथों के लिए कैश समय को एक वर्ष या उससे अधिक पर सेट किया जा सकता है।
सामग्री को s3 पर होस्ट करें
सामग्री को स्व-होस्ट करने के लिए, अपने स्वयं के सर्वर का उपयोग करने के अलावा, एक अन्य सामान्य विकल्प S3
+ CDN
उपयोग करना है।
आप S3
सर्वर में लॉग इन करने के लिए rclone का उपयोग कर सकते हैं, फिर निम्नलिखित स्क्रिप्ट को देखें और संशोधित करें, और प्रत्येक रिलीज़ के लिए केवल वृद्धिशील परिवर्तनों को 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 । उदाहरण के तौर पर निम्नलिखित संगठन का नाम i18n-demo
है।
फिर इस संगठन के अंतर्गत वेयरहाउस i18n-demo.github.io
बनाएं (कृपया i18n-demo
आपके द्वारा बनाए गए संगठन के नाम से बदलें):
पिछले आलेख में सामग्री प्रकाशित करते समय, out/main/htm
उत्पन्न हुआ है, कृपया इस निर्देशिका को दर्ज करें और चलाएँ :
ln -s index.html 404.html
क्योंकि github page
यूआरएल पथ पुनर्लेखन का समर्थन नहीं करता है, इसके बजाय 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 page github page
की तुलना में, यह पथ पुनर्लेखन प्रदान करता है और मुख्य भूमि चीन के लिए अधिक अनुकूल है और इसका उपयोग करने की अनुशंसा की जाती है।
cloudflare page
की तैनाती आमतौर पर उपरोक्त github page
की तैनाती पर आधारित होती है।
एक प्रोजेक्ट बनाएं और ऊपर i18n-demo.github.io
वेयरहाउस को बाइंड करें।
प्रक्रिया नीचे दिए गए चित्र में दिखाई गई है:
संगठन i18n-demo
तक पहुंच प्रदान करने के लिए कृपया Add Account
पर क्लिक करें।
यदि आपने किसी अन्य संगठन के गोदाम को बाध्य किया है, तो नए संगठन को प्रदर्शित करने से पहले आपको दो बार अधिकृत करने के लिए 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 स्मार्ट क्लाउड 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
से रिकॉर्ड A
तक cname_flatten स्क्रिप्ट के साथ सहयोग करना होगा।
इसके अलावा, क्योंकि मुख्य भूमि चीन में क्लाउड विक्रेताओं के विदेशी ट्रैफ़िक शुल्क अपेक्षाकृत महंगे हैं, यदि आप लागतों को अनुकूलित करना चाहते हैं, तो आप DNS Cloud के मुफ़्त भौगोलिक रिज़ॉल्यूशन और Cloudflare for SaaS के कस्टम डोमेन नाम (जैसा कि नीचे दिखाया गया है) का उपयोग कर सकते हैं ट्रैफ़िक डायवर्जन──मुख्यभूमि चीन में ट्रैफ़िक रूटिंग Baidu क्लाउड CDN
, अंतर्राष्ट्रीय ट्रैफ़िक cloudflare हो जाता है।
ये परिनियोजन अनुकूलन समाधान अधिक जटिल हैं और इन्हें भविष्य में अलग-अलग अध्यायों में पेश किया जाएगा।
सामान्य डोमेन नाम पुनर्निर्देशन
यदि आप किसी वेबसाइट को अपनी मुख्य वेबसाइट के रूप में बनाने के लिए i18n.site
उपयोग करते हैं, तो आपको आमतौर पर पैन-डोमेन पुनर्निर्देशन को कॉन्फ़िगर करने की आवश्यकता होती है, अर्थात, *.xxx.com
( www.xxx.com
सहित) से xxx.com
तक पहुंच को पुनर्निर्देशित करें।
यह आवश्यकता अलीबाबा क्लाउड CDN
EdgeScript
( अंग्रेजी दस्तावेज़ / चीनी दस्तावेज़ ) की सहायता से प्राप्त की जा सकती है
अलीबाबा CDN में डोमेन नाम जोड़ें और अलीबाबा क्लाउड CDN
में डोमेन नाम *.xxx.com
से CNAME
इंगित करें।
उदाहरण के लिए, ऊपर चित्र में *.i18n.site
का पैन-डोमेन नाम पुनर्निर्देशन कॉन्फ़िगरेशन इस प्रकार है:
rewrite(concat('https://i18n.site',$uri), 'redirect',301)
nginx के साथ परिनियोजन करें
कृपया nginx के server
पैराग्राफ में निम्नलिखित के समान एक कॉन्फ़िगरेशन जोड़ें। कृपया /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
स्रोत भाषा निर्देशिका, .i18n/conf.yml
कॉन्फ़िगरेशन फ़ाइल में fromTo
में से en
के अनुरूप
i18n:
fromTo:
en: zh
कृपया अनुवाद की कॉन्फ़िगरेशन देखें i18