Развёртывание сайта на VPS с помощью Docker

Развёртывание сайта на VPS с помощью Docker

В этой части я расскажу как развернуть на VPS свой первый сайт. Или всё что вы пожелаете.

В этой статье мы установим на сервер Docker, настроим в качестве resevse proxy nginx, создадим контейнер для первого сайта, выпустим SSL сертификат, настроим HTTPS и закроем уязвимость с обходом портов в докере.

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

и доставить мастеру, который просто откроет этот контейнер и соберет машину, не думая ту ли деталь он взял. Но если бы детали для машины транспортировали бы вместе со всеми остальными деталями от других машин, то мастеру пришлось бы искать в этой куче именно те детали, которые ему нужны. В докере принцип тот же - разработчики просто упаковывают программу в докер контейнер для того чтобы мы могли просто поставить этот образ на сервер без лишнего геморроя, либо развернуть его на домашнем компьютере.

Благодаря тому, что у нас все программы лежат в контейнерах мы получаем огромный плюс - изоляция. То есть мы на сервере сможем разверуть без проблем почти всё что угодно без проблем с совместимостью и так далее.

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

Документация docker

И далее просто делаете все так, как написано в документации. Документация у докера понятная.

После того как мы установили докер на сервер, нам нужно создать папку, в которой будут лежать файлы нашего первого сайта. Например, создадим папку 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:ro

docker-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