Ниже приведена пошаговая инструкция по созданию сайта с помощью генератора статических сайтов Quartz, применением платформ для хранения Git-репозиториев GitFlic, GitHub и редактора/приложения для ведения базы знаний Obsidian.
В инструкции рассмотрен пример запуска сайта по адресу https://hub.zlonov.ru с использованием закрытого (приватного репозитория) с файлами самого Quartz и дополнительными служебными файлами на GitHub: https://github.com/zlonov/hub.zlonov.ru и открытого репозитория с контентом на GitFlic: https://gitflic.ru/project/zlonov/hub.
Используемые названия
В командах ниже используются конкретные названия папок, хранилищ и репозиториев. Их нужно поменять на ваши собственные:
- Локальная папка с репозиторием Quartz:
~/Git/hub.zlonov.ru
. - Локальная папка с репозиторием для контента:
~/Library/Mobile\ Documents/iCloud\~md\~obsidian/Documents/Zettelkästen/hub/
, что соответствует путиiCloud Drive/Obsidian/Zettelkästen/hub/
в файловом менеджере. - Удалённый репозиторий для Quartz: https://github.com/zlonov/hub.zlonov.ru.git
- Удалённый репозиторий для контента: https://gitflic.ru/project/zlonov/hub.git
- Сайт с результатом: https://hub.zlonov.ru
В качественной операционной системы используется macOS Ventura, в других системах пути и команды могут отличаться.
Инициализация Quartz
Будем создавать сайт, сохраняя локальную копию репозитория Quartz в пользовательской папке ~/Git/hub.zlonov.ru
. Предполагается, что папка Git
уже создана ранее. Второй параметр (hub.zlonov.ru
) команды git clone
устанавливает папку, в которую будет клонирован репозиторий. По умолчанию, если не указать второй параметр, в качестве названия папки для клонирования будет использовано имя самого репозитория (quartz
).
Опции, предлагаемые после запуска последней команды, можно выбрать дефолтные:
● Empty Quartz
● Treat links as shortest path ((default))
Посмотреть на получившийся результат можно сразу, запустив локальную версию сайта:
Сайт будет доступен по ссылке: http://localhost:8080/. Прервать работу локальной версии сайта можно в любой момент сочетанием клавиш ctrl+c
в терминале.
Создание удалённых репозиториев
Теперь нам нужны два удалённых репозитория - в одном (приватном) будет храниться код самого Quartz, а в другом (публичном) - контент. Так будем делать для удобства - любой сможет сделать клон контента и работать с ним самостоятельно в Obsidian. Дополнительно так можно увеличить доступное именно для контента дисковое пространство, если тариф выбранной площадки от этого зависит, так как файлы самого движка/генератора сайта Quartz и дополнительные файлы будут храниться в отдельно.
В принципе, можно оставить файлы Quartz (или даже и контент) только локально. Публиковать (на хостинге) можно только сам сгенерированный статичный сайт. Удобство удалённых репозиториев в полной мере раскрывается, когда:
- есть потребность работы одновременно с разных рабочих мест и не хочется каждый раз думать о проблемах с синхронизацией;
- есть необходимость ведения работы в команде;
- присутствует желание сделать часть своей работы (или всю её) публично доступной;
- хочется дать другим людям возможность предлагать правки (через pull request).
В качестве платформы для хранения репозиториев можно выбрать любую удобную. GitHub позволяет полностью автоматизировать процесс генерации и публикации сайта, поэтому для простоты будем использовать именно её для хранения файлов самого Quartz, а для хранения репозитория с контентом будем использовать российский GitFlic.
Бесплатный тариф GitFlic позволяет хранить в одном репозитории до 4 ГБ - это есть смысл учесть при оценке масштабов предстоящего сайта.
Удалённый репозиторий на GitFlic для контента
Входим в свой аккаунт (или сначала регистрируемся) и создаём новый публичный проект:
- Название проекта:
hub
- Описание проекта:
Контент для hub.zlonov.ru
- URL проекта:
https://gitflic.ru/project/zlonov/hub
- Тип проекта:
● Публичный проект
Ссылка на репозиторий будет такой: https://gitflic.ru/project/zlonov/hub.git
Подсказка
На GitFlic в названиях и URL проектов в форме создания нельзя использовать точки.
Подсказка
Для создания публичных проектов необходимо сначала авторизироваться с помощью OAuth2 (ВК/Яндекс) в настройках личного кабинета.
Удалённый репозиторий на GitHub для Quartz
Справка Quartz по теме
https://quartz.jzhao.xyz/setting-up-your-GitHub-repository (на примере платформы GitHub).
Входим в свой аккаунт (или сначала регистрируемся) и создаём новый репозиторий:
- Repository name: hub.zlonov.ru
- Тип: ● Private
Больше ничего не меняем и нажимаем Create repository
.
Подсказка
На GitHub в названиях репозиториев можно использовать точки.
Ссылка на репозиторий будет такой: https://github.com/zlonov/k0mar0v.ru.git
Создание хранилища Obsidian из удалённого репозитория
Так как контент мы решили отделить от файлов Quartz, то для его (контента) хранения будем использовать удобную нам папку. В случае с экосистемой Apple удобнее разместить папку непосредственно в iCloud Drive - так контент будет доступен на всех устройствах с одним и тем же Apple ID и при этом автоматически синхронизироваться. Каких-либо проблем при размещении хранилища Obsidian в iCloud Drive за всё время использования не возникало.
Переходим в желаемую папку и клонируем туда наш репозиторий для контента:
В рассматриваемом примере папка с контентом hub
хранится внутри другого хранилища Obsidian - Zettelkästen
. Такой подход удобен, когда вы хотите работать в одном запущенном окне Obsidian сразу и с контентом, публикуемым на сайте, и с другими своими заметками, которые не планируете делать публичными. Всё публичное будет находиться просто в отдельной собственной папке hub
внутри хранилища Obsidian Zettelkästen
. При этом будут работать все внутренние ссылки, а граф связей строится единый. Важно только следить, чтобы не возникала путаница при использовании одинаковых названий заметок - желательно стремиться, чтобы они оставались уникальными.
На появляющееся после клонирования предупреждение warning: You appear to have cloned an empty repository.
можно не обращать внимания - репозиторий пока действительно пустой.
Теперь нам надо запустить Obsidian и открыть папку hub
либо как отдельное хранилище либо в хранилище Zettelkästen
. В корне hub
надо создать заметку index
либо можно просто скопировать файл index.md
из папки созданного выше локального репозитория: ~/Git/hub.zlonov.ru/content/
. Содержимое заметки index.md
будет являться заглавной (домашней) страницей создаваемого сайта.
Дефолтный index.md
выглядит так:
---
title: Welcome to Quartz
---
This is a blank Quartz installation.
See the [documentation] for how to get started.
Синхронизация локальных изменений репозитория с контентом с удалённым репозиторием
Подсказка
Ниже приведены команды для Терминала, но для удобства можно использовать какой-либо клиент (редактор) Git с графическим интерфейсом: Git GUI clients.
Справка про запись изменений в репозиторий
https://git-scm.com/book/ru/v2/Основы-Git-Запись-изменений-в-репозиторий
Переходим в локальный клон репозитория.
Добавляем все файлы в отслеживаемые:
Убеждаемся, что нужный нам файл index.md
проиндексирован:
Он должен оказаться в разделе “Changes to be committed”:
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.md
Коммитим (вносим) изменения, указав комментарий к нему сразу в командной строке, и отправляем их в удалённый репозиторий:
Примерный результат будет такой:
[main (root-commit) 059b19f] Первый коммит
1 file changed, 4 insertions(+)
create mode 100644 index.md
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 485 bytes | 485.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Updating references: 100% (1/1)
To https://gitflic.ru/project/zlonov/hub.git
* [new branch] main -> main
Можно убедиться, что по ссылке https://gitflic.ru/project/zlonov/hub/file появился наш файл index.md
.
Подсказка
Если будут какие-либо сложности с правами доступа (например,
fatal: unable to access
или/иThe requested URL returned error: 403
), для разрешения которых опыта работы с Git через командную строку пока недостаточно, то проще воспользоваться клиентом Git с графическим интерфейсом: Git GUI clients. Необходимые права доступы они обычно самостоятельно умеют запрашивать и кэшировать для дальнейшего использования. В Git-клиент нужно добавить наш репозиторий черезAdd Existing Repository...
или подобную команду меню, для которой указать путь кiCloud Drive/Obsidian/Zettelkästen/hub/
.
Подсказка
Дальнейшую синхронизацию можно продолжать выполнять через команды для Терминала, но для удобства можно использовать какой-либо клиент (редактор) Git с графическим интерфейсом: Git GUI clients. В Git-клиент нужно добавить наш репозиторий через
Add Existing Repository...
или подобную команду меню, для которой указать путь кiCloud Drive/Obsidian/Zettelkästen/hub/
. Удобство клиента, помимо наглядности, в том числе в автоматическом запросе и сохранении на будущее данных учётной записи для доступа к удалённому репозиторию.
Подключение удалённого репозитория Quartz к локальному
Справка Quartz по теме
https://quartz.jzhao.xyz/setting-up-your-GitHub-repository (на примере платформы GitHub).
Переходим в локальную папку с инициированным репозиторием Quartz:
Проверяем все отслеживаемые репозитории:
Результат будет примерно таким:
origin https://github.com/jackyzha0/quartz.git (fetch)
origin https://github.com/jackyzha0/quartz.git (push)
upstream https://github.com/jackyzha0/quartz.git (fetch)
upstream https://github.com/jackyzha0/quartz.git (push)
Нам надо поменять origin на наш собственный репозиторий, ссылку на который мы получили на предыдущем этапе:
Если вдруг в качестве upstream не установлен репозиторий Quartz, добавим его, чтобы обновления самого Quartz работали:
Проверяем все отслеживаемые репозитории ещё раз:
Результат должен быть примерно таким:
origin https://github.com/zlonov/hub.zlonov.ru.git (fetch)
origin https://github.com/zlonov/hub.zlonov.ru.git (push)
upstream https://github.com/jackyzha0/quartz.git (fetch)
upstream https://github.com/jackyzha0/quartz.git (push)
Подсказка
Дальнейшую синхронизацию можно продолжать выполнять через команды для Терминала, но для удобства можно использовать какой-либо клиент (редактор) Git с графическим интерфейсом: Git GUI clients. В Git-клиент нужно добавить наш репозиторий через
Add Existing Repository...
или подобную команду меню, для которой указать путь к~/Git/hub.zlonov.ru/
. Удобство клиента, помимо наглядности, в том числе в автоматическом запросе и сохранении на будущее данных учётной записи для доступа к удалённому репозиторию.
Теперь можно синхронизировать контент и загрузить его в свой репозиторий. Данная команда выполнит первоначальную отправку контента:
Вывод результата работы команды должен быть примерно таким:
Quartz v4.2.3
Backing up your content
[v4 cd15cda] Quartz sync: Mar 4, 2024, 10:38 AM
2 files changed, 6 insertions(+)
delete mode 100644 content/.gitkeep
create mode 100644 content/index.md
Pushing your changes
Enumerating objects: 8388, done.
Counting objects: 100% (8388/8388), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3027/3027), done.
Writing objects: 100% (8388/8388), 6.33 MiB | 9.22 MiB/s, done.
Total 8388 (delta 5277), reused 8360 (delta 5253), pack-reused 0
remote: Resolving deltas: 100% (5277/5277), done.
To https://github.com/zlonov/hub.zlonov.ru.git
* [new branch] v4 -> v4
branch 'v4' set up to track 'origin/v4'.
Done!
В удалённом репозитории теперь появятся файлы самого Quartz и папка content c нашим файлом index.md
: https://github.com/zlonov/hub.zlonov.ru
Для дальнейшей синхронизации можно пользоваться либо командой npx quartz sync
либо Git-клиентом.
Подключение репозитория с контентом в качестве подмодуля
Итак, репозиторий с контентом hub
теперь находится в локальном хранилище Obsidian, с помощью которого можно (и нужно) его редактировать. Он синхронизируется средствами Git с удалённым репозиторием на площадке GitFlic: https://gitflic.ru/project/zlonov/hub/
.
Сам же Quartz у нас локально установлен в папке ~/Git/hub.zlonov.ru
и синхронизируется с удалённым репозиторием https://github.com/zlonov/hub.zlonov.ru.git
.
При генерации статичного сайта Quartz использует файлы, находящиеся в папке ~/Git/hub.zlonov.ru/content/
, поменяем теперь настройки так, чтобы использовалась папка из репозитория https://gitflic.ru/project/zlonov/hub.git
. Для этого надо подключить этот репозиторий в качестве подмодуля к репозиторию самого Quartz.
Справка про подмодули в Git
В принципе, можно настроить работу Quartz так, чтобы он обращался за контентом в локальную папку, но тогда генерировать сайт получится тоже только локально. Автоматизация на GitHub не будет работать, так как в удалённом репозитории просто не будет нужных файлов - они все будут хранится локально.
Сначала удаляем папку content
и отправляем изменения в удалённый репозиторий:
Теперь создаём подмодуль командой git submodule add
, указвая путь к публичному репозиторию с контентом:
Если всё сделано правильно, в командной строке появится примерно такой текст:
Cloning into '/Users/zlonov/Git/hub.zlonov.ru/content'...
remote: Counting objects: 3, done
remote: Finding sources: 100% (3/3)
remote: Getting sizes: 100% (2/2)
remote: Total 3 (delta 0), reused 3 (delta 0)
Receiving objects: 100% (3/3), 485 bytes | 485.00 KiB/s, done.
В результате в репозитории ~/Git/hub.zlonov.ru
будет создана папка content
и файл .gitmodules
такого содержания:
[submodule "content"]
path = content
url = https://gitflic.ru/project/zlonov/hub.git
Эти изменения нужно отправить в удалённый репозиторий:
После успешного завершения в удалённом репозитории (https://github.com/zlonov/hub.zlonov.ru) можно будет увидеть, что у папки content
изменилась иконка - теперь это папка со стрелочкой, что означает, что в качестве её содержимого используются файлы из другого репозитория, ставшего подмодулем.
Синхронизация репозитория с подмодулем
Так как папка с контентом content
теперь является отдельным репозиторием, сначала все вносимые изменения надо коммитить в нём. Далее для основного репозитория, для которого репозиторий с контентом является подмодулем, нужно будет выполнять команду проверки и обновления:
Справка про псевдонимы
Можно заменить эту длинную команду на короткий псевдоним (alias):
Теперь вместо длинной команды можно писать просто:
Алгоритм обновления репозитория https://github.com/zlonov/hub.zlonov.ru с подмодулем https://gitflic.ru/project/zlonov/hub будет таким:
- Вносим изменения в папке с контентом средствами Obsidian;
- Коммитим изменения в репозитории с контентом (как вариант, выполняем в Git-клиенте для репозитория с контентом команды Git-клиента:
Commit to master
иPush
); - Обновляем репозиторий с учётом изменений подмодуля
git sup
- Выполняем
git commit -a -m "Обновление контента"
(благодаря опции-a
не нужно выполнятьgit add ИМЯ.ФАЙЛА
) и отправляем изменения на серверgit push
либо, как вариант, выполняем в Git-клиенте для репозитория с Quartz команды:Commit to v4
иPush
.
Для упрощения выполнения команд из пунктов 3 и 4 можно создать короткий псевдоним git config alias.up '!git submodule update --remote --merge && git commit -a -m "Update content" && git push'
и далее использовать его: git up
.
Справка про запись изменений в репозиторий
https://git-scm.com/book/ru/v2/Основы-Git-Запись-изменений-в-репозиторий
Настройка хостинга GitHub Pages
Так как в качестве Git-репозитория для файлов самого Quartz и вспомогательных файлов в рассматриваемом примере используется GitHub, то удобно воспользоваться его возможностями по автогенерации сайта и хостингу.
Справка по теме
В папке репозитория ~/Git/hub.zlonov.ru
нужно создать новый файл /.github/workflows/deploy.yml
с содержимым как ниже. Важно добавить проверку подмодулей - строка submodules: true
ниже:
name: Deploy Quartz site to GitHub Pages
on:
push:
branches:
- v4
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for git info
submodules: true
- uses: actions/setup-node@v3
with:
node-version: 18.14
- name: Install Dependencies
run: npm ci
- name: Build Quartz
run: npx quartz build
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: public
deploy:
needs: build
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
Переходим в настройках репозитория (вкладка Settings
) в настройки страницы (пункт Pages
в боковом меню) и в настройке Source
выбираем GitHub Actions
.
Отправляем изменения в удалённый репозиторий:
Или пользуемся командами Git-клиента: Commit to v4
и Push
.
Можно посмотреть как выполняются Actions и при необходимости перезапустить их: https://github.com/zlonov/hub.zlonov.ru/actions/
По завершению сайт будет доступен по адресу <github-username>.github.io/<repository-name>
(https://zlonov.github.io/hub.zlonov.ru/)
Настройка собственного доменного имени для Github Pages
Общая информация
Справки по теме
https://docs.github.com/ru/pages/configuring-a-custom-domain-for-your-github-pages-site
Чтобы использовать GitHub pages для публикации своего сайта нужно:
Link to original
- Перейти в
Settings
своего репозитория.- В разделе
Code and automation
в боковом меню выбратьPages
.- В поле
Custom Domain
, написать адрес своего домена и нажатьSave
.- Следующие шаги зависят от используемого домена - Apex (
example.com
) или Subdomain (subdomain.example.com
).
- If you are using an apex domain, navigate to your DNS provider and create an
A
record that points your apex domain to GitHub’s name servers which have the following IP addresses:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
- If you are using a subdomain, navigate to your DNS provider and create a
CNAME
record that points your subdomain to the default domain for your site. For example, if you want to use the subdomainquartz.example.com
for your user site, create aCNAME
record that pointsquartz.example.com
to<github-username>.github.io
.
Указание поддомена на примере hub.zlonov.ru
Создаём в DNS сервисе запись:
- тип
CNAME
- Хост:
hub
- Указывает на
zlonov.github.io
Получение информации о домене
Команда:
dig hub.zlonov.ru +noall +answer
Ссылка: https://losst.pro/komanda-dig-v-linux#toc-1-poluchenie-informacii-o-domene
Проверяем:
Пример результата:
hub.zlonov.ru. 3600 IN CNAME zlonov.github.io. zlonov.github.io. 3600 IN A 185.199.108.153 zlonov.github.io. 3600 IN A 185.199.111.153 zlonov.github.io. 3600 IN A 185.199.109.153 zlonov.github.io. 3600 IN A 185.199.110.153
Убеждаемся, что DNS запись корректно определяется GitHub Pages: https://github.com/zlonov/hub.zlonov.ru/settings/pages
Теперь сайт доступен по адресу: https://hub.zlonov.ru
Link to original
Указание корневого домена на примере k0mar0v.ru
Создаём в DNS сервисе 4 записи:
- тип
А
- Хост:
.k0mar0v.ru
- Указывает на
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
Проверяем:
Пример результата:
k0mar0v.ru. 3547 IN A 185.199.111.153 k0mar0v.ru. 3547 IN A 185.199.110.153 k0mar0v.ru. 3547 IN A 185.199.109.153 k0mar0v.ru. 3547 IN A 185.199.108.153
Убеждаемся, что DNS запись корректно определяется GitHub Pages: https://github.com/zlonov/k0mar0v.ru/settings/pages
Теперь сайт доступен по адресу: https://k0mar0v.ru
Link to original