Гид по технологиям

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

6 min read DevOps Обновлено 08 Oct 2025
Установка Gogs на CentOS 7 с PostgreSQL и Nginx
Установка 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-сервер для небольших команд и личного использования.


Суть руководства

Основные шаги, описанные в руководстве:

  1. Установка репозитория EPEL
  2. Установка и настройка PostgreSQL
  3. Установка Go и Git
  4. Сборка и запуск Gogs
  5. Конфигурация Gogs
  6. Запуск Gogs как systemd‑сервиса
  7. Настройка Nginx как обратного прокси
  8. Тестирование и приёмка

Шаг 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

Проверьте, что PostgreSQL слушает 127.0.0.1:5432:

netstat -plntu

Вывод netstat с портом PostgreSQL

Создаём базу и пользователя для Gogs. Войдите в psql под postgres:

su - postgres
psql

Создаём пользователя git с правом создания баз и устанавливаем пароль:

CREATE USER git CREATEDB;
\password git

Создаём базу gogs_production и назначаем владельца:

CREATE DATABASE gogs_production OWNER git;
\q

Создание БД для Gogs

Теперь 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

Скачивание архива Go

Распакуйте и удалите архив:

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

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 (публичный интерфейс при запуске вручную).

Gogs в консоли

Откройте в браузере http://:3000/ чтобы увидеть страницу установки.

Страница установки Gogs

Нажмите 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 запущен локально

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

Проверка сервиса Gogs

Вывод systemctl для 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

nginx прослушивает порт 80

Примечание: в продакшне рекомендуется настроить HTTPS (см. раздел Безопасность ниже).

Шаг 8 — Тестирование установки

Откройте в браузере домен или IP, указанные в конфигурации nginx:

http://git.hakase-labs.co/

На странице установки укажите параметры подключения к PostgreSQL (127.0.0.1:5432, gogs_production, git, пароль) и создайте администратора.

Заполнение настроек базы

Внизу страницы откройте настройки администратора и создайте административную учётную запись:

Форма создания администратора

После установки вы попадёте в дашборд Gogs:

Панель пользователя Gogs

Административная панель 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 настроен и валидный
  • Бэкап БД настроен

Устранение неполадок — распространённые проблемы

  1. Gogs не стартует в systemd:
    • Проверьте журнал: journalctl -u gogs -b
    • Убедитесь в корректности путей в gogs.service
  2. Ошибка подключения к БД при установке:
    • Проверьте, слушает ли PostgreSQL 127.0.0.1:5432
    • Убедитесь в правильности имени БД, пользователя и пароля
  3. 502 Bad Gateway от nginx:
    • Убедитесь, что Gogs слушает локально на порту 3000
    • Проверьте proxy_pass и заголовки в конфигурации nginx
  4. Проблемы с доступом SSH к репозиториям:
    • Проверьте настройки SSH/gitolite (если используются)

Альтернативные подходы

  • SQLite: самый простой вариант для локальных тестов — не требует отдельной СУБД.
  • MySQL/MariaDB: если инфраструктура уже использует MySQL, можно использовать её вместо PostgreSQL.
  • Docker: можно запустить Gogs в контейнере, что упростит обновления и изоляцию.

Краткая оценка плюсов/минусов:

  • PostgreSQL: надёжная и производительная, хороша для продакшена.
  • SQLite: простота, но не для многопользовательской нагрузки.
  • Docker: портативность, но добавляет слой управления контейнерами.

Мини‑методология развёртывания

  1. Подготовка ОС: обновление, установка EPEL
  2. Установка и настройка СУБД (локальный доступ)
  3. Установка зависимостей (Go, git)
  4. Сборка и локальная проверка Gogs
  5. Конфигурация и перевод на systemd
  6. Настройка обратного прокси и TLS
  7. Тестирование и бэкап

Критерии приёмки

  • 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, резервное копирование и мониторинг обеспечат надёжную эксплуатацию.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

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

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

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

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

Как исправить ошибку ПК 8790 в Windows
Техподдержка

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

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

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

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

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

Как создать собственную поисковую систему Google
Инструменты

Как создать собственную поисковую систему Google