Gitea - это безболезненный Git-сервис, созданный самостоятельно и подобный GitHub, Bitbucket и Gitlab.

Главная цель Gitea - предоставить самый быстрый, самый простой и самый безболезненный способ настройки сервиса Git для собственного размещения. Будучи написанным на Go, он распространяется в виде двоичного пакета, который работает на всех платформах и архитектурах, которые поддерживает Go.

Требования

  • Ubuntu 18.04 Server с как минимум 2 ядрами процессора и 1 ГБ ОЗУ
  • Пользователь без полномочий root с привилегиями sudo.
  • Nginx
  • Git
  • Сервер базы данных MariaDB

Шаг 1: Установите Nginx

Обновите свой Ubuntu 18.04 Server.

$ sudo apt update

Установите Nginx.

$ sudo apt -y install nginx

После установки Nginx проверьте, работает ли он или нет, просмотрев тестовую страницу nginx в браузере. Откройте веб-браузер и укажите его на http://example.com

Следующие команды могут использоваться для остановки, перезагрузки, перезапуска, проверки состояния и включения Nginx.

$ sudo systemctl stop nginx.service
$ sudo systemctl start nginx.service
$ sudo systemctl restart nginx.service
$ sudo systemctl reload nginx.service
$ sudo systemctl enable nginx.service

Шаг 2: Установите Git

Установите Git.

$ sudo apt -y install git

После установки проверьте версию:

$ git --version
$ git version 2.17.1

Шаг 3: Установите сервер базы данных MariaDB

Gitea поддерживает следующие базы данных

  • MariaDB/MySQL
  • PostgreSQL
  • SQLite
  • TiDB

Для этого урока мы установим сервер и клиент MariaDB.

$ sudo apt -y install mariadb-server mariadb-client

После установки MariaDB приведенные ниже команды могут использоваться для остановки, запуска, перезапуска, проверки состояния и включения его.

$ sudo systemctl stop mariadb.service
$ sudo systemctl start mariadb.service
$ sudo systemctl restart mariadb.service
$ sudo systemctl status mariadb.service
$ sudo systemctl enable mariadb.service

После этого выполните приведенную ниже команду, чтобы защитить сервер MariaDB, создав пароль root и запретив удаленный доступ root.

$ sudo mysql_secure_installation

Когда будет предложено, ответьте на вопросы ниже, следуя руководству.

Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y

Перезапустите MariaDB.

$ sudo systemctl restart mariadb.service

Чтобы проверить, установлена ли MariaDB, введите команду ниже для входа на сервер MariaDB

$ sudo mysql -u root -p

Затем введите пароль, который вы создали выше, чтобы войти. Вы увидите приветственное сообщение MariaDB.

Создайте базу данных под названием gitea.

CREATE DATABASE gitea;

Создайте базу данных пользователя с именем giteauser с новым паролем.

CREATE USER 'giteauser'@'localhost' IDENTIFIED BY 'new_password_here';

Затем предоставьте пользователю полный доступ к базе данных.

GRANT ALL ON gitea.* TO 'giteauser'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;

Наконец, сохраните изменения и выйдите.

FLUSH PRIVILEGES;
EXIT;

Шаг 4: Подготовьте среду Gitea

Создайте пользователя для запуска Gitea.

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

Создайте необходимую структуру каталогов.

$ sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
$ sudo chown git:git /var/lib/gitea/{data,indexers,log}
$ sudo chmod 750 /var/lib/gitea/{data,indexers,log}
$ sudo mkdir /etc/gitea
$ sudo chown root:git /etc/gitea
$ sudo chmod 770 /etc/gitea

Структура каталогов, приведенная выше, рекомендована официальной документацией Gitea.

Разрешения для каталога /etc/gitea установлены на 770, чтобы мастер установки мог создать файл конфигурации.

Шаг 5: Установите Gitea

Бинарный файл Gitea можно загрузить, выполнив следующие команды.

$ VERSION=1.10.2
$ wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64

Скопируйте бинарный файл в глобальное местоположение.

$ sudo cp gitea /usr/local/bin

Сделайте двоичный исполняемый файл.

$ sudo chmod +x /usr/local/bin/gitea

Шаг 6: Создайте служебный файл для автоматического запуска Gitea

Создайте файл службы Linux.

$ sudo nano /etc/systemd/system/gitea.service

Заполните файл следующим.

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
#After=mysqld.service
#After=postgresql.service
#After=memcached.service
#After=redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Включите и запустите Gitea при загрузке.

$ sudo systemctl daemon-reload
$ sudo systemctl enable gitea
$ sudo systemctl start gitea

Запустите команду статуса.

$ sudo systemctl status gitea
● gitea.service - Gitea (Git with a cup of tea)
  Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: en
  Active: active (running) since Wed 2019-11-27 04:57:55 UTC; 1 day 4h ago
 Main PID: 1654 (gitea)
   Tasks: 4 (limit: 2321)
  CGroup: /system.slice/gitea.service
          └─1654 /usr/local/bin/gitea web -c /etc/gitea/app.ini

Шаг 7. Настройте Nginx в качестве обратного прокси

Удалите файл конфигурации nginx по умолчанию.

$ sudo rm /etc/nginx/sites-enabled/default

Создайте конфигурацию обратного прокси для Gitea.

$ sudo nano /etc/nginx/sites-available/git.example.com

Заполните файл следующей конфигурацией.

upstream gitea {
    server 127.0.0.1:3000;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name git.example.com;
    root /var/lib/gitea/public;
    access_log off;
    error_log off;

    location / {
      try_files maintain.html $uri $uri/index.html @node;
    }

    location @node {
      client_max_body_size 0;
      proxy_pass http://localhost:3000;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_max_temp_file_size 0;
      proxy_redirect off;
      proxy_read_timeout 120;
    }
}

Включите конфигурацию обратного прокси-сервера Gitea Nginx.

$ sudo ln -s /etc/nginx/sites-available/git.example.com /etc/nginx/sites-enabled

Затем перезагрузите сервис Nginx.

$ sudo systemctl reload nginx.service

Затем откройте браузер и перейдите к имени хоста или IP-адресу сервера.

http://git.example.com/install

Следуйте инструкциям на экране для завершения настройки Gitea.

Когда вы закончите настройку, нажмите кнопку «Install Gitea», чтобы завершить установку. При успешной установке вы должны войти в консоль администрирования Gitea.

Вы успешно установили Gitea на сервер Ubuntu 18.04. Желаем вам приятного времяпрепровождения, обратитесь к документации Gitea за расширенными настройками и руководствами по использованию.

Шаг 8. Настройка почтовых уведомлений

Чтобы Gitea могла отправлять уведомления по электронной почте, вы можете установить Postfix или использовать какой-нибудь транзакционный почтовый сервис, такой как SendGrid, MailChimp, MailGun или SES.

Чтобы включить уведомления по электронной почте, откройте файл конфигурации и отредактируйте следующие строки:

$ sudo nano /etc/gitea/app.ini
[Почтовая программа]
ENABLED = true
HOST = SMTP_SERVER: SMTP_PORT
FROM = SENDER_EMAIL
USER = SMTP_USER
PASSWD = YOUR_SMTP_PASSWORD

Убедитесь, что вы указали правильную информацию о SMTP-сервере.

Перезапустите службу Gitea, чтобы изменения вступили в силу:

$ sudo systemctl restart gitea.service

Чтобы проверить настройки и отправить тестовое электронное письмо, войдите в Gitea и перейдите по адресу: Администрирование сайта > Конфигурация > Конфигурация SMTP Mailer.

Шаг 9. Обновление Gitea

Обновления до последней версии Gitea просто загрузите и замените двоичный файл.

Остановите службу Gitea:

$ sudo systemctl stop gitea.service

Загрузите последнюю версию Gitea и переместите ее в /home/git каталог:

$ VERSION = <THE_LATEST_GITEA_VERSION>
$ wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
$ sudo mv /tmp/gitea /usr/local/bin/

Сделайте двоичный исполняемый файл:

$ sudo chmod +x /usr/local/bin/gitea

Запустите сервис Gitea:

$ sudo systemctl restart gitea.service

Вот и все.