Всем добрый вечер. Небольшая статейка будет полезна больше пользователям nix систем. Но всё это реализуемо и на windows.
Для меня как для разработчика является нудным и утомительным занятием развёртывание рабочей среды под проект. По хорошему среду надо разворачивать максимально приближенную к боевой конфигурации сервера (те кто работают с боевыми серверами на прямую - ай ай ай. Надо уже переходить хотя бы на локаль -> продакшн. Хотя в идеале лучше локаль -> тест сервер -> боевой с миграциями и прочими штуками). Каждый проект заслуживает особого внимания и я не люблю разворачивать проекты на одном окружении (конфиги всё равно разные).
Для windows систем есть веб окружения от вендора (от битрикса). Есть виртуальная машина от битрикс - по мне так ад адовый (не машина то очень неплохо собрана, просто хз как её на моей убунте запускать)
Все примочки вендора это хорошо и здорово. Но есть другие пути. Рабочее окружение можно развернуть в один клик так сказать. До настройки окружения чисто под битрикс мне ещё далеко, но я собрал типовое окружение LAMP (php, apache, mysql, linux). Делюсь наработкой.
VirtualBox - программное обеспечение для виртуализации операционных систем Vagrant - программное обеспечение для создания и конфигурирования виртуальной среды разработки Git - распределённая система управления версиями файлов.
После установки создаём папку проекта (например vagrant-lamp)
mkdir vagrant-lamp
Переходим в папку
cd vagrant-lamp
Инициализируем Vagrant
vagrant init
После этого в папке появляется файл Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "base"
end
После этого нам нужно выбрать box (это виртуалка, которую в последующем vagrant сам закачает на вашу машину). Выберем например Ubuntu 14.04 (хотя дебиан лучше наверное). Список доступных боксов
config.vm.box = "ubuntu/trusty64"
Доработаем файл
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 80, host: 8080 //пробрасываем порты (80 - порт на виртуалке, 8080 - порт на нашей машине)
config.vm.network "forwarded_port", guest: 3306, host: 33060 //пробрасываем порты для mysql (3306 - порт на виртуалке, 33060 - порт на нашей машине)
config.vm.synced_folder ".", "/home/vagrant" //проводим синхронизацию текущего каталога с каталогом на виртуальной машине (мощь!)
config.vm.provision :shell, :path => "bootstrap.sh" //скрипт который будет выполнен после разворачивания виртуалки
end
Создадим файл bootstrap.sh (bash)
#!/usr/bin/env bash
# Variables path
php_config_file="/etc/php5/apache2/php.ini"
xdebug_config_file="/etc/php5/mods-available/xdebug.ini"
mysql_config_file="/etc/mysql/my.cnf"
apache_config_file="/etc/apache2/apache2.conf"
host_document_root="/home/vagrant"
apache_document_root="/var/www/html"
apache_ports_config_file="/etc/apache2/ports.conf"
project_folder_name='public'
# Variables env
DBNAME=vagrant
DBUSER=vagrant
DBPASSWD=vagrant
echo "--- Начало установки ---"
echo "--- Обновление списка пакетов ---"
apt-get -qq upd ate
echo "--- Установка базовых пакетов ---"
apt-get -y install vim curl build-essential python-software-properties git
echo "--- Обновление списка пакетов ---"
apt-get upd ate
echo "--- Установка Apache2 ---"
apt-get install -y apache2
echo "--- Установка MySql ---"
echo "mysql-server mysql-server/root_password password ${DBPASSWD}" | debconf-set-selections
echo "mysql-server mysql-server/root_password_again password ${DBPASSWD}" | debconf-set-selections
echo "phpmyadmin phpmyadmin/dbconfig-install boolean true" | debconf-set-selections
echo "phpmyadmin phpmyadmin/app-password-confirm password ${DBPASSWD}" | debconf-set-selections
echo "phpmyadmin phpmyadmin/mysql/admin-pass password ${DBPASSWD}" | debconf-set-selections
echo "phpmyadmin phpmyadmin/mysql/app-pass password ${DBPASSWD}" | debconf-se t-selections
echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect none" | debconf-se t-selections
apt-get -y install mysql-server-5.5 mysql-client phpmyadmin
mysql -uroot -p${DBPASSWD} -e "CRE ATE DATABASE ${DBNAME}"
mysql -uroot -p${DBPASSWD} -e "grant all privileges on $DBNAME.* to '${DBUSER}'@'localhost' identified by '${DBPASSWD}'"
echo "--- Установка репозиториев ---"
add-apt-repository ppa:ondrej/php5
#uncomment to install NodeJS
#add-apt-repository ppa:chris-lea/node.js
apt-get -qq update
echo "--- Установка PHP ---"
apt-get install -y php5 libapache2-mod-php5 php5-curl php5-gd php5-mcrypt php5-mysql php-apc
echo "--- Установка и конфигурация xDebug ---"
apt-get install -y php5-xdebug
cat << EOF | sudo tee -a ${xdebug_config_file}
xdebug.scream=1
xdebug.cli_color=1
xdebug.show_local_vars=1
EOF
echo "--- Включение mod-rewrite ---"
a2enmod rewrite
echo "--- Установка root папки---"
sudo rm -rf ${apache_document_root}
sudo ln -fs ${host_document_root}/${project_folder_name} ${apache_document_root}
echo "--- Настройка php.ini и apache2.conf ---"
sed -i "s/error_reporting = .*/error_reporting = E_ALL/" ${php_config_file}
sed -i "s/display_errors = .*/display_errors = On/" ${php_config_file}
#uncomment to work with Boris
#echo "--- Работа с Boris---"
#sed -i "s/disable_functions = .*//" /etc/php5/cli/php.ini
sudo sed -i 's/AllowOverride None/AllowOverride All/g' ${apache_config_file}
a2enconf phpmyadmin
echo "--- Перезагрузка Apache2 ---"
service apache2 restart
echo "--- Перезагрузка mysql ---"
service mysql restart
#echo "--- Установка composer ---"
#uncomment to install coomposer
#curl --silent https://getcomposer.org/installer | php
#mv composer.phar /usr/local/bin/composer
#echo "--- Установка NodeJS и NPM ---"
#uncomment to install NodeJS NPM
#apt-get -y install nodejs
#curl --silent https://npmjs.org/install.sh | sh
#echo "--- Установка Gulp, Bower ---"
#uncomment to install Gulp and Bower
#npm install -g gulp bower
#echo "--- Обновление компонентов проекта ---"
#uncomment to update packages
#cd /vagrant
#sudo -u vagrant -H sh -c "composer install"
#cd /vagrant/client
#sudo -u vagrant -H sh -c "npm install"
#sudo -u vagrant -H sh -c "bower install -s"
#sudo -u vagrant -H sh -c "gulp"
Таким образом установим на машину всё необходимое.
Создадим в текущем каталоге папку public и в неё положим index.php
Кстати есть вот такой сервис на основе puppet puphpet.com где через интерфейс можно собрать любой конфиг и быстро сляпать необходимый сервер - очень круто.
В качестве системы можно ставить что угодно - дебиан или цент ос, но нужно внести изменения в скрипт, который настраивает окружение (установка и настройка пакетов)
(сильно не пинайте) ну аз уж пишите статью "ДЛЯ ЛЕНТЯЕВ" распишите пожалуйста и процесс установки ВЕСЬ! я например лентяй, хотя давно думаю собрать сервер для dev с системой контроля версий... но все руки не доходят и ноги!
1) устанавливаете Vagrant VirtualBox и Git (я в убунте - у меня это всё делается из комндной строки 3 строчками, кто на виндоус - идём на сайт ПО и устанавливаем описанным там способом) 2) Если нужен сервер для себя, то есть вы хотите сконфигурировать под себя - придётся почитать хотя бы про vagrant. 3) Инициализаия box
vagrant init
или
vagrant init hashicorp/precise32 // или любую другую систему я наприммер выбрал ubuntu/trusty64
эта команда создаёт в текущей папке файл Vagrantfile. Тут почитать об этом файле можно подробнее https://docs.vagrantup.com/v2/getting-.../boxes.htm. Пробрасываем необходимые нам порты (для апача или ngnix или mysql) чтобы иметь доступ к ним через нашу машину а не через виртуалку и указываем папки для синхронизации. Если на этом закончить - то вы поднимите чистую систему из консоли (без апачей и прочего). Дальше вы можете зайти в виртуалку через:
vagrant ssh
и установить нужные пакеты и их настроить. Но чтобы этого не делать создаётся файл (в моём случае это bash скрипт), который всё сконфигурирует и поставит и у меня будет готовая система для текущего проекта. С самим проектом мы можем работать с нашей машины (например в IDE или настроить какой-то mysql клиент). Идей проста - файлы проекта на моей машине - синхронизируются с файлами на виртуалке (например в документ руте) и я не засоряю свою систему установкой серверов и пакетов, а для этого использую виртуальное окружение, которое благодаря тому что не используется GUI интерфейсы не жрёт ресурсы компьютера.
Таким образом я под каждый проект могу сконфигурировать каждый раз новое окружение и после первого запуска не инициализировать всё заново - а поднимать готово.
vagrant up - поднял машину поработал vagrant halt - завершил работу с машиной vagrant destroy - убил машину
Если вы не знаете как устанавливать пакеты с баша - ну пропустите этап написания своего скрипта - зайдите на виртуалку через ssh и настройте всё необходимое (хотя по мне это геморой), хотите поставте туда GUI - и настраивайте window подобным способом. А если вам вообще всё это делать лень - есть сайт https://puphpet.com/ - там вы тыкаете руками всё что хотите (от выбора ОС до выбора серверов для работы с очередями) - скачиваете сгенерированный файлик в рабочую директорию и выполняете vagrant up. Как итог имеет среду не разбираясь что там и как.
Черепанов Виталий, контроль версий у вас будет на машине, а пушить вы его можете сразу на тестовый/продакшн сервер в интернете в саомй машине гит не нужен))) гит ставите на локалке, хотя может и нужен - но я пока не знаю для каких целей
Микулич Евгений написал: Рабочее окружение можно развернуть в один клик так сказать
Не проще составить тот же шелл-скрипт под установку и настройку всего окружения и устанавливать все действительно одной строчкой? Зачем нужна виртуальная машина и вагрант — из поста не понятно.
Семеритов Александр, Затем что 1 проект - 1 конфигурация, при желании можно сделать смежные проекты с несколькими конфигами, в третьих если разработчиков несколько то нужно будет передавать только файл настроек (vagrant provision). А вообще Саша ожидаемая от тебя реакция)))
Зачем? Чем конфигурация для одного проекта отличается от конфигурации другого проекта и насколько часто это случается? Вот конкретный пример привести бы не помешало.
Семеритов Александр, Ну если ты кодишь только на битриксе - то наверное тебе не нужны рабочие окружения для чего то ещё. Я на Ubuntu - веб окружения под неё нету от битрикса. Я могу тестить версии пхп и т.д. Саша ну если ты в этом не видишь смысла - ну значит это не для тебя. В самом деле - я никого тут не убеждаю что это "Best Practice". Люди пользуются, собирают рабочие среды для конкретного фреймворка - например для Laravel есть Homestead, там и базу данных за тебя создаст. Эта технология не требует ничего кроме скачать и развернуть - зачем мне читать тонны мануала?
Если у тебя все проекты на битрикс ина хостинге таймвеб или регру и всё это интернет магазины - то да можешь загадить свой комп:) апачами мемкешами и т.д.. Мне не нравится такой подход. К тому же 200-300 метров от поднятой виртуалки не такая большая цена.
Ну и конечно же если ты используешь гит и вас больше чем 1 то среды для разработки должны быть идентичными. Собственно для этого всй это и придумали - у одного одни настройки у другого другие и как они будут выкатывать это на релиз? тестить ещё где то на стороне?
Микулич Евгений, + я могу поднять такую среду где угодно, на компе друга, на ноуте в кафе, на станционарке и они будут одинаковыми - и для этого мне всего лишь надо написать (или скачать готовый конфиг) скрипт на шеле. А при желании я могу и ещё и с репозитория задить проект и получить не только готовое окружение но и проект
Никакого троллинга, я действительно не понимаю зачем людям такие заварушки нужны, уверен, что не я один. Вот простой и доступный пример кардинального различия требований к окружению двух php-проектов для которых вся эта котовасия с виртуалками и шеллами нужна почему нельзя привести?
Микулич Евгений написал: Каждый проект заслуживает особого внимания и я не люблю разворачивать проекты на одном окружении (конфиги всё равно разные).
Семеритов Александр, я тебе привёл пример когда это нужно для единой среды с Н разработчиками за разными рабочими станциями. Ты от меня хочешь каких то своих примеров) Извини не помогу.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».