Добавление томов
Тома — это прежде всего способ разрешить приложениям ваших контейнеров записывать в файловую систему. Каталог, в Vagga.yaml
находится Vagga.yaml
, автоматически добавляется в контейнер как /work
(точно так же, как Vagrant добавляет каталог, содержащий vagrantfile
виде /Vagrant
внутри виртуальной машины), но кроме этого Vagga добавляет /tmp
и /run
и /run/shm
как тома тоже.
Чтобы узнать и прочитать больше о различных типах томов, посетите страницу томов в документации Vagga .
Если вы будете искать в Интернете или продолжать пытаться создать свои контейнеры, вы почувствуете, какие каталоги необходимы для запуска пакета. В нашем примере NGINX требует /var/lib
, /var/lib/nginx
, /var/log
и /var/log/nginx
. Точно так же PHP требует доступа к /run/php
и /var/log
. Давайте добавим их в наши контейнеры:
containers: nginx: setup: - !Ubuntu trusty - !Depends runtime/nginx/default - !Install [software-properties-common] - !Sh add-apt-repository ppa:nginx/stable -y && apt-get update - !Install [nginx] volumes: /var: !Tmpfs mode: 0o766 subdirs: lib: lib/nginx: log:
Как видите, мы добавили каталоги первого уровня в качестве томов и определили все подкаталоги в этом каталоге в разделе подкаталогов каждого тома. Когда режим установлен в родительском каталоге, все подкаталоги также наследуют его по умолчанию.
Примечание . Если вы не можете понять параметр режима каждого тома, вы можете думать о нем так: первое значение (0 или 1) — это бит Sticky , o
означает значение, следующее за восьмеричным, а следующее три числа (например, 777
) являются разрешениями.
Настройка NGINX и PHP-fpm
Как вы, вероятно, знаете, если вы когда-либо устанавливали NGINX или PHP-fpm вручную, после установки этих приложений на компьютере с Linux вы должны настроить их. Поскольку мы хотим сделать это автоматически, мы можем сами написать файл конфигурации и использовать шаг сборки !Copy
чтобы вставить его в контейнер во время сборки. На этом этапе я обычно делаю следующее:
- Присоединитесь к контейнеру (т.е. войдите в него), запустив
Vagga _run <container name> bash
. Это просто запускает bash в контейнере и позволяет вам вводить команды.
- Скопируйте файл конфигурации, который я хочу отредактировать, в каталог
/work
, чтобы я мог получить к нему доступ на своем компьютере. Я делаю это, запустив команду типа cp nginx.conf /work
. Помните, что каталог /work
является общим для вашей машины и контейнера.
Итак, для настройки NGINX и PHP-fpm
вам необходимо отредактировать следующие файлы:
- / И т.д. / Nginx / сайты доступное / по умолчанию
- /etc/php/7.0/fpm/php-fpm.conf
- /etc/php/7.0/fpm/pool.d/www.conf
Соглашение о размещении файлов конфигурации в вашем проекте, похоже, является каталогом runtime
внутри вашего проекта. Перейдите в папку вашего проекта (в нашем примере vagga
) и создайте каталог runtime
. Внутри него создайте каталог с именем nginx
для хранения вашей конфигурации NGINX, а другой с именем php
для хранения двух других файлов. Вы можете либо скопировать файлы конфигурации из своего контейнера, чтобы почувствовать процесс, либо просто скопировать и вставить следующее содержимое в каждый файл.
выполнения / Nginx / по умолчанию
В этом файле мы сообщаем NGINX прослушивать порт 8000, задаем имя сервера example.com
и www.example.com
и www.example.com
путь к нашей корневой папке и экземпляру PHP-fpm (который будет прослушиваться на 127.0.0.1:9000
):
Примечание : поскольку Vagga работает без привилегий root, процессы, работающие внутри контейнеров, не могут прослушивать порты ниже 1024. Это ограничение наложено операционной системой Linux.
server { listen 8000; root /work/; index index.php index.html index.htm; server_name example.com www.example.com; location / { try_files $uri $uri/ /index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Среда выполнения / PHP / PHP-fpm.conf
Причина, по которой мы редактируем этот файл, заключается в том, что, поскольку Docker и Vagga контролируют процесс внутри каждой машины, они требуют, чтобы ваши приложения запускались на переднем плане, то есть они не должны быть демонами. По умолчанию PHP-fpm работает как демон, и мы редактируем конфигурацию, чтобы установить для параметра конфигурации daemonize значение no
.
daemonize = no
Другим, возможно, более чистым способом было бы просто создать файл с именем no-daemonized.conf
и поместить в него одну строчку выше, затем поместить его в наш каталог runtime/php
и скопировать его вместо этого.
выполнения / PHP / www.conf
Причина, по которой мы меняем этот файл, заключается в том, чтобы он слушал порт 9000 вместо создания файла сокета. Измените значение listen
:
listen = 9000
Копирование конфигурации в контейнеры
Последний шаг в создании наших контейнеров — скопировать эти файлы конфигурации в нужное место. Как вы, возможно, помните, ранее в этой статье я говорил, что Vagga перестроит ваши контейнеры, если изменятся зависимости вашего проекта. Итак, поскольку мы хотим, чтобы изменения в этих файлах конфигурации вступали в силу каждый раз, когда мы запускаем команды, нам также необходимо добавить их как зависимости с помощью команды !Depend
. Вот финальная версия нашего Vagga.yaml
:
containers: nginx: setup: - !Ubuntu trusty - !Depends runtime/nginx/default - !Install [software-properties-common] - !Sh add-apt-repository ppa:nginx/stable -y && apt-get update - !Install [nginx] - !Copy source: /work/runtime/nginx/default path: /etc/nginx/sites-available/default volumes: /var: !Tmpfs mode: 0o766 subdirs: lib: lib/nginx: log:
Примечание : обратите внимание, что при копировании и исходный, и целевой путь находятся внутри контейнера. Это не похоже на Docker, где адрес источника указан внутри хоста.
Успех! Теперь вы можете запускать Vagga _build nginx
и Vagga _run php
для создания ваших контейнеров! Загрузка пакетов займет некоторое время, поэтому выполните процедуру grab-coffee-pat-self-on-the-back и подготовьтесь к последнему шагу: добавьте команду run
чтобы связать все вместе.
команды
Команды — это то, что другие разработчики используют, чтобы использовать возможности этой новой настройки. Существует два типа команд:
- Команды с тегом
!Command
: эти команды запускаются и просто выходят. Примерами команд этого типа являются ls
, php -v
и т. Д.
- Команды, помеченные
!Supervise
: эти команды имеют несколько children
элементов и будут выполнять действие (определенное их атрибутом mode
), если какая-либо из команд, которые они просматривают, завершится. Примеры этих команд включают nginx
и PHP-fpm
, что мы и будем использовать.
Сначала давайте добавим команду с именем php
. Он передаст нужный нам файл интерпретатору PHP, установленному внутри нашего php
контейнера. Добавьте это в конец вашего Vagga.yaml
:
commands: php: !Command description: passes the given parameters to the PHP interpreter container: php run: [php]
Как вы можете догадаться, description
— это текст справки, который выводится, когда вы запускаете vagga
без аргумента, container
— это контейнер для запуска команды, а run
— это команда для запуска. Если бы мы не предоставили аргумент для run
в виде массива, он не принял бы аргументы и просто запустил бы php
без них. Однако, предоставляя значение в виде массива, мы позволяем пользователю передавать аргументы в php, например, в файл.
Чтобы проверить это, вы можете просто сделать Vagga php -v
. Если вы используете Vagrant, вы можете vagrant ssh
Vagga php -v
на компьютер /Vagrant
, Vagga php -v
каталог /Vagrant
и запустить Vagga php -v
. Или вы можете просто запустить vagrant Vagga php -v
со своего хоста за пределами вашего Vagrant box.
Наконец, мы готовы запустить наш стек NGINX и PHP. Сначала измените раздел команд внутри Vagga.yaml
:
commands: php: !Command description: passes the given parameters to the PHP interpreter container: php run: [php] run: !Supervise description: Run the NGINX and PHP stack mode: stop-on-failure children: nginx: !Command container: nginx run: nginx -g "daemon off;" php: !Command container: php environ: DATABASE_URL: postgresql:
Как видите, мы не предоставляем значение атрибута run
в виде массива, что эффективно запрещает пользователям передавать какие-либо аргументы.
Наконец, давайте запустим Vagga run
(или vagrant Vagga run
) и посмотрим на результат:
[19-Mar-2016 15:00:22] NOTICE: fpm is running, pid 3 [19-Mar-2016 15:00:22] NOTICE: ready to handle connections [19-Mar-2016 15:00:22] NOTICE: systemd monitor interval set to 10000ms
Создайте файл index.php
в вашем каталоге vagga
, например:
<?php phpinfo ( ) ; ?>
Если вы этого еще не сделали, откройте ваш vagrantfile
и раскомментируйте эту строку, чтобы вы могли получить доступ к вашей виртуальной машине, используя статический IP:
config.vm.network "private_network", ip: "192.168.33.10"
Затем добавьте example.com
в файл hosts
на вашем хост-компьютере. В системах Unix этот файл находится в /etc/hosts
, а в Windows — в C:\Windows\System32\drivers\etc\hosts
. Вот как вы должны сопоставить домен example.com
с 192.168.33.10
, который является IP-адресом вашей виртуальной машины:
192.168.33.10 example.com
Теперь просто откройте ваш браузер и перейдите по example.com:8000
или www.example.com:8000
. Вы должны увидеть страницу информации PHP.
Поздравляем! Вы создали среду разработки с помощью Vagga, и теперь вы можете позволить другим пользователям запускать среду разработки в удивительно короткие сроки!
Вывод
Vagga отлично подходит для контейнеризации и создания живого документа о том, как выглядит среда разработки для приложения. Это также дает то преимущество, что разработчик может быстро настроить среду разработки, не зная мельчайших подробностей процесса. На мой взгляд, это огромное преимущество в мире открытых исходных кодов, поскольку это позволяет участникам работать продуктивно за считанные минуты.
Конечно, у Vagga есть свои недостатки:
- Он не такой кроссплатформенный, как Docker. Сам Docker также не является кроссплатформенным, но его участники создали инструменты, которые очень легко настроить в Windows.
- Процесс установки не так прост, как у конкурентов. Возможно, вам придется поработать с какой-то конфигурацией в зависимости от используемого вами дистрибутива и версии.
- Одно из преимуществ Puppet, Ansible, Docker и других по сравнению с Vagga состоит в том, что для создания среды разработки и производства не требуется владеть двумя языками — вы просто создаете среду с одним синтаксисом. Существует возможность развертывания контейнеров, созданных с помощью Vagga, однако процесс еще недостаточно документирован.
- Vagga, как и Docker, требует, чтобы вы знали, как установить и настроить конкретный пакет, в то время как программное обеспечение для оркестровки, такое как Puppet, имеет модули для настройки популярного программного обеспечения для вас. На ум приходят такие примеры, как NGINX , PHP и PHP-fpm .
- Вы должны сделать все с нуля. Нет базовых образов для сборки, в отличие от Docker или Vagrant.
Используете ли вы другое программное обеспечение, чтобы позволить вашей команде или вашим участникам быстро раскрутить среду разработки с нуля? Считаете ли вы, что в быстро меняющемся мире сред разработки 2016 года автоматизированные способы настройки среды разработки не стоят усилий? Расскажите нам свой опыт в комментариях!