Как установить платформу хостинга Gitea Code с HTTPS на Debian 10
Это руководство существует для этих версий ОС
- Debian 11 (Bullseye)
- Debian 10 (Buster)
На этой странице
- Требования
- Шаг 1. Подготовка системы
- Шаг 2. Настройка базы данных
- Шаг 3. Установка Gitea
- Шаг 4. Настройка Gitea
- Шаг 5. Настройка обратного прокси-сервера
- Необязательные действия
- Конфигурация ведения журнала
- Отдельный SSH-сервер
Gitea — это веб-приложение для размещения кода, написанное на Go и разветвленное от Gogs. Как следует из названия, он предназначен для использования с популярной программой управления исходным кодом Git, аналогично Gitlab и Github. В этом руководстве объясняется, как установить Gitea на Debian 10 за обратным прокси-сервером HTTPS (Nginx).
Требования
- Система Debian 10, в которой у вас есть привилегии root.
- Зарегистрированное доменное имя, указывающее на ваш сервер.
- Должна быть установлена переменная среды $EDITOR.
- Доступ к SMTP-серверу для уведомлений по электронной почте (необязательно).
Убедитесь, что ваш (под)домен указывает на IPv4-адрес вашего сервера с записью A. При желании создайте запись AAAA, указывающую на IPv6-адрес вашего сервера.
Шаг 1: Подготовка системы
Начните с обновления индекса вашего пакета и установите все доступные обновления:
apt update apt upgrade -y reboot
Для этой установки требуется несколько программных пакетов:
- Git, зависимость от Gitea.
- PostgreSQL, так как для Gitea требуется база данных.
- Nginx, который будет использоваться в качестве обратного прокси-сервера.
- Certbot, утилита для получения SSL-сертификатов Lets Encrypt.
- Sudo для запуска команд от имени системного пользователя postgres.
Установите их следующим образом:
apt install -y git nginx certbot postgresql sudo
Затем создайте пользователя для запуска Gitea:
adduser --system --disabled-password --group --shell /bin/bash --home /home/gitea gitea
Затем создайте структуру каталогов для Gitea:
mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
И установите права собственности и разрешения следующим образом:
chown -R gitea:gitea /var/lib/gitea chown -R gitea:gitea /run/gitea chown -R root:gitea /etc/gitea chmod -R 750 /var/lib/gitea chmod 770 /etc/gitea
Разрешения на /etc/gitea являются временными и будут ужесточены после запуска веб-установщика.
Шаг 2: Настройка базы данных
Убедитесь, что Postgres включен и работает:
systemctl enable --now
Затем создайте роль пользователя и базу данных, которые будут использоваться Gitea:
sudo -u postgres psql postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password'; postgres=# CREATE DATABASE gitea; postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; postgres=# exit;
Шаг 3: Установка Gitea
Загрузите последний бинарный файл linux-amd64 со страницы загрузки Giteas. Например:
wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea chmod 755 /usr/local/bin/gitea
Затем создайте юнит-файл systemd для Gitea:
$EDITOR /etc/systemd/system/gitea.service
И введите следующее:
[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target Requires=postgresql.service [Service] Type=simple User=gitea Group=gitea WorkingDirectory=/var/lib/gitea/ RuntimeDirectory=gitea ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini Restart=always Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target
Убедитесь, что новый модуль загружен:
systemctl daemon-reload
Затем попросите systemd запускать Gitea при старте системы:
systemctl enable gitea.service
Шаг 4: Настройка Gitea
Для первоначальной настройки используйте прилагаемый скрипт веб-установки. Сначала запустите Gitea:
systemctl start gitea.service
Затем перейдите по адресу http://your_domain:3000/install и заполните необходимые параметры следующим образом:
- Тип базы данных: PostgreSQL
- Хост: 127.0.0.1:5432
- Имя пользователя: gitea
- Пароль. Введите пароль, который вы выбрали при создании роли Postgres.
- Имя базы данных: gitea
- SSL: отключить
- Название сайта: название по вашему выбору.
- Корневой путь к репозиторию: /var/lib/gitea/data/repositories
- Корневой путь Git LFS: /var/lib/gitea/data/lfs
- Имя пользователя для запуска: gitea
- Домен SSH-сервера: your_domain
- Порт сервера SSH: 22
- Пост прослушивания Gitea HTTP: 3000
- Базовый URL-адрес Gitea: https://ваш_домен/
- Путь к журналу: /var/lib/gitea/log
Настройте электронную почту и остальные параметры по своему усмотрению, затем нажмите \Установить Gitea\. Вы будете перенаправлены на ошибочный URL. Это нормально, так как мы еще не настроили Nginx или HTTPS. Из соображений производительности мы теперь настроим Gitea для прослушивания сокета unix вместо TCP-порта по умолчанию.
Остановите Gitea, прежде чем продолжить:
systemctl stop gitea.service
Настройте разрешения для /etc/gitea, как показано ниже. Это не позволяет никому, кроме группы gitea, читать app.ini, который содержит конфиденциальную информацию, включая учетные данные базы данных.
chmod 750 /etc/gitea chown root:gitea /etc/gitea/app.ini chmod 640 /etc/gitea/app.ini
Откройте его файл конфигурации:
$EDITOR /etc/gitea/app.ini
Remove the following line from the [server] section:
HTTP_PORT = 3000
And add the following lines to the [server] section:
HTTP_ADDR = /run/gitea/gitea.sock PROTOCOL = unix UNIX_SOCKET_PERMISSION = 666
Шаг 5: Настройка обратного прокси
Stop Nginx if it is running, as certbot will need to bind to port 80:
systemctl stop nginx.service
Используйте следующую команду, чтобы получить сертификат для вашего домена:
certbot certonly --standalone --agree-tos -m -d your_domain
Lets Encrypt проверит право собственности на домен перед выдачей сертификата. Ваш сертификат, цепочка и закрытый ключ будут храниться в /etc/letsencrypt/live/your_domain/.
Теперь мы можем настроить Nginx. Создайте новый файл конфигурации:
$EDITOR /etc/nginx/sites-available/gitea
И введите следующую конфигурацию:
server { listen 80; listen [::]:80; server_name your_domain; return 301 https://$server_name$request_uri; access_log /var/log/nginx/gitea-proxy_access.log; error_log /var/log/nginx/gitea-proxy_error.log; } server { listen 443 ssl; listen [::]:443 ssl; server_name your_domain; ssl on; ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; location / { proxy_pass http://unix:/var/run/gitea/gitea.sock; } access_log /var/log/nginx/gitea-proxy_access.log; error_log /var/log/nginx/gitea-proxy_error.log; }
Первый серверный блок просто служит для перенаправления всех HTTP-запросов на HTTPS. Второй блок прослушивает соединения HTTPS и проксирует их в сокет unix, на который мы настроили Gitea для прослушивания.
После того, как вы сохранили приведенную выше конфигурацию, запустите следующее, чтобы включить ее:
ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled
Проверьте наличие синтаксических ошибок и отредактируйте конфигурацию соответствующим образом:
nginx -t
Наконец, запустите Nginx и Gitea:
systemctl start nginx.service gitea.service
Теперь ваш экземпляр Gitea должен успешно работать. Если вы не создали учетную запись администратора с помощью первоначального веб-установщика, роль администратора будет предоставлена первому зарегистрированному пользователю.
Дополнительные шаги
Конфигурация ведения журнала
По умолчанию Gitea регистрирует сообщения уровня серьезности Info и выше. Скорее всего, вы захотите изменить это на «Предупреждение» или «Ошибка». Для этого откройте файл /etc/gitea/app.ini и измените параметр LEVEL в разделе [log] на один из следующих: trace, debug, info, warn, error, Critical, Fatal, None. Например, для записи в журнал сообщений уровня серьезности Warn и выше используйте:
[log] MODE = file LEVEL = warn ROOT_PATH = /var/lib/gitea/log
Перезапустите Gitea, чтобы изменения вступили в силу:
systemctl restart gitea.service
Отдельный SSH-сервер
В качестве альтернативы Gitea может использовать собственный SSH-сервер. Чтобы включить его, добавьте следующую строку в раздел конфигурации [server]:
START_SSH_SERVER = true
И измените порт SSH на любой номер выше 1000, например:
SSH_PORT = 2222
Затем перезапустите Gitea, чтобы применить изменения.