Развертывание И Онлайн
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:
.
Наконец, настройте время кэширования пути 1s
заканчивающегося на /.v
, иначе к недавно выпущенному контенту будет невозможно получить немедленный доступ.
Время кэширования для других путей может быть установлено на один год или более, чтобы уменьшить количество ненужных запросов.
Размещайте Контент На s3
Для самостоятельного размещения контента, помимо использования собственного сервера, еще одним распространенным вариантом является использование S3
+ CDN
.
Вы можете использовать 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
.
Кроме того, поскольку плата за зарубежный трафик поставщиков облачных услуг в материковом Китае относительно высока, если вы хотите оптимизировать затраты, вы можете использовать бесплатное географическое разрешение Huawei Cloud DNS и собственное доменное имя Cloudflare for SaaS (как показано ниже). перенаправление трафика ──Маршрутизация трафика в материковом Китае Baidu Cloud CDN
, международный трафик идет cloudflare .
Эти решения по оптимизации развертывания более сложны и в будущем будут представлены в отдельных главах.
Общее Перенаправление Доменного Имени
Если вы используете i18n.site
для создания веб-сайта в качестве основного веб-сайта, вам обычно необходимо настроить перенаправление пандомена, то есть перенаправить доступ с *.xxx.com
(включая www.xxx.com
) на xxx.com
.
Это требование можно выполнить с помощью Alibaba Cloud CDN
EdgeScript
( документ на английском языке / Документ на китайском языке ).
Добавьте доменное имя в Alibaba CDN и укажите доменное имя *.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