Хостинг и деплой — как выложить сайт в интернет

Вы написали код — теперь его надо показать миру. В этом уроке: какие бывают хостинги, как купить домен и настроить DNS-записи, как выложить сайт через GitHub Pages, Netlify или Vercel, поднять Nginx, включить HTTPS и автоматизировать деплой.

Уровень: средний 18 разделов 3–4 часа

1. Что значит «разместить сайт»

Сайт — это файлы и (часто) программы, которые должны круглосуточно отвечать на запросы. С личного компьютера это невозможно: нужно место в центре обработки данных — хостинг. Процесс загрузки сайта на сервер называется деплоем.

# два базовых сценария
статический сайт    → отдаём готовые HTML/CSS/JS как файлы
динамический сайт   → запускаем приложение (Flask, Node.js, Django),
                      которое собирает HTML в момент запроса
Тип сайтаЧто нужно на сервереКуда деплоить
Статическийтолько файлыGitHub Pages, Netlify, Vercel
Бэкендрантайм и база данныхVPS или управляемый хостинг
КонтейнерыDockerлюбой VPS с Docker
Разделяйте в голове: домен — имя сайта, хостинг — железо с файлами, DNS — таблица, которая связывает имя и сервер.

2. Типы хостинга

Хостинги отличаются гибкостью и ценой. Новичку часто хватает виртуального или статического хостинга, профессионал арендует полноценный сервер.

ТипЧто этоПлюсыМинусы
Shared (виртуальный)ваш сайт на общем сервере панелидёшево, всё уже настроеноне управляете сервером
VPSизолированная часть сервераполный доступ, свои настройкивсё настраиваете сами
Dedicatedцелый физический сервермаксимум ресурсовдорого
Static / ManagedNetlify, Vercel, Pagesдеплой в пару команд, HTTPS самтолько статика или бессерверные функции
Платить «за домен» и «за хостинг» у одного регистратора удобно, но всегда проверяйте, сможете ли перенести сайт. Хороший хостинг отдаёт код в обычном архиве.
Для учёбы хватит бесплатных вариантов: GitHub Pages — статика, Vercel и Netlify — фронтенд, Railway или PythonAnywhere — первые бэкенды.

3. Домен и его регистрация

Домен — арендуемое имя в интернете. Аренда оформляется на год у регистратора: в РФ это, например, REG.RU, в мире — Namecheap или Cloudflare. Имя стоит выбирать короткое и запоминающееся, без дефисов и съехавших букв.

# проверить, свободен ли домен, и посмотреть владельца
whois example.ru

# типовой состав имени
www.example.ru
 ↑    ↑      ↑
 поддомен  домен  зона (.ru, .com, .site)
Зоны различаются ценой и назначением: .ru и .рф — для российской аудитории, .com и .io — для международной.
Не регистрируйте домен «с приставкой хостинга» на своё имя без явного права на передачу. Лучше сразу владеть доменом в личном кабинете.

4. DNS-записи: A, CNAME, MX

Купив домен, его надо «привязать» к серверу. Делается это в панели регистратора или провайдера через DNS-записи.

# типовой набор записей для сайта example.ru
example.ru        A     → 185.199.108.153   # IP сервера
www.example.ru    CNAME → example.ru         # алиас
example.ru        MX    → mail.example.ru    # почта
example.ru        TXT   → "v=spf1 …"         # проверки почты
ЗаписьЧто означаетКогда нужна
Aимя → IPv4-адрессайт на VPS
CNAMEимя → другое имяwww → основному домену, GitHub Pages
MXпочтовая доставкакорпоративная почта
TXTтекст для проверокподтверждение домена в Google
TTL (время жизни записи) — как долго DNS-кеширует ответ. Перед переездом сайта заранее снизьте TTL до минимума, чтобы пользователи быстрее попали на новый сервер.

5. GitHub Pages — бесплатная статика

GitHub Pages — бесплатный статический хостинг из репозитория. Проект получает адрес вида username.github.io/repo и обновляется по вашей команде.

# быстрый способ опубликовать ветку
git init
git add .
git commit -m "первый деплой"
git branch -M main
git remote add origin https://github.com/user/repo.git
git push -u origin main

# далее: Settings → Pages → Deploy from a branch → main
Если сайт живёт в отдельной папке репозитория, выберите ветку и папку /docs вместо корня — исходники и опубликованные файлы будут рядом.
GitHub Pages не исполняет серверный код: никаких форм на сервере и баз данных. Только статика. Для бэкенда нужен другой хостинг.

6. Netlify — деплой из репозитория и не только

Netlify отлично подходит для статических сайтов и SPA: можно загрузить папку перетаскиванием или подключить GitHub-репозиторий. HTTPS, бранч-превью и перенаправления идут в комплекте.

# установка CLI и быстрый деплой из папки
npm install -g netlify-cli
netlify deploy --prod --dir=public

# полезная команда — добавить свой домен
netlify display-user
ВозможностьNetlifyVercel
Формы и функциидада
Фреймворки (Next.js, Vue)дада, плотнее
Бесплатный тарифестьесть
Для шаблонов на Vue/React оба сервиса почти равнозначны. Vercel удобнее, если проект на Next.js, Netlify — если хочется больше настроек деплоя.

7. Vercel — деплой за минуту

Vercel — платформа от создателей Next.js. Деплой можно получить без терминала: подключить репозиторий и нажать Deploy. Поддерживаются фронтенд-фреймворки и бессерверные функции.

# CLI-вариант
npm install -g vercel
vercel            # превью
vercel --prod     # в продакшен

# конфиг функции (сейчас – на Vercel)
{
  "builds": [{ "src": "api/index.js", "use": "@vercel/node" }]
}
Функции на Vercel — это маленькие API без своего сервера. Их изучают в курсе Node.js уже после базового деплоя.
Не держите в репозитории секреты и переменные окружения. Кладите их в настройки проекта (Environment Variables) на самой платформе.

8. Nginx: server и location

Когда сайт размещается на VPS, перед приложением обычно ставят Nginx — веб-сервер и реверс-прокси. Он отдаёт статику быстро, а динамические запросы передаёт вашему приложению.

# /etc/nginx/sites-available/example.ru
server {
    listen 80;
    server_name example.ru www.example.ru;

    root /var/www/example;
    index index.html;

    # статика — сам Nginx
    location /assets/ {
        expires 30d;
    }

    # остальное — приложению на порту 8000
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
    }
}
ДирективаНазначение
serverотдельный виртуальный хост
locationправило для части URL
proxy_passпередать запрос бэкенду
rootпапка с файлами сайта
# включить сайт и перечитать конфиг
ln -s /etc/nginx/sites-available/example.ru /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Полный разбор конфигурации — в курсе Nginx. Для начала достаточно шаблона выше: его хватает для 90% учебных задач.

9. HTTPS через Let's Encrypt

Браузеры помечают сайты без HTTPS как небезопасные. Бесплатный сертификат выдаёт Let's Encrypt, а ставит его утилита certbot.

# установка certbot (Debian/Ubuntu)
sudo apt install certbot python3-certbot-nginx

# автоматически правит конфиг Nginx
sudo certbot --nginx -d example.ru -d www.example.ru

# продление раз в 60 дней — встроенный таймер
sudo certbot renew --dry-run
Не выключайте продление сертификата. Если домен надолго без обновления — HTTPS перестанет работать, и браузер заблокирует сайт предупреждением.
На GitHub Pages, Netlify и Vercel HTTPS включается автоматически при подключении своего домена — certbot там не нужен.

10. CI/CD и автоматический деплой

CI/CD — Continuous Integration / Continuous Deployment: код попадает в продакшен автоматически после каждого push в основную ветку. Так исключается «а у меня на компьютере работает».

# .github/workflows/deploy.yml (GitHub Actions)
name: Deploy
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm test
      - run: npm run build
      - uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist
ЭтапЗадача
Сборка (build)превратить исходники в готовые файлы
Тесты (test)прогнать unit-тесты до публикации
Публикация (deploy)выложить результат на хостинг
Ломающийся pipeline — сигнал, что проблема зашла в основную ветку. Правило: если тесты красные, автоматический деплой должен останавливаться.
Подробнее о конвейерах — в курсах GitHub Actions и GitLab. Начать стоит именно с GitHub Actions: он бесплатен для открытых проектов.

11. Shared-хостинг и панели управления

Для новичка, который не хочет возиться с сервером, часто хватает shared-хостинга: сайт лежит в общей папке, а домен, почту и базу настраивают в панели. Самые распространённые панели — cPanel, ISPmanager и DirectAdmin.

# подключение по FTP из терминала
ftp ftp.example.ru
put index.html
exit
Перед покупкой изучите тариф: сколько сайтов и баз данных включено, есть ли бесплатный SSL и входит ли домен в стоимость первого года.

12. Перенос сайта между хостингами

Переезд сайта — стандартная задача: тариф перестал устраивать, сервер отключили или захотелось больше скорости. Правильный порядок сводит простой к минимуму.

  1. разверни сайт на новом хостинге полностью и проверь по временному адресу;
  2. перенеси базу данных через экспорт/импорт SQL или mysqldump;
  3. скопируй файлы архивом (zip/tar) или по rsync;
  4. заранее снизь TTL DNS-записей до минимума;
  5. после проверки смени A-записи и дождись обновления DNS;
  6. проверь почту, SSL и cron-задачи на новом месте.
mysqldump -u user -p dbname > db.sql
tar -czf site.tgz /var/www/example
scp site.tgz db.sql user@new-server:/tmp/
Старый хостинг отключай только после того, как новый сайт проверили и команда, и мониторинг. Ошибки DNS «просачиваются» дольше, чем кажется.

13. Резервное копирование

Бэкап спасает от случайного удаления, взлома и сгоревшего диска. Правило простое: файлы + база данных + конфигурация, хранящиеся в другом месте.

# ежедневный дамп базы из cron
0 3 * * * mysqldump -u backup --all-databases \
  | gzip > /backup/db-$(date +\%F).sql.gz
Проверяй восстановление не реже раза в месяц: «бэкап, который нельзя развернуть» — это файл, а не резервная копия.
Не храни пароли от базы внутри самого дампа на том же сервере: скомпрометировав файлы, злоумышленник получает и сайт, и архив.

14. Мониторинг доступности

Даже идеально настроенный сайт может лечь ночью. Внешние сервисы проверяют сайт с разных точек мира и присылают алерты при недоступности.

Что проверяемИнструмент
Доступность (HTTP 200)UptimeRobot, HetrixTools
Срок действия SSLSSL Labs, сервисы мониторинга сертификатов
Скорость страницыLighthouse, PageSpeed Insights
Серверные метрикиGrafana + Prometheus (курсы DevOps)
# простая проверка из планировщика
curl -sf https://example.ru/health \
  || echo "Сайт недоступен" | mail -s "ALERT" admin@example.ru
Заведи отдельный адрес /health: он возвращает статус и версию приложения. По нему легко отличить проблемы сети от проблем кода.

15. Облачный VPS: выбор и базовая настройка

Когда сайт перерастает shared-хостинг, пора переходить на VPS (Virtual Private Server). Вы получаете root-доступ, свой стек и полный контроль, но обязаны сами отвечать за обновления и безопасность.

# первый вход на сервер
ssh root@185.104.117.2
apt update && apt upgrade -y

Популярные провайдеры VPS — DigitalOcean, Hetzner, Contabo; они дают SSD, фиксированный IP и снапшоты. Для минимального проекта хватит 1 vCPU и 1–2 ГБ RAM.

Создавайте обычного пользователя и отключайте вход по паролю — только SSH-ключи. Так сервер не «взломают перебором».
VPS — это не shared-хостинг: вы сами чините Nginx, MySQL и бэкапы. Если нет времени, оставайтесь на managed-решениях (Netlify, Vercel, хостинг с панелью).

16. Несколько сайтов на одном сервере

На одном VPS можно держать десяток сайтов — для этого в Nginx создают отдельные server блоки на каждый домен.

# /etc/nginx/sites-available/site1.conf
server {
    server_name site1.ru www.site1.ru;
    root /var/www/site1;
    index index.html;
}
ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Процесс:

Не включайте «default_server» с корнем в лишнее место: сервер отдаст случайный сайт, если домен не найден.
Настройка server-блоков, HTTPS и балансировки — в курсе Nginx.

17. Как выбрать тариф: чек-лист

Тарифы разбросаны от 0 до тысяч рублей. Чтобы не переплачивать, оценивайте не цену, а то, что реально нужно сайту.

ТипГоден дляЦена
Статика, GitHub Pagesлендинги, блоги₽0–300
Shared-хостингWordPress, PHP100–700 ₽/мес
Managed (Netlify/Vercel)SPA, Next.js0–20 $/мес
VPSсвоя архитектураот 300 ₽/мес
# тест скорости ответа перед покупкой
curl -o /dev/null -w "code:%{http_code} time:%{time_total}s\n" https://site.ru
Сначала замерьте нагрузку: сколько страниц в секунду реально будет. Средний лендинг — 1–5 запросов/с, и базовый тариф справится.
Дешевизну тарифа часто съедают скрытые платежи: трафик сверх лимита, цена домена, SSL. Считайте полную стоимость года сразу.

18. Безопасность сервера: обновления и файрвол

Публичный VPS атакуют автоматические скрипты каждые минуты. Базовый уровень защиты — обновления, файрвол и ssh-политика.

sudo ufw allow 22,80,443/tcp
sudo ufw enable
sudo apt install fail2ban -y
Сделайте правило бэкапа «3-2-1»: 3 копии, 2 носителя, 1 вне сервера (раздел 13).
Не запускайте от root веб-приложения и БД. Отдача root-прав одному скрипту — прямой путь к полному взлому сервера.
Автоматизация безопасности и желаемая конфигурация — в курсе Ansible.

19. CDN: Cloudflare и глобальная доставка контента

CDN — это распределённая сеть кэширующих серверов. Копии сайта живут на узлах по всему миру, и посетитель получает ответ с ближайшего — скорость растёт, нагрузка на источник падает.

# заголовки, влияющие на кэш CDN
Cache-Control: public, max-age=86400   # статика
Cache-Control: no-cache                # HTML и API
При релизе очищайте кэш «purge by URL» для изменённых файлов или версионируйте имена ассетов (app.1.css → app.2.css) — тогда кэш живёт долго без очисток.
Закэшированный старый HTML — классическая причина «я обновил, а сайт не изменился». Держите HTML вне длинного кэша, а статику с хешами — внутри.

20. Объектное хранилище S3 и статический сайт

Amazon S3 и совместимые сервисы (Yandex Object Storage, O2Cloud, Wasabi) хранят сайт как набор файлов и раздают их с высокой доступностью и почти неограниченной ёмкостью.

# AWS CLI: синхронизация собранного фронтенда
aws s3 sync ./dist s3://my-site --delete
aws s3 website s3://my-site \
  --index-document index.html
# затем — bucket policy на чтение
aws s3 sync сравнивает хеши и загружает только изменённые файлы — экономит и время, и биллинг.
Не открывайте bucket на «public» целиком и не кладите ключи доступа в код фронтенда: минимальная bucket policy с GetObject безопаснее любого «открытого» бакета.

21. Логи и анализ трафика: Nginx access log

Логи веб-сервера — первое, что смотрит инженер при проблемах: кто приходил, что отдавалось и что падало. Правильно настроенный лог — половина диагностики.

log_format main '$remote_addr $status $request_time '
                '$http_user_agent';
access_log /var/log/nginx/access.log main;

# популярные коды и медленные запросы
awk '{print $2}' access.log | sort | uniq -c | sort -rn | head
grep ' 500 ' access.log | tail -20
Ведите error_log отдельно и настройте оповещение при взлёте числа 5xx — узнаете о проблеме раньше клиентов.
Визуализация логов и метрик сервера подробно разбирается в курсе Grafana и Prometheus.

22. Apache и Caddy: альтернативы Nginx

Nginx — не единственный вариант. Apache всё ещё держит массу legacy-проектов и .htaccess-настроек, а Caddy привлекает простотой: бесплатный HTTPS включается одной директивой.

СерверСильная сторонаКогда выбрать
Apache.htaccess, модулистарые CMS и shared-хостинг
Nginxскорость, проксированиебольшинство новых проектов
CaddyHTTPS из коробкиличные сервисы, прототипы
# Caddyfile
my-site.ru {
    root * /var/www/site
    file_server
}
Смешивайте подходы: Nginx как фронт и HTTPS-терминатор, Apache с legacy-приложением за ним — проверенная «передний край / бэкенд» схема.
В 2026 году держать сайт без HTTPS недопустимо: браузеры помечают HTTP как небезопасный. Caddy, Nginx и Let's Encrypt делают шифрование бесплатным и автоматическим.

Что дальше

Соберите небольшой статический сайт, выложите его на GitHub Pages, затем подключите свой домен и HTTPS. После этого попробуйте повторить деплой VPS из урока Nginx, а приложение упакуйте в Docker. База протокола — в HTTP и DNS, вопросы скорости — в SEO.

← Вернуться к курсам