Данная статья является статьей цикла «Установка LAMP на Debian/Ubuntu — very fast way»
Сразу оговорюсь, что идеология всего последующего мануала рассчитана на то, что вы — единственный администратор сервера. Нет, конечно же, вы можете использовать такую конфигурацию с друзьями. Но не пытайтесь использовать её совместно с теми, кому вы не доверяете. Например, клиентами.
Идеология безопасности в данном случае построена на стандартных настройках вашего дистрибутива, которые могут не кореллироваться с идеологией криворуких PHP программистов.
Хотя, за пару лет использования такой схемы я не находил никаких проблем. Но в теории, при выполнении «тыщиусловий» они возникнуть могут.
В обмен на это мы получаем максимально беспроблемное решение в плане «а вот эта CMS тут работать будет или нет?». Ну то есть фактически, я не встречал ни единой проблемы с тем, чтобы что-то не заработало. Под эту конфигурацию пишут почти все PHPники (кроме PHPшников с большой и светлой кармой, пишуших под nginx+php_fpm).
Начнёмс. По условиям задачи — user — это вы. Сайт разместим в каталоге /home/user/site1.ru, где /home/user — домашний каталог пользователя. Сайт, как вы догадались, будет зваться site1.ru. Почему не /var/www ? Просто мне так удобнее. Да и вам будет проще.
Сайт использует CMS для php+mysql (joomla, drupal, wordpress, как примеры).
Вы уже создали все необходимые DNS записи и по «ping site1.ru» отзывается именно ваш сервер. А так же — по «ping www.site1.ru». Аналогично — для всех доменов, которые мы желаем сделать алиасами для нашего сайта.
Алиас — это дополнительный домен для сайта. Наш сайт будет открываться по site1.ru и по www.site1.ru
Так же, обращайте внимание на то, от имени какого пользователя я выполняю команды (user@ или root@)
Приступим. Создадим нужный нам каталог:
user@Debian:~$ mkdir -p /home/user/site1.ru
Теперь разместим в нём файлы нашего сайта любым удобным нам способом. Я обожаю делать вот так:
user@Debian:~$ cd && wget http://ftp.drupal.org/files/projects/drupal-6.17.tar.gz && tar -xfv drupal-6.17.tar.gz && rm -r site1.ru && mv drupal-6.17 site1.ru
Вы же — уже закачали файлы по FTP в site1.ru, пока я вводил эту команду, не так ли?
Теперь очень важная штука.
user@Debian:~$ cd && chown -R user:www-data site1.ru && chmod -R 750 site1.ru
Что мы сейчас сделали. Мы разрешили себе (user) право на чтение и запись в любые файлы каталога site1.ru, разрешили процессам Apache (веб-сервер) доступ на чтение ко всем файлам данного каталога и запретили чтение каталога всем остальным. Для чего? Чтобы ваш сосед по серверу не смог просмотреть файлы вашего сайта. А там обычно в открытом виде хранится пароль доступа к mysql.
Теперь нам следует внимательно ознакомиться с мануалом к CMSке и узнать, куда необходимо разрешить доступ на запись веб-серверу. Ну… условимся, что у CMSки есть каталог upload, доступ на запись к которому нужен всегда, и файл config.php, доступ к которому нужен на время установки. Выдадим нужные права:
user@Debian:~$ cd /home/user/site1.ru && chmod -R 770 upload
user@Debian:~$ cd /home/user/site1.ru && chmod 770 config.php
Всё ещё соблюдаем принцип «доступ к этим файлам должен иметь только владелец и веб-сервер». Третью цифру оставляем нулём, если CMS не требует обратного (есть CMSки, которые проверяют не возможность записи в каталог/файл а просто права на файл. Плохие CMSки)
Теперь создадим базу Mysql — http://debian.pro/99 — я тут уже всё подробно по этой теме описал.
А теперь, собственно, мы расскажем Апачу, что мы желаем разместить сайт.
Создадим и отредактируем файлик, который будет содержать информацию о нашем VirtualHost:
root@Debian:~$ nano /etc/apache2/sites-enabled/site1.ru
У вас откроется страшное окошко, в котором можно печатать.
Вам туда нужно вставить следующий текст (вставка в терминале, напоминаю, обычно, работает по ctrl+shift+v или по shift+insert):
<VirtualHost *:80>
DocumentRoot /home/user/site1.ru
ServerName site1.ru
ServerAlias www.site.ru
ServerAdmin webmaster@site1.ru
</VirtualHost>
После этого жмём Ctrl+X, отвечаем на вопрос сохранять или нет Y и релоадим Апач:
root@Debian:~$ apache2ctl reload
или
root@Debian:~$ /etc/init.d/apache2 restart
Если вы всё сделали правильно и уже правильно работают ваши DNS серверы — по адресу http://site1.ru должен открыться ваш сайт (или инсталлятор CMSки)… ну а дальше вы знаете)
Ну и не забудьте убрать доступ на запись к тем файлам, запись в которые необходима только во время установки (config.php в нашем случае):
user@Debian:~$ cd /home/user/site1.ru && chmod 750 config.php
Вообще про виртуалхосты почитать можно тут — httpd.apache.org/docs/2.1/mod/core.html#virtualhost
Там много интересной информации, которая вам понадобится, если вы будете заниматься серверами с кучей сайтов (здесь много размышлений, в основном матом, слышится «нищеброды, не могут купить ispmanager»). А пока оно вам ни к чему.
У меня постоянно выдает ошибку No such file or directory для папки сайта. Хотя эта папка существует. Пытался прописывать полные пути (вместе с /home/…) — не помогло.
chmod там не 770 случаем?
ну и error.log покажите.
Было 755, ставил и 770 — не помогло.
Вот логи: http://cosydale.com/wp-content/uploads/2010/09/logs.zip
Кстати, не понял, откуда запись про platezhka появилась — это не я баловался…
в Jabber вечером постучитесь, помогу (inkvizitor68sl@zsh.su)
ошибка начиная со строки
user@Debian:~$ cd /home/user/site1 && chmod -R 770 upload
и ниже…
создавалась папка для файлов сайта с именем site1.ru , а не site1
Доброго времени суток.
Вроде всё настроил, один сайт работает (тестовый html файл), на втором ругается ошибкой 404 (php + mysql, хотя и тестовой html страницей не заработало). Подскажите плиз, где капать?
Заранее благодарен.
Конфиги сайтов показывайте.
# сайт НЕ работает
root@hs-php:~# vim /etc/nginx/sites-enabled/dontwork.com
server {
listen 80;
server_name dontwork.com http://www.dontwork.com test.dontwork.com *.dontwork.com;
root /var/www/sites/dontwork.com;
server_name_in_redirect off;
index index.php index.html index.htm;
access_log /var/www/logs/dontwork.com/access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8182;
}
location ~*^.+\.(jpg|jpeg|gif|png|rar|txt|tar|wav|bz2|exe|pdf|doc|xls|ppt|bmp|rtf|js|ico|css|zip|tgz|gz)$ {
root /var/www/sites/dontwork.com;
expires 30d;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
# сайт работает
root@hs-php:~# vim /etc/nginx/sites-enabled/worksite.ru
server {
listen 80;
server_name worksite.ru http://www.worksite.ru test.worksite.ru;
root /var/www/sites/worksite.ru;
server_name_in_redirect off;
index index.php index.html index.htm;
access_log /var/www/logs/worksite.ru/access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8181;
}
location ~*^.+\.(jpg|jpeg|gif|png|rar|txt|tar|wav|bz2|exe|pdf|doc|xls|ppt|bmp|rtf|js|ico|css|zip|tgz|gz)$ {
root /var/www/sites/worksite.ru;
expires 30d;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
root@hs-php:~# vim /etc/apache2/apache2.conf
DocumentRoot /var/www/sites/worksite.ru
ServerName worksite.ru
ServerAlias http://www.worksite.ru
ServerAlias test.worksite.ru
AddDefaultCharset utf-8
ServerAdmin info@dontwork.com
DocumentRoot /var/www/sites/dontwork.com
ServerName dontwork.com
ServerAlias http://www.dontwork.com
ServerAlias test.dontwork.com
AddDefaultCharset utf-8
ServerAdmin info@dontwork.com
Смысла разные proxy_pass на разные порты делать нет.
Вхосты у вас в апаче правильные порты слушают? в /etc/apache2/ports.conf они прописаны? apache, nginx рестартили?
в /var/www/sites/dontwork.com файлы есть?
proxy_pass оба поставил на 8181.
Вхосты прописаны оба прописаны как VirtualHost *:8181
В ports.conf действительно не были прописаны. Рестартовал, файлы есть.
Немного посидев заработал второй (скорей всего из-за порта и не работал), только он сейчас смотрит в туже папку что и первый. Подскажите плиз как прописать правильно в вхостах.
П.С. Удалите плиз мой «дубль» поста, от имени Ильдус (чтобы не захламлять)
Проверяйте server_name и у апача, и у nginx. root/DocumentRoot тоже, соответственно.
И проверьте, если в апач напрямую сходить — они из разные каталогов отдаются или из одного?
Совпадают, если напрямую заходить, из одного и того же отдаются.
Проверяйте в апаче внимательнее serverName, ServerAlias и DocumentRoot всё же.
Извиняюсь за глупость, смотреть нужно /etc/apache2/apache2.conf ?
Если да, то там следующие значения (вместо www указал w-w-w, чтобы корректно отобразить):
_VirtualHost *:8181_
DocumentRoot /var/www/sites/bm16.ru
ServerName bm16.ru
ServerAlias w-w-w.bm16.ru
ServerAlias test.bm16.ru
AddDefaultCharset utf-8
ServerAdmin info@nurdus.com
_/VirtualHost_
_VirtualHost *:8181_
DocumentRoot /var/www/sites/nurdus.com
ServerName nurdus.com
ServerAlias w-w-w.nurdus.com
ServerAlias test.nurdus.com
AddDefaultCharset utf-8
ServerAdmin info@nurdus.com
_/VirtualHost_
Хым… Ну у меня остаётся только идея о том, что у вас там лежит один и тот же файл..
я уже сам засомневался, но:
vim /var/www/sites/nurdus.com/index.html
12345
я уже сам засомневался, но: (прошу удалить предыдущее сообщение)
vim /var/www/sites/nurdus.com/index.html
_html_
_body_
12345
_/body_
_/html_
Вроде всё верно. Что-то у меня идей навскидку больше нет.
Посмотреть внутрь пустите?
Да, смогу.
Создам временный клон сервера, и могу скинуть вам на почту (или куда вам лучше).
rsync -avzP —numeric-ids / /chroot/ —exclude=/proc/* —exclude=/chroot/* —exclude=/dev/* —exclude=/sys/*
потом
tar -czvf /chroot.tar.gz /chroot
Архив уже удобным вам способом мне отдайте. Всё не имеющее отношения к делу можете удалить из /chroot перед упаковкой (ну или —exclude на это написать).
Почта на https://vlad.pro/contacts , если что
А на раздвоение личности внимания не обращайте, да — логиниться лень было, а пришлось из-за ссылки в комментарии)