132 0

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

Tagged with: ,

RELATED ARTICLES

LEAVE YOUR COMMENT

Your email address will not be published. Required fields are marked *




Скоро останутся лишь две группы работников: те, кто контролирует компьютеры, и те, кого контролируют компьютеры. Постарайтесь попасть в первую.

technicscoffee.com

Если вас как и меня интересуют: Linux, фантастика, технологии, игры и фильмы данных тематик, добро пожаловать на мой более развлекательный ресурс!

Категории