ubuntu 18.04 + apache2 + mariadb + php 7.3 + drupal 8

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

Аватар пользователя jura12 jura12 14 ноября 2019 в 0:59

Тестировал в виртуалбоксе но подойдет и как отдельная установка.

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

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update && sudo apt upgrade
sudo apt install apache2 mariadb-server mariadb-client php vsftpd git

дополнительные и необязательные программы:
sudo apt install mc ssh adminer postfix

Настройка 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 systemctl reload apache2

Настройка php

sudo apt install php-mbstring php-curl php-xml php-gd php-mysql php-sqlite3 php-zip
sudo a2enmod rewrite

включаем uploadprogress

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.

sudo apt install php-uploadprogress
sudo systemctl restart apache2

Настройка composer

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 systemctl restart vsftpd

Создание БД

входим в mysql
 sudo mysql -u root -p
вводим 4 команды указанные ниже и выходим:

CREATE DATABASE drupal8db CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER drupal8db@localhost IDENTIFIED BY 'drupal8password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON drupal8db.* TO 'drupal8db'@'localhost' IDENTIFIED BY 'drupal8password';
FLUSH privileges;
quit

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

cd /var/www
composer create-project drupal-composer/drupal-project:8.x-dev drupal8 --no-interaction

cd drupal8
mkdir -p config/sync

cd /var/www/drupal8/web/sites/default/files
mkdir private

Заходим на сайт http://192.168.1.43 инстиллируем или автоматически

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

не забудьте записать выданный логин и пароль.

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

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

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

<?php$settings['trusted_host_patterns'] = array(
    '^jura12\.ru\.43$',
    '^www\.jura12\.ru\.43$',
    '^109\.172\.13\.224$',
    '^192\.168\.1\.43$',
    '^127\.0\.0\.1$',
    '^localhost$',
);
 $settings['file_private_path'] = 'sites/default/files/private';
?>

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

Надо закрыть на доступ папки sync и private записав в файл .htaccess строки.
В nano /var/www/drupal8/web/sites/default/files/private/.htaccess:

Deny from all
# Turn off all options we don't need.
Options None
Options +FollowSymLinks

# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
  # Override the handler again if we're run later in the evaluation list.
  SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

sudo chown -R www-data:www-data /var/www/drupal8/web/sites/default/files
sudo chmod 755 /var/www/drupal8/web/sites/default/files

В nano /var/www/drupal8/config/sync/.htaccess:

# Deny all requests from Apache 2.4+.
<IfModule mod_authz_core.c>
  Require all denied
</IfModule>

# Deny all requests from Apache 2.0-2.2.
<IfModule !mod_authz_core.c>
  Deny from all
</IfModule>

# Turn off all options we don't need.
Options -Indexes -ExecCGI -Includes -MultiViews

# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
  # Override the handler again if we're run later in the evaluation list.
  SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

TODO

letsencrypt

Комментарии

Аватар пользователя adano adano 14 ноября 2019 в 4:26

в виртуалбоксе

Докер же сейчас в тренде, либо проще можно:
sudo tasksel install lamp-server
если апач нужен
https://medium.com/@neelmg/install-drupal-8-on-ubuntu-18-04-16a40a8be210

Владельца ставьте:
sudo chown -R www-data:www-data
Жить намного легче станет, заодно с правами заморачиваться не будете, крон автоматом все расставит.

Аватар пользователя jura12 jura12 14 ноября 2019 в 7:57

насколько я помню tasksel ставит mysql, а у меня mariadb.
мануал что вы дали среднячек. он без composer и drush . которые для 8го друпала нужны.
владельца ставить конечно правильно было бы. но потом когда надо будет обновлять друпал с помощью composer опять все менять.

Аватар пользователя yaro yaro 14 ноября 2019 в 11:00

а без гугла разницу между mysql из tasksell и mariadb сможешь рассказать? А если даже и сможешь - реально есть смысл при локальной разработке использовать марию?

Аватар пользователя jura12 jura12 14 ноября 2019 в 11:09

для локальной разработки нет смысла. разница как я понимаю в лицензировании и некоторых тонкостях работы.
мне захотелось именно mariadb поскольку mysql уже был в предыдущем моем мануале https://drupal.ru/node/133046

Аватар пользователя adano adano 14 ноября 2019 в 4:46

+ php 7.3 по дефолту идет в убунте 18.04

sudo add-apt-repository ppa:ondrej/php

Используется для других версий php

Да и запоздали вы что-то с конфигом, в апреле 20.04 LTS выходит. Устареет ваш мануал очень быстро.

Аватар пользователя jura12 jura12 14 ноября 2019 в 7:42

у меня 7.2 было по дефолту. репозитарий ondrej/php нужен для php-uploadprogress. вообще то 18.04 будет поддерживаться до апреля 2023 года. скорее друпал 8 устареет.

Аватар пользователя jura12 jura12 20 ноября 2019 в 16:07

Бэкап сайта скрипт кладем например в /etc/cron.weekly .
у меня получился такой скрипт:

backupdir="/home/yuraxu1804/backup/$(date)"
mkdir "$backupdir"
cd /var/www/drupal8/web
../vendor/bin/drush sset system.maintenance_mode 1

if ../vendor/bin/drush sql-dump --result-file="$backupdir"/baza_drup8.sql
then echo "Backup of sql successful"
else echo "Backup of sql failed"
fi

if tar cfz "$backupdir"/archive.tar.gz /var/www/drupal8
then echo "Backup of files successful"
else echo "Backup of files failed"
fi

cd /var/www/drupal8/web
../vendor/bin/drush sset system.maintenance_mode 0