Пн. Дек 30th, 2024

Эта статья в принципе создана была принудительно! Одно из требований моего теста на трудоустройство по любимой специальности)) Так что это вроде и лог моей работы, и вроде какой-никакой мануал))

1) Заходим на сервер по SSH

Для этого был дан ключ SSL PEM. Сканирование потенциального сервера показало что там только открыт 22 порт. Отсюда простой вывод:

ssh -i test-sysop.pem root@http://ec2-50-16-20-2.compute-1.amazonaws.com и мы на сервере!

2)Устанавливаем NginX, MySQL, PHP5 и  PHP-FPM

Для начала добавляем репозитории dotdeb ручками в /etc/apt/sources.list:

nano /etc/apt/sources.list

и дописываем туда строчки:

deb http://packages.dotdeb.org stable all 
deb-src http://packages.dotdeb.org stable all
deb http://php53.dotdeb.org stable all

добавим его ключ:

wget -q -O - http://www.dotdeb.org/dotdeb.gpg | apt-key add -

обновляем список пакетов apt-get update

и ставим nginx, php и все к нему, php5-fpm, mysql-server & client, сразу же ставим bind9.

apt-get install nginx
apt-get install mysql-server mysql-client
apt-get install php5-cli php5-common php5-suhosin
apt-get install php5-fpm php5-cgi
apt-get install bind9

3)С помощью гугла  настриваем сначала сам nginx, затем допиливаем конфиг php-fpm, которые находятся в /etc/nginx/sites-available/default и /etc/php5/fmp/php.ini соответственно.

4)Cкачиваем wget’ом дистр. wordpress’a, распаковываем в /var/www. 5)Заходим в консоль mysql: mysql -u root -p создаем базу: create database wordpress;

6)затем по всем этим параметрам устанавливаем и запускаем сайт.

7)Настраиваем свою доменную зону в bind’е.

Для начала в /etc/bind/named.conf добавляем свою зону:

zone «test-sysop.com.» {

type master;

file «/etc/bind/db.test-sysop.com»;

};

Создаем файл db.test-sysop.com. Добавляем в него:

$ORIGIN test-sysop.com. $TTL 86400 ; 1 day @ IN SOA dns.test-sysop.com. root.test-sysop.com. ( 2012012401 ; serial 10800 ; refresh (3 hours) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) @ IN NS dns.test-sysop.com @ IN A 127.0.0.1
dns.test-sysop.com A 127.0.0.1
test-sysop.com A 127.0.0.1

После релоада конфига,  команда nslookup test-sysop.com выдает нам:

Server: 127.0.0.1 Address: 127.0.0.1#53
Name: test-sysop.com Address: 127.0.0.1
Это как раз то что надо)

8)Теперь настраиваем MySQL Replication. Дано два хоста — мастер и слейв. С мастера база должна реплицироваться ( :D) на слейв. Для этого в конфиг MySQL мастера /etc/mysql/my.cnf добавляем:

skip-external-locking log-bin server-id=1 log-bin = /var/lib/mysql/mysql-bin replicate-do-db = wordpress

а так же разрешаем серверу принимать соединения из вне — для это закомменитруем строчку #bind-address = 127.0.0.1

Заходим в консоль MySQL mysql -u root -p и там создаем юзера для репликации:

 create user repl;

Затем устанавливаем ему права:

GRANT replication slave ON *.* TO "repl"@"localhost" IDENTIFIED BY "password"; 

затем перезагружаем сервер: /etc/init.d/mysql restart. После этого опять заходим в консоль MySQL и там пишем show master status; Нам должна показаться таблица в котором будет написан файл типа mysql-bin.000003 и его position например 7105.

Теперь настроим слейв сервер. Там же в конфиг добавляем:

skip-external-locking
master-host=имя_хоста
master-user=repl
master-password=пароль
master-port=3306
server-id=2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = wordpress

Так же перезагружаем сервер. Теперь заходим в консоль, там делаем:

CHANGE MASTER TO MASTER_HOST = "имя_хоста", MASTER_USER = "repl ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000002 ", MASTER_LOG_POS = 7105;

Теперь делаем дамп базы на мастере и заливаем его в слейв.Если все ок, тогда пишем start slave; и репликация должна начаться.

9)Теперь создаем поддомен hello.test-sysop.com, для чего добавляем в  конфиг BIND (/etc/bind/db.test-sysop.com) строчку:

hello IN A 127.0.0.1

и перезагрузим bind. Теперь создадим такой же виртуальный сервер для Nginx, для чего в папке /etc/nginx/sites-available/ создаем файл с именем hello и содержанием:

server { server_name hello.test-sysop.com;
access_log /var/log/nginx/access-hello.log;
error_log /var/log/nginx/error-hello.log;
root /var/www/hello;
index index.php index.html index.htm;
# enforce www (exclude certain subdomains) #if ($host !~* ^(www|subdomain)) #{ # rewrite ^/(.*)$ $scheme://www.$host/$1 permanent; #}
# enforce NO www if ($host ~* ^www\.(.*)) { set $host_without_www $1; rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent; }
# unless the request is for a valid file, send to bootstrap if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; }
# catch all error_page 404 /index.php;
# use fastcgi for all php files location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; }
# deny access to apache .htaccess files location ~ /\.ht { deny all; } }

то бишь теперь домен hello.test-sysop.com будет обрабатываться nginx в папке /var/www/hello/. Для теста мы там создаем файл index.html c содержимым(разрыв что б не обрабатывался код браузером):

<ht ml> <bo dy> <h 3>Hello,world!</h 3> </bo dy> </ht ml>

Теперь при заходе по адресу hello.test-sysop.com мы получем знакомое с детства Hello,world! Готово!

Однако еще нам надо сделать что б при заходе по динамически выданному хостером имени http://ec2-50-16-20-2.compute-1.amazonaws.com нас красиво редиректило на основной движок сайта, который лежит уже под доменом test-sysop.com. Для этого я просто создал папку /var/www/main и в ней файл index.html с мета-тегом 301го редиректа:

<ht ml>
<me ta http-equiv=’refresh’ content=’0; url=http://test-sysop.com’>
<bo dy>
</bo dy>
</ht ml>

и просто изменим дефолтный конфиг для nginx с именем default на:

 

server
{
server_name ec2-50-16-20-2.compute-1.amazonaws.com;

 

access_log /var/log/nginx/access-hello.log;

 

error_log /var/log/nginx/error-hello.log;

 

root /var/www/main;

 

index index.php index.html index.htm;

 

# enforce www (exclude certain subdomains)
#if ($host !~* ^(www|subdomain))
#{
# rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
#}

 

# enforce NO www
if ($host ~* ^www\.(.*))
{
set $host_without_www $1;
rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
}

 

# unless the request is for a valid file, send to bootstrap
if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}

 

# catch all
error_page 404 /index.php;

 

# use fastcgi for all php files
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}

 

# deny access to apache .htaccess files
location ~ /\.ht
{
deny all;
}
}

То бишь при заходе на длинное и непонятное имя сервера по умолчанию, nginx обрабатывает файл index.html в папке /var/www/main/ в котором нас и посылает на основное имя test-sysop.com. Ну а где взять и как его обработать, nginx знает уже благодаря конфигу main в котором:

server
{
server_name test-sysop.com;

access_log /var/log/nginx/access-hello.log;

error_log /var/log/nginx/error-hello.log;

root /var/www;

index index.php index.html index.htm;

# enforce www (exclude certain subdomains)
#if ($host !~* ^(www|subdomain))
#{
# rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
#}

# enforce NO www
if ($host ~* ^www\.(.*))
{
set $host_without_www $1;
rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
}

# unless the request is for a valid file, send to bootstrap
if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}

# catch all
error_page 404 /index.php;

# use fastcgi for all php files
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}

# deny access to apache .htaccess files
location ~ /\.ht
{
deny all;
}
}

Так как имя test-sysop.com это только внутреннее имя на сервере, то работу сайтов и редиректов проверяем внутри сервера с помощью консольного бразуера lynx )))

от RUSUA

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Анти-спам: выполните заданиеWordPress CAPTCHA