Создание фабрикатора с помощью Docker и Traefik v2

Docker
Создание фабрикатора с помощью Docker и Traefik v2

В этой статье используется лицензионное соглашение «Signature 4.0 International (CC BY 4.0)», добро пожаловать на перепечатку или изменение для использования, но вам необходимо указать источник.Атрибуция 4.0 Международная (CC BY 4.0)

Автор этой статьи: Су Ян

Создано: 2 февраля 2020 г. Статистические слова: 12171 слов Время чтения: 25 минут на чтение Ссылка на эту статью:Поиск teay.com/2020/02/02/…


Создание фабрикатора с помощью Docker и Traefik v2

Эта статья пролежала в ящике для черновиков больше месяца, она совпадает с потребностями удаленной совместной работы в последнее время и обновлением Traefik v2, поэтому эта статья у меня есть.

Если вашей команде также нужна внутренняя доска Канбан, Phabricator — хороший выбор: он может обеспечить простое управление задачами, может предоставить рабочий Канбан, поддержать обсуждение кода и даже позволить дизайнерам использовать его, и, конечно же, его основной аудит кода / обзор и функции управления.

написать впереди

Первый контакт с ним был в 2012 году, а восемь лет спустя версия инструмента с открытым исходным кодом стала более полезной.

Как видно из репозитория с открытым исходным кодом, код версии сообщества постоянно обновляется, и теперь также предоставляется версия SaaS.Учитывая требования к настройке, такие как конфиденциальность и интеграция с учетной записью, мы решили создать собственный сервис и пакет образ контейнера самостоятельно.

Учитывая, что не у всех есть требования к настройке, вот два решения: контейнерное решение Bitnami и контейнерное решение, которое полностью настраивается на основе официального кода.

Последняя версия сообщества«стабильно — продвижение 2020, неделя 5», Bitnami будет регулярно получать версию с официального склада и упаковывать контейнер.Адрес склада:GitHub.com/bitnami/bit…, будет небольшая задержка по сравнению с официальным обновлением, но в основном это не влияет на использование.

Подготовьте базу данных

Рекомендуется использовать базу данных, предоставленную поставщиком облачных услуг, в производственной среде, но если она используется в небольшом масштабе, также можно использовать контейнер для запуска примера базы данных.

version: '3.7'

services:

  mariadb:
    image: mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=phabricator
      - MYSQL_DATABASE=phabricator
    command: --max_allowed_packet=33554432 --sql_mode="STRICT_ALL_TABLES" --local-infile=0
    ports:
      - 13306:3306
    networks:
      - traefik
    healthcheck:
      test: "mysqladmin --password=phabricator ping -h 127.0.0.1"
      timeout: 5s
      retries: 20
    volumes:
      - './mariadb_data:/var/lib/mysql'

networks:
  traefik:
    external: true

Сохраните вышеуказанное какdocker-compose.ymlи выполнитьdocker-compose up -dВот и все.

Когда база данных готова, давайте поговорим о том, как просто запустить службу фабрикатора.

Контейнерное решение Bitnami

Здесь представлены две версии конфигурационных файлов Дополнительные предварительные условия для использования Traefik можно найти по адресув прошлых статьяхоказаться.

Используйте с Traefik v1

Если вы все еще используете Traefik v1, используйте следующую конфигурацию, чтобы запустить упакованную стабильную версию одним щелчком мыши.

version: '2'
services:

  phabricator:
    image: 'bitnami/phabricator:2019'
    expose:
      - 80
      - 443
    volumes:
      - './phabricator_data:/bitnami'
      - './extensions:/opt/bitnami/phabricator/src/extensions'
    environment:
      - PHABRICATOR_HOST=phabricator.soulteary.com
      - PHABRICATOR_USERNAME=soulteary
      - PHABRICATOR_PASSWORD=soulteary
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.port=80"
      - "traefik.frontend.rule=Host:phabricator.soulteary.com"
      - "traefik.frontend.entryPoints=https,http"

networks:
  traefik:
    external: true

Используйте с Traefik v2

Конечно, более рекомендуется использовать его с Traefik v2.

version: '3.7'

services:

  phabricator:
    image: 'bitnami/phabricator:2019'
    expose:
      - 80
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.phab0.middlewares=https-redirect@file"
      - "traefik.http.routers.phab0.entrypoints=http"
      - "traefik.http.routers.phab0.rule=Host(`phabricator.lab.io`,`phabricator-file.lab.io`)"
      - "traefik.http.routers.phab1.middlewares=content-compress@file"
      - "traefik.http.routers.phab1.entrypoints=https"
      - "traefik.http.routers.phab1.tls=true"
      - "traefik.http.routers.phab1.rule=Host(`phabricator.lab.io`,`phabricator-file.lab.io`)"
      - "traefik.http.services.phabbackend.loadbalancer.server.scheme=http"
      - "traefik.http.services.phabbackend.loadbalancer.server.port=80"
    volumes:
      - './phabricator_data:/bitnami'
      - './extensions:/opt/bitnami/phabricator/src/extensions'

networks:
  traefik:
    external: true

Китайизировать программу

Спасибо пользователям сети за предоставленную программукитайский патч, скачайте **PhabricatorSimplifiedChineseTranslation.php** в репозиторий и поместите его в указанный выше конфигурационный файлextensionsПосле того, как каталог находится в, запустите приложение, дождитесь готовности приложения к запуску и переключитесь на китайский язык в личных настройках.

Далее приступим к обеду, как упаковать фабрикатор на основе исходников.

Упаковка образа контейнера Phabricator

Официальная документация по установкеПодробно написано, и даже инкапсулирует базовый скрипт установки, на основе которого мы пишем Dockerfile контейнера.

FROM ubuntu:18.04

LABEL maintainer="soulteary@gmail.com"

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get upgrade -y && \
    echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && export DEBIAN_FRONTEND=noninteractive && \
    apt-get install -y lsb-release curl && \
    # deps from: https://raw.githubusercontent.com/phacility/phabricator/stable/scripts/install/install_ubuntu.sh
    apt-get install -y tzdata sudo && \
    ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    apt-get install -y git apache2 libapache2-mod-php php php-mysql php-gd php-curl php-apcu php-cli php-json php-mbstring php-zip python python-pip && \
    a2enmod rewrite && \
    pip install Pygments

WORKDIR /opt

RUN git clone https://github.com/phacility/phabricator.git --branch=stable --depth=1 && \
    cd phabricator && \
    git checkout cc11dff7d317b5a1e82e24ab571fef9abb633a49

RUN git clone https://github.com/phacility/arcanist.git --branch=stable --depth=1 && \
    cd arcanist && \
    git checkout 729100955129851a52588cdfd9b425197cf05815

RUN git clone https://github.com/phacility/libphutil.git --branch=stable --depth=1 && \
    cd libphutil && \
    git checkout 034cf7cc39940b935e83923dbb1bacbcfe645a85

RUN git clone https://github.com/arielyang/phabricator_zh_Hans.git --branch=master --depth=1 && \
    cd phabricator_zh_Hans && \
    git checkout ba5e602d934a6efacdc09082cd3a762449de45cf && \
    cp dist/\(stable\)\ Promote\ 2019\ Week\ 50/PhabricatorSimplifiedChineseTranslation.php ../phabricator/src/extensions/

COPY phabricator/docker-assets ./assets

RUN sed -i -e "s/post_max_size = 8M/post_max_size = 32M/g" /etc/php/7.2/apache2/php.ini && \
    sed -i -e "s/;opcache.validate_timestamps=1/opcache.validate_timestamps = 0/g" /etc/php/7.2/apache2/php.ini

RUN useradd daemon-user && \
    mkdir -p /data/repo && \
    chown -R daemon-user:daemon-user /data/repo && \
    ln -s /usr/lib/git-core/git-http-backend /usr/bin/ && \
    echo "Cmnd_Alias GIT_CMDS = /usr/bin/git*" >> /etc/sudoers.d/www-user-git && \
    echo "www-data ALL=(daemon-user) SETENV: NOPASSWD: GIT_CMDS" >> /etc/sudoers.d/www-user-git && \
    chmod 0440 /etc/sudoers.d/www-user-git

ENTRYPOINT ["bash", "-c", "/opt/assets/entrypoint.sh"]

EXPOSE 80

Dockerfile в основном разделен на три части: первая часть настраивает базовую системную среду и зависимости системной среды, вторая часть получает программный код и зависимости приложения текущей версии, третья часть настраивает разрешения приложения и задает сценарий запуска контейнера.

Здесь требуется скрипт запуска программыentrypoint.shСодержание следующее:

#!/usr/bin/env bash

./phabricator/bin/storage upgrade --force && \
./phabricator/bin/phd start

apachectl -D FOREGROUND

Выполняемая работа также проста: инициализируем конфигурацию Фабрикатора и запускаем Веб-сервер.

Я загрузил соответствующий код вGitHub, и нажмите наDockerHubСтуденты, которым это необходимо, могут забрать его самостоятельно.

Написать конфигурацию службы

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

<VirtualHost *>
  ServerName phabricator.lab.io
  DocumentRoot /opt/phabricator/webroot
  RewriteEngine on
  RewriteRule ^(.*)$	/index.php?__path__=$1 [B,L,QSA]

  SetEnv HTTPS true

  <Directory "/opt/phabricator/webroot">
    Require all granted
  </Directory>

</VirtualHost>

<VirtualHost *>
  ServerName phabricator-file.lab.io
  DocumentRoot /opt/phabricator/webroot
  RewriteEngine on
  RewriteRule ^(.*)$	/index.php?__path__=$1 [B,L,QSA]

  <Directory "/opt/phabricator/webroot">
    Require all granted
  </Directory>

</VirtualHost>

После замены имени домена в приведенном выше содержимом адресом, который вы фактически используете, сохраните его как **phabricator.conf**, а затем подготовьтесь к применению конфигурации:

{
  "phabricator.base-uri": "https://phabricator.lab.io/",
  "security.alternate-file-domain":"https://phabricator-file.lab.io/",
  "pygments.enabled": true,
  "phabricator.timezone":"Asia/Shanghai",
  "storage.local-disk.path":"/data/stor",
  "repository.default-local-path": "/data/repo",
  "phd.user": "daemon-user",
  "mysql.pass": "phabricator",
  "mysql.user": "root",
  "mysql.port": "3306",
  "mysql.host": "mariadb"
}

Кроме того, замените доменное имя своим собственным и замените содержимое, связанное с базой данных, в конфигурации фактическим значением, сохраните файл какlocal.json. (Если в базе данных используется содержимое этой статьи, ее не нужно модифицировать)

Написать стартовую конфигурацию контейнера

Поместив сохраненный выше файл конфигурации в указанную директорию, напишитеdocker-compose.yml:

version: '3.7'

services:

  phabricator:
    image: soulteary/phabricator:stable-2020-week-5
    expose:
      - 80
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.phab0.middlewares=https-redirect@file"
      - "traefik.http.routers.phab0.entrypoints=http"
      - "traefik.http.routers.phab0.rule=Host(`phabricator.lab.io`,`phabricator-file.lab.io`)"
      - "traefik.http.routers.phab1.middlewares=content-compress@file"
      - "traefik.http.routers.phab1.entrypoints=https"
      - "traefik.http.routers.phab1.tls=true"
      - "traefik.http.routers.phab1.rule=Host(`phabricator.lab.io`,`phabricator-file.lab.io`)"
      - "traefik.http.services.phabbackend.loadbalancer.server.scheme=http"
      - "traefik.http.services.phabbackend.loadbalancer.server.port=80"
    volumes:
      - ./phabricator_data/stor:/data/stor
      - ./phabricator_data/repo:/data/repo
      - ./phabricator/docker-assets/phabricator.conf:/etc/apache2/sites-available/000-default.conf:ro
      - ./phabricator/docker-assets/local.json:/opt/phabricator/conf/local/local.json:ro

networks:
  traefik:
    external: true

использоватьdocker-compose up -dЗапустите приложение и выполнитеdocker-compose logs -fПроверьте статус запуска приложения.

Creating phabricator-dockerize_phabricator_1 ... done
Attaching to phabricator-dockerize_phabricator_1
phabricator_1  | Loading quickstart template onto "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:db.paste" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190523.myisam.01.documentfield.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190718.paste.01.edge.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190718.paste.02.edgedata.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190718.paste.03.paste.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190718.paste.04.xaction.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190718.paste.05.comment.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190802.email.01.storage.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190802.email.02.xaction.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190815.account.01.carts.php" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190815.account.02.subscriptions.php" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190816.payment.01.xaction.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190816.subscription.01.xaction.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190822.merchant.01.view.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190909.herald.01.rebuild.php" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190924.diffusion.01.permanent.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20190924.diffusion.02.default.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20191028.uriindex.01.rebuild.php" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20191113.identity.01.email.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20191113.identity.02.populate.php" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20191113.identity.03.unassigned.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20191114.email.01.phid.sql" to host "mariadb:3306"...
phabricator_1  | Applying patch "phabricator:20191114.email.02.populate.php" to host "mariadb:3306"...
phabricator_1  | Storage is up to date. Use "storage status" for details.
phabricator_1  | Synchronizing static tables...
phabricator_1  | Verifying database schemata on "mariadb:3306"...
phabricator_1  | 
phabricator_1  | 
phabricator_1  | Database                 Table                 Name         Issues
phabricator_1  | phabricator_differential differential_revision phid         Surplus Key
phabricator_1  | phabricator_differential differential_revision key_modified Missing Key
phabricator_1  | phabricator_differential differential_revision key_phid     Missing Key
phabricator_1  | phabricator_repository   repository_identity   key_email    Missing Key
phabricator_1  | phabricator_phortune     phortune_accountemail key_account  Missing Key
phabricator_1  | phabricator_phortune     phortune_accountemail key_address  Missing Key
phabricator_1  | phabricator_phortune     phortune_accountemail key_phid     Missing Key
phabricator_1  | phabricator_user         user_email            key_phid     Missing Key
phabricator_1  | phabricator_conpherence  conpherence_index                  Better Table Engine Available
phabricator_1  | Applying schema adjustments...
phabricator_1  | Completed applying all schema adjustments.
phabricator_1  |  ANALYZE  Analyzing tables...
phabricator_1  |  ANALYZED  Analyzed 535 table(s).
phabricator_1  | Freeing active task leases...
phabricator_1  | Freed 0 task lease(s).
phabricator_1  | Starting daemons as daemon-user
phabricator_1  | Launching daemons:
phabricator_1  | (Logs will appear in "/var/tmp/phd/log/daemons.log".)
phabricator_1  | 
phabricator_1  |     (Pool: 1) PhabricatorRepositoryPullLocalDaemon
phabricator_1  |     (Pool: 1) PhabricatorTriggerDaemon
phabricator_1  |     (Pool: 1) PhabricatorFactDaemon
phabricator_1  |     (Pool: 4) PhabricatorTaskmasterDaemon
phabricator_1  | 
phabricator_1  | Done.
phabricator_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.4. Set the 'ServerName' directive globally to suppress this message

когда видишьDone., вы можете открыть браузер для дальнейшей настройки Phabricator.

设置 Phabricator 管理员账户

Откройте браузер, введите настроенное доменное имя, Phabricator перейдет к панели инструментов.

安装完毕的 Phabricator

Остальное — настроить приложение под свои нужды.

В конце концов

Построение Phabricator — это только первый шаг, интеграцию с существующим хранилищем и интеграцию с CI оставим на потом.

--EOF


Теперь у меня есть небольшая группа по метанию, в которую входят друзья, которые любят метать.

В отсутствие рекламы мы будем вместе болтать о софте, HomeLab и вопросах программирования, а также время от времени будем делиться технической информацией о салоне в группе.

Друзья, которые любят бросать, могут отсканировать код, чтобы добавить друзей. (Пожалуйста, укажите источник и цель, иначе не пройдет проверку)

Эти вещи о том, чтобы бросить группу в группу