NGINX: установка на Ubuntu на EC2 с EBS

By | 08/01/2017
 

Задача – запустить EC2 в China AWS, с NGINX. Данные будут храниться на внешнем EBS-диске.

Подготовка сервера

Обновляем систему:

# apt update && apt upgrade

Машина – EC2, с подключенным EBS диском:

lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdb    202:16   0   8G  0 disk

/dev/xvdb необходимо смонтировать в каталог, из которого NGINX будет подгружать файлы настроек и данные сайта.

Создаём каталоги:

mkdir -p /data/{nginx-conf.d,nginx-data}
ls -l /data
total 8
drwxr-xr-x 2 root root 4096 Jul 31 13:08 nginx-conf.d
drwxr-xr-x 2 root root 4096 Jul 31 13:08 nginx-data

Создаём два раздела на xvdb – 50 mb для конфигов NGINX, и остальное пространство – для данных:

sfdisk /dev/xvdb << EOF
> ,50M
> ;
> EOF
Checking that no-one is using this disk right now ... OK
Disk /dev/xvdb: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4d864140
Old situation:
Device     Boot  Start      End  Sectors Size Id Type
/dev/xvdb1        2048   104447   102400  50M 83 Linux
/dev/xvdb2      104448 16777215 16672768   8G 83 Linux
>>> Created a new DOS disklabel with disk identifier 0x824cafe2.
Created a new partition 1 of type 'Linux' and of size 50 MiB.
/dev/xvdb2: Created a new partition 2 of type 'Linux' and of size 8 GiB.
/dev/xvdb3:
New situation:
Device     Boot  Start      End  Sectors Size Id Type
/dev/xvdb1        2048   104447   102400  50M 83 Linux
/dev/xvdb2      104448 16777215 16672768   8G 83 Linux
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Проверяем:

fdisk -l /dev/xvdb
Disk /dev/xvdb: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x824cafe2
Device     Boot  Start      End  Sectors Size Id Type
/dev/xvdb1        2048   104447   102400  50M 83 Linux
/dev/xvdb2      104448 16777215 16672768   8G 83 Linux

Создаём файловую систему ext4:

mkfs.ext4 /dev/xvdb1 && mkfs.ext4 /dev/xvdb2

Монтируем новые разделы в каталоги, которые создали ранее:

mount /dev/xvdb1 /data/nginx-conf.d/
mount /dev/xvdb2 /data/nginx-data/

Обновляем /etc/fstab.

Находим UUID разделов:

blkid /dev/xvdb*
/dev/xvdb: PTUUID="824cafe2" PTTYPE="dos"
/dev/xvdb1: UUID="c2f9709e-9118-49b5-8b99-b1c884f5dc0c" TYPE="ext4" PARTUUID="824cafe2-01"
/dev/xvdb2: UUID="d70c746f-4a86-430c-8428-4a6d278640be" TYPE="ext4" PARTUUID="824cafe2-02"

В /etc/fstab добавляем монтирование:

cat /etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults,discard        0 0
UUID=c2f9709e-9118-49b5-8b99-b1c884f5dc0c /data/nginx-conf.d/ ext4 defaults,nofail 0 2
UUID=d70c746f-4a86-430c-8428-4a6d278640be /data/nginx-data/ ext4 defaults,nofail 0 2

Отмонтируем разделы, и монтируем их через fstab для проверки:

umount /dev/xvdb1
umount /dev/xvdb2
mount -a
ls -l /data
total 5
drwxr-xr-x 3 root root 1024 Jul 31 14:32 nginx-conf.d
drwxr-xr-x 4 root root 4096 Jul 31 13:21 nginx-data

Настройка NGINX

Устанавливаем NGINX:

apt -y install nginx

В файле /etc/nginx/nginx.conf указываем NGINX подгружать файлы с расширением .conf из каталога /data/nginx-conf.d/.

Редактируем файл и в блок http {} добавляем:

...
include /data/nginx-conf.d/*.conf;
...

Создаём каталог для файлов сайта:

mkdir /data/nginx-data/domain.cn

Создаём тестовый файл /data/nginx-conf.d/domain.cn.conf:

server {
        server_name domain.cn;
        
        listen 80;
        
        access_log /var/log/nginx/domain.cn-access.log;
        error_log /var/log/nginx/domain.cn-error.log;

        root /data/nginx-data/domain.cn;
}

И тестовый индексный файл:

echo "Dev Profile" > /data/nginx-data/domain.cn/index.html

Проверяем, перезагружаем:

nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Проверяем доступность виртуалхоста:

curl domain.cn
Dev Profile

SSL

Добавляем SSL.

Создаём каталог:

mkdir /etc/nginx/ssl

Ключи нам переданы в виде архива, который включает в себя:

ls -l
total 32
-rw-r--r-- 1 setevoy setevoy 8274 Jul 31 16:54 star_domain_cn_2016_2017_ssl_certificate.zip
-rw-r--r-- 1 setevoy setevoy 3960 Sep 26  2016 star_domain_cn_2016_ssl_certificate.p7b
-rw-r--r-- 1 setevoy setevoy 1679 Sep 14  2016 star_domain_cn-private-key.key
Convert P7B to PEM

Конвертируем P7B в PEM:

openssl pkcs7 -print_certs < star_domain_cn_2016_ssl_certificate.p7b > domain_cn_fullchain.crt

Краткий обзор форматов – тут>>>.

Обновляем настройки виртуалхоста – в файле /data/nginx-conf.d/domain.cn.conf добавляем поддержку SSL:

server {

        server_name domain.cn;

        listen 80;
        listen 443 ssl;

        access_log /var/log/nginx/domain.cn-access.log;
        error_log /var/log/nginx/domain.cn-error.log;

        root /data/nginx-data/domain.cn;

        ssl on;
        ssl_certificate /etc/nginx/ssl/domain_cn_fullchain.crt;
        ssl_certificate_key /etc/nginx/ssl/star_domain_cn-private-key.key;
}

Проверяем синтаксис, перегружаем NGINX:

nginx -t && service nginx reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Проверяем:

openssl s_client -connect domain.cn:443
CONNECTED(00000003)
...
Verify return code: 0 (ok)
...

Готово.


  • Unkn0wn
     

    Добрый день. Это чтобы при падении ВМ можно было диск перемонтировать к другому инстансу или какова цель данной манипуляции? Спасибо.

    •  

      В целом – да. Основная идея – “модульность”: данные – отдельно, сам сервис – отдельно.
      Как в случае с Докер-контейнерами – есть сам сервис/контейнер, есть данные, подключенные через volume.

      • Unkn0wn
         

        Ясно, спасибо!