🚀 CI/CD шпаргалка
Автоматический деплой сайта через GitHub + Docker
📌 Что такое CI/CD
Автоматическая доставка кода на сервер.
git push → GitHub → сервер → сайт обновился
🧠 Как это работает
1. Ты пушишь код
2. Запускается pipeline
3. Сервер подключается
4. Обновляет проект
5. Docker пересобирает контейнер
6. Сайт обновляется
📊 Схема CI/CD
💻 Локальный код
→
📦 GitHub
→
⚙️ CI/CD
→
🖥 Сервер
→
🐳 Docker
→
🌐 Сайт
🧱 Структура проекта
mysite/
├── html/
│ ├── index.html
│ ├── css/
│ ├── js/
│ └── images/
├── Dockerfile
└── docker-compose.yml
⚙️ Dockerfile
FROM nginx:alpine
COPY html /usr/share/nginx/html
EXPOSE 80
⚙️ docker-compose.yml
services:
mysite:
build: .
container_name: mysite
restart: always
ports:
- "8081:80"
📦 Репозиторий
git init
git add .
git commit -m "init"
git remote add origin git@github.com:USERNAME/mysite.git
git branch -M main
git push -u origin main
🔐 SSH доступ
ssh-keygen -t ed25519
Добавить ключ:
• сервер → ~/.ssh/authorized_keys
• GitHub → SSH Keys
🔑 Secrets
Settings → Secrets → Actions
SSH_PRIVATE_KEY
SERVER_IP
SERVER_USER
🖥 Сервер
apt update
apt install docker.io docker-compose -y
cd /home
git clone git@github.com:USERNAME/mysite.git
cd mysite
docker compose up -d --build
🤖 CI/CD pipeline
.github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/mysite
git pull
docker compose down
docker compose up -d --build
🚀 Деплой
git add .
git commit -m "update"
git push
⚠️ Частые ошибки
fatal: not a git repository
→ нет git clone
No event triggers defined in on
→ ошибка в YAML
нет обновлений
→ проверь git pull и docker
🚀 Live CI/CD Demo
💻Code
📦GitHub
⚙️CI
🖥Server
🐳Docker
🌐Live