Перейти к основному содержимому

2 записи с тегом "site"

Посмотреть все теги

Блог на Docusaurus и TinaCMS

· 4 мин. чтения
Дмитрий Чудный
Автор сайта

Процесс создания блога на базе статического генератора Docusaurus и Tina CMS.

Задача

Сделать статический сайт, ядром которого будет блог. Сайт не будет требовать ни веб-сервера ни базы данных. По содержимому будет создаваться набор статических файлов. Они будут заливаться в S3 хранилище, которое будет предоставлено как веб-сайт через сервис Хостинг статических сайтов от Yandex Cloud.

Код сайта

  • Клонировал репозиторий: tinacms/tinasaurus
  • Внёс правки, чтобы
    • Обновить зависимости
    • Удалить всё что, мне не нужно на сайте
    • Добавить всё что мне нужно на сайте
    • Настроить сборку по своим требованиям

Хостинг

  • Выбрал домен второго уровня: www.chudnyi.com, верхнего уровня не подходит так как на Хостинг статических сайтов от Yandex Cloud можно настроить только DNS запись типа CNAME, который не поддерживает домены верхнего уровня.
  • Создал облако и каталог в Яндекс.Облако
  • Создал сервисный аккаунт для деплоя файлов сайта в S3 бакет
    • Создал сервисному аккаунту новый статический ключ доступа, получил значения AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY
    • Сохранил все параметры в локальный .env файл
AWS_REGION=ru-central1-b
AWS_ENDPOINT=https://storage.yandexcloud.net
AWS_BUCKET=www.chudnyi.com
AWS_ACCESS_KEY_ID=<your key>
AWS_SECRET_ACCESS_KEY=<your secret>
  • Создал сертификат в менеджере сертификатов от Let's Encrypt
    • Указал домены: chudnyi.com и www.chudnyi.com
    • Задал в DNS записях домена необходимые TXT записи для проверки прав на домен
    • Сертификат в менеджере сертификатов Яндекс выпускается не быстро, может несколько часов
  • Создал бакет в Object Storage с точно таким же именем (это важно) как домен сайта: www.chudnyi.com
    • Максимальный размер ограничил в 1 Гб, можно оставить без ограничения
    • Доступ на чтение объектов: Публичный
    • Класс хранилища: Стандартное
    • В разделе "Веб-сайт"
      • Включил "Хостинг"
      • Главная страница: index.html
      • Страница ошибки: 404.html
    • В разделе HTTPS
      • Источник: Certificate Manager
      • Выбрал сертификат ранее созданный в менеджере сертификатов
    • В разделе Права доступа
      • Нажал кнопку "Назначить роли" сверху справа в углу
      • Выбрал сервисный аккаунт для деплоя сайта
      • Назначил роли: storage.uploader, storage.viewer, storage.editor
  • Добавил в бакет тестовую страницу index.html
  • Проверил, что тестовая страница открывается по ссылке http://www.chudnyi.com.website.yandexcloud.net/
  • В DNS записи своего домена добавил CNAME с параметрами
    • Subdomain: www
    • Canonical name: www.chudnyi.com.website.yandexcloud.net.
    • На обновление DNS записей потребуется время, лучше сделать это заранее
    • Через некоторое время, когда обновится DNS запись CNAME, можно проверить открывается ли тестовая страница по ссылке https://www.chudnyi.com/

Сборка

В package.json заменил команду сборки сайта. Таким образом буду получать статический сайт, который не требует бэкенда Tina.

"scripts": {
"build": "tinacms dev --datalayer-port 9001 -c 'docusaurus build'",
}

Указал порт отличный от 9000 в параметре --datalayer-port 9001 для того, чтобы сборка не падала при запущенном локально dev сервере.

После успешной сборки файлы сайта будут находиться в локальной папке проекта: build.

Добавил скрипт scripts/clean-tina.ts для удаления папки build/admin, так как админка Tina на боевом сайте мне не нужна.

Тестирование

После сборки можно запускаю локальный веб-сервер, чтобы потестировать сайт вручную

"scripts": {
"serve": "docusaurus serve"
}

Деплой

Чтобы выполнить загрузку сайта на боевой хостинг необходимо синхронизировать локальную папку build c S3 бакетом так, чтобы они стали полностью идентичны. При этом каждому файлу обязательно нужно правильно задать HTTP заголовок Content-Type, который сервер будет отдавать в ответе на запрос файла.

Варианты решения описаны тут: Устранение проблем с некорректным MIME-типов объектов при их загрузке в Object Storage | Yandex Cloud - Документация

Попробовав отдельные инструменты aws s3 sync и s3cmd, решил написать свой простой скрипт синхронизации на базе npm библиотеки s3-sync-client. Таким образом мне было проще реализовать определение и задание MIME типа каждому файлу.

"scripts": {
"deploy_s3": "tsx scripts/s3-sync.ts",
"deploy_s3:dev": "dotenv -- npm run deploy_s3"
}

Где

✅ После загрузки всех файлов в S3 хранилище, можно проверять работу сайта по целевой ссылке: https://www.chudnyi.com/

Сылки

Реализовать на сайте

· 2 мин. чтения
Дмитрий Чудный
Автор сайта

🔲 Актуально

  • Отображение описания и картинки, когда делишься ссылкой в мессенджерах и соцсетях
  • Настроить SEO данные Search engine optimization (SEO) | Docusaurus
  • Не работает подсветка синтаксиса блоков кода
  • Разобраться в embeded блоке кода с указанием имени файла, оно не отображается
  • Добавить возможность комментировать статьи на сайте: Варианты: Добавляем комментарии в Docusaurus | Блог _AMD_
  • Восстановить раздел документов, когда они появятся, включить ссылку на редактирование
  • Оптимизация загрузки картинок 📦 plugin-ideal-image | Docusaurus
  • Можно ли развернуть редактор текста статьи Tina на весь экран или сделать его больше
  • Редактор тегов Tina не предоставляет выбор из уже имеющихся тегов. Ввод тега всякий раз как первый. Это не удобно и возможны дубликаты тегов с немного отличным написанием.
  • Сделать, чтобы сайт открывался в странах, где заблокированы IP адреса Яндекса

🧐 Возможно

✅ Сделано

  • Задание автора поста блога по-умолчанию на себя
  • Добавить ссылку на список постов блога по годам "архив"
  • Добавить ссылку на список тегов постов блога
  • Отобразить дату редактирования поста и сортировать посты по дате редактирования
  • Решена проблема редиректа с https://chudnyi.com/ на https://www.chudnyi.com/ при помощи https://redirect.pizza/
  • Добавлено свойство disabled в элемент навигации, чтобы можно было скрывать их, не удаляя из кода
  • Добавлен режим черновиков для постов блога. Посты с тегом draft не попадают в боевую сборку сайта, но отображаются в dev режиме.
  • Добавлен static/robots.txt
  • Добавлен локальный поиск через easyops-cn/docusaurus-search-local: Offline/local search for Docusaurus v2/v3
  • Добавлена яндекс метрика через sgromkov/docusaurus-plugin-yandex-metrica: Yandex.Metrica plugin for Docusaurus v2
  • Ссылки на статьи блога сделаны вложенными в путь /blog при помощи изменения permalink в processBlogPosts

⭕️ Не актуально

  • Выбор автора поста блога из списка blog/authors.yml - не нужно, пока автор я один
  • Создание постов блога через tina не файлами, а папками, чтобы в них оказывались картинки поста - не нужно, картинки добавляются через Tina Media Manager и лежат все в /static/img
  • Не работает вставка картинок из буфера обмена в редакторе tina
  • Добавление в начало имени папки поста блога даты, чтобы сортировка файлов была по времени