ITСooky

IT-рецепты съедобные и не очень!

Веб-сервер Nginx, php-fpm, memcached, MySQL, WordPress в i2p!

дата 14.10.2011

Будем делать веб сервер формата 1u для размещение в Дата-Центре по плану colocation!… конечно хотелось бы иметь 1u сервер, но вместо него будет обычный ПК, хотелось бы иметь collocation в дата-центре, но вместо него будет бесплатный хостинг в i2p сети!

Ингредиенты:
1. FreeBSD сервер подготовленный по рецепту Создаем шлюз на FreeBSD и Wi-Fi точку доступа!
2. Putty

У нас уже может быть(из предыдущих рецептов) быть установлен Apache, PHP, MySQL и всё бы хорошо еслибы не Apache — для архаичных вебморд, которые не на что больше не настраиваются, он подходит, а для хоть сколько нибудь нагруженных веб сайтов уже нет. Так что будет ставить Nginx!

Ставим MYSQ (если уже не ставили)
Версия 5.0, апгрейдить не будем чтобы Netams работал, он только с этой версией!
При установке соглашаемся на все, особого чего то выбирать не надо!

cd /usr/ports/databases/mysql50-server/
make install

Создаем базу и даем права на папку!

/usr/local/bin/mysql_install_db
chown -R mysql /var/db/mysql/
chgrp -R mysql /var/db/mysql/
/usr/local/bin/mysqld_safe
/usr/local/bin/mysqladmin -u root password svoi_parol_dlya_mysql 

Добавляем в rc.conf

mysql_enable="YES"

Создаем файл my.cnf

vi /etc/my.cnf

добавляем в него строки

[mysqld]
key_buffer=256M
table_cache=128
read_buffer=1012K
sort_buffer=1556K
join_buffer_size=2024K
max_connections=30
wait_timeout=5
max_connect_errors=5
query_cache_limit=2M
query_cache_size=60M
query_cache_type=1
low_priority_updates=1
concurrent_insert=2
thread_concurrency=4
connect_timeout=10
interactive_timeout=10

Перезагружаемся

reboot

Заходим в консоль Mysql

mysql -u root -p

Выполняем команду

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'svoi_parol_dlya_mysql' WITH GRANT OPTION;

выходим

exit;

Устанавливаем Apache
Для чистого веб сервера он не нужен! Но у меня из предыдущих рецептов стоит для вебинтерфейсов SAMS, Netams — он не пемешает Nginx!

Теперь устанавливаем PHP5
Начиная с версии 5.3.3 php-fpm внедрен в PHP,так что надо обновить PHP(если он уже стоить) или поставить снова но с новыми галочками!
Порты мы на прошлой неделе обновляли после установки, так что у нас точно свежая версия всего!
Если стоит старая версия из ветки 5.3 её надо удалить

cd /usr/ports/lang/php5/

Если стоит старая версия из ветки 5.3 её надо удалить

make deinstall

Настраиваем

make config

Тут выбираем
[X] FPM
Не трогаем апач если нужен
[X] Apache

make clean install

Далее устанавливаем

cd /usr/ports/lang/php5-extensions
make config

должны быть выбраны пункты
[X] MySQL
[X] SOAP
[X] OPENSSL (на всякий)
[X] GD

make install

Сидим над установкой соглашаемся на все что предлагает, если будет ругаться на python 2.5 установить его отдельно из портов и повторить.

Смотрим /usr/local/etc/apache22/httpd.conf
должно стоять

LoadModule php5_module libexec/apache22/libphp5.so

В папке /usr/local/etc/ лежать готовы варианты настроек копируем одну из них в

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Редактируем php.ini
Стоит увеличить размер памяти в некоторых настройках он мал

memory_limit = 128M

Общая рекомендация держать выключенным globals

register_globals = Off

Редактируем php-fpm.conf

vi /usr/local/etc/php-fpm.conf

Меняем

listen = 127.0.0.1:9000

на

listen = /tmp/phpfpm.sock

Меняем

pm = dynamic

на

pm = static

Меняем

pm.max_children = 50

на

pm.max_children = 4

Это число рекомендуют ставить в два раза больше чем процессов Nginx (а оно обычно равно количеству ядер процессора)!
Задаем

php_admin_value[memory_limit] = 128M

Да и кстати тут вот это тоже

listen.owner = www
listen.group = www
listen.mode = 0660

Добавляем

vi /etc/rc.conf

строчку

php_fpm_enable="YES"


Устанавливаем memcached

cd /usr/ports/databases/memcached
make install

Добавляем

vi /etc/rc.conf

строки

memcached_enable="YES"
memcached_flags="-l 127.0.0.1"

Так устанавливаем

cd /usr/ports/databases/pecl-memcache
make install

если ругается на

Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
autoconf: required version 2.68 not found

то перед установкой

cd /usr/ports/devel/autoconf
make install
cd /usr/ports/devel/autoconf-wrapper
make deinstall
make install

Вставляем(если её там нет) в

vi /usr/local/etc/php/extensions.ini

строку

extension=memcache.so

Перезагружаемся

reboot

Устанавливаем Nginx

cd /usr/ports/www/nginx
make install clean

Предлагается на выбор много разных модулей нам ничего особого не понадобиться всё по умолчанию!
Добавляем

vi /etc/rc.conf

строчку

nginx_enable="YES"

Редактируем настройки

vi /usr/local/etc/nginx/nginx.conf

Так как у нас два ядра на процессоре
worker_processes 2;
Имя владелца папки с файлами сайта

user              www;

Приводим к такому виду

user              www;
worker_processes  2;
#error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;
pid        /var/run/nginx.pid;
events {
    worker_connections 2024;
}
http {
    include       /usr/local/etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log off;
    error_log off;
    server_tokens off;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay      on;
    keepalive_timeout 65;
    proxy_buffers 8 512k;
    proxy_buffer_size 256k;
    proxy_intercept_errors on;
    proxy_connect_timeout 130;
    proxy_read_timeout 130;
    proxy_send_timeout 130;
include /usr/local/etc/nginx/www1.conf;
}

Создаем в тойже папке конфиг для сайта

vi /usr/local/etc/nginx/www1.conf

Добавляем

server {
listen   192.168.1.107:45631;
server_name  itcooky.i2p;
root   /usr/local/www/itcooky.i2p;
index  index.php index.htm;
#error_log  /var/log/nginx/ml_error.log;
error_page    502 505 504  /50x.html;
location = /50x.html {
    root   /usr/local/www/itcooky.i2p;
}
error_page  404 403             /404.html;
        location = /404.html {
charset         windows-1251;
            root   /usr/local/www/itcooky.i2p;
}
        fastcgi_intercept_errors off;
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
                expires max;
                add_header Pragma public;
                add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }
location ~ \.(php)$ {
    fastcgi_pass unix:/tmp/phpfpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/www/itcooky.i2p$fastcgi_script_name;
    include fastcgi_params;
}
location ~ /\.ht {
    deny  all;
}
  location ~ \.(html|cgi|pl|shtml) {
         deny all;
  }
}

Файл создан из рекомендованных конфигурация для WordPress c плагином W3C total cash в связке c memcached!
Отдельно прописаны пути к страницам ошибок!

Создаем директорию

mkdir /usr/local/www/itcooky.i2p

Юзера www у нас уже был создан при установке от него будет работать php-fpm и nginx

Перезагружаемся

reboot

Открываем порт для Nginx
Добавляем в rc.firewall

vi /etc/rc.firewall

строку в разделе разращенных поротов

${FwCMD} add allow tcp from any to ${ipout} 45631 in via ${lanin} setup

Перезагружаем ipfw

/etc/rc.d/ipfw restart

Создаем тестовый файл

vi /usr/local/www/itcooky.i2p/phpinfo.php

Вставляем

<?php print_r (phpinfo()); ?>

Заходим по адресу http://192.168.1.107:45631/phpinfo.php и видим информацию о версии php — заработало!

Устанавливаем WordPress

Идем в нашу папку

cd /usr/local/www/itcooky.i2p

Качаем и разархивируем последнею версию, перемешаем её в корень папки сайта!

fetch http://ru.wordpress.org/wordpress-3.2.1-ru_RU.tar.gz
tar xvfz wordpress-3.2.1-ru_RU.tar.gz
mv /usr/local/www/itcooky.i2p/wordpress/* /usr/local/www/itcooky.i2p/
chgrp -R www /usr/local/www/itcooky.i2p/
chown -R www /usr/local/www/itcooky.i2p/
chmod 755 /usr/local/www/itcooky.i2p/wp-content

Создаем базу и пользователя для базы WordPress
Заходим в консоль Mysql

mysql -u root -p

Если вы опять забыли root пароль, как я, то можно его скинуть!

/usr/local/etc/rc.d/mysql-server stop

Создаем файл

vi /root/mysql.reset.sql

со строками

UPDATE mysql.user SET Password=PASSWORD('YOUR-NEW-MYSQL-PASSWORD') WHERE User='root';
FLUSH PRIVILEGES;

Перезапускам

mysqld_safe --init-file=/root/mysql.reset.sql &

Дожидаемся, а можно и не дожидаться когда закончится делаем

killall mysqld
/usr/local/etc/rc.d/mysql-server start

Заходим в консоль Mysql

mysql -u root -p

Выполняем команду

CREATE DATABASE wordpress;
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* to 'wordpress'@'localhost';
exit;

Заходим на

http://192.168.1.107:45631/

и следуем инструкция по установке!
Потом настраиваем WordPress под себя. В разделе плагинов устанавливаем:

W3 Total Cache 

(в его настройках активируем пункты (кроме Minify) где есть в Page Cache Method: Memcached — и у него надо будет отключить preview mode после сохранения новых настроек)

Traffic Counter Widget

тему

BlogoLife


В консоле WordPress в

Параметры

>

Общие

меняем IP адрес на itcooky.i2p адрес! Весь функционал после интеграции с i2p сетью сохранится, единственное перестанет работать Flash загрузчик файлов, но будет работать загрузчик браузера!

Теперь заходим в консоль i2p по нашему адресу http://192.168.1.107:7657/
В

Локальные туннели

создаем новый HTTP туннель (в разделе

Серверные I2P туннели

в низу

Новый серверный туннель:

)
Заполняем первую часть вводим наше имя, адрес как в nginx, ставим галочку авто запускаться!

После запуска можно наблюдать внизу слева наш новый туннель сайт!

Local itcooky.i2p

Идем опять в

Локальные туннели

копируем ссылку на кнопке

Предпросмотр

это наш полный адрес b32 лучше для доступа передавать его!
fpprghfrrwc4sbvnuzmnruk2es5mhhf7gkh3jha4cczwd2rl7sgq.b32.i2p
itcooky.i2p/
Через кокоето незначительное время, сайт начинает открываться по .b32.i2p ссылке!

После того как сайт заработает на все сто — прописываем наш сайт в stats.i2p, там тоже говорят надо подождать 4 дня чтобы у большинства появилась ссылка на новый сайт! Это очень важный момент если имя i2p и код адреса хоста расползутся по сети их уже нельзя буде изменить, адрес хоста так и останется за этим именем — это на доступность не влияет, но вносит путаницу! Вообще имя не важно главное 64 битный ключ адреса хоста который запишется в локальную адресную книгу!

Или вот тут inr.i2p