В числе самых обсуждаемых последних новостей в сообществе разработчиков были новые тарифы GitHub (см., например, здесь).
Конечно, у новых тарифов есть свои преимущества, но с нынешним курсом доллара их вряд ли можно назвать выгодными для российских пользователей.
Некоторые прибегают к альтернативному решению и разворачивают GitLab (или другой git-сервис) на собственном или арендованном сервере.
Но и у этого решения есть свои подводные камни: GitLab очень требователен к системным ресурсам. Для частных лиц гораздо проще платить 7 долларов в месяц за GitHub, чем арендовать сервер надлежащей конфигурации.
Из сказанного, однако, не следует, что у GitHub на сегодняшний день альтернативы нет. Об одном весьма интересном и перспективном решении мы хотели бы рассказать в этой статье. Знакомьтесь: Gogs. Этот инструмент будет интересен как для индивидуальных разработчиков, так и для небольших компаний.
Общая информация
Gogs — продукт китайских разработчиков. На первый взгляд он почти ничем не отличается от GitHub или BitBucket — это даже по дизайну заметно.
Но при всех внешних сходствах у него есть одно выгодное отличие от существующих аналогов: легковесность.
Gogs написан на Go (собственно, это название представляет собой сокращение от Go Git Service). Из этого факта вытекают серьёзные преимущества: низкие требования к системным ресурсам, минимум зависимостей, простота установки и настройки.
В числе важнейших характеристик Gogs также следует назвать:
- поддержку протоколов HTTP(s) и SSH;
- поддержку SMTP и LDAP;
- возможность создания как приватных, так и публичных репозиториев;
- интеграцию с социальными сетями (пока что поддерживаются GitHub, Google+, а также китайские сервисы QQ и Weibo);
- возможность работы в связке с сервисами непрерывной интеграции и DevOps-сервисами (подробный список).
Продвижение Gogs на международном рынке началось в конце 2014 — начале 2015 года. Весной 2015 года появились первые статьи о нём на западных сайтах, что также способствовало популяризации продукта. Но говорить о полноценной конкуренции с GitHub и GitLab было ещё рано: у Gogs даже поддержки пулл-реквестов не было, не говоря уже о других важных функциях.
В конце 2015 года после более чем полугодового перерыва вышла в свет новая версия продукта. В ней было реализовано множество нововведений, самыми важными из которых являются, конечно же, поддержка пулл-реквестов и возможность создания вики-страниц для проектов.
Дизайн Gogs также был заметно улучшен, а интерфейс перевели на 18 языков, включая русский.
Gogs, GitHub и GitLab
Сравним Gogs с другими инструментами аналогичного плана. Результаты сравнения для наглядности представим в виде таблицы:
Характеристика | Gogs | GitHub | GitLab |
Баг-трекер | + | + | + |
Поддержка аккаунтов организаций | + | + | + |
Wiki | + | + | + |
Ревью кода | - | + | + |
Сниппеты кода | - | + | + |
Веб-хуки | + | + | + |
Гит-хуки | + | только в enterprise-версии | только в enterprise-версии |
Поддержка LDAP | + | + | + |
Синхронизация групп LDAP | - | только в enterprise-версии | только в enterprise-версии |
Установка Gogs
Рассмотрим процедуру установки и первичной настройки на примере OC Ubuntu 16.04. В качестве СУБД возьмем привычный MySQL.
Установим MySQL:
$ sudo apt-get update
$ sudo apt-get install -y mysql-server
После этого создайте файл gogs.sql:
$ nano gogs.sql
Добавьте в него следующие строки:
DROP DATABASE IF EXISTS gogs;
CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8 COLLATE utf8_general_ci;
Сохраните внесённые изменения и выполните:
$ mysql -u root -p [пароль пользователя root]< gogs.sql
Чтобы уcтановить gogs из исходников, вам понадобятся также системы контроля версий git и mercurial:
$ sudo apt-get install git mercurial
Далее вам нужно будет установить компилятор Go. Откройте файл /.bashrc и добавьте в него следующие строки:
export GOPATH=/home/git/go
export GOROOT=/usr/local/src/go
export PATH=${PATH}:$GOROOT/bin
Сохраните изменения и выполните:
$ source ~/.bashrc
После этого установить компилятор Go:
$ wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
$ tar zxf go1.4.2.linux-amd64.tar.gz
$ sudo mv go $GOROOT
Все необходимые зависимости установлены. Можно устанавливать Gogs:
$ go get -d github.com/gogits/gogs
$ cd $GOPATH/src/github.com/gogits/gogs
$ go build
По завершении установки нужно настроить запуск Gogs как службы. Для этого вам потребуется просто добавить в /etc/system/systemd файл gogs.service (шаблон см. здесь) и выполнить после этого следующие команды:.
$ sudo systemctl enable gogs
$ sudo systemtctl start gogs
Если всё сделано правильно, то по завершении установки страница настройки Gogs будет доступна по адресу http:// [IP-адрес сервера]:3000. Вся дальнейшая настройка осуществляется через графический интерфейс; там всё довольно просто и интуитивно понятно. Если вы планируете привязать к серверу с Gogs домен, вам потребуется также установить Nginx и настроить его в качестве обратного прокси (подробнее в официальной документации).
В процедуре установки Gogs ничего сложного нет. Но если вы являетесь пользователем нашего сервиса Vscale (кстати, отличный повод им стать), то всё можно сделать ещё проще: совсем недавно мы добавили в панель управления соответствующий образ. Один клик ? и виртуальная машина с уже установленным и настроенным Gogs создана и готова к использованию:
Как только сервер будет создан, откройте в браузере страницу http://[IP-адрес сервера]. Ничего настраивать дополнительно вам не потребуется: всё уже прописано в шаблоне и готово к работе.
Войдите в Gogs с помощью логина и пароля, полученных при установке.
Gogs в работе
Работать с Gogs просто. Если у вас есть опыт работы с GitHub, то вы без труда во всём разберётесь. Для начинающих пользователей в панели управления приводятся подробные шпаргалки.
Приведём элементраный пример. Создадим через графический интерфейс тестовый репозиторий.
После этого клонируем его на локальную машину:
$ git clone http://[IP-адрес сервера]/root/test.git
Внесём небольшие изменения в файл README.md:
$ echo 'Test' >> README.md
Закоммитим внесённые изменения:
$ git add --all && git commit -m "init commit" && git push origin master
Вам будет предложено ввести логин и пароль пользователя Gogs. После этого коммит будет добавлен в репозиторий. В панели управления всё это выглядит так:
Заключение
Мы попробовали поработать с Gogs – и остались вполне довольны. У продукта китайских разработчиков перспективы есть, и неплохие. За последний год (а в первый раз мы познакомились с Gogs в начале 2015 года) была проделана огромная работа по его усовершенствованию, и мы надеемся, что она будет продолжена в будущем.
Gogs уже сейчас является вполне достойной альтернативой GitHub и GitLab.В плане потребления системных ресурсов он гораздо экономичнее, чем любое из аналогичных решений. Как утверждают разработчики в своём блоге, его можно установить даже на RaspberryPi. Не знаем, как насчёт RaspberryPi, но на виртуальном сервере самой простой конфигурации в Vscale Gogs работает вполне стабильно на небольшом количестве репозиториев. Приглашаем всех попробовать и оценить. Если у вас уже есть опыт работы с Gogs — будем рады, если вы поделитесь им в комментариях.
Специально для тех, кто хочет получить готовый настроенный git-сервис, но при этом предпочитает более традиционные и уже зарекомендовавшие себя решения, мы добавили образ с GitLab. Сразу же отметим, что для самых бюджетных и популярных тарифов он недоступен: GitLab потребляет слишком много системных ресурсов, и серверы “младших” конфигураций его просто-напросто не потянут.
Пользуясь случаем, мы хотели бы обсудить ещё одну важную тему. Сегодня некоторые VPS-провайдеры предлагают образы с предустановленным ПО. У нас в Vscale, например, уже есть: Ajenti, VestaCP, WordPress, Docker, GitLab и Gogs. Этот список мы планируем значительно расширить.
В связи с этим — вопрос ко всем пользователям VPS: какие образы с предустановленным ПО вам нужны? Что ещё, помимо стандартных CMS и панелей управления хостингом, вы бы хотели видеть у вашего провайдера? Если в списке чего-то нет, просьба делиться в комментариях.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (60)
sav6622
11.07.2016 17:36Вот почему про докер я только тут прочитал?
Рассылку бы сделали по клиентам.dpivovarov
11.07.2016 17:37В процессе! Скоро будет :) Анонс мы делали в панельке, но понимаю, что не все могли его прочитать. В будущем сделаем некий дайджест новинок, поскольку их скапливается, разной масштабности, достаточно много
sav6622
11.07.2016 17:46то есть использовать еще нельзя? только создал сервер с докером.
dpivovarov
11.07.2016 17:52Можно, пользуйтесь, конечно. Я говорил исключительно про процессы анонсов :)
sav6622
11.07.2016 17:58Анон ваш появился в панельке видимо только после 17:36… совпадение?.. не думаю...=))
dpivovarov
11.07.2016 17:59+1Честно, это странно :)) он висит там уже с прошлой недели. Может вы его «закрывали» случайно?
sav6622
11.07.2016 18:12=) ну насчет сильно с той не думаю… 4 июля спрашивал как раз насчет докера поддержку в тикете — конкретики запуска не было, так что, в лучшем случае с пятницы может висеть
dpivovarov
11.07.2016 18:20С 5-го числа, если быть точным :)
Но это и не сильно важно. В любом случае, спасибо за отзыв.
pengyou
11.07.2016 17:45В готовых дроплетах всегда удручала одна особенность — они не layered даже в самом простом случае. Ситуация для домохозяек — когда я захочу простой owncloud-сервер — это будет делом пары минут. Так же и с торрент-качалкой, клик и готово.
А если я захочу owncloud+transmission-daemon (на одной машине), чтобы скачанное тут же ложилось в каталог owncloud и было доступно по http (это я настрою вручную, но нужны уже готовые и запущенные приложения) то я просто лезу опять по ssh на сервер и делаю всё руками, хотя вот он, дроплет с трансмишшн рядом лежит, у того же хостера.
В этом выдуманном примере вроде всем понятно, что настройки того и другого сервиса не пересекаются (и так будет, скорее всего, для большинства других сервисов).dpivovarov
11.07.2016 17:48Готовые образы — это прежде всего попытка угодить всем. Универсальное решение, подходящее в абсолютном большинстве случаев.
Поэтому, конечно, порой действительно все равно нужно пойти на сервер по ssh и заняться какой-то произвольной конфигурацией. Провайдеры хостинга — не интеграторы сторонних систем, поэтому решения мы, как и наши коллеги, стараемся делать максимально унифицированными.pengyou
11.07.2016 18:12Насколько я понимаю, формирование образа с готовым ПО всё равно производится скриптом (я не уверен, что это происходит в момент создания моего инстанса), так вот, какая разница, сколько подготовительных скриптов поработает над образом, который система раскатает на мой инстанс?
Напрашивается прямая аналогия с докер-контейнерами, конечно.
То есть, тут небольшой шаг в развитии концепции.
Вы не принимайте на свой счёт, я как раз вчера порадовался, что у вас появился докер-дроплет и тут же его себе раскатал.dpivovarov
11.07.2016 18:23Мысль я понял, конечно же, принимаю не на свой счет.
Есть ряд нюансов:
— Все пакеты нужно где то хранить и обновлять
— Чем больше пакетов ставить — тем больше ставится скалет
— Не все кейсы нужны кому то, кроме пары человек
Все это накладывает ограничения. В том числе, например, образ с WordPress или образ с GitLab — ставится не на все тарифные планы. Тут тоже имеет место прежде всего возможность гарантированно стабильной работы на выбраном конфиге для большинства пользователей. Понятно, что немного подтюнив сервер (установить ngnix для статики, отказаться от apache, подключить swap раздел) — можно установить и на меньшие конфигурации, но все это требует тонкой настройки, которая индивидуальна в большинстве своем.
cvss
11.07.2016 23:11Потому что это реально сложно, хотя и можно: http://jetware.org
Правда, для российских хостеров интеграция в ближайшее время не планируется. Но там очень легко ставится в любую ОС и они могут самостоятельно допилить интеграцию.cvss
11.07.2016 23:19+1сорри, http://jetware.org
dpivovarov
11.07.2016 23:46есть еще https://bitnami.com/
cvss
12.07.2016 00:15+2У bitnami это только набор образов для каждого приложения или стека. У jetware — это конструктор, в котором набираются несколько приложений и для части из них есть дополнительная автоматическая интеграция. Например, для Drupal, Solr и NodeJS.
Eivind
11.07.2016 17:45+1Я хотел бы видеть этот список на сайте до того, как я впустую потрачу время на регистрацию (или не потрачу, а сразу уйду к конкурентам).
dpivovarov
11.07.2016 17:51Сейчас есть возможность увидеть все фичи после основной регистрации (активация по ссылке из почты). В целом — это достаточно быстро и удобно. Если все понравится — активируете учетную запись полностью (смс и привязка карты).
Но за отзыв — спасибо, о проблеме знаем и работаем над этим ( и в принципе над публичным сайтом ).
yegreS
11.07.2016 17:48-1в GitLab «Ревью кода» кажется только в enterprise-версии есть
dpivovarov
11.07.2016 18:27Ревью доступен и в обычной версии, не только enterprise. Как он организован:
https://about.gitlab.com/2015/08/05/6-reasons-why-pre-is-better-than-post-production-code-review/
iqiaqqivik
11.07.2016 18:27+1А зачем _команде _ гитхабоподобный сервис без возможности ревью кода и сниппетов?
Все остальные функции вроде обычный git сервер прекрасно предоставляет, безо всякого фронтенда.
Или я чего-то недопонимаю?dpivovarov
11.07.2016 18:30Ну про команду никто вроде и не говорил, как обязательную опцию.
Ну и плюс держать репозиторий локально не все готовы. Gogs на текущий момент — хорошая, производительная и легкая альтернатива ресурсоемким GitLab, RHC, Stash и прочим self-hosted решениям.
Может вполне использоваться, как приватный репозиторий. Ну а в будущем, думаю, у них появится и кодревью (pre-merge) и сниппеты. Все это обсуждается.kay
11.07.2016 18:44Можно ссылку на обсуждение?
AndreiYemelianov
11.07.2016 18:54Запросы соответствующие есть:
https://github.com/gogits/gogs/issues/936
https://github.com/gogits/gogs/issues/776
Будем надеяться, что реализуют, и ждать долго не придётся.
Moxa
11.07.2016 18:59-2судя по системным требования, Gogs не сильно производительнее чем GitLab, обоим нужен минимум гигабайт памяти и пара ядер.
есть какое-нибудь сравнение производительности?dpivovarov
11.07.2016 19:17Конкретных бенчмарков мы, честно, не делали.
GitLab нужно как минимум 2 Гб памяти, если мне не изменяет память. Gogs неплохо работает на самых простых конфигурациях с 512 памяти в Vscale. Правда стресс-теста с огромным кол-вом реп я не делал.Moxa
11.07.2016 19:22https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md
- 512MB RAM + 1.5GB of swap is the absolute minimum but we strongly advise against this amount of memory. See the unicorn worker section below for more advice. - 1GB RAM + 1GB swap supports up to 100 users but it will be very slow - 2GB RAM is the recommended memory size for all installations and supports up to 100 users
не знаю, правда, насколько оно юзабельно, если нет двух гб оперативы
dpivovarov
11.07.2016 19:23да, я плохо сформулировал :) recommended, конечно, а не минимум. но на практике — со свопом, конечно, в разы менее приятно даже производить установку.
DeaDSandro
12.07.2016 00:51довольно работоспособно, если «для себя и еще 1-2 человек». Количество репозиториев было порядка 15-20 по 50-150 мб. Потом перевёз на другой сервер (2 процессора, 2 гига), работать стало шустрее, но по сути разницу не особо заметил
zelenin
11.07.2016 20:41+4как бывший юзер гитлаба и нынешний гогса могу сказать, что потребление ресурсов — небо и земля. Гитлабу не хватило 512 даже чтобы просто запуститься. Гогс сейчас работает, потребляя 40 мб.
pudovMaxim
11.07.2016 18:45+3Ставил для себя и знакомых как хранилище личных проектов. Хотел сначала gitlab поставить, но системные требования и необходимость настройки руби-окружения как-то подпортили впечатления на слабой vps. Поставил gogs и получил именно то что хотел — очень шустрый и простой гитхабо-подобный сервис под небольшие проекты. Конечно до большого брата далеко, но со скоростью разработки у проекта пока все хорошо, поэтому есть надежды. И кстати, golang легко установился и скромно молчит.
mcleod095
11.07.2016 18:57Для тех кто не хочет ставить на сервак golang и собирать самому, вот есть инструкция https://gogs.io/docs/installation/install_from_binary, можно просто скопировать на сервак бинарник и запустить его.
x512
11.07.2016 18:33+1Я думаю к сравнению стоит добавить еще один открытый проект https://github.com/gitbucket/gitbucket
ALexhha
11.07.2016 19:12> Гит-хуки: GitLAB только в enterprise-версии
я может что то пропустил, но о каких именно хуках идет речь?
$ git add. && git commit -m 'git hook test' && git push -u origin devel
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 1 (delta 0)
remote: Commit message MUST begin with a Mantis ID: #12345. Commit validation failed for commit 49a1d7f523d61f10df29b242041ee6722f0efdc0
To ssh://git@gitlab.example.net:2222/hooks/project1.git
! [remote rejected] devel -> devel (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@gitlab.example.net:2222/hooks/project1.git'
Сам хук находится в файле /var/opt/gitlab/git-data/repositories/hooks/project1.git/custom_hooks/pre-receive
P.S.
CentOS 6.8 (Final), gitlab-ce-8.4.1-ce.0.el6.x86_64dpivovarov
11.07.2016 19:13Я могу ошибаться, но это их SaaS версия? В ней они есть, да
LionAlex
11.07.2016 19:16+1Что есть ревью кода? Пулл-реквесты в Гогсе есть
zzzzzzerg
12.07.2016 08:07Только нет возможности добавлять комментарии к строкам кода.
https://github.com/gogits/gogs/issues/1644
Spalf
11.07.2016 21:11+2Пожалуй стоит упомянуть что у GOGS есть GitHub-подобное API, правда пока в бете, но уже с клиентом/либой для Go:
github.com/gogits/go-gogs-client/wiki
А также в Gogs можно отмечать репозитории как зеркало и он сам будет снимать копии через заданный промежуток времени.
Собственно используя эти две возможности я в легкую забэкапил все корпоративные репозитории с BitBucket.
Ну а еще в добавок:
GitPrep: github.com/yuki-kimoto/gitprep — примерно тоже самое, но на Perl.
GitBucket: github.com/gitbucket/gitbucket — на Scala
Klaus: github.com/jonashaag/klaus — на Python.
Scratch
11.07.2016 23:08После go get -d github.com/gogits/gogs скачается master, который не компилится на данный момент. Нужно ручками зайти в сорцовую папку и чекнуть последний релиз
noder
12.07.2016 01:06+1Почему в сравнении нет bitbucket? Для команд до 5-ти человек приватные проекты там бесплатны, стоимость ниже чем на github, да и все основные фичи есть.
saggid
12.07.2016 02:11+3Есть ещё такая штука, как Phabricator. Мы его используем в своей организации в данный момент. Очень даже неплохая штука, работает быстро, правда недавно нашлись проблемы с PHP7 с какими-то асинхронными функциями, которые в седьмой версии пыхи были не до конца реализованы. Поэтому, они там ждут выхода PHP 7.1, в котором с этим проблем не будет. Ну так вот, на PHP v7 оно летает даже на самом дешёвом дроплете за пять долларов (или на vscale на самой дешёвой виртуалке). Из-за отката на PHP пятой ветки пришлось немного увеличить тариф нашего дроплета с фабрикатором, но это не смертельно.
Ну так вот, фабрикатор — это очень даже мощная штука, беплатный, без особых проблем настраивается и поднимается. Содержит в себе туеву кучу всяких прикольных модулей, благодаря которым можно построить очень даже удобную среду работы команды.
Я для своих коллег по цеху в нашей документации сделал небольшое ревью основных функций, которыми надо (или желательно) пользоваться.
- Diffusion дока (репозитории кода)
- Maniphest (задачи)
- Projects дока (управление проектами)
- Phriction дока (wiki движок)
- Audit дока (аудит коммитов)
- Paste (примеры кусочков кода)
Другие очень интересные модули:
- Passphrase (хранение и шаринг паролей и ssh ключей)
- Differential дока (обсуждение коммитов перед принятием, почти как пул реквесты на гитхабе)
- Drydock дока (аналог докера, экспериментальный инструмент для создания окружений, например для тестов)
- Legalpad дока (создание документов и соглашений, которые потом можно потребовать подписать определённому кругу лиц)
- Owners дока (выделение определённых папок и файлов проектов в отдельные обособленные области)
- Macro (быстрое создание мемов)
- Pholio (обсуждение дизайнов и интерфейсов)
- Countdown (создание счётчиков обратного отсчёта)
И это далеко не всё, но одни из самых полезных и интересных модулей. Из минусов фабрикатора хочу отметить его определённую сложность. Для его успешного использования, члены вашей команды должны быть в определённой мере образованными и компетентными, должны иметь стремление к порядку, стремление разбираться в определённой логике работы системы. Не все люди готовы к этому, как видно из практики.
LionAlex
12.07.2016 13:41+1Тут еще стоит указать, что Gogs прекрасно работает на Raspberry Pi, а для GitLab'a мне пришлось покупать второй план на DO.
clickfreak
12.07.2016 14:11+1Ещё есть Pagure: https://pagure.io/pagure
Написан на питоне, используется для проектов Fedora.
"pull-реквесты, issues, хранятся вместе с проектом, в Git-репозитории."
smssystem
У Gogs есть возможность отобразить contributions graph пользователя, наподобие тому, как это реализовано у github или gitlab?
dpivovarov
пока нет, но в планах, у них, насколько я вижу, есть. По крайней мере эта тема поднимается:
https://github.com/gogits/gogs/issues/19
https://github.com/gogits/gogs/issues/1339
И есть вероятность, что в будущих обновлениях — появится.
ZogG
А почему хостите не у себя, а на гитхабе?
ZogG
То есть спросить нельзя. Ответа нет, но минусы есть…
zelenin
Продукт китайский. Авторов продукта в ветке нет.
ZogG
Я просто увидел ниже ТС написал « Анонс мы делали в панельке».
dpivovarov
Мы и делали. В своей панельке, анонс новых возможностей в Vscale.
Diagon
Я правильно понял, конкурент гитхаба для работы пользуется гитхабом?