Установка Gogs на CentOS 7 с PostgreSQL и Nginx

TL;DR
Gogs — лёгкий самохостящийся Git-сервер на Go. В этом пошаговом руководстве показано, как установить EPEL, PostgreSQL, Go, Gogs, настроить systemd‑сервис и Nginx в роли обратного прокси на CentOS 7. В конце — проверка, советы по безопасности и устранению неполадок.
Краткое описание и требования
Gogs — свободный и открытый Git-сервис, написанный на языке Go. Он мало ресурсоёмкий и подходит для размещения собственного Git‑сервера на минимальном оборудовании. Веб-интерфейс напоминает GitHub; поддерживаются MySQL, PostgreSQL, SQLite, MSSQL и TiDB.
Требования:
- Сервер CentOS 7 с правами root
- Доступ к интернету для установки пакетов
- Желательно выделенный пользователь git
Определение в одну строку: Gogs — лёгкий, самохостящийся Git-сервер для небольших команд и личного использования.
Суть руководства
Основные шаги, описанные в руководстве:
- Установка репозитория EPEL
- Установка и настройка PostgreSQL
- Установка Go и Git
- Сборка и запуск Gogs
- Конфигурация Gogs
- Запуск Gogs как systemd‑сервиса
- Настройка Nginx как обратного прокси
- Тестирование и приёмка
Шаг 1 — Установка репозитория EPEL
Установите EPEL для доступа к дополнительным пакетам (включая nginx из EPEL).
sudo yum -y install epel-release
После выполнения репозиторий EPEL добавлен в систему.
Шаг 2 — Установка и настройка PostgreSQL
Gogs поддерживает несколько СУБД; в этом руководстве используется PostgreSQL.
Установите PostgreSQL:
sudo yum -y install postgresql-server postgresql-contrib
Инициализируйте базу данных:
sudo postgresql-setup initdb
Затем настроим PostgreSQL для прослушивания локального интерфейса и md5‑аутентификации.
Войдите под пользователем postgres:
su - postgres
Перейдите в папку данных и отредактируйте postgresql.conf:
cd data/
vim postgresql.conf
Найдите и измените строку listen_addresses:
listen_addresses = '127.0.0.1'
Сохраните и закройте файл.
Отредактируйте правила аутентификации в pg_hba.conf:
vim pg_hba.conf
На строке для локального адреса убедитесь, что метод — md5:
host all all 127.0.0.1/32 md5
Сохраните и выйдите.
Запустите и включите сервис PostgreSQL:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Проверьте, что PostgreSQL слушает 127.0.0.1:5432:
netstat -plntu
Создаём базу и пользователя для Gogs. Войдите в psql под postgres:
su - postgres
psql
Создаём пользователя git с правом создания баз и устанавливаем пароль:
CREATE USER git CREATEDB;
\password git
Создаём базу gogs_production и назначаем владельца:
CREATE DATABASE gogs_production OWNER git;
\q
Теперь PostgreSQL готов для использования Gogs.
Шаг 3 — Установка Go и Git
Установите git из репозиториев:
sudo yum -y install git
Создайте пользователя git и задайте пароль:
useradd -m -s /bin/bash git
passwd git
Переключитесь на пользователя git и создайте рабочие каталоги:
su - git
mkdir -p /home/git/local
Скачайте релиз Go в каталог local (в примере — версия 1.9.2):
cd ~/local
wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz
Распакуйте и удалите архив:
tar -xf go1.9.2.linux-amd64.tar.gz
rm -f go1.9.2.linux-amd64.tar.gz
Настройте переменные окружения для GOROOT и GOPATH:
cd ~
echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
source ~/.bashrc
Убедитесь, что по умолчанию используется bash, и проверьте версию go:
go version
Go установлен под пользователем git.
Шаг 4 — Установка Gogs
Под пользователем git загрузите исходники Gogs и соберите их:
su - git
go get -u github.com/gogits/gogs
cd $GOPATH/src/github.com/gogits/gogs
go build
Если сборка прошла без ошибок, запустите Gogs вручную для теста:
./gogs web
По умолчанию Gogs запустится на порту 3000 (публичный интерфейс при запуске вручную).
Откройте в браузере http://
Нажмите Ctrl+C в терминале, чтобы остановить ручный запуск.
Шаг 5 — Конфигурация Gogs
Создайте каталог для пользовательской конфигурации и скопируйте шаблон:
cd $GOPATH/src/github.com/gogits/gogs
mkdir -p custom/conf/
cp conf/app.ini custom/conf/app.ini
vim custom/conf/app.ini
В секции [server] измените адрес прослушивания на локальный:
[server]
PROTOCOL = http
DOMAIN = localhost
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
В секции [database] укажите параметры PostgreSQL:
[database]
DB_TYPE = postgres
HOST = 127.0.0.1:5432
NAME = gogs_production
USER = git
PASSWD = aqwe123@
Сохраните файл и запустите Gogs для проверки конфигурации:
./gogs web
Gogs должен быть доступен на 127.0.0.1:3000 для обратного прокси.
Шаг 6 — Запуск Gogs как службы systemd
Создайте systemd‑юнит, чтобы Gogs запускался как сервис:
cd /etc/systemd/system
vim gogs.service
Вставьте следующее содержимое (отредактируйте пути при необходимости):
[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.service
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/go/src/github.com/gogits/gogs
ExecStart=/home/git/go/src/github.com/gogits/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target
Примените и запустите сервис:
systemctl daemon-reload
systemctl start gogs
systemctl enable gogs
Проверьте состояние:
netstat -plntu
systemctl status gogs
Шаг 7 — Установка и настройка Nginx как обратного прокси
Установите nginx из EPEL:
yum -y install nginx
Создайте виртуальный хост для Gogs в /etc/nginx/conf.d/gogs.conf:
cd /etc/nginx/
vim conf.d/gogs.conf
Пример конфигурации:
server {
listen 80;
server_name git.hakase-labs.co;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Протестируйте конфигурацию и перезапустите nginx:
nginx -t
systemctl restart nginx
systemctl enable nginx
Проверьте, что nginx слушает порт 80:
netstat -plntu
Примечание: в продакшне рекомендуется настроить HTTPS (см. раздел Безопасность ниже).
Шаг 8 — Тестирование установки
Откройте в браузере домен или IP, указанные в конфигурации nginx:
На странице установки укажите параметры подключения к PostgreSQL (127.0.0.1:5432, gogs_production, git, пароль) и создайте администратора.
Внизу страницы откройте настройки администратора и создайте административную учётную запись:
После установки вы попадёте в дашборд Gogs:
Gogs успешно установлен с PostgreSQL и nginx на CentOS 7.
Безопасность и рекомендации по эксплуатации
- Используйте HTTPS: настройте TLS в nginx (Let’s Encrypt или другой CA) и перенаправляйте HTTP на HTTPS.
- Закрывайте доступ к PostgreSQL снаружи — слушать только 127.0.0.1.
- Ограничьте доступ к SSH и используйте ключи для доступа пользователей.
- Регулярно обновляйте систему и компоненты (Go, Gogs, PostgreSQL, nginx).
- Храните резервные копии базы и репозиториев.
Пример быстрых правил для firewall (firewalld):
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Короткая матрица рисков и смягчения:
- Неправильные права файлов: дать владельцу git, ограничить права на конфиг.
- Открытый порт PostgreSQL: слушать только 127.0.0.1.
- Незащищённый nginx: настроить TLS и строгие заголовки безопасности.
Роли и чек-лист для развёртывания (быстрый свод)
Администратор сервера:
- Установил EPEL, nginx и PostgreSQL
- Создал пользователя git
- Настроил systemd‑юнит
DevOps/DevOps-инженер:
- Настроил reverse proxy в nginx
- Настроил TLS и автоматическое обновление сертификатов
- Настроил мониторинг сервисов и бэкапы
Разработчик:
- Настроил SSH ключи для доступа к репозиториям
- Создал первую репозиторию и проверил клонирование
Чек‑лист перед сдачей:
- Gogs запущен как сервис
- nginx проксирует на 127.0.0.1:3000
- HTTPS настроен и валидный
- Бэкап БД настроен
Устранение неполадок — распространённые проблемы
- Gogs не стартует в systemd:
- Проверьте журнал: journalctl -u gogs -b
- Убедитесь в корректности путей в gogs.service
- Ошибка подключения к БД при установке:
- Проверьте, слушает ли PostgreSQL 127.0.0.1:5432
- Убедитесь в правильности имени БД, пользователя и пароля
- 502 Bad Gateway от nginx:
- Убедитесь, что Gogs слушает локально на порту 3000
- Проверьте proxy_pass и заголовки в конфигурации nginx
- Проблемы с доступом SSH к репозиториям:
- Проверьте настройки SSH/gitolite (если используются)
Альтернативные подходы
- SQLite: самый простой вариант для локальных тестов — не требует отдельной СУБД.
- MySQL/MariaDB: если инфраструктура уже использует MySQL, можно использовать её вместо PostgreSQL.
- Docker: можно запустить Gogs в контейнере, что упростит обновления и изоляцию.
Краткая оценка плюсов/минусов:
- PostgreSQL: надёжная и производительная, хороша для продакшена.
- SQLite: простота, но не для многопользовательской нагрузки.
- Docker: портативность, но добавляет слой управления контейнерами.
Мини‑методология развёртывания
- Подготовка ОС: обновление, установка EPEL
- Установка и настройка СУБД (локальный доступ)
- Установка зависимостей (Go, git)
- Сборка и локальная проверка Gogs
- Конфигурация и перевод на systemd
- Настройка обратного прокси и TLS
- Тестирование и бэкап
Критерии приёмки
- Gogs отвечает по HTTPS через nginx
- Пользователь‑администратор создан и может создавать репозитории
- Репозиторий можно клонировать и пушить через HTTP(S) и, при необходимости, SSH
- Регулярные бэкапы настроены
Частые вопросы
Q: Можно ли использовать MySQL вместо PostgreSQL? A: Да. Gogs поддерживает MySQL/MariaDB; вам нужно только задать DB_TYPE и параметры подключения в custom/conf/app.ini.
Q: Как обновить Gogs до новой версии? A: Для сборки из исходников — pull из репозитория, go build, заменить бинарь и перезапустить сервис. В Docker — обновить образ и перезапустить контейнер.
Q: Нужно ли ставить Gogs на отдельный сервер? A: Для маленьких команд достаточно одного сервера; для критичных сред рекомендуется выделять отдельный хост и настраивать резервирование.
Ресурсы
Официальная документация установки: https://gogs.io/docs/installation
Итог
Gogs — удобное решение для быстрого развёртывания собственного Git‑сервера. Следуя этому руководству, вы получите рабочую инстанцию на CentOS 7 с PostgreSQL и nginx. Дальше — настройка TLS, резервное копирование и мониторинг обеспечат надёжную эксплуатацию.
Похожие материалы

Очистка pagefile.sys при завершении Windows

Как посмотреть приватный Instagram — 13 методов

Как исправить ошибку ПК 8790 в Windows

Падения FPS и потеря пакетов в No Man’s Sky — как исправить

WhatsApp на двух телефонах — простой способ
