Найти в Дзене
Aeza

Простая установка собственного Github на базе Gitea с помощью Docker (Ubuntu/Debian)

Оглавление

Создание пользователя Git

Gitea, как и многие репозитории исходного кода, использует SSH для доступа к удаленным репозиториям. Это позволяет пользователям контролировать доступ к своему коду, управляя своими ключами SSH внутри самого Gitea. Однако, чтобы пользователи могли получить доступ к хосту через SSH, вам необходимо создать пользователя git на хост-компьютере. Этот шаг выполняется первым, чтобы вы могли получить доступ к идентификатору пользователя и группы.

Сначала создайте пользователя на хосте, который будет принимать эти подключения:

sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git

В этой команде вы создаете системного пользователя, который использует bash в качестве своей оболочки, но не имеет пароля для входа. Это позволяет вам запускать команды от имени этого пользователя, но не позволяет войти в систему под ним. Вы также устанавливаете домашний каталог пользователя в /home/git.

Эта команда выведет некоторую информацию о только что созданном пользователе:

Adding system user `git' (UID 109) ... Adding new group `git' (GID 115) ... Adding new user `git' (UID 109) with group `git' ...
Creating home directory `/home/git' ...

В данных строках мы можем увидеть UID и GID ново созданного аккаунта, запомним их.

Установка и настройка Gitea Docker

Gitea имеет образ, доступный в глобальном репозитории Docker, а это означает, что с помощью Docker Compose вы можете установить и запустить этот образ как службу с небольшими дополнительными усилиями. Сам образ запускает веб-службы Gitea и службы SSH, что позволяет Git получать доступ как из браузера, так и из командной строки.

Чтобы развернуть контейнер Gitea, вы будете использовать Docker Compose, декларативный инструмент для настройки среды.

Установим docker и docker-compose для дальнейшей установки:

sudo apt install docker docker-compose

Для начала создайте каталог для размещения вашего сервиса и войдите в него:

mkdir ~/gitea
cd ~/gitea

После, создадим файл с именем docker-compose.yml, а затем откроем его для редактирования в редакторе nano:

nano docker-compose.yml

Затем вставим содержимое ниже в файл:

version: "3"

networks:
gitea:
external: false

services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=UID_С_ШАГА_1
- USER_GID=GID_С_ШАГА_1
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /home/git/.ssh/:/data/git/.ssh
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "127.0.0.1:3000:3000"
- "127.0.0.1:2222:22"

В строках

environment:
- USER_UID=UID_С_ШАГА_1
- USER_GID=GID_С_ШАГА_1

Заменяем UID и GID с шага 1.

Рассмотрим главную строку данного файла:

ports:
- "127.0.0.1:3000:3000"
- "127.0.0.1:2222:22"

2ая строка: порт для реверса трафика к интерфейсу Gitea
3ья строка: порт для SSH, в данном случае используется порт 2222, так как стандартный порт 22 уже задействован.

Сохраняем файл комбинацией Ctrl-X, а затем подтверждаем сохранение, введя Y

Настройка Nginx в качестве reverse-proxy

Запуск веб-службы, такой как Gitea, за обратным прокси-сервером является обычной практикой, поскольку современное серверное программное обеспечение, такое как Apache или Nginx, может легче обрабатывать несколько служб на одном компьютере, распределять нагрузку между несколькими серверами и обрабатывать SSL. Кроме того, это позволит вам настроить доменное имя, указывающее на ваш экземпляр Gitea, работающий на стандартных портах HTTP(S).

Поэтому установим nginx:

sudo apt install nginx

А затем, создадим и откроем файл для редактирования по пути /etc/nginx/sites-available/gitea с помощью nano:

sudo nano /etc/nginx/sites-available/gitea

Вставим в файл содержимое ниже:

server {
# Listen for requests on your domain/IP address.
server_name your_domain;

root /var/www/html;

location / {
# Proxy all requests to Gitea running on port 3000
proxy_pass http://localhost:3000;

# Pass on information about the requests to the proxied service using headers
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Важно! Замените your_domain на ip адрес вашего сервера.

После редактирования файла сохраните файл

А затем, "активируем наш сайт":

sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea

А после, перезапустим службу NGINX:

sudo systemctl restart nginx

Настройка брандмауэра

Это действие достаточно простое, поэтому его можно выполнить в несколько команд (в случае если используется брандмауэр ufw):

ufw allow "Nginx Full"

Данная команда автоматически открывает все необходимые порты.

Запуск Gitea

Для удобной работы сервера установим tmux (терминальный менеджер окон):

sudo apt install tmux

Место для шпаргалки по tmux, можно взять с прошлых статей

Создадим новую сессию командой:

tmux new-session

А затем, запустим сам сервер Gitea:

docker-compose up

Дожидаемся строки:

gitea | 2022/05/20 21:12:23 ...s/graceful/server.go:61:NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: 17

Эта строка означает, что мы успешно запустили сервер Gitea и успешно можем перейти к

Первоначальная настройка

Откроем страницу: http://IPСервера/

И увидим примерное содержимое:

-2

Для начала, установим главные параметры: Домен сервера, Базовый URL адрес и HTTP порт

В поле домен сервера достаточно вести IP адрес сервера

А в базовом URL ввести ссылку формата: http://IPАдрес/

По желанию можно также настроить учетную запись администратора в соответствующей вкладке.
Пример правильно настроенного Gitea:

-3

После настройки достаточно нажать кнопку "Установить Gitea".

Готово, вы полностью завершили установку Gitea на ваш сервер. Теперь вы можете создавать репозитории и организации, управлять исходным кодом и проектами.