- PVSM.RU - https://www.pvsm.ru -
В сообществах MODx много ругани на Revolution, мол с ней невозможно работать из-за медленной админки.
Когда начинаешь разбираться в вопросе, оказывается, что люди работают на shared-хостингах с ограниченными ресурсами, через интернет канал 2,5 мегабита и браузером не Google Chrome.
По следам нескольких холиваров я решил, что нужно что-то делать. Возможно, мой топик покажется вам ненужнымнеинтересным, но я должен его написать, чтобы было куда отправлять страждущих.
На всякий случай, приложу видео [1], как именно должна работать админка MODx Revo.
Для ускорения Revolution нужно:
Я работал с разными хостингами. Начинал на Peterhost [3], затем переехал на Clodo [4], потом Selectel [5] и параллельно Scalaxy [6]. Также немного поработал с Hetzner [7].
Хорошие все, но по совокупности субъективных вещей мне больше нравится облако Selectel.
Получилось «многабуков», поэтому вот оглавление:
1. Установка ОС и настройка ssh [8]
2. Установка сервисов [9]
3. Настройка окружения [10]
4. Настройка сервисов [11]
5. Заключение [12]
Регистрируемся на selectel.ru, заходим в панель, там «Облако» и создаем машину.
Для установки я беру Ubuntu x32 (меньше кушает памяти, чем х64). Установка ОС идет минут 15, после нее в свойствах машины ищем «Пароль при установке». Это пароль root.
На сервер идем через Putty. В настройках Translation ставим UTF-8.
User: root
Password: из панели
Первым делом создаем нового юзера и добавляем его в группу sudo:
adduser user
adduser user sudo
Затем отрубаем вход на сервер под рутом.
nano /etc/ssh/sshd_config
Выставляем PermitRootLogin no, здесь же можно перевешать ssh на другой порт, но я этого не делаю.
Перезапускаем ssh:
service ssh restart
Теперь можно перелогиниться, как user и работать через sudo.
Первым делом
sudo apt-get install mc
, после установки
sudo mc
— этим вы будуте работать на сервере через sudo до выхода из Midnight Commander.
На этом месте большинству не-Linux юзеров изрядко похорошело при виде синих окошек, вместо черной консоли. А консоль по-прежнему можно быстро увидеть, нажав Ctrl+O.
С этого момента команды можно вводить и без sudo — вы уже работаете в нем из mc.
Немного настроим firewall.
Создаем файл /root/iptables, вносим в него такие строки:
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
Это защита 22го порта от переборщиков паролей. При каждой неудачной попытке повторно попробовать они смогут только через 30сек (можно увеличить) — на таких скоростях ничего не подобрать. К тому же, нужно угадать еще имя пользователя (root то мы отключили).
Вносим вызов этого файла в /etc/rc.local — и скрипт будет вызываться при запуске. Вообще, все что вы хотите запускать при старте — пишем сюда.
Ставим python-software-properties для удобного добавления репозиториев
apt-get install python-software-properties
Дабавляем репоитории Nginx и php5-fpm:
add-apt-repository ppa:nginx/stable
add-apt-repository ppa:fabianarias/php5
apt-get update
apt-get install nginx php5-fpm mysql-server php5-mcrypt php5-mysql php5-curl php-db php5-gd
При установке потребуется ввести административный пароль для Mysql — придумываем посложнее, запоминаем и вводим.
Можно еще установить sendmail для отправке почты с сайта, но Revo позволяет работать напрямую с smtp сервером для отправки почты — что я вам и советую настроить. Лучше сразу подключить почту для домена от Яндекс [14] или Google [15].
Как вы уже могли догадаться, наш сервер будет запускать php через php5-fpm, без участия Apache2.
Это дает нам 2 преимущества: меньшее потребление памяти и запуск разных сайтов от разных юзеров. То есть, при взломе одного сайта — остальные не пострадают.
FTP на сервер мы вообще не установили, потому что заливать файлы сайта мы будем через SFTP (используем WinCSP для этого), а редактировать через Notepad++ (там есть плагин для sftp).
Создаем группу sftp (addgroup sftp) и настраиваем для нее доступ через ssh.
Добавляем в конец /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
AllowTCPForwarding no
ForceCommand internal-sftp
И комментируем там же
#Subsystem sftp /usr/lib/openssh/sftp-server
Создаем новую директорию для будущего сайта (и директорию для временных файлов), создаем юзера для него, добавляем его в группу sftp и назначаем домашнюю директорию:
mkdir /var/www/site1
mkdir /var/www/site1/www
mkdir /var/www/site1/tmp
adduser site1
adduser site1 sftp
usermod -d /var/www/site1 site1
Есть директория, есть пользователь, есть доступ для него через sftp.
Для настройки php нужно редактировать /etc/php5/fpm/php.ini.
post_max_size = 100M
upload_max_filesize = 100M
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source
cgi.fix_pathinfo = 0
Основной конфигурационный файл Nginx (/etc/nginx/nginx.conf) приводим к такому виду (старый бэкапим):
user www-data;
worker_processes 8;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
client_max_body_size 100m;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain ext/html text/xml application/xml application/x-javascript text/javascript text/css text/json;
gzip_disable "msie6";
gzip_comp_level 8;
charset utf-8;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Рядом в /etc/nginx/fastcgi_params комментим строку про https, а не то потом будет ругаться:
#fastcgi_param HTTPS $server_https;
Nota Bene! Создаем виртуальный хост.
Наш конфиг подгружает сайты из директории /etc/nginx/sites-enabled/, а рядом есть /etc/nginx/sites-available/.
В первой директории лежат симлинки активных сайтов на файлы конфигов из второй директории. Такой подход позволяет быстро включатьотключать виртуальные хосты без редактирования — а просто удаливсоздав symlink.
Стандартный конфиг сайта /etc/nginx/sites-available/site1.conf
upstream backend-site1 {server unix:/var/run/php5-site1.sock;}
server {
listen 80;
server_name site1.domain.ru;
root /var/www/site1/www;
access_log /var/log/nginx/site1-access.log;
error_log /var/log/nginx/site1-error.log;
index index.php;
rewrite_log on;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass backend-site1;
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|bmp)$ {
access_log off;
expires 10d;
break;
}
location ~ /.ht {
deny all;
}
}
Здесь сразу включены friendly urls, отдача статики и обработка php через php5-fpm, для которого объявляется backend (1 строка конфига).
Следующий сайт можно создать просто скопировав конфиг этого и поменяв site1 на site2.
После создания конфига не забываем создать символическую ссылку на конфиг:
ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/site1.conf
Nota Bene! Создаем процесс php5-fpm для сайта.
Основную конфигурацию /etc/php5/fpm/main.conf мы трогать не будем, просто удостоверимся, что внизу файла есть строчка
include=/etc/php5/fpm/pool.d/*.conf
Это подключает из директории конфигурации процессов php5-fpm. В конфигурации сайта мы уже указали, что *.php он будет отдавать на обработку по адресу /var/run/php5-site1.conf, а теперь создаем конфиг /etc/php5/fpm/pool.d/site1.conf:
[site1]
listen = /var/run/php5-site1.conf
listen.mode = 0666
user = site1
group = site1
chdir = /var/www/site1
php_admin_value[upload_tmp_dir] = /var/www/site1/tmp
php_admin_value[date.timezone] = Europe/Moscow
# тут значения можно поменять, в зависимости от нагрузки на сайт
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
Внимательно проверяем везде правильность путей и перезапускаем сервисы:
service nginx restart
service php5-fpm restart
Портянка текста получилась знатная, поэтому про установку сайта почитайте вот здесь [16], а я немного расскажу, что у нас вышло.
Мы настроили быстрый, недорогой сервер на облаке, с платой за потребление, который очень экономично кушает ресурсы.
У меня на таком сервере висит 7 небольших сайтов. Он кушает 250-300mb ОЗУ (это настраивается в панели selectel) и стоит около 8-10 рублей в день. Когда я переживал небольшой хабраэффект [18] я платил всего 20 рублей в сутки.
Сайты изолированы друг от друга, каждый работает от своего юзера, с ограниченными правами. Этот же юзер ходит через sftp — нет проблемы с редактированием файлов залитых через ftp в админке.
В общем, я попытался доступно написать, как можно за 300 рублей в месяц сделать себе
Если что-то не так — поправьте меня в комментариях.
Автор: bezumkin
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/nginx/4050
Ссылки в тексте:
[1] приложу видео: http://www.youtube.com/watch?v=SMc2hSkJvA4
[2] хостинг: https://www.reg.ru/?rlink=reflink-717
[3] Peterhost: http://peterhost.ru/
[4] Clodo: http://www.clodo.ru/
[5] Selectel: http://selectel.ru/
[6] Scalaxy: https://www.scalaxy.ru/
[7] Hetzner: http://www.hetzner.de/en/
[8] Установка ОС и настройка ssh: #install
[9] Установка сервисов: #services_install
[10] Настройка окружения: #env_setup
[11] Настройка сервисов: #services_setup
[12] Заключение: #end
[13] Image: http://i1.imageban.ru/out/2012/03/22/2f5a8b117c4451947e5db423da35ac34.png
[14] Яндекс: https://pdd.yandex.ru/
[15] Google: https://www.google.com/a/cpanel/standard/new3?hl=ru
[16] вот здесь: http://habrahabr.ru/post/116614/
[17] Image: http://habrastorage.org/storage2/207/d6e/5bb/207d6e5bb9a85adf46d35d5443487e43.png
[18] небольшой хабраэффект: http://habrastorage.org/storage2/46c/682/fe3/46c682fe36e42af6e7669fd7d2de5a4b.png
Нажмите здесь для печати.