Разворачиваем сайт написан на php с использованием БД mysql под дистрибутивом Ubuntu и под управлением веб-сервера apache. Эта заметка будет полезна как для администратора, так и для веб-программиста.
У нас имеется архив с БД и кодом. Еще сайт имеет поддержку SSL, и у нас есть нужные сертификаты.
root@pc:~# ls -l total 2568972 -rw-rw-r-- 1 alex alex 1976 Oct 7 08:29 2013-www.site.org.crt -rw-rw-r-- 1 alex alex 1675 Oct 7 08:29 2013-www. site.org.key -rw-rw-r-- 1 alex alex 844527324 Oct 8 04:13 site.org.gz -rw-rw-r-- 1 alex alex 6015814 Oct 4 09:46 site.org.sql
1. APACHE
Для начала нужно установить и настроить веб-сервер apache.
root@pc:~# apt-get install apache2
Теперь создаем виртуальный хост для нашего сайта с поддержкой SSL. Конфиг должен быть следущего вида.
root@pc:~# cat /etc/apache2/sites-available/site.org <VirtualHost *:80> ServerName site.org ServerAdmin site@mail.ru ServerAlias www.site.org DocumentRoot /var/www/site.org <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/site.org> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> Alias /uploads "/var/www/site.org/uploads/" 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 ${APACHE_LOG_DIR}/error_site.org.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access_site.org.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> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName site.org ServerAdmin site@mail.ru ServerAlias www.site.org DocumentRoot /var/www/site.org <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/site.org> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> Alias /uploads "/var/www/site.org/uploads/" 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 ${APACHE_LOG_DIR}/error_site.org.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access_site.org.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options MultiViews FollowSymLinks AllowOverride All Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Далее создаем директорию для сертификатов и переносим их (путь к ним прописан в конфиге виртуального хоста). Также добавляем модуль SSL и активируем сайт.
root@pc:~# mkdir /etc/apache2/ssl root@pc:~# mv 2013-www.site.org.crt /etc/apache2/ssl/apache.crt root@pc:~# mv 2013-www. site.org.key /etc/apache2/ssl/apache.key root@pc:~# a2enmod ssl root@pc:~# a2ensite site.org root@pc:~# service apache2 reload
Если нужно проверить роботу SSL не имея реальных сертификатов, то просто создаем свои.
root@pc:~# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt root@pc:~# /etc/init.d/apache2 reload
Файл настроек ports.conf должен быть следующего вида.
root@pc# cat /etc/apache2/ports.conf NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> NameVirtualHost *:443 Listen 443 </IfModule> <IfModule mod_gnutls.c> NameVirtualHost *:443 Listen 443 </IfModule>
Если на сайте используются реврайты, не забываем включить модуль
root@pc:~# a2enmod rewrite
Теперь сайт должен работать на 80 и 443 порту. Хочу заметить, что сертификаты могут быть только для одного домена и не распространяться на субдомены.
Ну, теперь приступаем к развертке кода сайта. Нам нужно создать папку для сайта и залить в нее весь код.
root@pc:~# mkdir /var/www/site.org root@pc:~# cd /var/www/site.org root@pc:/var/www/site.org# tar xzvf /home/alex/site.org.gz
2. MYSQL
Ставим базу данных с нужными модулями для работы с веб-сервером и обработкой php.
root@pc:~# apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql
Теперь запускаем shell скрипт для инициализации MySQL директории с базами данных и таблиц.
root@pc:~# mysql_install_db
Теперь можно запустить скрипт для быстрой чистки тестовых юзеров, БД и смени пароля рута.
root@pc:~# /usr/bin/mysql_secure_installation
Для удобной работы с mysql, нужно добавить phpmyadmin и прописать настройки в apache.
root@pc:~# apt-get install phpmyadmin root@pc:~# vim /etc/apache2/apache2.conf … Include /etc/phpmyadmin/apache.conf … root@pc:~# /etc/init.d/apache2 reload
Чтобы залогиниться в phpmyadmin нужно перейти в браузере по ссылке:
/phpmyadmin (Например http://192.168.2.103/phpmyadmin/ )
и ввести логин и пароль, который задавали при установке mysql (Пример – root / alex9343).
Если большая база будет импортироваться в phpmyadmin, то нужно увеличить размер загружаемых файлов в php.ini.
root@pc:~# vim /etc/php5/apache2/php.ini … upload_max_filesize = 30M …
Но можно и просто вручную скопировать весь sql и вставить в phpmyadmin, после создания нужной базы (туговато, но можно).
Или же импортировать с консоли.
3. PHP
Далее нужно установить поддержку php.
root@pc:~# apt-get install php5 libapache2-mod-php5 php5-mcrypt
и сразу добавляем php индексную страничку
root@pc:~# cat /etc/apache2/mods-enabled/dir.conf DirectoryIndex index.php index.html index.cgi index.pl index.php index.xhtml index.htm root@pc:~# /etc/init.d/apache2 reload
Если нужно установить дополнительные модуль, можно посмотреть список доступных в репозиториях модулей для установленной версии php.
root@pc:~# apt-cache search php5- php5-cgi - server-side, HTML-embedded scripting language (CGI binary) php5-cli - command-line interpreter for the php5 scripting language php5-common - Common files for packages built from the php5 source php5-curl - CURL module for php5 php5-dbg - Debug symbols for PHP5 php5-dev - Files for PHP5 module development php5-gd - GD module for php5 php5-gmp - GMP module for php5 php5-ldap - LDAP module for php5 php5-mysql - MySQL module for php5 php5-odbc - ODBC module for php5 php5-pgsql - PostgreSQL module for php5 php5-pspell - pspell module for php5 php5-recode - recode module for php5 php5-snmp - SNMP module for php5 php5-sqlite - SQLite module for php5 php5-tidy - tidy module for php5 php5-xmlrpc - XML-RPC module for php5 php5-xsl - XSL module for php5 …
После всех настроек можно проверить работоспособность сайта на разных портах (80, 443 — http, https). Поскольку я все разворачивал на виртуальной машине, а на хостовой у меня Windows – нужно прописать в C:\Windows\System32\drivers\etc\hosts ассоциацию домена и IP (т.е. дать понять браузеру, что домен site.org нужно искать по IP=192.168.2.103, по IP моей виртуальной машине, где мы все развернули).
C:\Windows\System32\drivers\etc\hosts … 192.168.2.103 site.org 192.168.2.103 www.site.org …
Теперь можно проверить или мы попадаем на нужный сервер при переходе по домену site.org
C:\Users\alex>ping site.org Pinging site.org [192.168.2.103] with 32 bytes of data: Reply from 192.168.2.103: bytes=32 time<1ms TTL=64 Reply from 192.168.2.103: bytes=32 time<1ms TTL=64 Reply from 192.168.2.103: bytes=32 time<1ms TTL=64 Reply from 192.168.2.103: bytes=32 time<1ms TTL=64 Ping statistics for 192.168.2.103: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms C:\Users\alex>
Ну все. Теперь проверяем работу сайта и фиксим багги. Так же не забываем смотреть в логи.
В следующей статье пойдет речь о настройке связки nginx-mysql-php.