Установка и настройка генератора сайтов Docusaurus с сохранением в локальной системе контроля версий Gitlab и автоматической публикацией в Gitlab Pages
Данная инструкция предполагает что установка выполняется в локальной сети на виртуальную машину Ubuntu 20.04 (настройка ВМ выходит за рамки данной инструкции)
На виртуальной машине будут установлены:
- Docker - в контейнере будет выполнятся генерация сайта Docusaurus
- Gitlab CE - система контроля версий
- Gitlab runners - необходим для запуска CI процесса
Дополнительно, для первичной иничиализации git репозитория будет развернут генератор сайтов Docusaurus.
Обновление Ubuntu 20.04
После "чистой" установки ОС необходимои обновить пакетную базу и выполнить установку дополнительных пакетов
sudo apt update && sudo apt -y upgrade
sudo apt install -y openssh-server vim git
Установка Docker
Добавляем ключи GPG
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Добавляем репозиторий
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Производим установку Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Дополнительные настройки для работы Docker от имени пользователя
sudo usermod -aG docker $USER
newgrp docker
Установка Gitlab CE
Устанавливаем дополнительные пакеты, добавляем репозиторий и выполняем установку Gitlab CE
sudo apt-get install -y curl ca-certificates tzdata perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce
Вносим изменения в конфигурацию
sudo vi /etc/gitlab/gitlab.rb
Правим следующие параметры
...
external_url 'http://192.168.0.16'
...
pages_external_url "http://pages.local/"
gitlab_pages['enable'] = true
....
ВАЖНО В конфигурации указывается ip адрес виртуалной машины 192.168.0.16
для основного интерфейса Gitlab и доменное имя которое будет использовано для доступа к Pages pages.local
ПРИМЕР Установить статическую запись DNS на роутере Mikrotik IP->DNS->Static
Regexp .*\.pages\.local
Type A
Address 192.168.0.16
Применим настройки конфигурации
sudo gitlab-ctl reconfigure
Задаем новый пароль для пользователя root
в Gitlab
sudo gitlab-rake "gitlab:password:reset"
В командной строке вводим имя пользователя, пароль и подтверждаем пароль
Enter username: root
Enter password:
Confirm password:
Установка gitlab-runner
Добавляем репозиторий и устанавливаем пакет
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt install gitlab-runner
Для каждого проекта в Gitlab при необхдимости нужно создавать свой Runner. Делается это в настройках проекта (Settings->CI/CD->Runners). После создания его необходимио зарегистрировать в системе.
Например
gitlab-runner register --url http://192.168.0.16 --token glrt-t3_Cb1-nS4KrHjxz7zPhMbS
ВАЖНО После регистрации Runner не будет выполнятся в автоматическом режиме
Ручной запуск можно выполнить командой
gitlab-runner run
Для того чтобы Runner запускался автоматически при обновлении проекта существует 2 варианта:
-
Выполнить запуск команды
nohup gitlab-runner run &
которая запустит процесс от имени пользователя и будет использовать конфигурационный файл
/home/<user>/.gitlab-runner/config.toml
(подробнее man nohup) -
Выполнить запуск systemd сервиса
sudo systemctl start gitlab-runner
который будет использовать конфигурационный файл
/etc/gitlab-runner/config.toml
Установка Docusaurus
Загружаем установочные скрипты NodeJS
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
Загружаем обновление
source ~/.bashrc
Выполняем установку
nvm install 22
После установки прверяем версию
node -v
Должна быть v22.11.0
Создаем рабочий каталог и выполняем установку Docusaurus
mkdir docusaurus && cd docusaurus
npx create-docusaurus@latest my-site classic
cd my-site
Выполняем команду запуска локального сервера
npm run start -- --host 0.0.0.0
Если все выполнено корректно сервер ответит по адресу http://192.168.0.16:3000
Установка Docusaurus на Gitlab и запуск CI
Переходим по ссылке для создания пустого проекта: https://192.168.0.16/projects/new#blank_project
Заполняем поля:
Project name
- любое имя проекта.Project slug
- имя репозитория (далее в примере используетсяyour-test-site
).- Выбрать чекбокс
Public
. - Убрать чекбокс
Initialize repository with a README
. - Нажать кнопку
Create project
.
Клонируем пустой проект
git clone https://192.168.0.16/root/your-test-site.git
Переходим в каталог проекта
cd your-test-site
Указываем локальные реквизиты для работы с проектом
git config --local user.name "Administrator"
git config --local user.email "gitlab_admin_23a561@example.com"
Переключаем ветку
git switch -c main
Копируем файлы ранее установленного Docusaurus
cp -r ~/docusaurus/my-site/* ./
Добавляем все файлы в проект
git add --all
Сохраняем изменения в проекте
git commit -m "add files"
Загружаем проект на Gitlab
git push --set-upstream origin main
Создание конфигурации CI
Создаем в проекте файл
vi .gitlab-ci.yml
С конфигурацией
image: node:latest
# allow caching for faster deployment
cache:
paths:
- node_modules/
- public/
- .cache/
pages:
stage: deploy
script:
- yarn install
- yarn build:gitlab
artifacts:
paths:
- public
only:
- main
Редактируем правила сборки Docusaurus
vi package.json
Добаляем после строки "build": "docusaurus build",
правило для публикации
"build:gitlab": "docusaurus build --out-dir public",
Редактируем конфигурацию Docusaurus
vi docusaurus.config.js
Указываем параметр baseUrl
в соответствии с именем проекта в Gitlab
baseUrl: '/your-test-site/',
ВАЖНО Перед последующими шагами необходимио зарегистрировать Runner для данного проекта.
Для этого переходим в интерфейсе проекта Gitlab Settings->CI/CD->Runners
- Нажимаем кнопку
New project runner
- Отмечаем чекбокс
Run untagged jobs
- Нажимаем кнопку
Create runner
После этого копируем команду регистрации и запускаем в системе
gitlab-runner register --url http://192.168.0.16 --token glrt-t3_mPKkd4dHgo8zau8yuyic
Отвечаем на вопросы регистратора
Enter the GitLab instance URL
- указать URL Gitlab или можно просто нажатьEnter
Enter a name for the runner.
- указать имя или можно просто нажатьEnter
Enter an executor:
- указываемdocker
Enter the default Docker image
- указываемnode:latest
Запускаем runner любым удобным способом (описано выше)
Добавляем все файлы в проект
git add .
Сохраняем изменения в проекте
git commit -m "add CI configs"
Загружаем проект на Gitlab
git push
После публикации проекта и при запущенном Runner автоматически начнется генерация и публикация проекта Docusaurus
Состояние можно посмотреть в меню проекта Build->Jobs
После окончания сборки и публикации проекта в Pages состояние сборки изменится на Passed
Переходим в меню проекта Deploy->Pages
- Снимаем чекбокс
Use unique domain
- Нажимаем кнопку
Save changes
- Проверяем что URL проекта доступен
Добавление модуля поиска в проект Docusaurus
Выполняем команду установки в каталогк проекта
npm i docusaurus-lunr-search --save
Редактируем конфигурацию Docusaurus
vi docusaurus.config.js
Добавляем описание модуля поиска перед строкой themeConfig:
plugins: [
require.resolve('docusaurus-lunr-search')
],
themeConfig:
ПРИМЕЧАНИЕ Поиск не работает при локальном запуске, только при публикации на Gitlab Pages
Добавляем все файлы в проект
git add .
Сохраняем изменения в проекте
git commit -m "add search plugin"
Загружаем проект на Gitlab
git push
ПРИМЕЧАНИЕ Чтобы избежать ошибок при публикации Docusaurus на Gitlab Pages желательно перед загрузкой проекта выполнить сборку и проверку при помощи запуска локального сервера.