11 Июнь 2007 г.

Настройка Apache2 + SSL + PHP5 + MySQL5 в Ubuntu Feisty

Недавно имел удовольствие настраивать LAMP сервер на убунту. Так как найти централизированного мануала(да и еще и на русском) мне не удалось, решил написать эту заметку.
Итак присутпим.
Установка всего необходимого для LAMP сервера:

sudo apt-get update
sudo apt-get install apache2 php5 php5-mysql mysql-server-5.0

По необходимости доставляются другие php модули типа php5-gd, php5-imagick, php5-curl и другие.

Конфиг apache2 в убунту организован интересным образом. Вот листинг /etc/apache2/ :

apache2.conf
conf.d/
envvars
httpd.conf
mods-available/
mods-enabled/
ports.conf
sites-available/
sites-enabled/

В apache2.conf - основная конфигурация веб сервера.
httpd.conf - пустой, оставлен для совместимости.
mods-available/ - каталог содержащий подключаемые конфигурационные файлы апача, которые активируют тот или иной его модуль.
sites-available/ - каталог содержащий подключаемые конфигурационные файлы апача, которые активируют тот или иной виртуал хост.
Чтобы активировать модуль или виртуал хост созданы утилиты a2enmod и a2ensite.
Пример использования:

ulmen@chtulhu:~$ sudo a2enmod php5
Module php5 installed; run /etc/init.d/apache2 force-reload to enable.


По сути a2enmod, a2ensite, a2dismod и a2dissite создают или удаляют символический линк конфига из sites-available/ в sites-enabled/ (mods- в случае с модулями).

Добавление виртула хоста:
1. Скопировать /etc/apache2/sites-available/default в /etc/apache2/sites-available/example.com

ulmen@chtulhu:~$ cd /etc/apache2/sites-available
ulmen@chtulhu:~$ sudo cp ./default ./example.com


2. Отредактировать example.com

<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
ServerAdmin webmaster@example.com

DocumentRoot /var/httpdocs/example.com
<Directory /var/httpdocs/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>



3. Создаем каталог для Document Root:


ulmen@chtulhu:~$ mkdir -p /var/httpdocs/example.com


Настройка SSL:
1. Создание сертификата:

make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

(актуально для Feisty, в более старых релизах нужно выполнить apache2-ssl-certificate)
2. Добавить порт 443 в /etc/apache2/ports.conf

Listen 80
Listen 443

3. Скопировать /etc/apache2/sites-available/default в /etc/apache2/sites-available/ssl, отредактировать default таким образом:

NameVirtualHost *:80
<VirtualHost *:80>
...
</VirtualHost>

также отредактировать /etc/apache2/sites-avaible/ssl:

NameVirtualHost *:443
<VirtualHost *:443>
...
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
...
</VirtualHost>

4. Добавить ssl в examle.com таким же образом как и в файле ssl, пример:

<VirtualHost *:443>
ServerName www.example.com
ServerAlias example.com
ServerAdmin webmaster@localhost

DocumentRoot /var/httpdocs/example.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
<Directory /var/httpdocs/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>


5. Активация модуля и сайта:

ulmen@chtulhu:~$ a2enmod ssl
ulmen@chtulhu:~$ a2ensite ssl

6. Рестарт веб сервера:


ulmen@chtulhu:~$ sudo /etc/init.d/apache2 restart
* Forcing reload of web server (apache2)... [ OK ]



Настройка mysql:
Mysql после установки работоспособна без дополнительных настроек. Так как пользователь базы root без пароля, нужно задать для него пароль:

ulmen@chtulhu:~$ mysqladmin -u root password myPassword

Проверка базы:

ulmen@chtulhu:~$ mysql -u root -p


Настройка PHP: /etc/php5/apache2/php.ini, после смены настроек нужно перегрузить апач.

Надеюсь ничего не забыл :)

30 коммент.:

dmpr0 комментирует...

Куул спасибо. Я со своим недоконца прямыми руками долго этим занималсо теперь в следующий раз будет легше.

kruft комментирует...

такой вид конфигурации индейца2 во многих системах, например, в том же старшем брате убунты -- Дебиан.

Анонимный комментирует...

перегружать апач не стоит :) и даже перезагружать - пользователи обидятся :)
apache2ctl graceful
Но для своих серверов я все же предпочитаю debian

ulmen комментирует...

kruft, неудивительно, что в дебиане и убунту система конфигов апача идентична :)

anonymous, какие пользователи при первичной настройке сервера? да и насколько я понимаю грейсфул не поможет при подключении модулей.

Анонимный комментирует...

> Так как найти централизированного мануала(да и еще и на русском) мне не удалось, решил написать эту заметку.
Нет, всё конечно очень хорошо, но блин... Почему бы теперь эту заметку не запостить в официальный вики или на форум.убунту.ру ? Почему бы не помочь сообществу в создании того самого "централизированного" ?

ulmen комментирует...

>почему бы теперь эту заметку не запостить в официальный вики или на форум.убунту.ру ?

Свой блог роднее убунтуфорума, тем более зачастую всеравно гуглем ищут. А по поводу вики - давайте ссылочку на русскую убунту-вики, будет время - помещу туда.

Анонимный комментирует...

http://ubuntu.ru/Wiki
и
https://wiki.ubuntu.com/RussianDocumentation

Lord Tirion комментирует...

В ubuntuguide.org тоже не плохо было запостить.

Алексей Костин комментирует...

Думаю, не мешало бы в примеры конфигов добавить AddDefaultCharset WINDOWS-1251.

Или это только у меня сайты еще не в UTF-8? :)

inf комментирует...

Syntax error on line 3 of /etc/apache2/sites-enabled/ssl:
Invalid command '...', perhaps misspelled or defined by a module not included in the server configuration

я чего-то неправильно сделал? :)

Alexandr комментирует...
Это сообщение было удалено автором.
Анонимный комментирует...

debconf: DbDriver "config": could not write /var/cache/debconf/config.dat-new: Permission denied
что я делаю неправильно

Druss комментирует...

Syntax error on line 3 of /etc/apache2/sites-enabled/ssl:
Invalid command '...', perhaps misspelled or defined by a module not included in the server configuration
я чего-то неправильно сделал? :)


три точки писать не нада.... Имеется ввиду что место "..." идут дерективы


Syntax error on line 3 of /etc/apache2/sites-enabled/ssl:
Invalid command '...', perhaps misspelled or defined by a module not included in the server configuration
я чего-то неправильно сделал? :)


используй sudo

ar4i-s комментирует...

art@Sarks:/etc/apache2/sites-enabled$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 Syntax error on line 20 of /etc/apache2/sites-enabled/ssl:
SSLCertificateFile: file '/etc/apache2/ssl/apache.pem' does not exist or is empty


Выдает такуч ошибку. Как ее исправить и с юем она свзана?
нет вообще папки /etc/apache2/ssl..
хотя я установил все пакеты, которые нужны(в статье была команда, которая ставила все нужные пакеты).

Анонимный комментирует...

Вообще в случае ошибок типа Invalid command '...', perhaps mis-spelled or defined by a module not included in the server configuration
Нужно загружать необходимые модули, т.е в httpd.conf прописать например LoadModule access_module /etc/httpd/modules/mod_access.so

Анонимный комментирует...

Спасибо Вам огромное :) наконецто я разобрался))

df-yz комментирует...

Огромное спасибо, очень помогло в своё время)

Написал очень похожую статью, но про LANMP - вот тут

Sergey комментирует...

Спасибо за статью.
Добавил в закладки

Анонимный комментирует...

Спасибо огромное!

df-yz комментирует...

Прошу прощения, предыдущий линк мёртв. Случайно увидел, как кто-то стучался в него, посему - рабочий линк.

Жека комментирует...

спасибо большое... настороить то я настроил, но как мне конкретно сделать так чтоб мой ком превратился в сервер и чтоб можно было с другого компа входить на страничку... я уже кучу всего прочитал а как конкретно это сделать нигде немогу найти

Dex комментирует...

Вопросик небольшой.
Если создать два вирт-хоста с именами скажем example2.com и example2.com и в описаниях хостов (файлов в sites-available) :
VirtualHost *:80
то при перезагрузке апача ошибка:
_default_ VirtualHost overlap on port 80, the first has precedence. Понятно, что лезут два на один порт.
IP-шники им дал раздельные в /etc/hosts : 127.0.0.4 и 127.0.0.5 (это тестовая локаль).
Чего не так?

Df_Yz комментирует...

Dex, Apache наплевать на то, какие IP назначены именам его виртуальных хостов в /etc/hosts.conf. Посему, их надо указать явно: "127.0.0.4:80" и "127.0.0.5:80" соответственно.

Dex комментирует...

Спасибо df_yz, получилось.

Анонимный комментирует...

у меня сертификат не создается. Вопросы задаются, а в файл ничего не пишется. В логах все пусто

yanzykov комментирует...

а как проверить работоспособность сервака по локальной сетке. Вроде все без ошибок, но что дальше делать что увидеть сайт в браузере на соседнем компе не знаю((( Надоумите плиз

Арман комментирует...

при рестарте apache2 выдает:
(98) Address already in use: make_sock: could not bind to addres 0.0.0.0:443

Lazy комментирует...

Спасибо за статью!!!

Анонимный комментирует...

А к стати подскажите как запустить CGI скрипт?
А то простое копирование файла с расширением cgi ничего не даёт.
А на странице выводит текст скрипта.

It works! например когда на
//localhost печатает
А когда указываю например
//localhost/cgi-bin/test1.cgi
с простым скриптом
Код:

#!/usr/bin/perl
use CGI;
use strict;

print header;
print "Hello, World!";


то выдаёт просто текст скрипта, как будто не может интерпретировать.
перл стоит,
сервер запускается,
моды какие нашёл установил...

В чём может быть дело?...

Анонимный комментирует...

А к стати подскажите как запустить CGI скрипт?
А то простое копирование файла с расширением cgi ничего не даёт.
А на странице выводит текст скрипта.

It works! например когда на
//localhost печатает
А когда указываю например
//localhost/cgi-bin/test1.cgi
с простым скриптом
Код:

#!/usr/bin/perl
use CGI;
use strict;

print header;
print "Hello, World!";


то выдаёт просто текст скрипта, как будто не может интерпретировать.
перл стоит,
сервер запускается,
моды какие нашёл установил...

В чём может быть дело?...