Debian. Замечания по установке и настройке Web сервера

При установке и тестировании использовался дистрибутив -
Debian 9 amd64 Stretch
Также данные действия использовались при настройке VDS сервера на хостинге компании FirstVDS (размер занятого пространства на диске составил 4Гб).
Установка LAMP (поднимаем web-server)
Установка ShoreWall файервола (надстройка над iptables)
FTP сервер. Установка, настройка
Apache. Несколько сайтов на одном хостинге
Apache. Включение модуля mod_rewrite.so
Apache. Права доступа к файлам и папкам находящимся в /var/www
Apache. Защита папок средствами Apache (.htpasswd)
Apache, PHP. Установка модуля Memcached (нужен для работы PrestaShop)
Apache+MySQL+PHP. Тест производительности web сервера
PHPMyAdmin установка, первоначальная настройка
Монтирование удаленного FTP ресурса в локальную папку с помощью CurlFtpFS
Настройка Apache для работы по протоколу HTTPS с несколькими доменами на одном IP
Дополнительно (улучшалки юзабилити ОС)
# apt-get update
# apt-get -y install mc htop iftop apache2 mariadb-server mariadb-client mariadb-common php7.0 php7.0-mysql libapache2-mod-php7.0
Установка LAMP (поднимаем web-server)
1. Устанавливаем Apache
#apt-get update
#apt-get -y install apache2
2. Устанавливаем MariaDB (замена MySQL)
#apt-get -y install mariadb-server mariadb-client mariadb-common
3. Устанавливаем PHP и необходимые мне расширения к нему
#apt-get -y install php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-intl php7.0-json php7.0-zip php7.0-curl php7.0-xml php7.0-gd php7.0-pdo php7.0-imap
Дополнительные необходимые команды для получения информации, тестирования, архивирования:
# php -v (номер версии установленного PHP)
# php -m (список установленных модулей PHP)
# apt-cache search php7 (список доступных для установки пакетов)
# service --status-all (список сервисов в системе)
# tar -zxvf arhiv.tar.gz (разархивировать в текущую папку файлы)
# tar cvzf arhiv.tar.gz * (создать архив из содержимого текущего каталога рекурсивно)
# chown -R user:usergroup * (смена хозяина файлов и каталогов рекурсивно)
# chmod -R 775 * (смена уровня доступа к файлам и каталогам рекурсивно)
# find . -type d -exec chmod 0755 {} ';' (рекурсивное изменение прав доступа только на папки)
# mysql -uUserName -pPassWord name_database < data-dump.sql (импорт базы данных)
# gzip -dc < namearhiv.sql.gz | mysql -uUserName -pPassWord name_database (импорт базы данных со сжатием в архив)
# mysqldump -uUserName -pPassWord name_database > data-dump.sql (экспорт базы данных)
# mysqldump -uUserName -pPassWord name_database | gzip > namearhiv.sql.gz (экспорт базы данных со сжатием в архив)
# mysqldump -uUserName -pPassWord --add-drop-table --no-data name_database | grep ^DROP | mysql -uUserName -pPassWord name_database (удаление всех таблиц в БД)
Установка параллельно PHP5.6 -
Откройте терминал и выполните следующую команду:
#apt-get install apt-transport-https lsb-release ca-certificates
Получить ключ gpg:
#wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
или
#curl https://packages.sury.org/php/apt.gpg | apt-key add -
Добавьте новый репозиторий в свои источники:
#echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
Установить PHP5.6
#apt-get update
#apt-get install php5.6 php5.6-mysql php5.6-mcrypt php5.6-mbstring php5.6-xml libapache2-mod-php5.6 php5.6-intl php5.6-gd php5.5-apcu php5.6-imap
Обновление до версии PHP 7.3
Подключаем репозитарий с дистрибутивами и обновляемся (точнее будет установлена паралельно старой новая версия PHP)
# apt-get -y install lsb-release apt-transport-https ca-certificates
# wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
# apt-get update
# apt-get install php7.3-cli php7.3-fpm php7.3-json php7.3-pdo php7.3-mysql php7.3-zip php7.3-gd php7.3-mbstring php7.3-curl php7.3-xml php7.3-bcmath php7.3-json
Переключение версий через панель WebAdmin
В панеле управления (меню слева) Servers -> Apache Webserver. Далее вкладка Global configuration. Активируем модуль PHP нужной версии.
В панели управления (меню слева) Others -> PHP Configuration. Если не аоявилось меню редактирования файлов конфигурации PHP, прописываем правильные пути к ним тутже.
Перезапускаем Apache.
4. Запускаем сервер
# service apache2 restart
Установка WEBMIN
Инструкция по установке на официальном сайте.
Документация - Установка через подключение репозитария WebMin - https://www.tecmint.com/install-webmin-in-debian-9/
Добавляем строки в файл со списком подключенных репозитариев etc/apt/sources.list :
# deb http://download.webmin.com/download/repository sarge contrib
# deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
Устанавливаем ключи для подключения к репозитарию и устанавливаем WebMin:
# wget http://www.webmin.com/jcameron-key.asc
# apt-key add jcameron-key.asc
# apt-get update
# apt-get -y install webmin
Установка ShoreWall файервола (надстройка над iptables)
#apt-get -y install shorewall
Содержание файлов конфигурации для одиночного файервола (на одиночной Linux системе):
/etc/shorewall/zones | /etc/shorewall/interfaces | /etc/shorewall/policy |
/etc/shorewall/rules |
fw firewall net ipv4 |
net eth0 detect | $FW net ACCEPT net all DROP info all all REJECT info |
Ping/ACCEPT all all Web/ACCEPT all all SSH/ACCEPT net $FW Webmin/ACCEPT net all |
Включение автозапуска ShoreWall при старте системы :
1. В файле конфигурации /etc/shorewall/shorewall.conf установить параметр STARTUP_ENABLED=Yes
2. Пользователи пакета .deb должны отредактировать файл /etc/default/shorewall и установить параметр STARTUP=1
Проверяем с удаленной машины (или используем онлайн сервисы) открытые порты -
#nmap -P0 234.234.234.23
Добрые советы по настройке файервола на WEB сервере
1. Обеспечить доступ к серверам (портам) SSH (22), FTP (21), WEBMIN (10000) на сервере только с IP адресов администратора и разработчика
2. Не забыть открыть доступ к WEB-серверу (порты 80, 443) для всех
3. Обеспечить ответ на PING
FTP сервер. Установка, настройка
# apt-get -y install proftpd
Для доступа пользователя root (это плохо, знаем!), через WebAdmin (можно править напрямую конфиг.файлы) :
1. Убираем в разделе "Denied FTP Users" пользователя root
2. В разделе "Authentication" ставим YES на "Allow login by root?"
Установка PHPMyAdmin
# apt-get install phpmyadmin
1. Отвечаем на вопросы установщика и устанавливаем пароль.
2. После установки PHPMyAdmin пускает только локальных пользователей, вход снаружи всем запрещен, даже root. Необходимо создать нового пользователя PHPMYAdmin с полными правами и разрешением на вход от куда угодно. Делаем это через WebMin или консоль.
3. Увеличиваем размер загружаемых файлов. В файле /etc/php/7.0/apache2/php.ini
upload_max_filesize - устанавливает максимальный размер загружаемого файла,
post_max_size - отвечает за максимальный размер сообщения методом POST. Ставим примерно 150 и 200Мб соответственно.
Apache. Несколько сайтов на одном хостинге
1. В папке где расположены обычно файлы сайта (var/www) создаем подпапки тип
/var/www/site_1.ru
/var/www/site_2.com
/var/www/site_2.org
2. Через WebAdmin или в конфигурационных файлах Apache создаем виртуальные хосты с указанием пути к созданным до этого папкам.
3. Перезапускаем Apache. Тестируем.
P.S. Используется внешний DNS сервер с настройкой "А" записей указывающих на настраиваемый хост. При необходимости можно создать собственный DNS сервер прямо на хосте. Для этого используется пакет ПО bind, плюс к этому будет необходим дополнительный IP адрес (их нужно два, требование регистраторов доменов). Доп.информация тут ...
Включение отправки писем средствами PHP mail
# apt-get update
# apt-get install sendmail-bin
# apt-get install sendmail
Добавляем строку в файл /etc/php/7.0/apache2/php.ini
sendmail_path = /usr/sbin/sendmail -t -i
Apache. Включение модуля mod_rewrite.so
1. Подключаем модуль командой -
# a2enmod rewrite
Можно использовать WebAdmin (раздел Configure Apache Modules)
2. Правим конфиг. файлы Apache
/etc/apache2/site-available/default
Находим следующие строки и меняем "AllowOverride None" на "AllowOverride All" :
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
В конфиг. файлах виртуальных хостов (расположены тут же /etc/apache2/site-available/ ) правим аналогично добавляя этиже строки. Пример файла site_1.com.conf :
<VirtualHost *:80>
DocumentRoot "/var/www/site_1.com"
ServerName site_1.com
ServerAlias www.site_1.com
<Directory "/var/www/site_1.com">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
3. Перезапускаем Apache командой #service apache2 restart
4. Если не работает, смотрим логи по адресу /var/log/apache2/
Apache. Права доступа к файлам и папкам находящимся в /var/www
Не уверен в правильности действий.
Сайты на движке JOOMLA
На файлы в корне сайта (такие как .htaccess, robots.txt configuration.php и т.д.) устанавливаем права 644 (допускается установка минимальных прав 444).
На папки устанавливаем права 755 (допускается установка минимальных прав 555, за исключением папок: cache, administrator/cache, logs, temp).
Внимание! Необходимости переименования htaccess.txt в .htaccess.
1. Создать рядового пользователя со своей группой. Например user_1, группа user_1. От его имени будут заливаться файлы и папки на web сервер.
2. Apache на Debian работает под пользователем www-data. Включить его в группу user_1.
3. Дать права на папки и файлы типа :
На все файлы 750 - владельцу все можно, www-data писать нельзя, остальным ничего
На папки 775 - владельцу и www-data все можно, остальным читать и запускать
Сайты на PrestaShop дополнительно установить права на папки
Рекурсивно права на запись для пользователя www-data на ~/config/
Рекурсивно права на запись для пользователя www-data на ~/cache/
Рекурсивно права на запись для пользователя www-data на ~/log/
Рекурсивно права на запись для пользователя www-data на ~/img/
Рекурсивно права на запись для пользователя www-data на ~/mails/
Рекурсивно права на запись для пользователя www-data на ~/modules/
Рекурсивно права на запись для пользователя www-data на ~/themes/default-bootstrap/lang/
Рекурсивно права на запись для пользователя www-data на ~/themes/default-bootstrap/pdf/lang/
Рекурсивно права на запись для пользователя www-data на ~/themes/default-bootstrap/cache/
Рекурсивно права на запись для пользователя www-data на ~/translations/
Рекурсивно права на запись для пользователя www-data на ~/upload/
Рекурсивно права на запись для пользователя www-data на ~/download/
Рекурсивно права на запись для пользователя www-data на ~/admin/backups/
Рекурсивно права на запись для пользователя www-data на ~/admin/import/
Консольная команда на рекурсивное изменение прав доступа только на папки :
# find . -type d -exec chmod 0755 {} ';'
При переносе магазина на PrestaShop не забываем удалить и заново сгенерировать файл .htaccess находящийся в корне движка сайта.
Регенерация производится в админке PrestaShop 1.6 :
Настройки -> SEO и URL -> Сохранить
Изменить логин, пароль, и наименование базы данных. Файл настройки с данными по доступу к базе данных расположен по адресу:
/config/settings.inc.php
Apache. Защита папок средствами Apache (.htpasswd)
1. В защищаемой папке создаем файл с инструкциями для сервера Apache : .htaccess
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/site.com/admindir/.authfile
Require user admin
2. Генерируем файл с паролем (ключ -с создание нового файла, без него добавление в имеющийся файл нового пользователя) :
# htpasswd -c /полный_путь_к_файлу/.authfile логин_пользователя
Внимание!
Модуль Apache Rewrite должен быть включен, в настройках сайта прописан параметр AllowOverride All
Apache, PHP. Установка модуля Memcached (нужен для работы PrestaShop)
Подробная инструкция тут и тут...
# apt-get install memcached php5-memcache
# apt-get install memcached
# pecl install memcache
Apache+MySQL+PHP. Тест производительности web сервера
Провести тест производительности сервера можно провести с помощью утилиты AB (Apache HTTP server benchmarking tool), входящей в состав пакета установки Apache.
#ab -c10 -n500 http://mydomen.dom/index.php
Монтирование удаленного FTP ресурса в локальную папку с помощью CurlFtpFS
Монтирование производим для обычного пользователя (user_id=1000,user_group=1000). Используем автозагрузку через fstab.
Установка пакета CurlFtpFS:
#apt-get -y install curlftpfs
1. Добавляем пользователя в группу fuse
2. Правим файл конфигурации etc/fuse.conf, вставляем строку :
user_allow_other
3. Создаем папку в которую будем монтировать FTP ресурс. Можно так:
media/ftp_dir
4. Вставляем строку автомонтирования в файл etc/fstab :
curlftpfs#ftp.server.net /media/ftp_dir fuse user=password:uname,uid=1000,gid=1000,umask=002,allow_other,default_permissions,_netdev 0 0
Настройка Apache для работы по протоколу HTTPS
Пошагово для конфигурации на одном IP несколько разных доменов, подробности ниже :
- Генерируем или покупаем сертификаты для доменов (по одному на каждый. Мультидоменные сертификаты не рассматриваются) и раскладываем их по папкам чтобы не путаться. По умолчанию сертификаты и ключи лежат тут - /etc/ssl;
- Включаем модуль SSL в Apache командой #a2enmod ssl (если через WebAdmin модуль называется - ssl);
- Удаляем, отключаем файл с дефолтовыми настройками SSL в Apache (default-ssl) чтобы не мешался под ногами. См.ниже;
- Для каждого домена правим файл конфигурации Apache. Дописываем виртуальные хосты для порта 443 с указанием путей к сертификатам (пример ниже);
- В файл /etc/apache2/ports.conf вписываем строку - NameVirtualHost *:443 (пример реального файла ниже);
- Включаем принудительное перенаправление всех запросов к сайтам на HTTPS. Тут несколько вариантов с помощью дериктивы Apache - Redirect, с помощью настроек .htaccess расположенного в корне сайта или если у Вас сайты на движках PrestaShop, Joomla, через настройки в панели управления типа "Включить SSL" / HTTPS для всех страниц сайта и т.д. Читаем соответствующую документацию.
- Перезапускаем Apache.
Для работы сервера Apache потребуется ssl-сертификат необходимый для проверки соединения. Сертификаты бывают самоподписанный (генерируются самостоятельно например с помощью OpenSSL), платные и бесплатные, которые выдаются специализированными центрами сертификации, а также "пустые" сертификаты с временной, фиктивной информацией необходимые только для создания SSL-соединения.
Платные сертификаты также делятся по типу валидации:
- Сертификаты, которые подтверждают только доменное имя (Domain Validation — DV).
- Сертификаты, которые подтверждают домен и организацию (Organization Validation — OV).
- Сертификаты, с расширенной проверкой (Extendet Validation — EV).
Сервер генерации бесплатных SSL-сертификатов - SSL For Free (https://www.sslforfree.com/).
Внимание! Срок действия бесплатного сертификата 90 дней! Можно зарегестрироваться на сайте, тогда Вы будете получать уведомления об окончании действия сертификатов. Самый быстрый метод и рабочий медод подтверждения владения доменом - внесение TXT записей в DNS, после генерации сертификатов их можно удалить. После генерации получаете три файла:
ca_bundle.crt - файл корневого сертификата
certificate.crt - файл сертификата
private.key - файл ключа сертификата
Раскладываем их в папки /etc/ssl/ca_certs, /etc/ssl/certs, /etc/ssl/private соответственно или лучше создать для каждого домена размещенного на сервере отдельную папку и прописать в файле конфигурации Apache пути к ним. См. ниже.
Не забудьте перезагрузить WEB сервер, чтобы сертификаты заработали.
#service apache2 restart
Поддержка нескольких SSL-сертификатов (несколько сайтов с разными доменными именами) расположенных на одном сервере (на одном IP) осуществляется с помощью модуля SNI. Включен в новых версиях Apache и OpenSSL по умолчанию. Проверить это можно посмотрев в файле логов Apache после старта: /var/log/apache2/error.log. Должна быть строка вида:
Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
Для "много-доменного" сервера файл с настройками по умолчанию /etc/apache2/sites-avalable/default-ssl и символическую ссылку на него в папке /etc/apache2/sites-enabled/@default-ssl нужно удалить.
Содержание файла конфигурации для виртуального сервера.
По умолчанию для каждого домена свой файл с конфигурацией.
<VirtualHost *:80>
DocumentRoot /var/www/site.ru
ServerName site.ru
ServerAlias www.site.ru
<Directory "/var/www/site.ru">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/site.ru
ServerName site.ru
ServerAlias www.site.ru
SSLEngine on
SSLCertificateFile /etc/ssl/certs/certificate.crt
SSLCertificateKeyFile /etc/ssl/private/private.key
SSLCACertificateFile /etc/ssl/certs_ca/ca_bundle.crt
<Directory "/var/www/site.ru">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Пример файла конфигурации Apache etc/apache2/ports.conf
NameVirtualHost *:80
Listen *:80
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen *:443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Решение проблемы при запуске Apache: apache2 could not reliably determine the server's fully qualified domain name using…
Надо создать файл /etc/apache2/conf.d/vhosts.conf и добавить в него директиву: ServerName localhost.
Дополнительно (улучшалки юзабилити ОС)
Включение автозавершения ввода команд в командной строке bash
1. Устанавливаем пакет - bash-completion
# apt-get install bash-completion
Редактируем файл /etc/profile, добавляя следующие строки в конец файла -
if [ -f /etc/bash_completion ]; then
/etc/bash_completion
fi
2. Изменить Shell для пользователя на /bin/bash
это возможно через Webmin или дать команду :
# usermod -s /bin/bash user
Автозапуск программ при подключении к консоли по SSH
Создаем (если он отсутствует) в корне домашней папке пользователя файл - .bash_login с необходимыми командами. Например -
# Записк Midnight Commander
/usr/bin/mc
при входе автоматически запустится MC.
Для графической оболочки, если десктоп.
1. Установка шрифтов из Windows. Выполняется из панели управления KDE.
2. Изменение шрифтов KDE на Tahoma и отключение их сглаживания. Выполняется из панели управления KDE.
3. Русификация KDE. При установке выявлен недочет сборки - неполная русификация KDE. Лечится установкой пакета локализации.
# apt-get update
# apt-get install kde-l10n-ru
Установка дополнительных, необходимых программ
# apt-get -y install mc iftop htop
TineMCE отключение абсолютного пути при вставке изображения, включение относительного
При инициализации редактора необходимо установить следующие опции в конфигурационном файле:
relative_urls : false, // включив получим адрес вида ../img/sample.jpg
remove_script_host : true, // обрезает наименование хоста, домена. Адрес вида /img/sample.jpg
convert_urls: true, // включает режим конвертации пути
В PrestaShop файл с параметрами запуска TineMCE расположен по адресу - /js/admin/tinemce.inc.js
Документация: