Установка gitea на чистый сервер

Этот пост был опубликован мной более года назад. Информация, описанная ниже, уже могла потерять актуальность, но всё ещё может быть полезна.

Привет. Надеюсь, эта шпаргалка поможет тебе установить собственное “гитхаб”-лайк хранилище кода. Очень рекомендую это сделать, причём на отдельный сервер.

Делал я это, используя бинарник. Вкратце, шаги простые:

  • подготовить ОС
  • подготовить БД
  • подготовить nginx
  • скачать бинарник gitea
  • разобраться с конфигами
  • выполнить установку
  • настроить демона

Далее будет список команд, которые я выполнял и сразу записывал. Но я допускаю, что в них могут быть плёвые ошибки, т. к. во время и после установки я их корректировал (я разворачивал гити впервые и допускал огрехи, которые фиксил на лету).

В конце будут примеры готовых конфигов.

Описанное ниже производилось мной на серверной Ubuntu 20.04 LTS в экосистеме Селектела.

Всё ставим

# обновляем систему, ставим софт
apt update
apt upgrade -y
apt install -y apt-transport-https \
    ca-certificates \
    curl \
    make \
    dialog \
    build-essential \
    software-properties-common \
    libaio1 \
    libssl-dev \
    libghc-zlib-dev \
    libcurl4-gnutls-dev \
    libexpat1-dev \
    gettext \
    unzip \
    mc \
    htop \
    nano \
    mariadb-server \
    mariadb-client \
    nginx

# собираем свежайший git из исходников
# это можно вообще переиспользовать отдельно
wget https://github.com/git/git/archive/master.zip -O /usr/src/git.zip && \
    unzip /usr/src/git.zip -d /usr/src/git && \
    rm -f /usr/src/git.zip && \
    cd /usr/src/git/git-master && \
    make prefix=/usr/local all && \
    make prefix=/usr/local install && \
    cd ../.. && \
    rm -rf git && \
    git clone https://github.com/git/git.git --depth=1 /usr/src/git

# качаем актуальный (на момент этого поста) релиз гити
wget -O /home/gitea/gitea https://dl.gitea.io/gitea/1.15.6/gitea-1.15.6-linux-amd64 && \
    chmod +x gitea && \
    chown git: /home/git/gitea && \
    ln -s /home/git/gitea /usr/local/bin/gitea

# готовим пользователя, под которым будет работать гити
# через него же будет работа с репами (clone, push, pull, etc.)
adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Gitea user' \
   --group \
   --disabled-password \
   --home /home/git \
   git

# запись конфига gitea (пример будет ниже)
nano /etc/gitea/app.ini

# готовим СУБД и БД
mysql_secure_installation
mysql -e 'CREATE DATABASE gitea;'
mysql -e 'GRANT ALL ON gitea.* TO \'gitea\'@\'localhost\' IDENTIFIED BY \'MY_PASSWORD\';'
mysql -e 'FLUSH PRIVILEGES;'

# готовим nginx как reverse-proxy
unlink /etc/nginx/sites-enabled/default
# запись конфига прокси nginx (пример будет ниже)
nano /etc/nginx/sites-available/gitea-proxy.conf
ln -s /etc/nginx/sites-available/gitea-proxy.conf /etc/nginx/sites-enabled/gitea-proxy.conf

# запись конфига службы gitea.service (пример будет ниже)
nano /etc/systemd/system/gitea.service

# первый (ручной) запуск для установки
su - git
GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini

# после установки, если всё прошло удачно,
# то Ctrl+C и ставим демона на автозапуск
systemctl enable gitea --now

Конфиги

/etc/systemd/system/gitea.service

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Wants=mariadb.service
After=mariadb.service=redis.service
[Service]
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
[Install]
WantedBy=multi-user.target

/etc/gitea/app.ini

Изучи внимательно и не копируй бездумно! Часть параметров записывается при установке. Часть параметров можно/нужно поставить самостоятельно.

APP_NAME = Gitea
RUN_USER = git
RUN_MODE = prod

[security]
# не трогать
# ...

[database]
# выставить корректные данные для подключения к БД
DB_TYPE  = mysql
HOST     = 127.0.0.1:3306
NAME     = gitea
USER     = gitea
PASSWD   = MY_PASSWORD
SCHEMA   = 
SSL_MODE = disable
CHARSET  = utf8
PATH     = /var/lib/gitea/data/gitea.db
LOG_SQL  = false

[repository]
ROOT = /var/lib/gitea/data/gitea-repositories

[server]
SSH_DOMAIN       = localhost
DOMAIN           = localhost
HTTP_PORT        = 8080
ROOT_URL         = # не трогать
DISABLE_SSH      = false
SSH_PORT         = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /var/lib/gitea/data/lfs
LFS_JWT_SECRET   = # не трогать
OFFLINE_MODE     = false

[mailer]
# выставить нужные значения для работы email
#ENABLED     = true
MAILER_TYPE = smtp
#HOST        = smtp.yandex.ru:465
#USER        = 
#PASSWD      = 
#FROM        = 

# остальное по желанию

[service]
REGISTER_EMAIL_CONFIRM            = true
ENABLE_NOTIFY_MAIL                = true
DISABLE_REGISTRATION              = false
ALLOW_ONLY_EXTERNAL_REGISTRATION  = false
ENABLE_CAPTCHA                    = true
REQUIRE_SIGNIN_VIEW               = false
DEFAULT_KEEP_EMAIL_PRIVATE        = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING       = true
NO_REPLY_ADDRESS                  = noreply.localhost

[picture]
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = true

[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = false

[session]
PROVIDER = file

[log]
MODE      = console
LEVEL     = info
ROOT_PATH = /var/lib/gitea/log
ROUTER    = console

/etc/nginx/sites-available/gitea-proxy.conf

Здесь в server_name поставить привязываемый домен и в proxy_pass поставить локалхост с портом HTTP_PORT из app.ini

server {
    listen 80;
    listen [::]:80;
    
    server_name my.domain.com

    access_log /var/log/nginx/gitea-access.log;
    error_log /var/log/nginx/gitea-error.log;
    client_max_body_size 100M;
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

После первичного старта можно использовать certbot для установки ssl.

Использованные источники

Update 18.02.2022

В конфиг gitea-proxy.conf добавлен параметр

client_max_body_size 100M;

Лечит ошибку 413 при загрузке файлов, например, при оформлении релиза.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *