Найти в Дзене
Digital Мастерская

Готовый рецепт автодеплоя: Ubuntu + Nginx + Certbot + GitHub Actions 🚀

Готовый рецепт автодеплоя: Ubuntu + Nginx + Certbot + GitHub Actions
Готовый рецепт автодеплоя: Ubuntu + Nginx + Certbot + GitHub Actions

Введение

💪 Автодеплой — это как режим тренировок. Если делаешь всё вручную, быстро устаёшь и пропускаешь подходы. Но если поставить процесс «на поток», сайт будет обновляться сам, а ты занимаешься развитием.

Сегодня покажу готовый «playbook» для Ubuntu-сервера с Nginx, Let’s Encrypt (certbot) и GitHub Actions. Этот сетап подойдёт для сайтов на HTML, CSS, JS, Tailwind и других статических проектов.

1. Что будем настраивать

  • 📦 VPS на Ubuntu (например, 22.04)
  • 🌐 Nginx как веб-сервер
  • 🔒 Certbot для HTTPS
  • ⚡ GitHub Actions для автодеплоя
  • 🛠 systemd-сервис для фоновых задач

2. Настраиваем сервер

Устанавливаем Nginx и certbot:

sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx git

Настраиваем виртуальный хост:

server {

   listen 80;

   server_name example.com www.example.com;

   root /var/www/my-site;

   index index.html;

   location / {

     try_files $uri $uri/ =404;

   }

}

И сразу подключаем HTTPS:

sudo certbot --nginx -d example.com -d www.example.com

3. Подготовка Git-репозитория

На сервере создаём папку для сайта:

mkdir -p /var/www/my-site

chown -R $USER:$USER /var/www/my-site

И проверяем, что Git установлен:

git --version

4. GitHub Actions → деплой на сервер

В .github/workflows/deploy.yml добавляем пайплайн:

name: Deploy to VPS

on:

  push:

   branches: [ "main" ]

jobs:

  deploy:

   runs-on: ubuntu-latest

   steps:

    - name: Checkout code

     uses: actions/checkout@v3

    - name: Deploy via SSH

     uses: appleboy/ssh-action@v0.1.6

     with:

      host: ${{ secrets.SERVER_HOST }}

      username: ${{ secrets.SERVER_USER }}

      key: ${{ secrets.SERVER_SSH_KEY }}

      script: |

       rsync -az --delete ./ ${DEPLOY_USER}@${DEPLOY_HOST}:/var/www/my-site/

       sudo systemctl reload nginx

👉 Теперь при каждом пуше в main твой сайт будет обновляться автоматически.

5. systemd для фоновых задач

Если у сайта есть генерация (например, build Tailwind), можно вынести её в systemd:

sudo nano /etc/systemd/system/mysite.service

[Unit]

Description=Build mysite

[Service]

Type=oneshot

WorkingDirectory=/var/www/my-site

ExecStart=/usr/bin/npm run build

[Install]

WantedBy=multi-user.target

Активируем:

sudo systemctl enable mysite

sudo systemctl start mysite

6. Итог: что мы получили

  • Сайт на VPS с Nginx и HTTPS
  • Автодеплой через GitHub Actions
  • systemd для фоновых задач
  • Минимум ручной работы, максимум стабильности 🚀

💡 Это как тренажёрка: один раз настроил программу — и качаешься по ней стабильно.

Если статья была полезной, ставь лайк 👍, подписывайся на Digital Мастерская и делись в комментариях!