Развёртывание сайта на VPS с помощью Docker
В этой части я расскажу как развернуть на VPS свой первый сайт. Или всё что вы пожелаете.
В этой статье мы установим на сервер Docker, настроим в качестве resevse proxy nginx, создадим контейнер для первого сайта, выпустим SSL сертификат, настроим HTTPS и закроем уязвимость с обходом портов в докере.
Для начала разберёмся, что же такое docker, reverse proxy и зачем они вообще нужны. Docker - это платформа контейнеризации. Она позволяет упаковать приложение вместе со всеми зависимостями в изолированную среду — контейнер. Такой контейнер можно запустить где угодно: на локальной машине, сервере или в облаке, и результат всегда будет одинаковым. Простыми словами: представим, что нам нужно перевести машину в разобранном состоянии. Но нам эти детали нужно как-то транспортировать, чтобы они не перемешались с детялями других машин. Для этого мы можем загрузить детали машины в обычный грузовой контейнер

и доставить мастеру, который просто откроет этот контейнер и соберет машину, не думая ту ли деталь он взял. Но если бы детали для машины транспортировали бы вместе со всеми остальными деталями от других машин, то мастеру пришлось бы искать в этой куче именно те детали, которые ему нужны. В докере принцип тот же - разработчики просто упаковывают программу в докер контейнер для того чтобы мы могли просто поставить этот образ на сервер без лишнего геморроя, либо развернуть его на домашнем компьютере.
Благодаря тому, что у нас все программы лежат в контейнерах мы получаем огромный плюс - изоляция. То есть мы на сервере сможем разверуть без проблем почти всё что угодно без проблем с совместимостью и так далее.
Рассмотрим, как развернуть первый сайт. Для начала нам нужно установить на сервер сам докер. На самом деле делается это очень просто, нужно открыть документацию (https://docs.docker.com/engine/install/) либо просто написать в поиске docker install и перейти по первой ссылке. Переходим на страницу и в разделе Application Development выбираем ту ОС, которая установлена на вашем сервере.

И далее просто делаете все так, как написано в документации. Документация у докера понятная.
После того как мы установили докер на сервер, нам нужно создать папку, в которой будут лежать файлы нашего первого сайта. Например, создадим папку my-first-site в корневой директории. Для этого выполним команду mkdir -p my-first-site
После того как мы создали папку мы создадим в ней файл docker-compose.yml, в котором будут лежать инструкции для сборки образа веб сервера nginx.
services:
#это контейнер с nginx который будет проксировать запросы от докера в интернет
nginx_proxy: #название сервиса внутри докер
image: nginx:stable-alpine
container_name: nginx_proxy #название контейнера
ports: #пробрасываем порты.
- "80:80"
- "443:443/tcp"
environment:
- TZ=Europe/Moscow
volumes: # подключаем тома
- ./nginx/conf.d:/etc/nginx/conf.d
#это контейнер с самим сайтом
my-first-site:
image: nginx:stable-alpine
container_name: my-first-site
restart: always #всегда перезапускаем контейнер после перезагрузки сервера
volumes:
- ./ваша_папка_с_сайтом:/usr/share/nginx/html:rodocker-compose.yml
Немного пояснений по коду.
ports:
- "80:80"
- "443:443/tcp"Слева порт это порт в локальной сети, узнать его можно с помощью команды docker ps. А справа - порт уже в интернет. То есть если в локальной сети у нас сервис стоит на порту 8080, а нам нужно, чтобы в интернете этот сервис был на порту 8090, то мы пишем
"8090:8080"Теперь нам нужно создать конфиг самого реверс прокси nginx.
server {
listen 80;
server_name klaway.dev;
location / {
set $upstream_my-first-site my-first-site;
proxy_pass http://$upstream_my-first-site:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_hide_header X-Powered-By;
}
}nginx.conf
Сохраняем как nginx.conf в папке ./nginx/conf.d, переходим в вашу папку с сайтом, например cd my-first-site и даём docker compose up -d
Если у вас возникли какие-то вопросы или что-то не работает, то можете смело писать на me@klaway.dev