Настройка LAMP сервера
Содержание:
Настройка общих параметров
Настройка учётных записей
Авторизации по ключу
Настройка стека LAMP (Linux, Apache, MySQL, PHP)
Установка apache2
Установка базы данных MySQL или MariaDB
Создание базы данных MySQL и пользователя
Установка phpMyAdmin
Установка PHP
Виртуальные хосты в Apache
Настройка локальных хостов для тестов
Настройка файрвола UFW
Установка CMS на LAMP (На примере WordPress)
Модули и плагины
Установка WordPress
Настройка WordPress
Настройка общих параметров
Настройка учётных записей
Создадим нового пользователя и добавим его в группу sudo. Именно из под этого пользователя мы будем управлять сервером
adduser sammy
usermod -aG sudo sammy # Добавим его в группу sudo
Переключимся на нового пользователя и запретим root доступ к серверу, для повышения безопасности последнего:
su - sammy
nano /etc/ssh/sshd_config
Параметр запрещения удаленного root-доступа
PermitRootLogin no
Также есть интересный параметр разрешения соединения только определенным пользователям
AllowUsers user1 [user2] [user3] …
Авторизации по ключу
Как бы ни был хорош ваш пароль, он никогда не будет лучше ключа. Генерируем пару ключей на своей локальной машине, если их ещё нет:
ssh-keygen
Копируем со своей машины ключи на удалённый сервер
ssh-copy-id sammy@your_server_ip
Отключение входа по паролю
nano /etc/ssh/sshd_config
Параметры должны быть следующими
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Перезапускаем демон SSH, чтобы настройки вступили в силу
sudo systemctl reload sshd
Теперь никто не подберёт к нашему серверу пароль, а мы будем подключатся стандартным способом, не думая о каких либо паролях:
ssh sammy@IP_адрес_сервера
Настройка стека LAMP (Linux, Apache, MySQL, PHP)
Установка apache2
sudo apt-get update
sudo apt-get install apache2
Настроим глобальную переменную ServerName, можно не настраивать но при проверке конфигов apache будет давать ошибку AH00558. В конце главного конфигурационного файла:
sudo nano /etc/apache2/apache2.conf
Добавим строку ServerName указывающую на доменное имя или публичный IP-адрес
ServerName доменили_IPадрес_сервера
Проверка настройки конфигурации Apache, теперь не должно быть ни каких ошибок:
sudo apache2ctl configtest
Перезапускаем Apache для применения внесённых изменений^
sudo systemctl restart apache2
Установка базы данных MySQL или MariaDB
Установка MySQL:
sudo apt-get install mysql-server
Если решили поставить MariaDB то
sudo apt-get -y install mariadb-server mariadb-client
В процессе установки сервер попросит задать и подтвердить пароль для пользователя root в MySQL.
Для настройки безопасного окружения MySQL, включим плагин валидации паролей (пароли, которые не удовлетворяют определённым критериям безопасности, будут отвергаться MySQL):
sudo mysql_secure_installation
Если всёже решились включить плагин, он предложит задать уровень надёжности паролей при валидации.
0 = LOW, 1 = MEDIUM and 2 = STRONG:
Как понимаете 2 – самый строгий уровень валидации, вы будете получать ошибки при попытке задать пароль без цифр, букв в верхнем и нижнем регистре, а также без специальных символов, а также при попытке использовать пароль, основанный на распространённых словах.
На все последующие вопросы просто вводите Y для выбора настроек по умолчанию. При этом удалятся некоторые тестовые пользователи и базы данных, будет отключена возможность удаленного доступа с учетной записью root-пользователя, и все изменения будут немедленно применены в MySQL.
Создание базы данных MySQL и пользователя
Зайдём в MySQL с использованием root-аккаунта
sudo mysql -u root -p
Создадим базу данных wpbase
CREATE DATABASE wpbase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Создадим аккаунт пользователя wpuser, его пароль и дадим ему доступ к созданной нами базе данных wpbase:
GRANT ALL ON wpbase.* TO 'wpuser'@'localhost' IDENTIFIED BY 'password';
Применить изменения
FLUSH PRIVILEGES;
Создание отдельных баз данных и аккаунтов будет весьма полезно с точки зрения безопасности и управления базами данных.
Выйти из MySQL
EXIT;
Установка phpMyAdmin
С помощью phpMyAdmin вы можете управлять вашим сервером баз данных через веб-интерфейс. Ставить следует только если вы наверняка будете в нём работать, иначе это лишняя потенциальная уязвимость.
sudo apt-get -y install phpmyadmin
Во время установки будут вопросы:
Web server to configure automatically: выберите опцию apache2
Configure database for phpmyadmin with dbconfig-common? выберите No, нет
После установки, вы можете войти в phpMyAdmin по адресу:
http://your_server_ip/phpmyadmin/
Если будите подключаться к БД В Ubuntu 16.04 через PhpMyAdmin используя пользователя root, то получите ошибку:
1698 – Access denied for user ‘root’@’localhost’
Чтобы разрешить удаленный доступ пользователю root через PhpMyAdmin, что не рекомендуется. Подключимся к БД:
mysql -u root -p
выполним:
use mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
Для выхода, введите команду exit.
Для phpMyAdmin также следует открыть порт 3306:
sudo ufw allow 3306
Однако держать его открытым крайне не рекомендуется, открывать следует либо только во внутреннюю сеть, либо только на время работы в phpMyAdmin.
Установка PHP
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
Настроим Apache таким образом, чтобы сначала он искал файлы index.php, для этого в файле
sudo nano /etc/apache2/mods-enabled/dir.conf
index.php переместим в начало списка
Перезапустим Apache для применения внесенных изменений:
sudo systemctl restart apache2
Проверить статус сервиса apache2 используя systemctl:
sudo systemctl status apache2
Для тестирование работы PHP, создадим файл
sudo nano /var/www/html/info.php
Сохраним в нём текст
<?php
phpinfo();
?>
Для проверки нужно открыть данную страницу в веб-браузере
http://доменили_IPадрес_сервера/info.php
Страница содержит информацию о вашем сервере, полезна для отладки и чтобы удостовериться в корректности применения настроек. Ещё она может дать информацию о вашем сервере неавторизованным пользователям, поэтому после проверки её лучше удалить:
sudo rm /var/www/html/info.php
Виртуальные хосты в Apache
Эта настройка позволяет использовать один сервер, чтобы раздавать несколько сайтов используя один интерфейс или IP. Очень удобно для тех, кто хочет использовать один VPS для нескольких сайтов.
Создадим структуру директорий для 2 сайтов:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/example2.com/public_html
Назначение владельцем текущего пользователя:
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example2.com/public_html
Назначение прав доступа:
sudo chmod -R 755 /var/www
Создание демо-страниц для виртуальных хостов:
nano /var/www/example.com/public_html/index.html
Со следующим содержимым:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<bosy>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
Аналогичным образом можно создать и для второго сайта.
Создадим файлы виртуальных хостов которые задают их конфигурацию, и определяют, как именно веб-сервер Apache будет отвечать на запросы к разным доменам. Копируем файл виртуального хоста по умолчанию 000-default.conf:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Теперь отредактируем его для своего домена:
sudo nano /etc/apache2/sites-available/example.com.conf
Должны быть следующие настройки:
<VirtualHost *:80>
ServerAdmin webmaster@localhost #адрес электронной почты администратора
ServerName example.com #основной домен
ServerAlias www.example.com #другие имена
DocumentRoot /var/www/example.com/public_html # корневой каталог домена
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Файл для второго хоста также копируется и редактируется по аналогии.
Каждый новый виртуальный хост нужно включать следующим образом:
sudo a2ensite example.com.conf
Деактивируем сайт по умолчанию 000-default.conf
sudo a2dissite 000-default.conf
Перезапускаем Apache для применения внесённых изменений:
sudo systemctl restart apache2
Аналогичная команда, только без вывода:
sudo service apache2 restart
Проверим конфигурацию на ошибки:
sudo apache2ctl configtest
Настройка локальных хостов для тестов
Позволит перехватывать любой запрос к доменам, которые вы настроили и перенаправлять его на ваш VPS сервер так, как это сделала бы система DNS в случае использования реально зарегистрированных доменов.
Будет работать только с вашего локального компьютера и используется только для тестирования.
Нужно отредактировать файл:
sudo nano /etc/hosts
Добавить строку:
192.168.0.100 example.com
После чего запрос на example.com отправит нас к примеру на сервер в VirtualBox по ip – 192.168.0.100. При условии что вышеуказанный ip вы прописали на сервере.
Настройка файрвола
Если с iptables ещё не разобрались, UFW – ваше всё. Готовые кейсы настроек вы также можете найти на моём сайте в разделах по iptables и UFW.
Проверяем создал ли ssh свой профиль в UFW:
sudo ufw app list
Должны получить
Available applications:
OpenSSH
Разрешить SSH-соединения, без этого включённый UFW, нас не пропустит:
sudo ufw allow OpenSSH
Если порт отличен от 22 его обязательно нужно указать!:
sudo ufw allow 2222
Переназначим наши ssh соединения на отличный от 22 порт, в файле /etc/ssh/sshd_config, параметр:
Port 2222 # по умолчанию стоит 22
Перезапустите демона ssh:
sudo /etc/init.d/ssh restart
Отключитесь от сервера (команда exit) и подключитесь заново, только уже по новому порту:
ssh -p2222 sammy@your_server_ip
Теперь отключим соединения на 22 порту
sudo ufw OpenSSH deny
Далее включим файрвол UFW
sudo ufw enable
Убедиться, что SSH-соединения разрешены:
sudo ufw status
На что получим ответ:
Status: active
OpenSSH DENY Anywhere
2222 ALLOW Anywhere
OpenSSH (v6) DENY Anywhere (v6)
2222 (v6) ALLOW Anywhere (v6)
Далее можно либо вручную открыть порты 80, 443 для работы нашебо веб-сервера, либо использовать готовый профиль.
Вручную:
sudo ufw allow 80
sudo ufw allow 443
Через готовый профиль:
Проверим настройку профиля Apache Full, появится после установки Apache2 (должен сказать что откроет Ports: 80,443/tcp)
sudo ufw app info "Apache Full"
Разрешим входящий трафик для этого профиля
sudo ufw allow in "Apache Full"
Проверим результат настроек файрвола и apache перейдя по адресу публичного ip или домена, нам должна показаться Apache2 Ubuntu Default Page
Установка CMS на LAMP (На примере WordPress)
Модули и плагины
WordPress и многие плагины требуют дополнительные расширения PHP:
sudo apt-get update
sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc
Перезапустим Apache для начала использования плагинов
sudo systemctl restart apache2
WordPress и многие его плагины используют файлы .htaccess для тонкой настройки поведения сервера. Включение .htaccess осуществляется в конце главного конфигурационного файла:
sudo nano /etc/apache2/apache2.conf
Добавить строки
<Directory /var/www/html/>
AllowOverride All
</Directory>
Модуль mod_rewrite позволяет использовать постоянные ссылки в WordPress. Включения модуля Rewrite (a2dismod – отключение):
sudo a2enmod rewrite
Проверка настройки конфигурации Apache
sudo apache2ctl configtest
Перезапускаем Apache для применения внесённых изменений
sudo systemctl restart apache2
Установка WordPress
Загрузим архив WordPress:
cd /tmp;
curl -O https://wordpress.org/latest.tar.gz
Извлечём файлы из архива:
tar xzvf latest.tar.gz
Создадим пустой файл .htaccess в разархивированный каталог wordpress:
touch /tmp/wordpress/.htaccess
chmod 660 /tmp/wordpress/.htaccess
Создадим файл конфигурации WordPress путём копирования примера файла конфигурации:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
Создадим директорию upgrade, чтобы WordPress успешно обновлялся в будущем:
mkdir /tmp/wordpress/wp-content/upgrade
Копировать всё содержимое нашей временной директории в корневую директорию нашего сайта:
sudo cp -a /tmp/wordpress/* /var/www/доменное_имя/
Настройка WordPress
Установим владельцем всех наших файлов в корневой директории сайта нашего пользователя sammy, в качестве группы будем использовать www-data:
sudo chown -R sammy:www-data /var/www/html
Настроим бит setgid для каждой из директорий в корневой директории:
sudo find /var/www/html -type d -exec chmod g+s {} \;
Разрешим группе писать в директорию wp-content для того, чтобы веб-интерфейс мог вносить изменения в тему и плагины:
sudo chmod g+w /var/www/html/wp-content
Дадим веб-серверу права на запись в следующие директории
sudo chmod -R g+w /var/www/html/wp-content/themes
sudo chmod -R g+w /var/www/html/wp-content/plugins
Получим секретные ключи для повышения безопасности от WordPress
curl -s https://api.wordpress.org/secret-key/1.1/salt/
Копируем полученные строки и вставляем в файл:
nano /var/www/html/wp-config.php
В секцию, которая содержит пустые значения для этих параметров. Также в этом файле необходимо задать имя базы данных, имя пользователя базы данных, а также соответствующий пароль пользователя MySQL которые мы создавали ранее:
define('DB_NAME', 'wpbase');
/** MySQL database username */
define('DB_USER', 'wpuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
Сдесь же зададим метод, который WordPress будет использовать при записи в файловую систему. Так как мы дали веб-серверу права на запись в необходимые директории, зададим это значение в явном виде
define('FS_METHOD', 'direct');
Если этого не сделать, при выполнении некоторых операций WordPress будет запрашивать логин и пароль для FTP доступа.
Если WordPress так и не запустился проверить наличие файла index.php в корне сайта. А также настроить .htaccess:
#BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
#END WordPress
Завершение установки
Введите доменное имя или IP адрес сервера
http://доменноеимяилиIPадрес
Будет показана главная страница настроек.
Обновление WordPress
Приведённые нами настройки слишком строгие для осуществления автоматических обновлений.
Временно дайте веб-серверу доступ на запись к содержимому корневой директории сайта:
sudo chown -R www-data /var/www/html
Перейдите в админ-панель WordPress и совершите обновление. После завершения обновления верните права доступа на изначальные:
sudo chown -R sammy /var/www/html
LEAVE YOUR COMMENT