Перейти к содержанию

Gitea#

Шпаргалки актуальны для Gitea 1.24.

Установка с Docker#

Эта заметка лишь дополнение к документации.

# Создаём служебного пользователя
sudo useradd --create-home --shell /bin/bash --system gitea

# Даём пользователю права использовать Docker
# Строго говоря это необязательно для разворачивания Gitea, 
# но скорее всего и ранеры будут запускаться от этого пользователя,
# так что ему в любом случае потребуются права на Docker
sudo usermod -aG docker gitea

# Переключаемся на пользователя gitea
sudo su - gitea

# Узнаём его uid и gid
id

# Создаём docker-compose.yml по примеру
# Указываем переменные USER, USER_UID и USER_GID и порты
nano docker-compose.yml

# Создаём директорию для данных Gitea из-под пользователя gitea,
# иначе Docker сам создаст её из-под root
# см. секцию "volumes" в docker-compose.yml
mkdir data

# Запускаем Gitea
docker compose up -d
networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.24.6
    container_name: gitea
    environment:
      - USER=<user>
      - USER_UID=<uid>
      - USER_GID=<gid>
    restart: always
    networks:
      - gitea
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "28500:3000"
      - "28522:22"

Теперь можно перейти по адресу http://<IPv4>:28500 и завершить установку Gitea.

Подключиться к контейнеру можно командой.

docker exec --user gitea -it gitea bash

# Уже внутри контейнера можно запускать бинарник gitea
/usr/local/bin/gitea help

Создание бэкапа#

Ссылка на документацию.

Gitea установлена из бинарника#

# gitea - это пользователь под которым запущен Gitea, часто это просто git
sudo su - gitea

mkdir gitea-backup
cd gitea-backup

# Нужно указать актуальный путь к конфигу
/usr/local/bin/gitea dump -c /etc/gitea/app.ini

# Если планируется восстановление с другой базой данных,
# то нужно указать параметр --database <sqlite3|mysql|postgres>
/usr/local/bin/gitea dump --database sqlite3 -c /etc/gitea/app.ini

Gitea установлена с Docker#

Предполагается, что Gitea развёрнута с помощью Docker Compose как описано в инструкции выше.

Подключаемся к контейнеру.

docker exec --user gitea -it gitea bash

Внутри контейнера выполняем.

# Бэкап нужно создать в директории /data, потому что она прокинута на хост
cd /data

# (Опционально) Создаём директорию для бэкапов
mkdir backups
cd backups

# Нужно указать актуальный путь к конфигу
/usr/local/bin/gitea dump -c /data/gitea/conf/app.ini

# Если планируется восстановление с другой базой данных,
# то нужно указать параметр --database <sqlite3|mysql|postgres>
/usr/local/bin/gitea dump --database sqlite3 -c /data/gitea/conf/app.ini

То же самое в одну команду.

docker exec -u gitea -w /data gitea /usr/local/bin/gitea dump -c /data/gitea/conf/app.ini

Перенос бэкапа на другую машину#

Перенести бэкап на другую машину можно, например, так:

# Запускаем HTTP сервер (с scp загрузка больших файлов займёт много времени)
python3 -m http.server 8080

# На другой машине скачиваем бэкап
curl -O http://<IP>:8080/gitea-dump-1760203345.zip

Восстановление из бэкапа в Docker#

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

# Если создавали пользователя по инструкции выше, 
# то команды выполняем от него
sudo su - gitea

# Распаковываем бэкап
unzip -q gitea-dump-*.zip -d dump

# Создаём директорию для данных Gitea
mkdir data

# Копируем данные
cp -r dump/data/ data/gitea/

# Копируем репозитории
mkdir data/git/
cp -r dump/repos/ data/git/repositories/

# Копируем кастомные стили и шаблоны
cp -r dump/custom/. data/gitea/

# Если Gitea в Docker будет работать с SQLite, 
# то восстановить базу данных можно так.
# Команды для других баз данныех есть в документации
sqlite3 data/gitea/gitea.db < dump/gitea-db.sql

# Копируем конфиг
mkdir data/gitea/conf
cp dump/app.ini data/gitea/conf/app.ini

Если до этого Gitea была запущена не через Docker, то нужно отредактировать конфиг.

vim data/gitea/conf/app.ini

Это не полноценный конфиг, а лишь часть настроек для запуска Gitea Docker. Подразумевается, что конфиг был перенесён из бэкапа.

SSH_PORT нужно указать тот же, что и в docker-compose.yml.

RUN_USER = gitea
WORK_PATH = /data/gitea

[server]
LOCAL_ROOT_URL   = http://localhost:3000
APP_DATA_PATH    = /data/gitea
DOMAIN           = localhost
SSH_DOMAIN       = localhost
HTTP_PORT        = 3000
SSH_PORT         = 28522

[repository]
ROOT = /data/git/repositories

[database]
PATH    = /data/gitea/gitea.db
DB_TYPE = sqlite3
HOST    = localhost:3306
NAME    = gitea
USER    = root
PASSWD  =
LOG_SQL = false

[lfs]
PATH = /data/git/lfs

[log]
ROOT_PATH = /data/gitea/log

Запускаем Gitea, скорее всего она начнёт падать с ошибкой permission denied, а Docker будет пытаться её перезапустить. При первом запуске Gitea создаёт директории для ssh ключей, но по какой-то причине они создаются из-под root, а не из-под пользователя gitea.

# Специально без -d, ждём когда в логах повалятся ошибки и нажимаем Ctrl+C
docker compose up

Теперь нужно из-под root или с помощью sudo указать нужные права.

# Выходим из пользователя gitea (Ctrl + D или exit)
# и выполняем команду с root правами
sudo chown -R gitea:gitea ~gitea/data

Снова запускаем Gitea.

sudo su - gitea
docker compose up -d

Если всё работает корректно, то файлы бэкапа можно удалить.

rm -rf dump gitea-dump-*.zip

Кастомизация Gitea#

Во всех командах подразумевается, что Gitea установлена из бинарника и запускается как systemd сервис.

В документации есть страница, посвящённая кастомизации Gitea.

Свой css#

Добавляем ссылку на свой файл со стилями.

# Путь по умолчанию
export GITEA_CUSTOM=/var/lib/gitea/custom

sudo -u git mkdir -p $GITEA_CUSTOM/templates/custom
sudo -u git nano $GITEA_CUSTOM/templates/custom/header.tmpl
<link rel="stylesheet" href="/assets/css/custom.css">

Создаём файл со стилями.

sudo -u git mkdir -p $GITEA_CUSTOM/public/assets/css
sudo -u git nano $GITEA_CUSTOM/public/assets/css/custom.css
/* Стили для git.tishenko.dev */
* {
    transition: all 0.125s;
}

/* Список переменных и их значения по умолчанию
 *
 * Для светлой темы
 * https://github.com/go-gitea/gitea/blob/main/web_src/css/themes/theme-gitea-light.css
 *
 * Для тёмной темы
 * https://github.com/go-gitea/gitea/blob/main/web_src/css/themes/theme-gitea-dark.css
 */

/* Переопределения переменных для светлой и тёмной темы одновременно */
:root {
    /* Основной цвет */
    --color-primary: #6674c4;
    --color-primary-contrast: #ffffff;

    /* https://maketintsandshades.com/#4051B5 */
    --color-primary-dark-1: #7985cb;
    --color-primary-dark-2: #8c97d3;
    --color-primary-dark-3: #a0a8da;
    --color-primary-dark-4: #b3b9e1;
    --color-primary-dark-5: #c6cbe9;
    --color-primary-dark-6: #d9dcf0;
    --color-primary-dark-7: #eceef8;

    --color-primary-light-1: #5362bc;
    --color-primary-light-2: #4051b5;
    --color-primary-light-3: #3a49a3;
    --color-primary-light-4: #334191;
    --color-primary-light-5: #2d397f;
    --color-primary-light-6: #26316d;
    --color-primary-light-7: #20295b;

    --color-primary-alpha-10: #6674c419;
    --color-primary-alpha-20: #6674c433;
    --color-primary-alpha-30: #6674c44b;
    --color-primary-alpha-40: #6674c466;
    --color-primary-alpha-50: #6674c480;
    --color-primary-alpha-60: #6674c499;
    --color-primary-alpha-70: #6674c4b3;
    --color-primary-alpha-80: #6674c4cc;
    --color-primary-alpha-90: #6674c4e1;
}

/* Переопределения переменных для светлой темы */
@media (prefers-color-scheme: light) {
    :root {}

    #navbar-logo {
        padding: 5px !important;
        background: #14151A;
    }

    #navbar-logo img {
        width: 27px !important;
        height: 27px !important;
    }

    #navbar-logo:hover {
        background: #14151A !important;
    }
}

/* Переопределения переменных для тёмной темы */
@media (prefers-color-scheme: dark) {
    :root {
        /* Шапка */
        --color-nav-bg: #14151A;
        --color-secondary-nav-bg: #14151A;
        --color-nav-text: #BEC1C6;
        --color-nav-hover-bg: #272A35;

        /* Тёмно-серый фон основной */
        --color-body: #1E2129;

        --color-input-background: #14151A;
        --color-menu: #14151A;
        --color-card: #14151A;
        --color-button: #14151A;
    }
}

Перезапускаем Gitea.

sudo systemctl restart gitea

После изменения стилей, страницу в браузере нужно обновить с помощью ctrl + f5.

Настройка app.ini#

Перечень всех возможных настроек представлен в документации.

sudo nano /etc/gitea/app.ini
[server]
LANDING_PAGE = explore

[other]
SHOW_FOOTER_VERSION = false
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false
SHOW_FOOTER_POWERED_BY = false
ENABLE_FEED = false

[i18n]
LANGS = en-US,ru-RU
NAMES = English,Русский

[repository]
DISABLE_STARS = true

[cron]
ENABLED = true

[ui.meta]
AUTHOR = Artem Tishenko: Personal Git Repository Hub
DESCRIPTION = A personal hub for managing Git repositories by Artem Tishenko.
KEYWORDS = Artem Tishenko, Artyom Tishchenko, Git, self-hosted, personal projects, repositories, Gitea

Перезапускаем Gitea.

sudo systemctl restart gitea

Изменение шаблонов страниц#

Ищем шаблон для нужной версии в репозитории Gitea, загружаем с помощью wget по такому же пути в $GITEA_CUSTOM/templates и редактируем.

Так, например, можно убрать пункт "Помощь" с ссылкой на https://docs.gitea.com из основного меню.

# Путь по умолчанию
export GITEA_CUSTOM=/var/lib/gitea/custom

# gitea --version
export GITEA_VERSION=v1.22.3 

sudo -u git mkdir -p $GITEA_CUSTOM/templates/base
wget -P $GITEA_CUSTOM/templates/base https://raw.githubusercontent.com/go-gitea/gitea/refs/tags/$GITEA_VERSION/templates/base/head_navbar.tmpl 
sudo -u git nano $GITEA_CUSTOM/templates/base/head_navbar.tmpl

Перезапускаем Gitea.

sudo systemctl restart gitea