понедельник, 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, после смены настроек нужно перегрузить апач.

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