Разворачиваем сайт написан на php с использованием БД mysql под дистрибутивом Ubuntu и под управлением веб-сервера apache. Эта заметка будет полезна как для администратора, так и для веб-программиста.
У нас имеется архив с БД и кодом. Еще сайт имеет поддержку SSL, и у нас есть нужные сертификаты.
1
2
3
4
5
6
|
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 |
APACHE
Для начала нужно установить и настроить веб-сервер apache.
1
|
root@pc:~ # apt-get install apache2 |
Теперь создаем виртуальный хост для нашего сайта с поддержкой SSL. Конфиг должен быть следущего вида.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
root@pc:~ # cat /etc/apache2/sites-available/site.org ServerName site.org ServerAdmin [email protected] ServerAlias www.site.org DocumentRoot /var/www/site .org Options FollowSymLinks AllowOverride All Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all Alias /uploads "/var/www/site.org/uploads/" ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride All Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all 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/" Options Indexes MultiViews FollowSymLinks AllowOverride All Order deny,allow Deny from all Allow from 127.0.0.0 /255 .0.0.0 ::1 /128 ServerName site.org ServerAdmin [email protected] ServerAlias www.site.org DocumentRoot /var/www/site .org Options FollowSymLinks AllowOverride All Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all Alias /uploads "/var/www/site.org/uploads/" ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride All Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all 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/" Options MultiViews FollowSymLinks AllowOverride All Order deny,allow Deny from all Allow from 127.0.0.0 /255 .0.0.0 ::1 /128 SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache .crt SSLCertificateKeyFile /etc/apache2/ssl/apache .key BrowserMatch "MSIE [17-9]" ssl-unclean- shutdown |
Далее создаем директорию для сертификатов и переносим их (путь к ним прописан в конфиге виртуального хоста). Также добавляем модуль SSL и активируем сайт.
1
2
3
4
5
6
|
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 не имея реальных сертификатов, то просто создаем свои.
1
2
|
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 должен быть следующего вида.
1
2
3
4
5
6
7
8
9
|
root@pc # cat /etc/apache2/ports.conf NameVirtualHost *:80 Listen 80 NameVirtualHost *:443 Listen 443 NameVirtualHost *:443 Listen 443 |
Если на сайте используются реврайты, не забываем включить модуль
1
|
root@pc:~ # a2enmod rewrite |
Теперь сайт должен работать на 80 и 443 порту. Хочу заметить, что сертификаты могут быть только для одного домена и не распространяться на субдомены.
Ну, теперь приступаем к развертке кода сайта. Нам нужно создать папку для сайта и залить в нее весь код.
1
2
3
|
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 |
MYSQL
Ставим базу данных с нужными модулями для работы с веб-сервером и обработкой php.
1
|
root@pc:~ # apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql |
Теперь запускаем shell скрипт для инициализации MySQL директории с базами данных и таблиц.
1
|
root@pc:~ # mysql_install_db |
Теперь можно запустить скрипт для быстрой чистки тестовых юзеров, БД и смени пароля рута.
1
|
root@pc:~ # /usr/bin/mysql_secure_installation |
Для удобной работы с mysql, нужно добавить phpmyadmin и прописать настройки в apache.
1
2
3
4
5
6
|
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 нужно перейти в браузере по ссылке:
1
|
/phpmyadmin (Например http: //192 .168.2.103 /phpmyadmin/ ) |
и ввести логин и пароль, который задавали при установке mysql (Пример – root / alex9343).
Если большая база будет импортироваться в phpmyadmin, то нужно увеличить размер загружаемых файлов в php.ini.
1
2
3
4
|
root@pc:~ # vim /etc/php5/apache2/php.ini … upload_max_filesize = 30M … |
Но можно и просто вручную скопировать весь sql и вставить в phpmyadmin, после создания нужной базы (туговато, но можно).
Или же импортировать с консоли.
PHP
Далее нужно установить поддержку php.
1
|
root@pc:~ # apt-get install php5 libapache2-mod-php5 php5-mcrypt |
и сразу добавляем php индексную страничку
1
2
3
4
5
|
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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 моей виртуальной машине, где мы все развернули).
1
2
3
4
5
|
C:\Windows\System32\drivers\etc\hosts … 192.168.2.103 site.org 192.168.2.103 www.site.org … |
Теперь можно проверить или мы попадаем на нужный сервер при переходе по домену site.org
1
2
3
4
5
6
7
|
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> |
Ну все.