Во многих компаниях, где есть разработчики программного обеспечения(ПО), не обойтись без систем контроля версий(Version Control System, VCS, или Revision Control System). Эти системы нужны, чтобы каждый сотрудник мог работать над своей частью кода не мешая при этом остальным. Одной из самых популярных является Git. В интернете много онлайн сервисов поддерживают данную VCS. Но иногда требуется иметь полный контроль над хранимым кодом, но при этом чтобы наши разработчики могли работать удаленно и всегда имелась актуальная версия. Для нужд нашей компании было принято решение использовать приватный репозиторий. Как дополнительным условием было поддержка Git. Выбор пал на Bitbucket.
Проверка требований
Перед установкой проверяем минимальные требования:
- У вас должен быть root доступ
- ОС Windows или Linux (MacOS может не поддерживаться);
- 2+ ядер процессоров и 3ГБ+ оперативной памяти (предполагается, что на сам bitbucket сервер 1ГБ и 2ГБ на операции git);
- СУБД PostgreSQL или Oracle (а вот MySQL не рекомендуется);
- git версии 2.9.4 и выше.
Для более подробной информации можно посмотреть на официальной странице.
По своему опыту скажу, что запустить можно и на 2ГБ оперативной памяти для тестов, но придется отключить Elastixsearch, и иногда будет Bitbucket вылетать с ошибкой о нехватки памяти, особенно если у Вас не настроен swap.
В качестве операционной системы будем использовать CentOS 7 как хорошо зарекомендовавшая себя в серверных решениях. СУБД PostgreSQL завершит наш выбор.
Предварительная настройка
Для начала установим несколько удобных пакетов:
Cоздадим пользователя supp:
И зададим ему пароль:
Затем отредактируем файл /etc/ssh/sshd_config
Раскоментируем строчку: PermitRootLogin no и добавим ниже строку AllowUsers supp
PermitRootLogin no
AllowUsers supp
Перезапустим sshd сервис
Далее поправим файл /etc/sudoers
Находим строку root ALL=(ALL) ALL и после нее добавляем supp ALL=(ALL) ALL
root ALL=(ALL) ALL
supp ALL=(ALL) ALL
Установка Git
Перед установкой требуется установить git.
В CentOS последний git старой версии 1.8.3.1
Можно поставить git из исходников или со стороннего репозитория.
Со стороннего репозитория:
Таким образом установим версию 2.16.5
Если требуется установить более позднюю версию(на текущий момент доступна версия 2.19.1), то устанавливаем из исходников:
Проверяем установленную версию:
Установка PostgreSQL
Затем устанавливаем PostgreSQL. В репозиториях CentOS версия 9.2.24, bitbucket требует версии от 9.3.6 и до 10, 11-я пока в поддержке не описана. Будем ставить 10-ю версию.
Затем редактриуем файл /var/lib/pgsql/10/data/pg_hba.conf и добавим строчку:
host bitbucket bitbucketuser 127.0.0.1/32 md5
Создадим пользователя bitbucketuser и базу данных bitbucket:
Перезагрузим PostgreSQL для применения настроек в файле pg_hba.conf:
Установка Bitbucket
Скачать BitBucket можно на официальном сайте.
Либо прямо из командной строки:
Переходим в папку, где скачан файл bitbucket и вводим команду
Затем, по рекомендации официальной документации, используем sudo, что позволит использовать bitbucket как сервис.
Во время установки, ингалятор будет спрашивать различные вопросы. Можно везде просто нажимать Enter, но мы сменим место установки самого Bitbucket (/home/bitbucket) и его application (/home/bitbucketapp):
Если вы везде нажимали Enter, то папка по умолчанию для самого bitbucket /opt/atlassian/bitbucket/5.15.0.
Папка по-умолчанию для репозиторий, плагинов и других данных /var/atlassian/application-data/bitbucket.
Настройка межсетевого экрана
Теперь требуется настроить межсетевой экран (firewall). По-умолчанию в CentOS 7 идет firewalld. Создадим отдельный сервис под управление www доступом:
Аналогично создаем сервис для доступа по ssh:
Для применения настроек перезагружаем правила:
Проверяем:
Либо можно сделать ещё проще и просто добавить в зону порты (7990 - www и 7999 - ssh):
Если же Вы не хотите использовать firewalld и привыкли к iptables, то Вам достаточно прописать, предварительно отключив межсетевой экран по умолчанию:
или если у вас последнее правило - все запрещает, то вводим такую команду, где num_line - номер строки, куда будет вставлено правило:
Проверяем правила:
Последние штрихи установки
Переходим по ссылке http://localhost:7990 или если не с локальной машины как я, то заходим на http://your_domain:7990
Пока язык английский, но мы это исправим чуть дальше. Bitbucket может использовать внутреннюю базу для хранения репозиториев, но мы не зря устанавливали PostgreSQL, поэтому выбираем External и вводим данные.
Здесь уже вводим данные нашего пользователя Bitbucket. Здесь все просто.
Теперь надо ввести данные лицензии. Для начала сделаем тестовую лицензию на 30 дней, жмем Create an account для создания аккаунта на atlassian. После регистрации мы попадаем в окно для получения лицензии:
Server ID копируем со страницы ввода лицензии. Если вдруг что-то случится, то лицензионный код будет на сайте.
Bitbucket установлен и можно начинать пользоваться.
Мигрировать на PostgreSQL можно и позже из меню настроек:
В правом верхнем углу нажимаем шестеренку, Database.
Для полноты базовой настройки настроим почтовый сервер. Снова нажимаем шестеренку в правом верхнем углу, затем Mail Server. Я покажу пример настройки для почты mail.ru. От имени этой почты будут рассылаться сообщения, в том числе о забытых паролях.
Теперь сервер можно использовать.
Последние штрихи установки
Теперь сделаем некоторые настройки для комфорта работы с Bitbucket. В первую очередь русифицируем его. В стандартных дополнениях русского языка, да и многих других - нет, но есть сообщество, которое переводит на разные языки. Переходим на сайт продукта и ищем нужный нам язык. Нам нужен русский. В описании сказано, что переведено чуть более 53% - но этого более чем достаточно для большинства пользователей. Скачиваем себе на компьютер пакет.
После этого заходим в настройки (шестеренка в правом верхнем углу) и находим пункт Manage apps.
Нажимаем Upload app - и указываем загруженный пакет русификации. Ждем немного, пока установится. Затем идем в настройки сервера (Server settings) и выбираем в выпадающем списке Language - русский (Россия), жмем Сохранить.
Безопасность
По умолчанию Bitbucket работает на протоколе HTTP, а значит все пароли передаются в открытом виде. Будем улучшать безопасность. Разрешим использование только HTTPS. С помощью бесплатных сертификатов Let’s Encrypt нельзя включить HTTPS средствами Bitbucket потому, что в них отсутствуют данные об организации (name, organization, location). К тому же нормальную поддержку и работу не гарантирует разработчик, поэтому будем реализовывать HTTPS на nginx. Центром сертификации у нас будет Let’s Encrypt. Ставить будем с помощью Certbot. Переходим по ссылке для самостоятельного выбора или воспользуемся инструкцией ниже. В консоли набираем следующие команды:
Разрешим доступ в нашем межсетевом экране доступ по 80 (используется по умолчанию для протокола HTTP) и 443 (используется по умолчанию для HTTPS) портам. С HTTP сделаем переадресацию на HTTPS чуть дальше.
В данном случае бы добавили сервисы, в которых прописаны порты 80 и 443, можно вместо этого прописать порты:
Если Вы решили не использовать firewalld и больше привыкли к iptables, то:
Запускаем процедуру выпуска сертификата и здесь же, когда спросит о переадресации на HTTPS выберем пункт 2 (переадресовывать):
Теперь у нас есть сертификаты. Автоматизируем обновление сертификата, потому что текущий сертификат закончится 2019-01-25. Для добавим в cron ежедневную попытку перевыпустить сертификат. До истечения срока сертификата в зависимости от настроек он будет перевыпущен. Добавим в cron следующую строку:
0 0 * * * /usr/bin/certbot renew
Проверяем результат:
Переводим Bitbucket в режим работы за прокси. Для этого в папке установки приложений (мы устанавливали в папку /home/bitbucketapp, по умолчанию /var/atlassian/application-data/bitbucket) находим файл shared/bitbucket.properties и добавим следующие строки:
#behind proxy NGINX
server.port=7990
server.secure=true
server.scheme=https
server.proxy-port=443
server.proxy-name=your_domain
server.context-path=/
Сохраняем изменения. Затем меняем в настройках сервера в web интерфейсе базовый URL на следующий: https://your_domain
Теперь можно перезагрузить Bitbucket
Теперь заходим в настройки NGINX (по умолчанию /etc/nginx/nginx.conf) и в секции server, что слушает на 443 порту добавляем следующее:
location / {
proxy_pass http://localhost:7990;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
Далее:
Bitbucket перезагружается 3 минуты, поэтому не переживаем, если еще ничего не работает. И не забудем закрыть доступ в межсетевом экране по порту 7990, 7999 оставим для ssh:
Ну или для iptables. Сначала посмотрим номер правила для порта 7990, а уже потом удалим:
Полезности
Перезагружать Bitbucket можно несколькими способами и зависит от варианта установки. Для перезагрузки в случае установки как сервиса:
Если же при установке Bitbucket Вы выбрали вариант не как сервис, то для перезагрузки используем следующие команды (мы устанавливали в папку /home/bitbucket, по умолчанию /opt/atlassian/bitbucket/5.15.0):
Если нужно запустить Bitbucket без Elastixsearch, то используем команду:
Логи при возникновении ошибок смотреть в папке установки для приложений /home/bitbucketapp/log/ (мы устанавливали в папку /home/bitbucketapp, по умолчанию /var/atlassian/application-data/bitbucket).
Система в web интерфейсе поддерживает горячие клавиши, полный список которых Вы можете посмотреть нажав Shift+? или в правом верхнем углу нажать вопрос и выбрать Keyboard shortcuts.
Заключение
Спустя несколько часов установки мы имеем полноценный персональный Git репозиторий. Наш сервер смотрит в интернет и доступен из любой точки мира. Для большей безопасности можно ограничить доступ к серверу списком ip адресов. Или поднять VPN, через который будет осуществляться доступ к репозиторию. А если снаружи доступ к серверу не нужен, то и переводить на HTTPS не обязательно, сервер работать быстрее будет. Но все это уже тема для отдельной статьи. Было ведь не сложно, правда?