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

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

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

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

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

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

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

Всё ставим

# обновляем систему, ставим софт
apt update
apt upgrade -y
apt install -y apt-transport-https \
    ca-certificates \
    curl \
    make \
    dialog \
    certbot \
    python3-certbot-nginx \
    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

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

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

# запись конфига 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
WORK_PATH = /var/lib/gitea/

[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 = my.domain.com
DOMAIN = my.domain.com
HTTP_PORT = 8080
ROOT_URL = http://my.domain.com/
DISABLE_SSH = false
SSH_PORT = 22
LFS_START_SERVER = false
LFS_CONTENT_PATH = /var/lib/gitea/data/lfs
LFS_JWT_SECRET = # не трогать
OFFLINE_MODE = false

[mailer]
# выставить нужные значения для работы email
#ENABLED = true
PROTOCOL = smtps
#SMTP_ADDR = smtp.yandex.ru
#SMTP_PORT = 465
#USER = 
#PASSWD = 
#FROM = noreply@my.domain.com

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

[service]
REGISTER_EMAIL_CONFIRM = true
ENABLE_NOTIFY_MAIL = true
ACTIVE_CODE_LIVE_MINUTES = 180
RESET_PASSWD_CODE_LIVE_MINUTES = 180
DISABLE_REGISTRATION = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply@my.domain.com
# настоятельно рекомендую рекапчу для публичного сервиса, иначе завалят спамеры
ENABLE_CAPTCHA = true
#CAPTCHA_TYPE = recaptcha
#RECAPTCHA_SECRET = 
#RECAPTCHA_SITEKEY = 

[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 при загрузке файлов, например, при оформлении релиза.

Update 02.09.2024

Точечно актуализировал некоторые настройки и команды для свежих версий gitea.

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

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