Как установить платформу хостинга Gitea Code с HTTPS на CentOS 8
На этой странице
- Требования
- Шаг 1. Подготовка системы
- Шаг 2. Настройка базы данных
- Шаг 3. Установка Gitea
- Шаг 4. Настройка Gitea
- Шаг 5. Настройка обратного прокси-сервера
- Необязательные действия
- Конфигурация ведения журнала
- Отдельный SSH-сервер
Gitea — это веб-приложение для размещения кода, написанное на Go. Как следует из названия, он предназначен для использования с популярной программой управления исходным кодом Git, аналогично Gitlab и Github. В этом руководстве объясняется установка Gitea на CentOS 8 с обратным прокси-сервером Nginx HTTPS.
Требования
- Система CentOS 8 с привилегиями root.
- Зарегистрированное доменное имя, указывающее на ваш сервер.
- Переменная окружения $EDITOR должна быть установлена на предпочитаемый вами текстовый редактор.
- Доступ к SMTP-серверу для уведомлений по электронной почте (необязательно).
Убедитесь, что ваш (под)домен указывает на IPv4-адрес вашего сервера с записью A. При желании создайте запись AAAA, указывающую на IPv6-адрес вашего сервера.
ПРИМЕЧАНИЕ. В этом руководстве предполагается, что SELinux отключен или разрешен.
Шаг 1: Подготовка системы
Начните с установки всех доступных обновлений и перезагрузки:
dnf update -y reboot
Для этой установки требуется несколько программных компонентов:
- Git, зависимость от Gitea.
- PostgreSQL, так как для Gitea требуется база данных.
- Nginx, который будет использоваться в качестве обратного прокси-сервера.
- Sudo для запуска команд от имени системного пользователя postgres.
- Получить
- Certbot, утилита для получения SSL-сертификатов Lets Encrypt. Certbot будет установлен отдельно, поскольку его нет в репозиториях программного обеспечения CentOS.
Установите их следующим образом:
dnf install -y git postgresql postgresql-server nginx sudo wget
Certbot-auto — это скрипт, управляющий установкой certbots. Скачать это:
wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
Убедитесь, что установлены правильные разрешения:
chmod 0755 /usr/local/bin/certbot-auto
Выполните следующее, чтобы установить certbot. Вам будет предложено менеджером пакетов подтвердить установку зависимостей, ответьте y.
certbot-auto --install-only
Затем создайте пользователя для запуска Gitea:
useradd --system --shell /bin/bash --create-home --home-dir /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 /var/run/gitea chown -R root:gitea /etc/gitea chmod -R 750 /var/lib/gitea chmod 770 /etc/gitea
Разрешения на /etc/gitea являются временными и будут ужесточены после запуска веб-установщика.
Включите трафик на порты 80 и 443 навсегда:
firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent firewall-cmd --reload
Доступ к порту 3000 требуется только временно для первоначальной настройки, поскольку вместо этого мы настроим gitea на использование сокета Unix.
firewall-cmd --add-port 3000/tcp
Шаг 2: Настройка базы данных
Инициализировать Постгрес:
postgresql-setup --initdb --unit postgresql
Убедитесь, что он включен и работает:
systemctl enable --now postgresql.service
Войдите в Постгрес:
sudo -u postgres psql
Затем создайте роль пользователя и базу данных, которые будут использоваться Gitea:
postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password'; postgres=# CREATE DATABASE gitea; postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; postgres=# \q
Откройте файл конфигурации аутентификации клиента Postgres:
$EDITOR /var/lib/pgsql/data/pg_hba.conf
Добавьте следующую строку сразу после # локальных подключений IPv4 :
# IPv4 local connections: host gitea gitea 127.0.0.1/32 md5
Сохраните файл и перезапустите Postgres:
systemctl restart postgresql.service
Шаг 3: Установка Gitea
Загрузите бинарную версию 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:
$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
Удалите следующую строку из раздела server:
HTTP_PORT = 3000
И добавьте следующие строки в раздел сервера:
HTTP_ADDR = /run/gitea/gitea.sock PROTOCOL = unix UNIX_SOCKET_PERMISSION = 666
Шаг 5: Настройка обратного прокси
Остановите Nginx, если он запущен, чтобы certbot мог прослушивать порт 80:
systemctl stop nginx.service
Используйте следующую команду, чтобы получить сертификат для вашего домена:
certbot-auto certonly --standalone --agree-tos -m -d your_domain
Lets Encrypt проверит право собственности на домен перед выдачей сертификата. Ваш сертификат, цепочка и закрытый ключ будут храниться в /etc/letsencrypt/live/your_domain/.
Теперь мы можем настроить Nginx. Создайте новый файл конфигурации:
$EDITOR /etc/nginx/conf.d/gitea.conf
И введите следующие серверные блоки:
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 для прослушивания.
После того, как вы сохранили приведенную выше конфигурацию, проверьте наличие синтаксических ошибок и при необходимости отредактируйте конфигурацию:
nginx -t
Наконец, запустите Nginx и Gitea:
systemctl start nginx.service gitea.service
Теперь ваш экземпляр Gitea должен успешно работать. Доступ к нему по адресу https://ваш_домен
Дополнительные шаги
Конфигурация ведения журнала
По умолчанию Giteas регистрирует сообщения уровня серьезности Info и выше. Скорее всего, вы захотите изменить это на Warn или Error . Для этого откройте файл /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 на любой номер выше 1024, например:
SSH_PORT = 2222
Затем перезапустите Gitea, чтобы применить изменения и включить трафик на выбранный порт:
firewall-cmd --add-port 2222/tcp --permanent firewall-cmd --reload