FreeBSD+Apache24+Drupal8

Статья подробно описывает процесс развертывания веб-сервера на базе FreeBSD с использованием Apache24, PHP, MySQL и Drupal8. Шаг за шагом рассматривается установка и настройка всех компонентов, включая конфигурацию модулей сервера, настройку виртуальных хостов и интеграцию с Drupal.
 
 И так начнем
 
Сразу добавим в автозагрузку
# ee /etc/rc.conf
apache24_enable="YES"
mysql_enable="YES" 
 
Устанавливаем Apache
# cd /usr/ports/www/apache24/
посмотрим список необходимого:
# make all-depends-list
для начала конфигурируем (все что можно сразу!!):
# make config-recursive
Теперь скачаем все необходимое сразу:
# make fetch-recursive
Все успешно скачано, начнем установку:
# make install clean
 
Добавим имя нашей машины в файл /etc/hosts
# echo "127.0.0.1 myhost.my.domain" >> /etc/hosts
 
 
Или с помощью sysrc. Утилита создана для редактирования файла /etc/rc.conf:
# sysrc apache24_enable=yes
 
Раскомментируем строчку ServerName в файле httpd.conf конфигурации Apache. Зменением на имя нашего веб-сервера 
# ee /usr/local/etc/apache24/httpd.conf
 
Перезапускаем Apache
# /usr/local/etc/rc.d/apache24 restart
Теперь должно быть так:
Syntax OK
Starting apache24.
 
Установка PHP
# cd /usr/ports/lang/php73
# make install clean
 
# cd /usr/ports/lang/php73-extensions
                               
Помимо настроек по-умолчанию, обязательно добавляем
CURL, DOM, POSIX, FTP, GD, HASH, ICONV, XML, JSON, MBSTRING, MYSQL, MYSQLI, OPENSSL, SOCKETS, TOKENIZER, XMLREADER, ZLIB, EXIF, GETTEXT,
# make install clean
 
Поставим модуль php для apache. Теперь он стал отдельным портом.
# cd /usr/ports/www/mod_php73/
# make install clean
 
В конфиге Apache /usr/local/etc/apache24/httpd.conf смотрим чтобы была строчка:
LoadModule php7_module libexec/apache24/libphp7.so
нет, так добавим.
ищем строчки с надписями AddType и дописываем туда:
 
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
 
находим секцию <IfModule dir_module> и добавляем index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
 
 
**еще один способ подключения модуля PHP
ee /usr/local/etc/apache24/Includes/php.conf
<IfModule dir_module>
    DirectoryIndex index.php index.html
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
</IfModule>

 

Для того чтобы бы в Drupal работали Чистые ссылки, раскомментируем строку
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
 
 
Сохраняем файл, проверяем конфигурацию:
# apachectl -t
Syntax OK
 
Устанавливаем MySQL 5.5
# cd /usr/ports/databases/mysql57-server/
или
# cd /usr/ports/databases/mariadb105-server
# make install clean
 
Задаем пароль root для mysql-сервера 
# /usr/local/bin/mysqladmin -uroot password 'ПАРОЛЬ'
или
# /usr/local/bin/mysql_secure_installation
 
Сразу создадим отдельного пользователя для Drupal точнее для будущего сайта
 
# mysql -u root -p
CREATE DATABASE drupal8 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER drupal8@localhost IDENTIFIED BY "qwe34asd";
GRANT ALL ON drupal8.* TO drupal8@localhost IDENTIFIED BY "qwe34asd";
FLUSH PRIVILEGES;
quit
 
Чтобы предоставить Drupal доступ к MySQL установим этот порт тоже:
# cd /usr/ports/databases/php73-pdo_mysql
# make install clean
 
# /usr/local/etc/rc.d/mysql-server start
# /usr/local/etc/rc.d/apache24 restart
# chown -R www:www /usr/local/www/apache24/data/*
 
Установка php5-gmp
cd /usr/ports/math/php5-gmp/
 
---------------------------------------------------------------------------------------------------------------------------------------**
Установка PECL uploadprogress или APC (cd /usr/ports/www/pecl-APC)
# cd /tmp/
# wget http://pecl.php.net/get/uploadprogress-1.0.3.1.tgz

# tar -zxvf uploadprogress-1.0.3.1.tgz
# cd uploadprogress-1.0.3.1
# phpize
# ./configure
# make
# make test
# make install

 
После установки появиться сообщение:
Installing shared extensions: /usr/local/lib/php/20090626/


Теперь необходимо в файле php.ini (обычно /usr/local/etc/php.ini)
или создадим
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
#ee /usr/local/etc/php.ini
добавить следующие строки:
#extension = "apc.so"
#apc.enabled="1"
#apc.shm_size="64M"

extension = "uploadprogress.so"
extension_dir = "
/usr/local/lib/php/20090626/" # хоть так и правильно но у меня заработало без этой строчки
date.timezone = Europe/Kiev
extension = gmp.so
--------------------------------------------------------------------------------------------------------
 
**Uploadprogress Появился в портах
# cd /usr/ports/devel/pecl-uploadprogress
# make install clean
После перезагрузки Apache24 работает!
 
Установка Drush и Drupal
# cd /usr/ports/www/drupal8/
# make install clean
# cd /usr/ports/www/drush
# make install clean
# chown -R www:www /usr/local/www/drupal8/
 
 
Создаём базу данных и пользователя для Drupal
# mysql -p
> CREATE DATABASE drupal8;
> CREATE USER 'drupal_user'@'localhost' IDENTIFIED BY 'mypass';
> GRANT ALL PRIVILEGES ON drupal8 . * TO 'drupal_user'@'localhost' WITH GRANT OPTION;
 
# cd /usr/local/www/drupal8/
# drush si --db-url=mysql://drupal_user:mypass@localhost/drupal_database
 
 
При использовании виртуальных доменов, нужно раскомментировать Include

Отредактируем файл конфигурации для apache:
# ee /usr/local/etc/apache24/httpd.conf

Include etc/apache24/extra/httpd-vhosts.conf
MaxClients 200
#MaxClients указывает на максимальное количество одновременно созданных процессов apache
HostnameLookups Off #HostnameLookups разрешает или запрещает определение имени подключенного клиента (отключение, как в примере, ускоряет работу веб-сервера Apache)

Если вы раскомментировали подключение файла /etc/apache24/extra/httpd-vhosts.conf
редактируем его (удаляем все содержимое и оставляем написанное ниже):
# ee /usr/local/etc/apache24/extra/httpd-vhosts.conf
 
<VirtualHost *:80>
    ServerName /
    DocumentRoot /usr/local/www/apache24/data
</VirtualHost>

<VirtualHost *:80>
 DocumentRoot /usr/local/www/apache24/vhosts/openpublish/www
 ServerName openpublish.kiev.ua
 ServerAlias www.openpublish.kiev.ua
ErrorLog "/var/log/openpublish_error_log"
CustomLog "/var/log/openpublish_access_log" common
<Directory "/usr/local/www/apache24/vhosts/openpublish/www/">
   AllowOverride All
    RewriteEngine On
     Require all granted
      DirectoryIndex index.php index.html index.htm
    Order allow,deny
   Allow from All
 </Directory>
</VirtualHost>

 

Сохраняем файл, проверяем конфигурацию:
# apachectl -t
Syntax OK

Все в порядке, можно перезапускать Apache
# /usr/local/etc/rc.d/apache24 restart

 
 
 

Устанавливаем PhpMyAdmin
# cd /usr/ports/databases/phpmyadmin
# make all install clean

После установки создаем файл
# ee /usr/local/etc/apache24/Includes/phpmyadmin.conf
Вносим в файл содержимое:
    Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"

    <Directory "/usr/local/www/phpMyAdmin/">
        Options none
        AllowOverride Limit
        Order Deny,Allow
        Require all granted
    </Directory>

 

Установка и настройка nginx

Теперь будем настраивать наш frontend — nginx. Он будет смотреть в интернет и принимать запросы от пользователей,
чтобы потом их перенаправлять на apache. Идем в порты и устанавливаем:

# cd /usr/ports/www/nginx-devel
# make install clean

Выбираем опции:

[X] HTTP_MODULE Enable HTTP module
[X] HTTP_ADDITION_MODULE Enable http_addition module
[X] HTTP_DAV_MODULE Enable http_webdav module
[X] HTTP_FLV_MODULE Enable http_flv module
[X] HTTP_PERL_MODULE Enable http_perl module
[X] HTTP_REALIP_MODULE Enable http_realip module
[X] HTTP_REWRITE_MODULE Enable http_rewrite module
[X] HTTP_SSL_MODULE Enable http_ssl module
[X] HTTP_STATUS_MODULE Enable http_stub_status module
[X] HTTP_SUB_MODULE Enable http_sub module
[X] WWW Enable html sample files

Добавим nginx в автозагрузку:

# echo ‘nginx_enable=»YES»‘ >> /etc/rc.conf

Редактируем конфиг nginx /usr/local/etc/nginx/nginx.conf, приводим его к следующему виду:

worker_processes 1; #число ядер проца

pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;

log_format main ‘$remote_addr — $remote_user [$time_local] «$request» ‘
‘$status $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘;

sendfile on;
keepalive_timeout 65;
gzip on;

server {
listen 145.152.71.220:80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_send_lowat 12000;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /var/tmp/nginx;
}
}
}

В строке

listen 145.152.71.220:80;

Указываем свой внешний ip адрес. Проверяем настройки nginx:

# nginx -t

Если видите:

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

значит все в порядке.

Теперь необходимо изменить конфигурацию apache, чтобы он слушал только локальный интерфейс 127.0.0.1, а все внешние запросы принимал nginx и перенаправлял к apache. Меняем в /usr/local/etc/apache24/httpd.conf  строку с параметром Listen, приводим к виду:

Listen 127.0.0.1:80

Перезапускаем apache:

# /usr/local/etc/rc.d/apache24 restart

Запускаем nginx:

# /usr/local/etc/rc.d/nginx start

Наш веб сервер готов. Теперь проверим его работу. Создадим в папке /web/sites/websrv.local/www файл index.php с содержимым

<?php phpinfo(); ?>

Заходим в браузере по адресу http://openpublish.kiev.ua
Если вы видите информацию о версии php и его модулях, значит все настроено и работает.

 

Коментувати

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.