Ubuntu 16.04.2 + apache2 + mod-php7.0 + mysql + drupal 8

Главные вкладки

Аватар пользователя jura12 jura12 27 апреля 2017 в 2:56
3

Решение представляет собой компиляцию советов собранных в интернете и учтены советы данные в комментариях.
Виртуалбокс удобен в использовании потомучто по сравнению с hyper-v поддерживает буфер обмена, изменение размера окна. ставил ubuntu 16.04 сервер в виртуалбокс виндовс 10.
Один пользователь может запускать несколько сайтов. Конфигурация для разработки, а не для продакшена.

Установка программ

sudo apt install apache2 mysql-server mysql-client vsftpd ssh mc git

Настройка apache2

добавляем в sudo nano /etc/apache2/sites-available/drupal8.conf следующие строки:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName drupal8
  DocumentRoot /var/www/drupal8/web
  <Directory /var/www/drupal8/web/>
     Options FollowSymlinks -MultiViews
     AllowOverride All
  </Directory>
</VirtualHost>

т.к. используем сервер для своей разработки то меняем владельца папки www для удобства работы:
sudo chown -R $USER:$USER /var/www
включаем сайт:

sudo a2dissite 000-default
sudo a2ensite drupal8
sudo service apache2 restart

Настройка php

Включаем php в виде модуля апачи:

sudo apt install php7.0 libapache2-mod-php7.0
sudo a2enmod rewrite
sudo apt install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

включаем uploadprogress

Quote:
Note: PECL uploadprogress (upload progress) only works if you are running in mod_php mode as a native Apache extension. This means PECL uploadprogress will not work with the following: FastCGI, IIS, Lighttpd, Pantheon, Nginx. link.

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update && sudo apt upgrade
sudo apt install php-uploadprogress
sudo service apache2 restart

Обновление composer

mkdir Загрузки && cd ~/Загрузки
wget https://getcomposer.org/installer
php installer
sudo mv composer.phar /usr/local/bin/composer

Настройка ftp сервера

Для загрузки файлов в файле настройке сервера sudo nano /etc/vsftpd.conf разрешаем право на запись: write_enable=YES и local_umask=022 . Далее рестарт сервера
sudo service vsftpd restart

Создание БД

mysql будет спрашивать root пароль который вы устанавливали при установке mysql.

mysql -u root -p -e "CREATE DATABASE drupal8db CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER drupal8db@localhost IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON drupal8db.* TO 'drupal8db'@'localhost' IDENTIFIED BY 'password';"

Инсталляция сайта

cd /var/www
composer create-project drupal-composer/drupal-project drupal8 --stability=dev --no-interaction --prefer-dist

mkdir drupal8/config
mkdir drupal8/config/sync
sudo chown -R www-data:www-data /var/www/drupal8/config/sync

cd drupal8/web
../vendor/bin/drush site-install --db-url=mysql://drupal8db:password@localhost/drupal8db --site-name="Drupal 8 сайт"

Скачался и установился drupal 8.3.2. Сохраняем логин и пароль выданный в консоле, добавляем пару модулей

cd ..
composer require drupal/metatag  --prefer-dist
composer require drupal/bootstrap  --prefer-dist

Завершающие настройки

устанавливаем права

в файл nano /var/www/drupal8/web/sites/default/settings.php добавляем строки с вашим айпи:

<?php$settings['trusted_host_patterns'] = array(
    '^192\.168\.1\.43$',
    '^127\.0\.0\.1$',
    '^localhost$',
);?>

chmod 444 /var/www/drupal8/web/sites/default/settings.php

Запуск

Заходим на сайт http://192.168.1.43. Входим по логину и паролю который выдали при инсталляции сайта.

Обслуживание

Резервное копирование

cd /var/www/drupal8/web
../vendor/bin/drush sset system.maintenance_mode 1
../vendor/bin/drush sql-dump --result-file=../baza_drup8.sql

скачать все файлы с помощью виндоуз программы filezilla из директории /var/www/drupal8

cd .. && composer update
cd web
../vendor/bin/drush sset system.maintenance_mode 0

Восстановление

TODO

что необходимо сделать.

  • отправку почты с сайта (postfix)
  • шифрование tls (letsencrypt)
  • использование для администрирования БД Heidisql и Mysql workbench

upd1: убрал php-fpm, переработал разделы.
upd2: убрал mcedit, вместо него добавил nano
upd3: добавил -MultiViews
upd4: добавил предупреждение насчет uploadprogress

Комментарии

Аватар пользователя bsyomov bsyomov 27 апреля 2017 в 10:39

Сomposer есть в репозиториях ubuntu 16.04, и лучше оттуда его и ставить. Хотя приведённый способ рабочий.

Зачем вам apache + php-fpm, с чего бы это предпочтительно? Если уж у вас на фронте апач, то лучше использовать mod_php* - это меньшие накладные расходы.

«т.к. используем сервер для своей разработки то меняем владельца папки www для удобства работы:»
Так а что мешает просто в своей домашней папке разрабатывать - сайты совершенно не обязаны лежать в /var/www на самом деле...

«sudo pecl install uploadprogress»
Ну не надо так делать. Не надо использовать pecl. Используйте пакетный менеджер системы. В случае Ubuntu есть PPA где можно его найти. Например, ppa:ondrej/php. А вообще - это лишнее в принципе.

FTP, вероятно, вам не нужен и его установка это лишний шаг. SFTP у вас уже есть из коробки.
PhpMyAdmin не надо ставить, этот мусор давно пора выбросить - лучше использовать Heidisql какой-нибудь или Mysql workbench через ssh.И забыть о таймаутах, битых дампах и.т.п..

Аватар пользователя gun_dose gun_dose 29 апреля 2017 в 7:49

Зря ты так на пхпмайадмин. Довольно удобная утилита для просмотра структуры базы. Плюс встроенные инструменты статистики иногда полезны. А вот дампы дампить действительно лучше через консоль.

Аватар пользователя bsyomov bsyomov 29 апреля 2017 в 15:02

Это просто неизбежное зло, т.к. на шаред хостингах было не дать иной доступ к базе. Собственно, только по этому он так распространён.
А так, там не раз были дыры, например. Ну и в принципе, это широко открытая дверь, если стащить пароль от базы - даже бекдор заливать не надо...
Ну и исполнение каких-то сервисных операций с базой в контексте веб сервера это очень плохая мысль.

Аватар пользователя multpix multpix 27 апреля 2017 в 10:53

Сенкс за труды)))

Для локальной разработки имхо удобно использовать nginx
и стартовать его от своего пользователя (к примеру devel):

# nginx.conf
user devel;

Или, что еще проще в большинстве случаев,
с http://php.net/manual/ru/features.commandline.webserver.php
который просто:
drush rs

Тут не будет траблов с правами пользователя на ФС из коробки - грубо говоря.

Так-же для разработки вполне достаточно sqlite

У меня сложился следующий стек:
php7-fpm, mariadb || postgresql, nginx

ftp - не нужен, когда есть scp или даже sshfs

Аватар пользователя jura12 jura12 27 апреля 2017 в 14:52

bsyomov

  1. composer в дистрибутиве идет старой версии. поэтому ставим актуальный
  2. php-fpm ставлю потомучто это популярно, производительно, при установке пакета php php-fpm сам ставится. для ретроградов я оставил старый способ установки.
  3. устанавливать сайт в домашней папке раньше было сложно. нужна донастройка. папка www нормально идет если еще сделать на нее ссылку в домашней дирректории. например так ln -s /var/www ~/www
  4. согласен. репозитарий ppa:ondrej/php добавлю в следующей версии инструкции
  5. vsftpd нужен чтоб работала установка модулей через админку
  6. Heidisql посмотрю, спасибо. Mysql workbench раньше глючный и неповоротливый был. да, таймауты это серьёзный аргумент.

multpix

  1. nginx у меня не зашел. сорри. пока не обещаю.
  2. я знаю что можно запускать сайты через командную строку. можно потестить. а если несколько сайтов?
  3. следующая инструкция будет про mariadb. postgresq это моя мечта. потом когда-н перейду на нее.
  4. фтр демон нужен для инсталляции модулей в админке. для передачи файлов я использую filezilla по sftp.
Аватар пользователя multpix multpix 27 апреля 2017 в 15:41

1. У меня с этим вопросов нет))
вам скажу - там все очень просто как для локального конфига разраба,
вот мой путь - виртуальные хосты, запуск от системного пользователя, дистры в домашнем каталоге, и запись в hosts.
Но это только если мне нужен надолго какой-то пыхыпы проект для использования (не для разработки).
чтоб не путать с вебом, размещаю их в домене .local

2. Не потестить а разрабатывать - это очень удобно. зашел - запустил, остановил вышел. надо одновременно два и больше - изменил порт, надо много (и не только пыхыпы) в одном процессе - foreman - такое удобно для раздельных фронт/бек.
А держать постоянно работающим разрабатываемое - нет необходимости. Для друпал это rs ключ драш.
сборка дистра и запуск - это считанные минуты в одном терминальном сеансе.

3. Рекомендую для начала хорошо разобраться в этом вопросе самому, а только потом делиться с сообществом)
это единственная причина, почему статья не на главной (сыровато, есть неточности), но все равно - спасибо за труды!
Не стесняйтесь публиковаться, делитесь своим опытом и задавайте вопросы, чем смогём - помогём, сообщество отзывчивое)))

4. Это от-того что у вас пробелы по теме пользователь-права-файловая_система.
При верной и грамотной организации рабочего места этого не наблюдается)))

upd:
надо быть человеком с железными нервами, чтоб вопреки всему иметь основной системой вин, и при этом разрабатывать для веб))))

Аватар пользователя bsyomov bsyomov 27 апреля 2017 в 21:57

По upd, никаких проблем с этим нет - проверено лично.
Мне, например, вообще всё равно, какая у меня хост система из win|lin|mac. Что phpstorm, что virtualbox, что ssh работает а них всех. Smile

Аватар пользователя bsyomov bsyomov 27 апреля 2017 в 21:51

1. И это вам чем-то мешает? через какое-то время, вы забываете про него и он становится уже совсем не актуальным и с не закрытыми дыами, в отличии от обновляемого регулярно из репозиториев. Если пользуетесь пакетным дистрибутивом, надо пользоваться для установки пакетным менеджером, иначе, система быренько превращается в помойку.

2. Тогда не надо ставить apache совсем. Ну и популярно, это не аргумент, надо понимать, как оно работает, и что и с какой целью ставится.
На самом деле, надо либо ставить apache + mod_php, либо nginx(или какой-нибудь другой лёгкий веб сервер) + php+fpm. Apache + fastcgi более накладный вариант, и в нём может быть смысл, разве что, в случае необходимости параллельной работы нескольких версий php.

5. Лучше чтобы она не работала. Smile

Аватар пользователя jura12 jura12 30 апреля 2017 в 8:45

1.вот Вы как используете композер? мне кажется что баги полезут и в том и в другом случае.
2. согласен. наверно так и надо сделать. но в следующий раз.

Аватар пользователя jura12 jura12 27 апреля 2017 в 17:13

multpix "путь - виртуальные хосты, запуск от системного пользователя, дистры в домашнем каталоге, и запись в hosts." самый правильный вариант. просто время от времени ситуация меняется и меняются настройки.
на какой системе работаете?

Аватар пользователя gun_dose gun_dose 29 апреля 2017 в 8:01

Имхо ставить ради веба на винду в виртуалке целую убунту слишком расточительно по ресурсам. Плюс файлы через фтп - виртуалка сдохнет и что тогда? А сколько времени займёт клонирование этой виртуалки и параллельное поднятие с изменёнными настройками?

Почему бы не использовать вместо этого всего докер?

Аватар пользователя bsyomov bsyomov 29 апреля 2017 в 15:14

Докер поставит полноценную операционку в виртуалке, и себя в неё, если мы говорим о win (даже на 10, просто это будет виртуалка на hyper-v и не придётся ставить virtualbox) или mac. А вот в ней уже будут контейнеры.

В принципе, разработка в контейнерах бывает удобна, и я не имею ничего против докера, но вокруг него масса хайпа и мифов. И многие используют его только из-за популярности, там где надо, и где не надо, забывая, что серебряной пули нет, и это не более чем один из инструментов со своими проблемами ограничениями и не удобствами.
Например, большой проблемой является использование сторонних образов, в которых может быть что угодно, которые могут не обновляться и.т.п., софт там может быть настроен как попало, и кем попало. А создание и поддержка своих образов это дополнительная, и не малая, работа.

Аватар пользователя gun_dose gun_dose 29 апреля 2017 в 20:16

Под друпал хватает сборок от известных и проверенных разработчиков. У которых, к слову, инструкция работает))))

Аватар пользователя bsyomov bsyomov 30 апреля 2017 в 0:11

Вот в том-то и проблема, что от разработчиков. Smile
И к сожалению, при этом, абсолютное большинство PHP разработчиков не знают и свой-то стек толком, не то, чтобы тонкости настройки системы в целом.

Аватар пользователя gun_dose gun_dose 30 апреля 2017 в 11:18

В любом случае, это лучше, чем новичок будет сам собирать абы что. Кроме того, сборки докера активно сопровождаются - люди открывают ишью на гитхабе, они обсуждаются и фиксятся, в итоге выходит проверенный и стабильный продукт, в отличие от 90% мануалов, которые написали и забыли.

Аватар пользователя bsyomov bsyomov 30 апреля 2017 в 13:51

Не всё так просто - из коллективного сознания дилетантов, часто, не получается хороших решений, а кто умеет, обычно собирает себе сам. Smile
Т.е. ситуация, на самом деле, та же, что и с так "любимыми" мной инструкциями. Ни лучше, и ни хуже.

Аватар пользователя jura12 jura12 29 апреля 2017 в 9:59

gun_dose каждый работает как умеет. мне нравится полноценное окружение потомучто туда можно еще что-н прикрутить.
хочу сообщить неприятную новость. инструкция не работает). провожу исследования. зависает при установке нового модуля. какой-то конфликт с базой данных. в заглавии добавил слово "проект".

Аватар пользователя bsyomov bsyomov 29 апреля 2017 в 15:19

Вам не кажется, что просто не надо было это публиковать, особенно как "инструкцию", а не вопросы по настройке?

Инструкции, как мне кажется, должны писать те, кто разберется в том, о чём пишет, а не восторженные неофиты, которые открыли для себя возможность самостоятельно настроить что-то новое. Собственно, из-за таких "инструкций", которыми полон интернет только масса проблем.

Аватар пользователя jura12 jura12 30 апреля 2017 в 0:46

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

Аватар пользователя bsyomov bsyomov 13 августа 2017 в 23:06

Я вам даже больше скажу: не работает так, как задумано автором, или не работает универсально(и не сказано в каких случаях должно работать), более 90% таких пошаговых инструкций. И не надо их плодить. Особенно тем, кто даже сам не понимает, что делает.

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

А вам, да и всем совет: не используйте подобные инструкции вовсе, и, конечно, не пишите их. Читайте документацию, и разбирайтесь, как что работает. Только так вы что-то приличное, в итоге, сможете настроить.

Аватар пользователя multpix multpix 29 апреля 2017 в 20:33

jura12 wrote:

хочу сообщить неприятную новость. инструкция не работает

Прошу сообщить эту новость в начале вашего топика,
чтоб не сбивать с толку новичков, которые могут пытаться пойти по вашим стопам.

Еще наводка - вы попробуйте поработать с подсистемой linux которая есть в 10-ке.

При возникающих ошибках - не гадайте а спрашивайте, опишите ситуацию и публикуйте текст ошибки)
Может вам чем поможет мой древний ман)
https://bitbucket.org/multpix/ember2drupal/wiki/Drupal

Аватар пользователя jura12 jura12 12 мая 2017 в 23:31

Инструкцию обновил. У меня работает. Была проблема в php fpm . С английской версией сайта работал нормально а при включении русской локализации зависал при обновлении переводов. Никаких ошибок не выдавал только немного ругался при старте. Нагуглить решение не удалось поэтому я его вообще убрал. Для разработки хватит классического mod php.
Подсистема линукс в виндоуз не позволяет запускать демоны. Но в следующем обновлении виндоуз в сентябре октябре чтото там улучшат.

Аватар пользователя jura12 jura12 13 мая 2017 в 1:55

да. была такая мысль. но поскольку ошибку старта php fpm не смог убрать не стал дальше экспериментировать. тестировать все варианты то ли php fpm то ли drupal8 то ли composer, а может и mysql (при зависании было большое кол-во обращение к базе данных) нет возможности. конфигурацию c php fpm в виде nginx - php7-fpm - mariadb - drupal 7 правильно было бы использовать для продакшен системы, а для этого надо писать другую инструкцию.

Аватар пользователя Prolet Prolet 12 декабря 2017 в 2:29

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

Аватар пользователя Prolet Prolet 13 декабря 2017 в 10:16

Заработало, ошибка была в VirtualHost *:80. Но теперь другое: The website encountered an unexpected error. Please try again later. Это с самим Друпал проблема?

Аватар пользователя jura12 jura12 6 января 2018 в 13:55

редактировать не дают.
upd5:

  1. строчку Options FollowSymlinks -MultiViews заменить на Options +FollowSymlinks -MultiViews
  2. а mysql -u root -p -e "CREATE DATABASE drupal8db CHARACTER SET utf8 COLLATE utf8_general_ci; на mysql -u root -p -e "CREATE DATABASE drupal8db CHARACTER SET utf8 COLLATE utf8_bin;
  3. в секцию sql операторов в конец добавить  FLUSH privileges;