$ sudo apt-get update
1 |
$ sudo apt-get install apache2 php5 php5-mysql mysql-server-5.0 |
1 2 |
$ wget http://ftp.de.debian.org/debian/pool/main/n/nginx/nginx_0.7.59-1_amd64.deb $ dpkg -i nginx_* |
1 |
$ apt-get install libapache2-mod-rpaf |
1 |
$ vi /etc/apache2/ports.conf |
1 |
Listen *:81 |
1 2 |
$ cd /etc/apache2/sites-available $ sudo cp ./default /etc/apache2/sites-enabled/example.com |
1 |
$ vi /etc/apache2/sites-enabled/example.com |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<VirtualHost *:81> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com <Directory /var/www/example.com> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory〉 ErrorLog /var/log/apache2/error.log LogLevel warn ServerSignature On </VirtualHost> |
Настраиваем gzip сжатие для nginx. Открываем конфиг:
1 |
$ vi /usr/local/etc/nginx/nginx.conf |
Мой конфиг выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
user www-data; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_names_hash_bucket_size 64; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_proxied any; gzip_min_length 1100; gzip_http_version 1.0; gzip_buffers 4 8k; gzip_comp_level 9; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } |
1 |
$ vi /etc/nginx/sites-enabled/example.com |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
server { listen 80; server_name example.com; access_log /var/log/nginx/example.com-nginx.access.log; location / { proxy_pass http://127.0.0.1:81/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 40m; client_body_buffer_size 256k; proxy_connect_timeout 120; proxy_send_timeout 120; proxy_read_timeout 120; proxy_buffer_size 64k; proxy_buffers 4 64k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #Static files location location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|html|flv|mp3)$ { root /var/www/example.com; } } |
Проверяем конфиг nginx:
1 |
$ nginx -t |
Устанавливаем memcached:
1 |
$ apt-get install memcached |
Конфигурация memcached находится по адресу /etc/php5/conf.d/memcache.ini
По началу ничего менять не стоит.
Устанавливаем eAccelerator.
Так же тянем php5-dev, т.к. нам понадобится утилита phpize.
1 2 3 4 5 6 7 8 9 10 |
$ sudo apt-get install php5-dev $ sudo apt-get install make $ sudo cd /tmp/ $ sudo wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 $ sudo tar xvjf eaccelerator-0.9.5.3.tar.bz2 $ sudo cd eaccelerator-0.9.5.3 $ sudo phpize $ sudo ./configure --enable-eaccelerator=shared $ sudo make $ sudo make install |
Создаем папку кеша:
1 2 |
$ sudo mkdir -p /var/cache/eaccelerator $ sudo chmod 0777 /var/cache/eaccelerator |
Редактируем конфиг PHP:
1 |
$ vi /etc/php5/apache2/php.ini |
Добавляем строки в самом верху:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[PHP] ; eAccelerator configuration ; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension ; If you are using a thread safe build of PHP you must use ; zend_extension_ts instead of zend_extension extension = "eaccelerator.so" eaccelerator.shm_size = "16" eaccelerator.cache_dir = "/var/cache/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.shm_prune_period = "0" eaccelerator.shm_only = "0" eaccelerator.compress = "1" eaccelerator.compress_level = "9" eaccelerator.allowed_admin_path = "/var/www/eaccelerator" |
Внимание!
Если у вас достаточно свободной оперативной памяти, то рекомендую включить режим кэширования байт-кода исключительно в оперативной памяти:
1 |
eaccelerator.shm_only = "1" |
А так же увеличить доступную память для кеша:
1 |
eaccelerator.shm_size = "128" |
Так же в пакете аксселлератора есть файл control.php, которым вы можете управлять кешем и анализировать ошибки, что очень удобно. Класть этот файл нужно обязательно по пути
1 |
eaccelerator.allowed_admin_path = "/var/www/eaccelerator" |
1 2 3 4 5 6 7 8 |
$ wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz $ tar –xzvf sphinx-0.9.8.tar.gz $ cd sphinx-0.9.8 $ ./configure $ make $ make install $ mkdir -p /var/db/sphinx/log $ chmod -R 777 /var/db/ |
1 |
$ vi /usr/local/etc/sphinx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
## Конфигурационный файл Sphinx-а для индексации Живой улицы ####################### # # Описываем индексы # ####################### # Источник-родитель для всех остальных источников. Здесь указываются параметры доступа # к базе данных сайта source lsParentSource { type = mysql sql_host = your_database_host sql_user = your_database_login sql_pass = your_database_password sql_db = your_database_name sql_port = 3306 # Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы # операции с БД происходили не через TCP/IP стек сервера) sql_sock = /var/run/mysqld/mysqld.sock mysql_connect_flags = 32 # 32- включение сжатие при обмене данными с БД # Включам нужную кодировку соединения и выключаем кеш запросов sql_query_pre = SET NAMES utf8 sql_query_pre = SET SESSION query_cache_type=OFF } # Источник топиков source topicsSource : lsParentSource { # запрос на получения данных топиков sql_query = \ SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \ tc.topic_text, t_fast.topic_publish \ FROM prefix_topic as t_fast, prefix_topic_content AS tc \ WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end # запрос для дробления получения топиков на неколько итераций sql_query_range = SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic # сколько получать объектов за итерацию sql_range_step = 1000 # Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске sql_attr_bool = topic_publish # Атрибут даты добавления, типа "время" sql_attr_timestamp = topic_date_add # мульти-аттрибут "теги топика" sql_attr_multi = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag sql_ranged_throttle = 0 } # Источник комментариев source commentsSource : lsParentSource { sql_query = \ SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \ FROM prefix_topic_comment \ WHERE comment_id>=$start AND comment_id<=$end sql_query_range = SELECT MIN(comment_id),MAX(comment_id) FROM prefix_topic_comment sql_range_step = 5000 sql_attr_bool = comment_delete sql_attr_timestamp = comment_date } ####################### # # Описываем индексы # ####################### index topicsIndex { # Источник, который будет хранить данный индекса source = topicsSource path = /usr/local/SphinxIndex/topicsSource # Тип хранения аттрибутов docinfo = extern mlock = 0 # Используемые морфологические движки morphology = stem_enru, soundex, metaphone # Кодировака данных из источника charset_type = utf-8 # Из данных источника HTML-код нужно вырезать html_strip = 1 } # Индекс комментариев index commentsIndex { source = commentsSource path = /usr/local/SphinxIndex/commentsSource docinfo = extern mlock = 0 morphology = stem_enru, soundex, metaphone charset_type = utf-8 } ####################### # # Настройки индексатора # ####################### indexer { # Лимит памяти, который может использавать демон-индексатор mem_limit = 32M } ####################### # # Настройка демона-поисковика # ####################### searchd { # Адрес, на котором будет прослушиваться порт address = 127.0.0.1 # Ну и собственно номер порта демона searchd port = 3312 # Лог-файл демона log = /var/log/sphinx/searchd.log # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет query_log = /var/log/sphinx/query.log # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта read_timeout = 5 # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения max_children = 30 # Файл, в который сохраняется PID-процесса при запуске pid_file = /var/log/sphinx/searchd.pid } |
Не забываем прописать настройки MySQL.
Далее создаем папку для базы индекса и устанавливаем права на запись:
1 2 |
$ mkdir -p /usr/local/SphinxIndex $ chmod -R 777 /usr/local/SphinxIndex/ |
Запускаем индексацию:
1 |
$ /usr/local/bin/indexer --all |
Запускаем демон:
1 |
$ /usr/local/bin/searchd |
Далее останется лишь прописать сфинкс в крон:
1 |
$ vi /etc/crontab |
Добавляем:
1 |
0 */3 * * * /usr/local/bin/indexer --all --rotate |
Это значит, что мы будем запускать индексацию каждые 3 часа.
Перезапускаем сервисы:
1 2 3 |
$ service apache2 restart $ service nginx restart $ service memcached restart |