- Подготовка сервера на DigitalOcean
- Подготовка репозитория на GitHub
- Создание SSH-ключей для GitHub Actions
- Настройка GitHub Actions
- Тестирование и отладка
- Рекомендации и улучшения
- Зарегистрируйтесь (или войдите) на DigitalOcean
- Нажмите «Create Droplet» и выберите образ (рекомендуется Ubuntu 20.04 LTS или 22.04 LTS)
- На этапе настройки безопасности добавьте свой публичный SSH-ключ
- Выберите тарифный план (для небольшого Python-приложения базовый план будет достаточным)
- Завершите создание droplet и запомните его IP-адрес
Подключитесь к серверу по SSH:
ssh your_username@your_droplet_ipСоздание пользователя для деплоя:
# Создаем пользователя deploy и задаем пароль
sudo adduser deploy
# Добавляем пользователя в группу sudo
sudo usermod -aG sudo deploy
# Переключаемся на нового пользователя
su - deployОбновление системы и установка Python:
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv git -y
# Создаем директорию для приложения
mkdir ~/my_python_app
cd ~/my_python_app
# Создаем виртуальное окружение
python3 -m venv venv
source venv/bin/activate- Создайте новый репозиторий на GitHub
- Инициализируйте репозиторий локально
- Добавьте код и requirements.txt
my-python-app/
├── app.py
├── requirements.txt
└── .github/
└── workflows/
└── deploy.yml
- Создание ключей:
ssh-keygen -t rsa -b 4096 -C "github-actions-deploy" -f github_actions_key- Добавление публичного ключа на сервер:
cat github_actions_key.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysДобавьте в Settings → Secrets and variables → Actions:
SSH_HOST: IP-адрес dropletSSH_USERNAME: имя пользователя (deploy)SSH_PRIVATE_KEY: содержимое приватного ключа
Создайте .github/workflows/deploy.yml:
name: Deploy Python App to DigitalOcean
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Deploy to DigitalOcean Droplet via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
cd ~/my_python_app
git pull origin main
source venv/bin/activate
pip install -r requirements.txt
pkill -f app.py || true
nohup python3 app.py > app.log 2>&1 &- Коммит и пуш изменений:
git add .
git commit -m "Настройка CI/CD деплоя на DigitalOcean"
git push origin main- Проверьте выполнение workflow на вкладке Actions
- Проверьте работу приложения на сервере
- Используйте systemd или Supervisor для управления процессами
- Настройте автоматический перезапуск при сбоях
- Не храните приватные ключи в репозитории
- Используйте GitHub Secrets
- Ограничьте права пользователя deploy
- Добавьте тесты перед деплоем
- Настройте уведомления в Slack/email
- Добавьте мониторинг работы приложения