Итак сегодня я раскажу вам как поднять Веб сервер на маломощном компьютере или VDS / VPS
Мной был взят сервер VDS в конфигурации CPU 480 MHz, RAM 256 Mb, HDD 8 Gb (Ubuntu Server 9.04).
Делаем начальные действия необходимые нам для дальнейшей работы:
выставим пароль root и зайдем под ним
sudo passwd root
su
обновим информацию о пакетах, и обновим систему
aptitude update
aptitude upgrade
доставим wget если ставились в минималке
aptitude install wget make
поставим webmin дабы было удобнее приглядывать за сервером (после установки он доступен по адресу https://ваш адрес:10000)
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.490_all.deb (версию подставляйте свежую на момент своих действий)
dpkg -i webmin_1.490_all.deb
aptitude -f install
Поставим SSH если он ещё не установлен
aptitude install ssh openssh-server
Доставим g++ он пригодится в дальнейшем:
aptitude install g++
С подготовительной частью закончили, ставим веб сервер.
Установка apache2 + phph5 + mysql + phpmyadmin одной строкой:
aptitude install mysql-server mysql-client libmysqlclient15-dev apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl phpmyadmin
По ходу установки вводим пароль пользователя сервера Mysql (root):
New password for the MySQL «root» user: < — yourrootsqlpassword ВАШ ПАРОЛЬ
Repeat password for the MySQL «root» user: < — yourrootsqlpassword ЕЩЕ РАЗ ВАШ ПАРОЛЬ
Разрешаем модули апача:
a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include
правим конфиг сайта по умолчанию, и далее от него и отталкиваемся при создании виртуалхостов:
nano /etc/apache2/sites-available/default (все стираем и делаем так, ну и всетки думаем что делаем, ибо под вашу задачу могут быть отличия)
(порт 81 это не ошибка, так и должно быть, ибо слушать 80й порт у нас будет nginx, и в апачь передавать только запросы на динамику(php и др)):
<VirtualHost *:81>
ServerAdmin webmaster@твой_сайт
DocumentRoot /var/www/твой_сайт
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Делаем ссылку на наш файл в папке /etc/apache2/sites-enabled/
правим в двух местах nano /etc/apache2/apache2.conf
MaxClients 20
Ставим nginx + apache2-mod-rpaf
wget http://ftp.de.debian.org/debian/pool/main/n/nginx/nginx_0.7.62-1_i386.deb
dpkg -i nginx_*
aptitude install libapache2-mod-rpaf
nano /etc/apache2/ports.conf
NameVirtualHost *:81
Listen 81
Далее настраиваем виртуальный хост apache.
Копируем дефолтный конфиг: (и правим его под свой домен)
cd /etc/apache2/sites-available
cp ./default /etc/apache2/sites-enabled/example.com
Настраиваем gzip сжатие для nginx. И сам nginx (worker_processes 1; ставим равному количеству ядер в процессоре). Открываем конфиг:
nano /usr/local/etc/nginx/nginx.conf
все стираем и делаем так:
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/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Для нашего виртуалхоста создаем новый конфиг:
nano /etc/nginx/sites-enabled/example.com
server {
listen 80;
server_name example.com;
access_log /var/log/nginx.access_log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /var/www/test.gigma.ru/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:81/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}
С такими настройками nginx у нас отдаёт всю статику (картинки, видиое, музыку, css, ява скрипты и др.), а апачь трудиться только над выполнением php.
Устанавливаем memcached:
aptitude install memcached
Устанавливаем eAccelerator.
Так же тянем php5-dev, т.к. нам понадобится утилита phpize.
aptitude install php5-dev
aptitude install make
cd /tmp/
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar xvjf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
phpize
./configure --enable-eaccelerator=shared
make
make install
Создаем папку кеша:
mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator
Редактируем конфиг PHP:
nano /etc/php5/apache2/php.ini
Добавляем строки в самом верху:
[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"
Перезапускаем сервисы:
service apache2 restart
service nginx restart
service memcached restart
Вуаля у нас супершустрый сервер который кушает 90мб оперативной памяти.
Для тех кому нужен sphinx (free open-source SQL full-text search engine)
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/
mkdir -p /usr/local/SphinxIndex
chmod -R 777 /usr/local/SphinxIndex/
и правим конфиг под свои нужды:
nano /usr/local/etc/sphinx.conf
Вроде ничего незабыл…
Комментарии (76)
RSS свернуть / развернутьДля меня как библия :)
aisico
ASovetov
Может php5-pear?
aisico
ASovetov
aisico
а вобще всё зависит от вашего конкретного случая, я не телепат к сожалению.
ASovetov
aisico
адрес IP сервера вашего
и текст — прошу переустановить систему на моём вдс.
как сделают отпишуться, будет у вас чистое все. и можно приступать.
ну понятно что если на сервере что полезное есть то надо это забрать =)
ASovetov
сохраняю в заметки на будущее:)
robocoffee
antweb
Нарпимер чтоб добавить домен — мой_супер_домен.ру:
ну и создать папочку /var/www/мой_супер_домен.ру
ASovetov
ASovetov
antweb
поддомен создаёте там же где и домен.
сервер просто смотрит с какого урла вы пришли и посылает вас в такю папку…
а регистрация доменов, управление NSзаписями и тд это отдельная тема.
ASovetov
Было бы классно, если бы написали инструкцию как домены прикручивать и как устанавливать соответствующее ПО
Спасибо большое!
antweb
Пример добавления поддоменов ничем не отличаеться от добавления доменов, если говорить о апаче и nginx.
А вот создать поддомен, отправить его к вам на сервер (связать с айпи сервера) это дело либо регистратора если он позволяет вешать домен на его NS. либо дело следующей статьй про настройку NS на убунте =)
ASovetov
Файлы конфигурационные апача, я добавлял в папку /etc/apache2/sites-enabled/
потому что по дефолту в конфигах апача у меня был прописана эта дирректория для инклуда.
Настроил работу на несколько доменов. Конф для nginx выглядит так же как у тебя, а вот для апача есть мелочи, из-за которых всё не работало.
После
ServerAdmin webmaster@мой_супер_домен.ру
добавить
ServerName мой_супер_домен.ру
а в этой директиве не забыть закрывающий слеш, иначе не заработало:
DocumentRoot /var/www/мой_супер_домен.ру/
moskanz
я чтото сделал сильно не так?
moskanz
admin
moskanz
так что вполне нормально у тебя все. =)
admin
nemish
Не удалось поставить выдала ошибку
Далее:
После всех монипуляций сервер откликавшийся на ip адрес, тоесть грузился apache, теперь не отвечает, а отвечает на ip:81 — но там html страница, на php может быть будет нормально работать?
Вот в этой строке нужно наверное свой адрес сайта?
Тут надо
antweb
antweb
antweb
tar –xzvf sphinx-0.9.8.1.tar.gz (и другие пакеты могут отличаться бо версии постоянно меняються)
root /var/www/test.gigma.ru/; — это только пример. канешно надо писать свой домен.
теперь не отвечает, а отвечает на ip:81 — на 81 порту отвечает апачь. на 80 висит nginx если не отвечает просто по домену знаит вы гдето сделали чтото не так. перечитывайте, пересматривайте конфиги. думайте где строки указаны в качестве примере (аля мой_сайт, test.gigma.ru, example.com)
ASovetov
когда можно примерно ожидать?
antweb
aisico
ASovetov
dpkg: error processing nginx_0.7.62-3_i386.deb (--install): package architecture (i386) does not match system (amd64)
Errors were encountered while processing:
nginx_0.7.62-3_i386.deb
Извините за глупый вопрос, но я еще новичек:)
omneon
вы ставите пакет под 32битную систему, а у вас 64битная стоит. соответственно надо брать пакет nginx_0.7.62-3_amd64.deb (примерно так называцо должно)
ASovetov
dpkg: dependency problems prevent configuration of nginx:
nginx depends on libpcre3 (>= 7.7); however:
Version of libpcre3 on system is 7.6-2.1ubuntu1.
dpkg: error processing nginx (--install):
dependency problems — leaving unconfigured
Errors were encountered while processing:
nginx
Какую версию мне в итоге ставить?:/
omneon
omneon
omneon
ASovetov
На более ранних этапах phpmyadmin работает вполне корректно! Может что-то в его конфигах прописать? Судя по всему, его пытается обработать нгинкс.
omneon
На более ранних этапах phpmyadmin работает вполне корректно!
Если вернуть 80е порты и тормознуть нгинкс, то phpmyadmin начинает нормально работать… Может что-то в его конфигах прописать? Судя по всему, его пытается обработать нгинкс.
omneon
ASovetov
PSинструкцию читал ибо сам забыл уже как половину настраивал…
ASovetov
nginx/0.7.63
yuri25
nginx/0.7.63 Если заходить :81 и :81/phpmyadmin то все работает нормально. Подскажите в чем тут проблема.
yuri25
ASovetov
Время свободное — сб, вс и с 21:00 до «пока не усну» в рабочие дни.
ASovetov
omneon
omneon
omneon
Просто прально держать конфиги в сайтс-эвейлабл, и делать ссылки на них уже в сайтс-энейблед.
на папку с сайтом вполне подойдут права 755 (внутри уже те права которые нужны вашим скриптам)
ASovetov
kon
Нжайн слушает то только 80й порт. Заставь аякс стучать на 81 прямо в апач. или я тебя нетак понял…
Если нужен проброс чегото средствами Нжайна сразу в апач то просто удали тип данных из списка в конфиге нжайна (там где jpg xml и прочее)
ASovetov
при отправке ajax post-запроса стал приходить ответ «502 Bad Gateway»,
в error.log nginx пишет:
в чем может быть причина?
intlex
kosm
ASovetov
kosm
Может у вас отдача упирается в канал или в какие ещё узкие места не связанные с сервером.
Ну и естественно если на сайте вобще нету статики то и толка ставить связку в таком формате нету =) тогда уже надо смотреть в сторону Nginx + php-fpm + mysql
ASovetov
ksevelyar
ksevelyar
ASovetov
ksevelyar
ASovetov
nginx вдруг стал выдавать bad gateway, а через порт на котором был настроен апаче все отлично работает.
Rino
Если работало там но неработает тут и на сервере ничего не менялось, то проблема уже у датацентра (или особенность).
Линукс сам по себе конфиги не правит =)
ASovetov
весь вечер голову ломаю… поставил все как тут описано
положил две папочки в каждой некий php-скрипт — захожу по адресу — папочки показывает а при переходе внутрь — «Вы собираетесь открыть файл, являющийся application/x-httpd-php» при этом phpmyadmin работает… как я понимаю в виртуал хостс чтото не так?
psyxodolby
смотрите конфиги
ASovetov
antivirdog
antivirdog
antivirdog
romartyn
У меня на тестовой машине с 10.04 все встало чудесно. А вот на сервере с 8.04 траблы. Ни в какую не хочет обрабатываться php файл. Он тупо загружается и все. И вставлял пути до модуля, и менял пути до папок. Серваку все равно. В чем может быть дело?
phaeton
Теперь встал вопрос о добавлении субдоменна и тут засел.
Вот конфиги (только субдомена):
/etc/apache2/sites-available/durisol.my-domen.ru
<VirtualHost *:81>
ServerName durisol.my-domen.ru
ServerAlias
ServerAdmin webmaster@my-domen.ru
DocumentRoot /var/www/durisol.my-domen.ru/
<Directory />
Options FollowSymLinks
AllowOverride All
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/durisol.my-domen.ru-error.log
LogLevel warn
CustomLog /var/log/apache2/durisol.my-domen.ru-access.log «combined»
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
================================================================
/etc/nginx/sites-available/durisol.my-domen.ru
server {
listen 80;
server_name durisol.my-domen.ru;
access_log /var/log/nginx/durisol_nginx.access_log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /var/www/durisol.my-domen.ru/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass :81/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}
==============================================================
Основной сайт работает (за исключением того, когда набираешь ) с www. Ну это я позже буду смотреть. А по субдомену, ну вроде все верно сделал… что не так?
soldat
Теперь встал вопрос о добавлении субдоменна и тут засел.
Вот конфиги (только субдомена):
/etc/apache2/sites-available/durisol.my-domen.ru
<VirtualHost *:81>
ServerName durisol.my-domen.ru
ServerAlias
ServerAdmin webmaster@my-domen.ru
DocumentRoot /var/www/durisol.my-domen.ru/
<Directory />
Options FollowSymLinks
AllowOverride All
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/durisol.my-domen.ru-error.log
LogLevel warn
CustomLog /var/log/apache2/durisol.my-domen.ru-access.log «combined»
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
================================================================
/etc/nginx/sites-available/durisol.my-domen.ru
server {
listen 80;
server_name durisol.my-domen.ru;
access_log /var/log/nginx/durisol_nginx.access_log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /var/www/durisol.my-domen.ru/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass :81/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}
==============================================================
Основной сайт работает (за исключением того, когда набираешь ) с www. Ну это я позже буду смотреть. А по субдомену, ну вроде все верно сделал… что не так?
Да, может кому пригодиться, я столкнулся при установке:
Если при установке nginx говорит:
dpkg -i nginx_0.8.53-2_i386.deb
(Чтение базы данных… на данный момент установлено 73548 файлов и каталогов.)
Подготовка к замене пакета nginx 0.8.53-2 (используется файл nginx_0.8.53-2_i386.deb)…
Распаковывается замена для пакета nginx…
dpkg: зависимости пакетов не позволяют настроить пакет nginx:
nginx зависит от libgeoip1 ( >= 1.4.7~beta6+dfsg), однако:
Версия libgeoip1 в системе 1.4.7~beta5+dfsg-1.
dpkg: не удалось обработать параметр nginx (--install):
проблемы зависимостей — оставляем не настроенным
Обрабатываются триггеры для ufw…
Обрабатываются триггеры для ureadahead…
Обрабатываются триггеры для man-db…
При обработке следующих пакетов произошли ошибки:
nginx
то делаем так, качаем новую версию:
wget ~beta6+dfsg-1_i386.deb
ставим:
dpkg -i libgeoip1
далее ставим nginx:
dpkg —i nginx_*
soldat
По этой статье всё встало как родное с небольшими проблемками я справился с помощью яндекса ;) А именно:
1. Nginx не хотел скачиваться wget'ом (выдавал ошибку 404) решил проблему так:
sudo apt-get install nginx
2. Так и не разобрался как толком копировать тексты конфигов, я обычно редактирую файлы mcedit'ом, вставить из буфера можно нажав «SHIFT+ПРАВАЯ КНОПКА МЫШИ», но почему-то текст при этом
Вставляется
Какой-то
Лесенкой
Пришлось создавать конфиги на своём компьютере с помощью Notepad++ (обожаю эту программу), заливать на свой FTP, потом копировать на сервер так:
cd /tmp
wget
sudo rm /etc/nginx/nginx.conf
sudo cp ./nginx.conf /etc/nginx/
немного геморно, но зато надёжно, к тому же конфигов не много.
3. eAccelerator выдавал ошибку (я слабо разбираюсь в программировании, но помоему он говорил что какой-то функции не хватает параметров), решил так:
вместо wget
я скачал более новую версию:
wget
Надеюсь мои замечания будут кому нибудь полезны, всё вышеперечисленное проделывал на VDS от Amazon Web Servises, версия Линуха:
root@ip-10-195-223-223:/etc/nginx# uname -a
Linux ip-10-195-223-223 2.6.32-309-ec2 #18-Ubuntu SMP Mon Oct 18 21:00:20 UTC 2010 i686 GNU/Linux
Автору статьи ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО, всё действительно очень грамотно описано и прекрасно работает ))))
avsv
Aurochs
Спасибо вам! Может мне написать статью как осуществить на сервере много доменов, и поддоменов. Я сразу все понял и все получилось! Спасибо
max92
Вроде как и простой шаг, но как это сделать?
bizi
Отличное руководство. Просто нет слов. Спасибо уважаемый))
nemish
256 MB total, 162.26 MB used
Сказки у вас тут расписаны.
legend717
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.