На Хабре полно разных инструкций, как связать Nginx с php5-fpm, даже я уже такую писал. Но сегодня предлагаю кое-что новенькое, а именно видео-инструкцию покупки и настройки собственного
Пост находится в хабе MODX не случайно, в уроке используются специальные скрипты для удобной работы с сайтами MODX Revolution.
Смотреть видео категорически не рекомендуется супер-крутым админам и беременным женщинам!
Под катом подробности организации + план работ с кусками кода, для удобного копипастинга.
Как работает
Сервер строится на базе Ubuntu + Nginx + Php5-fpm + mySql + Sendmail.
На каждый сайт приходится
— 1 выделенный пользователь
— 1 база данных
— 1 доступ по SFTP
Все файлы сайта принадлежат этому юзеру, он может заходить удалённо и менять их. Php для сайта запускается от имени этого пользователя и обладает его правами.
Помимо ограничения прав php правами юзера, он также запускается с отключением опасных функций и включением open_basedir в директорию юзера.
Такая конфигурация, на мой взгляд, максимально безопасна. Если поломают один сайт — все остальные даже потрогать не смогут.
Выше своей директории просто физически нельзя подняться без взлома ядра операционной системы — а это уже совсем другой уровень атаки.
Для доступа в консоль сервера используется юзер user. Вам я советую создавать этого пользователя под другим именем. Суперпользователю root вход запрещен вообще, чтобы злоумышленнику кроме пароля пришлось подобрать еще и имя.
После входа на сервер user может делать sudo и получать привелегии root.
Этот пользователь должен использоваться только для управления сервером. У него нет сайтов, он не владеет файлами сайтов. Конечно, он также может использовать SFTP для своих нужд.
Сам порт ssh защищается от перебора iptables, путём блокировки неудачных попыток входа на 30 секунд.
Почтовый сервер настраивается только на отправку писем. Получение почты я рекомендую отдать Яндекс или Google.
Всю работу с сайтами обеспечивают мои консольные скрипты, которые снимают весь головняк по создании сайтов, баз данных и прочей рутины.
Советую самостоятельно настроить резервное копирование и выгрузку в Dropbox, этого на видео нет.
Этапы установки
1. Регистрация на Linode
Для регистрации предлагаю две ссылки: реферальную (нажать Sign up справа вверху), и обычную. Кликайте в зависимости от настроения.
Для оплаты я использовал Qiwi Visa Virtual, на которую положил $ 20.
Если платить во второй половине месяца — то снимут деньги за полтора месяца. Если в первой — то только за остаток текущего, поэтому там вышло всего около $ 16.
2. Настройка ssh
Нужно запретить вход root, создать юзера для sudo и защитить 22й порт.
Скрипт защиты
#!/bin/bash
# Очистка цепочек правил
iptables -F INPUT
iptables -Z INPUT
iptables -P INPUT ACCEPT
iptables -F OUTPUT
iptables -Z OUTPUT
iptables -P OUTPUT ACCEPT
iptables -F FORWARD
iptables -Z FORWARD
iptables -P FORWARD ACCEPT
# Защита порта ssh, время блокировки - 30 секунд
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 30 -j DROP
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
В /etc/ssh/sshd_config
— Меняем PermitRootLogin no
— Комментируем #Subsystem sftp /usr/lib/openssh/sftp-server
— Добавляем в конец
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
AllowTCPForwarding no
ForceCommand internal-sftp
3. Установка нужных пакетов
apt-get install python-software-properties
add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx php5-fpm mysql-server php5-mcrypt php5-mysql php5-curl php-db php5-gd unzip zip sendmail htop
Во время установки нужно указать пароль для root mySql.
4. Настройка почты
В /etc/hosts нужно указать внешний ip сервера для своего домена (или localhost), чтобы sendmail мог определять свой ip.
Имя домена нужно указать в /etc/hostname.
127.0.0.1 localhost
195.167.123.115 mydomain.com mydomain
Затем нужно указать не принимать свои же письма при отправке на свой домен в /etc/mail/sendmail.mc
define(`MAIL_HUB', `mydomain.com.')dnl
define(`LOCAL_RELAY', `mydomain.com.')dnl
Потом в консоли
sendmailconfig
service sendmail restart
И проверяем
echo -e "To: user@mydomain.comnSubject: TestnTestn" | sendmail -bm -t -v
5. Установка и проверка скриптов MODX
Addplace — gist.github.com/bezumkin/3833852 — Создаёт место под сайт
Install — gist.github.com/bezumkin/2179479 — Создаёт место и ставит MODX
Update — gist.github.com/bezumkin/2179440 — Обновление MODX
Remove — gist.github.com/bezumkin/2179492 — Удаление места с сайтом и БД
6. Установка PhpMyAdmin
Качаем дистрибутив отсюда.
Создаём директорию config, доступную для записи, настраиваем логинпароль для БД и сохраняем конфиг.
Затем переносим его в корень сайта, немного меняем дамп таблиц pma и импортируем их в БД.
Не забудьте удалить директории config и setup, после успешной настройки.
Теперь всё должно работать.
Updated.
Cейчас у поста -2. 12 плюсов и 14 минусов.
Действительно, это такой плохой и ненужный никому пост, что его надо затопить, дабы никто не видел?
А кто эти 34 человека, которые занесли его в закладки?
Положим, я сейчас расстроюсь и уберу ненужный пост в черновики — кому от этого станет лучше? Есть мнение, 34 человека не обрадуются, когда соберутся его перечитать. А 14 человек и не узнают об этом никогда. Минусанул молча и пошел себе дальше.
Где критика видео, где указание на недочёты, или может, ссылки на подобные ролики? Я что, Apache2 из под рута запускаю, или что?
Похоже, это последний раз когда я что-то публикую на Хабре. Наверное, просто не понимаю, что нужно местной аудитории.
Автор: bezumkin