Обзор развертывания Gitea на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие следующих компонентов и условий: - Операционная система на базе Ubuntu. - Установленный пакетный менеджер apt. - Доступ к серверу с правами root или возможность выполнения команд через sudo. - Наличие свободного порта для веб-интерфейса (по умолчанию 3000 внутри контейнера, маппится на внешний порт, указанный в конфигурации). - Наличие свободного порта для SSH-доступа к репозиториям (по умолчанию 22 внутри контейнера, маппится на внешний порт). - Доступ к интернету для загрузки образов Docker и получения SSL-сертификатов.
Структура файлов и каталогов¶
Приложение и его компоненты размещаются в следующих директориях: - /opt/gitea — каталог для хранения конфигурации Docker Compose самого приложения Gitea. - {{ gitea_data_dir }} — каталог для хранения данных приложения (репозитории, базы данных, файлы сессий). Владелец каталога — пользователь {{ gitea_user }}. - /root/nginx — каталог для конфигурации прокси-сервера и сертификатов. - /data/nginx/user_conf.d — каталог для пользовательских конфигурационных файлов Nginx. - /data/nginx/nginx-certbot.env — файл переменных окружения для настройки Certbot. - /etc/timezone и /etc/localtime — файлы настройки часового пояса сервера.
Процесс установки приложения¶
Установка выполняется в два этапа: подготовка окружения и запуск контейнеров.
- Устанавливаются необходимые пакеты:
docker(через рольdocker-managed-install).-
docker-compose. -
Создается каталог
/opt/giteaс правами доступа0755для пользователяroot. -
Создается каталог для данных приложения
{{ gitea_data_dir }}с правами доступа0755для пользователя{{ gitea_user }}. -
Генерируется файл конфигурации
/opt/gitea/docker-compose.ymlсо следующими параметрами: - Используется образ
gitea/gitea:{{ gitea_version }}. - Имя контейнера:
gitea. - Переменные окружения:
USER_UID=1000,USER_GID=1000. - Политика перезапуска:
always. - Монтирование тома данных:
{{ gitea_data_dir }}:/data. - Монтирование файлов часового пояса:
/etc/timezoneи/etc/localtime. -
Открытие портов:
{{ gitea_port }}:3000и{{ gitea_ssh_port }}:22. -
Настраивается часовой пояс сервера на
Europe/Moscowпутем записи в файл/etc/timezoneи создания символической ссылки/etc/localtime. -
Запускается контейнер Gitea с помощью команды
docker-compose up -dв директории/opt/gitea.
Контейнеры Docker и их запуск¶
В системе развертываются два основных набора контейнеров:
Контейнер Gitea: - Запускается через docker-compose из файла /opt/gitea/docker-compose.yml. - Образ: gitea/gitea:{{ gitea_version }}. - Сеть: gitea (внутренняя сеть Docker). - Данные сохраняются в томе, смонтированном в /data внутри контейнера.
Контейнер Nginx с Certbot: - Запускается через docker compose up -d в директории /root/nginx. - Используется файл конфигурации /root/nginx/compose.yml. - Образ: jonasal/nginx-certbot:latest. - Политика перезапуска: unless-stopped. - Режим сети: host. - Переменная окружения CERTBOT_EMAIL установлена в hkadm@hostkey.com. - Монтируется внешний том nginx_secrets в /etc/letsencrypt для хранения сертификатов. - Монтируется каталог /data/nginx/user_conf.d в /etc/nginx/user_conf.d для конфигураций.
Прокси серверы¶
Для обработки входящего трафика и получения SSL-сертификатов используется контейнер Nginx с Certbot.
- Конфигурация прокси генерируется в файле
/root/nginx/compose.yml. - В конфигурационный файл
/data/nginx/user_conf.d/{{ prefix }}{{ server_id }}.hostkey.in.confдобавляется правило проксирования: - Удаление существующей строки
proxy_pass. - Добавление новой строки
proxy_pass http://127.0.0.1:3000;внутри блокаlocation /. - Сертификаты хранятся в томе
nginx_secrets, смонтированном в/etc/letsencrypt. - Электронная почта для уведомлений от Let's Encrypt:
hkadm@hostkey.com.
Права доступа и безопасность¶
Права на файлы и директории устанавливаются следующим образом: - Директория /root/nginx имеет владельца root:root и права 0755. - Файл /root/nginx/compose.yml имеет владельца root:root и права 0644. - Директория /opt/gitea имеет владельца root:root и права 0755. - Директория данных {{ gitea_data_dir }} имеет владельца {{ gitea_user }}:{{ gitea_user }} и права 0755. - Контейнер Gitea запускается с фиксированными UID и GID (1000), что обеспечивает изоляцию процессов внутри контейнера.
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker Compose в соответствующих директориях.
Для Gitea: - Запуск: docker-compose up -d в директории /opt/gitea. - Проверка статуса: команда docker_container с параметром state: started для контейнера gitea. - Обновление: требуется обновление образа gitea/gitea:{{ gitea_version }} и перезапуск контейнера.
Для Nginx и Certbot: - Запуск: docker compose up -d в директории /root/nginx. - Команда выполняется с повторными попытками (до 5 раз с интервалом 10 секунд) в случае неудачи. - Обновление конфигурации требует регенерации файла /root/nginx/compose.yml и перезапуска контейнеров.