X

Установка Bitbucket Server на VPS в докер

Сегодня решил разобраться с системой контроля репозиториев Bitbucket, а именно установить ее на VPS в докер контейнер..

Что такое Bitbucket

Bitbucket - система контроля репозиториев, похожая на GitHub. По сути, это gui обертка на git-ом, позволяющая более удобно управлять репозиториями, проектами, ветками, пулл реквестами, комментариями к коду и много чем еще.

Компания Atlassian, разработчик этого продукта, предлагает несколько вариантов решений: https://www.atlassian.com/software/bitbucket/pricing

  • В облаке: есть бесплатный тариф с хранилищем до 1 Gb и максимум 5 пользователей. За 3$/мес - 5 Gb места и неограниченное кол-во пользователей. За 6$/мес, 10 Гб места.
  • Self hosted: установка на свой сервер
    • Bitbucket Server: 10 пользователей = 10$/разово, 25 пользователей = 2900$/разово, 50 пользователей = 5200$/разово и т.д.
    • Bitbucket Data Center: 25 пользователей = 1980$/год, 50 пользователей = 3630$/год и т.д.

В облаке на бесплатный тариф можно зарегистрироваться сразу, для Self-Hosted решений, есть возможность получить 30 дневный триал.

С облачным решением, я уже был знаком, поэтому решил посмотреть в сторону Self Hosted - Bitbucket Server, в частности для того, чтобы купить лицензию и в долгосрочном периоде перевести свои проекты туда без привязки к ограниченному месту на диске.

Выбор сервера для установки

Во время установки, я столкнулся с тем, что в моем тарифном плане у VPS, было всего 2 Гб оперативки. К сожалению, пришлось увеличивать тарифный план (до 4 Гб), тк этой памяти не хватило даже просто запустить Bitbucket Server. К счастью, я использую Hetzner Cloud, где можно легко увеличить размер сервера в пару кликов, однако так работает не везде, поэтому советую начать с рекомендуемых требований.

Найти их можно тут: https://confluence.atlassian.com/bitbucketserver/supported-platforms-776640981.html

Там есть версии ПО, но основное вот:

  • Процессор
    • режим тестирования: 1 ядро
    • продакшен: 2+ ядра
  • Память - минимум 3Гб: 1 Гб для Bitbucket Server + 2 Гб, для гит операций.
  • ОС: Windows / Linux
  • Java, от 11 версии
  • Базы данных: есть поддержка MySQL, PostgreSQL, Microsoft SQL Server, Oracle, Amazon Aurora, H2. Присутствует ограничения по веткам версий, смотрите по ссылке.

Как видите, для старта, желательно выделить 3 Гб памяти для нормальной работы. Если на вашем сервере будет что-то еще, например, в моем случае там nginx, mysql, php, docker и еще пара веселостей + самой ОС так же нужна оперативка, я бы рекомендовал смотреть сразу в сторону тарифных планов с минимум 8 Гб ОЗУ.

Установка

Режимов установки есть несколько, я выбрал установку в докер.

Шаг 1. Установка Docker и Docker Compose

Добавляем ключ репозитория

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Добавляем репозиторий

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable edge"

Обновляем списки пакетов

sudo apt-get update

Устанавливаем docker и docker-compose

sudo apt-get install -y docker-ce

Проверяем что докер установился и запущен

# systemctl status docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-11-27 13:40:28 CET; 34min ago
     Docs: https://docs.docker.com
 Main PID: 1038 (dockerd)
    Tasks: 20
   CGroup: /system.slice/docker.service
           └─1038 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Опционально, если работаете не от пользователя root, и не хотите каждый раз при использовании докера запускать его через sudo, добавьте своего пользователя в группу docker

sudo usermod -aG docker ${USER} 

# перезагружаемся или выполняем чтобы изменения вступили в силу
su ${USER}

# проверяем что мы в группе docker
id -nG

Шаг 2. Подготовка docker-compose.json

На этом этапе вам нужно или самому собрать образ или воспользоваться готовым, я выбрал из официального репозитория.

  • https://hub.docker.com/r/atlassian/bitbucket-server/

Создаем папку для будущих файлов

mkdir -p /opt/docker/bitbucket-server

К сожалению, готового docker-compose.yml для выбранного образа я не отыскал, поэтому составил свой:

nano /opt/docker/bitbucket-server/docker-compose.yml
version: '3'
services:
  bitbucket:
    image: atlassian/bitbucket-server
    restart: always
    ports:
      - "127.0.0.1:7990:7990"
      - "7999:7999"
    volumes:
      - bitbucket-volume:/var/atlassian/bitbucket
    environment:
      - 'BITBUCKET_PROXY_NAME=bitbucket.mydomain.tld'
      - 'BITBUCKET_PROXY_PORT=80'
      - 'BITBUCKET_PROXY_SCHEME=http'
      - 'BITBUCKET_DELAYED_START='
      - 'JVM_MINIMUM_MEMORY=1g'
      - 'JVM_MAXIMUM_MEMORY=4g'
    privileged: true
    hostname: bitbucket-server
    container_name: bitbucket-server
volumes:
  bitbucket-volume:
    external: false

Тут пожалуй стоит остановиться и упомянуть, что bitbucket использует два порта: 7990 для доступа по http(s) и 7999 для доступа по ssh. В экспериментальных целях, я решил повесить bitbucket на отдельный поддомен (bitbucket.mydomain.tld) и проксировать с помощью nginx трафик с 80 порта на 7990. Именно поэтому я прокинул порт 7990 на 127.0.0.1:7990, а не на внешний порт. В вашем случае это может быть излишним, поэтому конфигурация будет вот такой.

version: '3'
services:
  bitbucket:
    image: atlassian/bitbucket-server
    restart: always
    ports:
      - 7990:7990
      - 7999:7999
    volumes:
      - bitbucket-volume:/var/atlassian/bitbucket
    privileged: true
    hostname: bitbucket-server
    container_name: bitbucket-server
volumes:
  bitbucket-volume:
    external: false

Шаг 3. Запускаем и проверяем

Выполняем запуск в обычном режиме

docker-compose up

если нет ошибок, прерываем с помощью Ctrl+C и перезапускаем в detached mode

docker-compose up -d

Шаг 4. Первоначальная конфигурация

Переходим по адресу: http://127.0.0.1:7990 и попадаем в мастер установки. Там нас попросят ввести ключ продукта или зарегистрировать триал. Далее необходимо будет ввести данные админа и можно начинать пользоваться.

Шаг 5. Опционально. Настройка Nginx

Как я уже упоминал, я решил проксироват 80 порт моего домена на порт 127.0.0.1:7990 bitbucket сервера. Это не обязательный шаг, больше для того, чтобы просто ввести адрес в строке и на париться с портами. Конфиг nginx-а выглядит так

/etc/nginx/sites-enabled/bitbucket.mydomain.tld

server {
    server_name bitbucket.mydomain.tld;
    listen 80;

    location / {
        proxy_pass http://127.0.0.1:7990;
    }
}

на входе bitbucket уже есть авторизация и даже каптча с защитой от брутфорса, но я еще добавли и http basic авторизация, чтобы не светить лишний раз морду сайта в интернете

server {
    server_name bitbucket.mydomain.tld;
    listen 80;

    auth_basic "Protected area";
    auth_basic_user_file /var/www/bitbucket.mydomain.tld/secret/.htpasswd;

    location / {
        proxy_set_header Authorization "";
        proxy_pass http://127.0.0.1:7990;
    }
}

Список полезных ссылок

  • Системные требования и техническая информация
    • Системные требования: https://confluence.atlassian.com/bitbucketserver/supported-platforms-776640981.html
    • Порты: https://confluence.atlassian.com/bitbucketserverkb/which-ports-does-bitbucket-server-listen-on-and-what-are-they-used-for-806029586.html
    • Scaling: https://confluence.atlassian.com/bitbucketserver/scaling-bitbucket-server-776640073.html
    • Resource limit reached: https://confluence.atlassian.com/bitbucketserverkb/bitbucket-server-is-reaching-resource-limits-779171381.html
  • Примеры docker-compose.yml
    • https://github.com/EugenMayer/docker-image-atlassian-bitbucket/blob/master/docker-compose.yml