В этой статье используется лицензионное соглашение «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 году, а восемь лет спустя версия инструмента с открытым исходным кодом стала более полезной.
- Репозиторий с открытым исходным кодом:secure.pH AB Rica Tor.com/source/pH AB…
- Зеркальный репозиторий:GitHub.com/poof hazri too/afraid…
- SaaS-версия:woohoo. пуф хазри same.com/pH AB Rica Tor…
Как видно из репозитория с открытым исходным кодом, код версии сообщества постоянно обновляется, и теперь также предоставляется версия 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 — это только первый шаг, интеграцию с существующим хранилищем и интеграцию с CI оставим на потом.
--EOF
Теперь у меня есть небольшая группа по метанию, в которую входят друзья, которые любят метать.
В отсутствие рекламы мы будем вместе болтать о софте, HomeLab и вопросах программирования, а также время от времени будем делиться технической информацией о салоне в группе.
Друзья, которые любят бросать, могут отсканировать код, чтобы добавить друзей. (Пожалуйста, укажите источник и цель, иначе не пройдет проверку)