Debian.pro

Блог для пользователей и администраторов Debian


Debian, LAMP (linux+apache+php+mysql). Very fast way. Часть 4. Размещаем свой первый сайт.

Данная статья является статьей цикла «Установка 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»). А пока оно вам ни к чему.


Комментарии (25):

  1. У меня постоянно выдает ошибку No such file or directory для папки сайта. Хотя эта папка существует. Пытался прописывать полные пути (вместе с /home/…) — не помогло.

  2. chmod там не 770 случаем?

    ну и error.log покажите.

  3. Было 755, ставил и 770 — не помогло.
    Вот логи: http://cosydale.com/wp-content/uploads/2010/09/logs.zip
    Кстати, не понял, откуда запись про platezhka появилась — это не я баловался…

  4. в Jabber вечером постучитесь, помогу (inkvizitor68sl@zsh.su)

  5. pon :

    ошибка начиная со строки
    user@Debian:~$ cd /home/user/site1 && chmod -R 770 upload
    и ниже…
    создавалась папка для файлов сайта с именем site1.ru , а не site1

  6. Ильдус :

    Доброго времени суток.
    Вроде всё настроил, один сайт работает (тестовый html файл), на втором ругается ошибкой 404 (php + mysql, хотя и тестовой html страницей не заработало). Подскажите плиз, где капать?
    Заранее благодарен.

  7. Влад :

    Конфиги сайтов показывайте.

  8. NurDus :

    # сайт НЕ работает
    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;
    }
    }

  9. NurDus :

    # сайт работает
    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;
    }
    }

  10. NurDus :

    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

  11. Смысла разные proxy_pass на разные порты делать нет.

    Вхосты у вас в апаче правильные порты слушают? в /etc/apache2/ports.conf они прописаны? apache, nginx рестартили?
    в /var/www/sites/dontwork.com файлы есть?

  12. NurDus :

    proxy_pass оба поставил на 8181.
    Вхосты прописаны оба прописаны как VirtualHost *:8181
    В ports.conf действительно не были прописаны. Рестартовал, файлы есть.
    Немного посидев заработал второй (скорей всего из-за порта и не работал), только он сейчас смотрит в туже папку что и первый. Подскажите плиз как прописать правильно в вхостах.

    П.С. Удалите плиз мой «дубль» поста, от имени Ильдус (чтобы не захламлять)

  13. Проверяйте server_name и у апача, и у nginx. root/DocumentRoot тоже, соответственно.
    И проверьте, если в апач напрямую сходить — они из разные каталогов отдаются или из одного?

  14. NurDus :

    Совпадают, если напрямую заходить, из одного и того же отдаются.

  15. Проверяйте в апаче внимательнее serverName, ServerAlias и DocumentRoot всё же.

  16. NurDus :

    Извиняюсь за глупость, смотреть нужно /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_

  17. Хым… Ну у меня остаётся только идея о том, что у вас там лежит один и тот же файл..

  18. NurDus :

    я уже сам засомневался, но:
    vim /var/www/sites/nurdus.com/index.html
    12345

  19. NurDus :

    я уже сам засомневался, но: (прошу удалить предыдущее сообщение)
    vim /var/www/sites/nurdus.com/index.html
    _html_
    _body_
    12345
    _/body_
    _/html_

  20. Вроде всё верно. Что-то у меня идей навскидку больше нет.

    Посмотреть внутрь пустите?

  21. NurDus :

    Да, смогу.
    Создам временный клон сервера, и могу скинуть вам на почту (или куда вам лучше).

  22. Влад :

    rsync -avzP —numeric-ids / /chroot/ —exclude=/proc/* —exclude=/chroot/* —exclude=/dev/* —exclude=/sys/*
    потом
    tar -czvf /chroot.tar.gz /chroot
    Архив уже удобным вам способом мне отдайте. Всё не имеющее отношения к делу можете удалить из /chroot перед упаковкой (ну или —exclude на это написать).

  23. Влад :

    Почта на https://vlad.pro/contacts , если что

  24. А на раздвоение личности внимания не обращайте, да — логиниться лень было, а пришлось из-за ссылки в комментарии)

Написать комментарий