Задача — запустить EC2 в China AWS, с NGINX. Данные будут храниться на внешнем EBS-диске.
Содержание
Подготовка сервера
Обновляем систему:
# apt update && apt upgrade
Машина — EC2, с подключенным EBS диском:
[simterm]
# 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
[/simterm]
/dev/xvdb
необходимо смонтировать в каталог, из которого NGINX будет подгружать файлы настроек и данные сайта.
Создаём каталоги:
[simterm]
# 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
[/simterm]
Создаём два раздела на xvdb
— 50 mb для конфигов NGINX, и остальное пространство — для данных:
[simterm]
# 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.
[/simterm]
Проверяем:
[simterm]
# 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
[/simterm]
Создаём файловую систему ext4
:
[simterm]
# mkfs.ext4 /dev/xvdb1 && mkfs.ext4 /dev/xvdb2
[/simterm]
Монтируем новые разделы в каталоги, которые создали ранее:
[simterm]
# mount /dev/xvdb1 /data/nginx-conf.d/ # mount /dev/xvdb2 /data/nginx-data/
[/simterm]
Обновляем /etc/fstab
.
Находим UUID разделов:
[simterm]
# 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"
[/simterm]
В /etc/fstab
добавляем монтирование:
[simterm]
# 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
[/simterm]
Отмонтируем разделы, и монтируем их через fstab
для проверки:
[simterm]
# 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
[/simterm]
Настройка NGINX
Устанавливаем NGINX:
[simterm]
# apt -y install nginx
[/simterm]
В файле /etc/nginx/nginx.conf
указываем NGINX подгружать файлы с расширением .conf
из каталога /data/nginx-conf.d/
.
Редактируем файл и в блок http {}
добавляем:
... include /data/nginx-conf.d/*.conf; ...
Создаём каталог для файлов сайта:
[simterm]
# mkdir /data/nginx-data/domain.cn
[/simterm]
Создаём тестовый файл /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; }
И тестовый индексный файл:
[simterm]
# echo "Dev Profile" > /data/nginx-data/domain.cn/index.html
[/simterm]
Проверяем, перезагружаем:
[simterm]
# 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
[/simterm]
Проверяем доступность виртуалхоста:
[simterm]
$ curl domain.cn Dev Profile
[/simterm]
SSL
Добавляем SSL.
Создаём каталог:
[simterm]
# mkdir /etc/nginx/ssl
[/simterm]
Ключи нам переданы в виде архива, который включает в себя:
[simterm]
$ 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
[/simterm]
Convert P7B to PEM
Конвертируем P7B в PEM:
[simterm]
# openssl pkcs7 -print_certs < star_domain_cn_2016_ssl_certificate.p7b > domain_cn_fullchain.crt
[/simterm]
Краткий обзор форматов — тут>>>.
Обновляем настройки виртуалхоста — в файле /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:
[simterm]
# 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
[/simterm]
Проверяем:
[simterm]
$ openssl s_client -connect domain.cn:443 CONNECTED(00000003) ... Verify return code: 0 (ok) ...
[/simterm]
Готово.