GitPod — это отличный инструмент для облачных контейнеров при разработке. Если вы занимаетесь разработкой и хотите получить безопасный и эффективный облачный контейнер для опробования, это очень хороший способ. Вы даже получаете 50 часов в месяц бесплатно, что очень удобно, если вам нужен лишь эпизодический побочный проект, а не работа на полную ставку. Он также работает с Visual Studio Code — хотя в последнее время у меня это не получается — так что вы можете использовать его в браузере или в настольном редакторе. Когда вы переходите к репозиторию GitHub или GitLab с установленным расширением, есть простая кнопка, которая запускает контейнер с кодом этого репозитория, что позволяет быстро и легко увидеть, как он работает, а также внести изменения.
В этой мини-серии я описываю, как я создал общий контейнер, дружественный к Drupal, работающий с GitPod. Он доступен на моем GitHub. Обратите внимание, что поскольку это некоторый код, который я, возможно, продолжу использовать со временем, код там может измениться сверх того, что описано в этой статье.
Dockerfile
Это решение начинается с образа MySQL, предоставленного GitPod. Это не дает всего необходимого для функционирования сайта Drupal, но отвечает основам стека LAMP.
FROM gitpod/workspace-mysql
Самая большая проблема с использованием этого образа заключается в том, что вы можете оказаться с последней версией PHP, и есть большая вероятность, что ваш сайт Drupal еще не поддерживает ее. Поэтому вы, вероятно, захотите добавить раздел, чтобы изменить PHP на тот, который, как вы знаете, работает в настоящее время:
RUN update-alternatives --set php /usr/bin/php8.0
Однако это еще не все. Есть еще несколько вещей, которые я хочу видеть на каждом сайте Drupal 9+.
Пакеты PHP
Вот как добавить пакеты PHP, необходимые в Dockerfile Ubuntu, а также APCU и uploadprogress, которые также рекомендуются Drupal. Недавно я писал об установке PECL UploadProgress для Oracle Linux, которая похожа, но немного отличается от этих команд Ubuntu.
USER root
# Install other needed packages
RUN apt update
RUN apt install -y php-pear php-apcu php-json php-xdebug build-essential mysql-client sendmail
RUN pecl install apcu
RUN pecl install uploadprogress
Composer
Drupal может работать и без composer, но с ним ваша жизнь станет намного проще. Вот как я добавил его в свой Dockerfile:
# Install latest composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php --install-dir /usr/bin --filename composer
RUN php -r "unlink('composer-setup.php');"
На этом этапе сервер готов предоставить основные пакеты, которые обеспечивают хорошую работу Drupal.
Тестирование доступности Pa11y
Недавно я также упоминал pa11y, инструмент для тестирования доступности. Я всегда хочу, чтобы он был доступен. Вот как это сделать в этом Dockerfile на базе Ubuntu:
# Install pa11y accessibility testing tool, including NodeJS
RUN curl -sL https://deb.nodesource.com/setup_16.x -o # Install pa11y accessibility testing tool, including NodeJS and Chromium
RUN curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
RUN bash nodesource_setup.sh
RUN apt-get install -y nodejs libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm-amdgpu1 libxkbcommon-x11-0 libxcomposite-dev libxdamage-dev libxrandr-dev libgbm-dev libgtk-3-common libxshmfence-dev software-properties-common
RUN apt-get install -y apparmor snapd apparmor-profiles-extra apparmor-utils kdialog chromium-browser libappindicator1 fonts-liberation
RUN npm install pa11y -g --unsafe-perm=true --allow-root
Порты
Наконец, я собираюсь открыть стандартные порты: 80 (HTTP), 443 (HTTPS) и 3306 (MySQL). Это не кажется необходимым, но это может помочь напомнить себе, какие порты вы используете.
EXPOSE 80
EXPOSE 443
EXPOSE 3306
Что дальше
В одном из следующих постов я продолжу работу с другим большим файлом, который необходим для работы: .gitpod.yml. В третьем посте я расскажу о нескольких небольших изменениях, которые мне пришлось внести в другие конфигурации.