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

mtls

Настройка и конфигурация сертификата mTLS для Headless CMS OneEntry с использованием токенов и mTLS, а также развертывание приложения на сервере с Nginx, Docker и GitLab

Часть 1: Настройка mTLS

Защита API
  1. 1. Используя токен: Сгенерируйте токен в настройках OneEntry и добавьте его в заголовки запроса с параметром 'x-app-token', где значение — это токен.
  2. 2. Используя mTLS: Включите опцию mTLS в вашей панели управления OneEntry и сгенерируйте сертификат в настройках OneEntry.
Настройка сертификата
  1. 1. В вашей панели управления перейдите на вкладку 'Доступ' и переключитесь с токена на mTLS.
  2. 2. Сгенерируйте новый сертификат в OneEntry ('Настройки' -> 'Сертификаты приложений' -> 'Создать новый сертификат').
  3. 3. Скачайте его на свой компьютер и извлеките в папку 'cert' в корне вашего проекта.
Настройка локальной среды (на примере ReactJS)
  1. 1. Скачайте файл setupProxy.js и сохраните его в папке 'src'.
  2. 2. Отредактируйте параметр 'target', указав адрес вашего проекта.
  3. 3. Установите пакет 'http-proxy-middleware': 'npm install http-proxy-middleware'.
  4. 4. Запустите приложение.

Часть 2: Конфигурация сервера

Подготовка сервера
  1. 1. Обновите информацию о репозитории: `apt update`.
  2. 2. Добавьте репозиторий Docker и установите пакеты: `apt install nginx certbot docker-ce pwgen`.
Конфигурация UFW
  1. 1. Заблокируйте все входящие соединения: `ufw default deny incoming`.
  2. 2. Разрешите все исходящие соединения: `ufw default allow outgoing`.
  3. 3. Разрешите входящие TCP-соединения на портах 22, 80 и 443: `ufw allow 22,80,443/tcp`.
Конфигурация SSH
  1. 1. Отредактируйте конфигурацию демона SSH: `nano /etc/ssh/sshd_config`.
  2. 2. Установите `PasswordAuthentication no`.
  3. 3. Перезапустите демон SSH: `systemctl restart ssh`.
Конфигурация Nginx
  1. 1. Удалите файл конфигурации по умолчанию: `rm /etc/nginx/sites-available/default`
  2. 2. Создайте новый файл конфигурации: `nano /etc/nginx/sites-available/my_app`.
  3. 3. Скачайте и отредактируйте конфигурацию Nginx из OneEntry, заменив "your_domain.com" на ваш домен.
  4. 4. Затем выполните команду: ‘ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled', заменив "my_app" на имя вашего файла конфигурации.
  5. 5. Выпустите SSL-сертификаты с помощью Certbot: `certbot certonly --webroot -w /var/www/html -d your_domain`
  6. 6. Проверьте автоматическое обновление сертификатов: `certbot renew --dry-run`.
  7. 7. Отредактируйте задачу cron Certbot для автоматической перезагрузки конфигурации Nginx после выпуска сертификатов: ‘nano /etc/cron.d/certbot', заменив последнюю строку на: `echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot`
  8. 8. Раскомментируйте строки в файле конфигурации 'nano /etc/nginx/sites-available/my_app' (где 'my_app' — это имя вашего файла конфигурации).
  9. 9. Проверьте конфигурацию Nginx: `nginx -t`
  10. 10. Перезагрузите Nginx после каждого изменения: `nginx -s reload`.

Часть 3: Развертывание приложения с GitLab и GitHub

GitHub
Создание нового пользователя для GitHub Runner
  1. 1. Сгенерируйте пароль: 'pwgen -s 15 1'
  2. 2. Создайте нового пользователя: 'useradd -m github-runner'
  3. 3. Установите для него пароль: 'passwd github-runner'
  4. 4. Добавьте нового пользователя в группы: 'usermod -aG docker github-runner' и 'usermod -aG sudo github-runner'.
  5. 5. Измените оболочку для пользователя GitHub Runner: 'chsh -s /bin/bash github-runner'
  6. 6. Переключитесь на нового пользователя: 'sudo su - gitlab-runner'.
Конфигурация GitHub Runner
  1. 1. Создайте GitHub Runner: перейдите в настройки вашего репозитория, нажмите на 'Actions' и выберите 'Runners', затем нажмите на 'New self-hosted runner'.
  2. 2. Следуйте инструкциям в блоке 'Download' и первой команде в блоке 'Configure'.
  3. 3. Добавьте Runner в автозагрузку системы: 'sudo ./svc.sh install'. Вам нужно будет ввести ранее сгенерированный пароль.
  4. 4. Запустите Runner: 'sudo ./svc.sh start'.
  5. 5. Перейдите в раздел 'Actions', нажмите на 'Runners' и убедитесь, что 'Runner' работает.
  6. 6. Вернитесь к пользователю 'root'.
  7. 7. Создайте рабочую директорию: 'mkdir -p /var/apps/frontend'
  8. 8. Установите права для пользователя 'github-runner': 'chown -R github-runner:docker /var/apps/frontend'.
Конфигурация переменных окружения в GitHub
  1. 1. Создайте переменные `DOMAIN`, `MTLS_USER_CERT`, и `MTLS_USER_KEY` в вашем репозитории GitHub ('Настройки' -> 'Secrets and Variables').
  2. 2. Сгенерируйте сертификат в OneEntry, добавьте сертификат и ключ в переменные. В переменной `DOMAIN` укажите адрес вашего проекта без https.
  3. 3. Скачайте файл docker-compose.yml и два архива .github и .docker.
  4. 4. Поместите docker-compose.yml, .github.zip и .docker.zip в корневую папку вашего проекта и извлеките архивы (вы можете удалить архивы после извлечения).
  5. 5. Выполните команду push в вашем проекте.
  6. 6. Проверьте процесс в вкладке 'Actions'.
  7. 7. Проверьте доступность приложения в браузере.
GitLab
Регистрация GitLab Runner
  1. 1. Укажите теги 'docker, frontend'.
  2. 2. Перейдите в 'Настройки -> CI/CD -> Runners' и нажмите кнопку 'New project runner'.
  3. 3. Перейдите в созданную директорию: `cd /var/apps/gitlab-runner`.
  4. 4. Выполните команду для начала процесса регистрации: `docker compose run runner register`.
  5. 5. Введите URL GitLab, например, https://gitlab.com/.
  6. 6. Получите токен регистрации из GitLab (в разделе 'Runners' проекта) и вставьте его в терминал.
  7. 7. Укажите исполнителя как 'docker'.
  8. 8. Укажите образ по умолчанию как docker:20.10.16.
Настройка переменных окружения в GitLab
  1. 1. Создайте переменные `DOMAIN`, `MTLS_USER_CERT`, и `MTLS_USER_KEY` в вашем репозитории GitLab ('Настройки' -> 'CI/CD' -> 'Variables').
  2. 2. Сгенерируйте сертификат в OneEntry, добавьте сертификат и ключ в переменные, и укажите адрес вашего проекта без https в переменной `DOMAIN`.
  3. 3. Скачайте файлы docker-compose.yml, .gitlab-ci.yml и архив .docker, поместите файлы в корень вашего проекта и распакуйте архивы (вы можете удалить архивы после распаковки).
Подготовка конфигурации GitLab Runner (исполнитель Docker)
  1. 1. Создайте необходимые директории: `mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner`
  2. 2. Выполните команду: `cat \ /var/apps/gitlab-runner/docker-compose.yamlversion: '3' services: runner: image: 'gitlab/gitlab-runner:v16.2.0' restart: always container_name: 'gitlab-runner' privileged: true volumes: - './volumes/etc/gitlab-runner:/etc/gitlab-runner' - '/var/run/docker.sock:/var/run/docker.sock' EOT`
Конфигурация GitLab Runner
  1. 1. Отредактируйте файл конфигурации: `nano volumes/etc/gitlab-runner/config.toml`.
  2. 2. Установите параметр `priviledged` в `true` для включения Docker-in-Docker.
  3. 3. Измените значение `volumes` на `['/var/run/docker.sock:/var/run/docker.sock', '/cache']` для корректной работы Docker.
  4. 4. Добавьте `user = 'gitlab-runner'` в начале файла, чтобы запускать Runner от этого пользователя.
  5. 5. Сохраните изменения и выйдите из редактора.
  6. 6. Перезапустите Runner: 'systemctl restart gitlab-runner'.
Активация и проверка GitLab Runner
  1. 1. Выполните команду `docker compose up -d` для запуска Runner.
  2. 2. Перейдите в GitLab и проверьте, что Runner активен и работает (вы должны увидеть его статус в разделе 'Runners' проекта).
Настройка дополнительного Runner на хосте (исполнитель shell)
  1. 1. Следуйте Инструкциям для установки дополнительного Runner, который работает непосредственно на хосте (не в Docker).
  2. 2. Установите теги для Runner: 'shell, frontend'.
Права Runner
  1. 1. Добавьте нового пользователя в группу: 'usermod -aG docker gitlab-runner'
  2. 2. Если нужно изменить владельца и группы для файла или директории: 'chown -R gitlab-runner:docker /var/apps/frontend'

Финальная конфигурация и тестирование

  1. 1. Убедитесь, что все Runners правильно настроены и готовы к использованию.
  2. 2. Выполните команду push в вашем проекте.
  3. 3. Проверьте прогресс в 'Build' -> 'Pipelines'.
  4. 4. Проверьте доступность приложения в браузере.

Заключение

Следуйте этим шагам для успешной настройки и развертывания вашего приложения с OneEntry. Удачи в разработке!