fix: автоопределение docker compose v1/v2 и проверка окружения
- Makefile автоматически находит docker compose или docker-compose - Добавлена команда make docker-check для проверки окружения - Создана документация DOCKER_INSTALL.md - Обновлен DEPLOY_QUICKSTART.md с инструкцией по установке Docker - Все docker команды теперь используют переменную DOCKER_COMPOSE Исправляет ошибку: 'docker-compose: No such file or directory'
This commit is contained in:
@@ -1,5 +1,23 @@
|
||||
# 🚀 Быстрый деплой бота с внешним PostgreSQL
|
||||
|
||||
## Шаг 0: Установка Docker (если не установлен)
|
||||
|
||||
```bash
|
||||
# Проверка Docker
|
||||
docker --version
|
||||
docker compose version
|
||||
|
||||
# Если не установлен - см. DOCKER_INSTALL.md
|
||||
# Или быстрая установка (Ubuntu/Debian):
|
||||
sudo apt update
|
||||
sudo apt install -y docker.io docker-compose-plugin
|
||||
sudo systemctl enable docker
|
||||
sudo systemctl start docker
|
||||
|
||||
# Проверка
|
||||
make docker-check
|
||||
```
|
||||
|
||||
## Шаг 1: Подготовка PostgreSQL
|
||||
|
||||
```bash
|
||||
|
||||
170
DOCKER_INSTALL.md
Normal file
170
DOCKER_INSTALL.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# Установка Docker и Docker Compose
|
||||
|
||||
## Для Ubuntu/Debian
|
||||
|
||||
### Установка Docker
|
||||
|
||||
```bash
|
||||
# Обновление системы
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
# Установка зависимостей
|
||||
sudo apt install -y ca-certificates curl gnupg lsb-release
|
||||
|
||||
# Добавление GPG ключа Docker
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
|
||||
# Добавление репозитория Docker
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
# Установка Docker Engine
|
||||
sudo apt update
|
||||
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
|
||||
# Проверка установки
|
||||
docker --version
|
||||
docker compose version
|
||||
```
|
||||
|
||||
### Настройка прав (опционально)
|
||||
|
||||
```bash
|
||||
# Добавить пользователя в группу docker (чтобы не использовать sudo)
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Применить изменения (нужно перелогиниться или выполнить)
|
||||
newgrp docker
|
||||
|
||||
# Проверка
|
||||
docker ps
|
||||
```
|
||||
|
||||
### Автозапуск Docker
|
||||
|
||||
```bash
|
||||
sudo systemctl enable docker
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
## Для других систем
|
||||
|
||||
### CentOS/RHEL/Fedora
|
||||
|
||||
```bash
|
||||
# Установка Docker
|
||||
sudo yum install -y yum-utils
|
||||
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
||||
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
|
||||
# Запуск
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
### Debian
|
||||
|
||||
```bash
|
||||
# Для Debian используйте те же команды что и для Ubuntu
|
||||
# Но в добавлении репозитория используйте:
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
|
||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
```
|
||||
|
||||
## Проверка установки
|
||||
|
||||
```bash
|
||||
# Версия Docker
|
||||
docker --version
|
||||
# Должно вывести: Docker version 24.0.x или новее
|
||||
|
||||
# Версия Docker Compose
|
||||
docker compose version
|
||||
# Должно вывести: Docker Compose version v2.x.x или новее
|
||||
|
||||
# Тест Docker
|
||||
docker run hello-world
|
||||
```
|
||||
|
||||
## Если Docker Compose v1 (старая версия)
|
||||
|
||||
Если у вас установлен `docker-compose` (v1) вместо `docker compose` (v2):
|
||||
|
||||
```bash
|
||||
# Удалите старую версию
|
||||
sudo apt remove docker-compose
|
||||
|
||||
# Установите плагин compose
|
||||
sudo apt install docker-compose-plugin
|
||||
|
||||
# Проверка
|
||||
docker compose version
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Ошибка: "Cannot connect to the Docker daemon"
|
||||
|
||||
```bash
|
||||
# Запустите Docker
|
||||
sudo systemctl start docker
|
||||
|
||||
# Проверьте статус
|
||||
sudo systemctl status docker
|
||||
```
|
||||
|
||||
### Ошибка: "permission denied"
|
||||
|
||||
```bash
|
||||
# Добавьте пользователя в группу docker
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Перелогиньтесь или выполните
|
||||
newgrp docker
|
||||
```
|
||||
|
||||
### Ошибка: "docker-compose: command not found" но Docker Compose установлен
|
||||
|
||||
Makefile автоматически определит правильную команду:
|
||||
- `docker compose` (v2, рекомендуется)
|
||||
- `docker-compose` (v1, устаревшая)
|
||||
|
||||
## Полезные команды
|
||||
|
||||
```bash
|
||||
# Информация о Docker
|
||||
docker info
|
||||
|
||||
# Список запущенных контейнеров
|
||||
docker ps
|
||||
|
||||
# Список всех контейнеров
|
||||
docker ps -a
|
||||
|
||||
# Список образов
|
||||
docker images
|
||||
|
||||
# Очистка неиспользуемых ресурсов
|
||||
docker system prune -a
|
||||
|
||||
# Логи контейнера
|
||||
docker logs container_name
|
||||
|
||||
# Остановить все контейнеры
|
||||
docker stop $(docker ps -aq)
|
||||
|
||||
# Удалить все контейнеры
|
||||
docker rm $(docker ps -aq)
|
||||
```
|
||||
|
||||
## Обновление Docker
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt upgrade docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
```
|
||||
60
Makefile
60
Makefile
@@ -1,5 +1,8 @@
|
||||
# Makefile для телеграм-бота розыгрышей
|
||||
|
||||
# Определяем команду $(DOCKER_COMPOSE) (v2) или docker-compose (v1)
|
||||
DOCKER_COMPOSE := $(shell command -v $(DOCKER_COMPOSE) 2> /dev/null || command -v docker-compose 2> /dev/null)
|
||||
|
||||
.PHONY: help install setup setup-postgres init-db run test clean
|
||||
|
||||
# По умолчанию показываем справку
|
||||
@@ -213,10 +216,27 @@ docker-setup:
|
||||
@mkdir -p logs backups
|
||||
@echo "✅ Настройка завершена!"
|
||||
|
||||
# Проверка Docker и Docker Compose
|
||||
docker-check:
|
||||
@echo "<22> Проверка Docker окружения..."
|
||||
@command -v docker >/dev/null 2>&1 || { echo "❌ Docker не установлен! См. DOCKER_INSTALL.md"; exit 1; }
|
||||
@echo "✅ Docker: $$(docker --version)"
|
||||
@if [ -z "$(DOCKER_COMPOSE)" ]; then \
|
||||
echo "❌ Docker Compose не найден!"; \
|
||||
echo " Установите: sudo apt install docker-compose-plugin"; \
|
||||
echo " Или см. DOCKER_INSTALL.md"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "✅ Docker Compose: $$($(DOCKER_COMPOSE) version)"
|
||||
@docker ps >/dev/null 2>&1 || { echo "❌ Docker daemon не запущен!"; echo " Запустите: sudo systemctl start docker"; exit 1; }
|
||||
@echo "✅ Docker daemon работает"
|
||||
@echo ""
|
||||
@echo "🎉 Все проверки пройдены!"
|
||||
|
||||
# Сборка Docker образа
|
||||
docker-build:
|
||||
docker-build: docker-check
|
||||
@echo "🔨 Сборка Docker образа..."
|
||||
docker compose build --no-cache
|
||||
$(DOCKER_COMPOSE) build --no-cache
|
||||
|
||||
# Запуск контейнеров в фоновом режиме
|
||||
docker-up:
|
||||
@@ -225,7 +245,7 @@ docker-up:
|
||||
echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \
|
||||
exit 1; \
|
||||
fi
|
||||
docker compose --env-file .env.prod up -d
|
||||
$(DOCKER_COMPOSE) --env-file .env.prod up -d
|
||||
@echo "✅ Контейнеры запущены!"
|
||||
@echo "📊 Проверьте статус: make docker-status"
|
||||
@echo "📋 Просмотр логов: make docker-logs"
|
||||
@@ -237,39 +257,39 @@ docker-up-fg:
|
||||
echo "❌ Файл .env.prod не найден! Запустите 'make docker-setup'"; \
|
||||
exit 1; \
|
||||
fi
|
||||
docker compose --env-file .env.prod up
|
||||
$(DOCKER_COMPOSE) --env-file .env.prod up
|
||||
|
||||
# Остановка контейнеров
|
||||
docker-down:
|
||||
@echo "🛑 Остановка контейнеров..."
|
||||
docker compose down
|
||||
$(DOCKER_COMPOSE) down
|
||||
@echo "✅ Контейнеры остановлены!"
|
||||
|
||||
# Перезапуск контейнеров
|
||||
docker-restart:
|
||||
@echo "🔄 Перезапуск контейнеров..."
|
||||
docker compose restart
|
||||
$(DOCKER_COMPOSE) restart
|
||||
@echo "✅ Контейнеры перезапущены!"
|
||||
|
||||
# Просмотр логов бота
|
||||
docker-logs:
|
||||
@echo "📋 Логи бота..."
|
||||
docker compose logs -f bot
|
||||
$(DOCKER_COMPOSE) logs -f bot
|
||||
|
||||
# Просмотр логов базы данных
|
||||
docker-logs-db:
|
||||
@echo "📋 Логи базы данных..."
|
||||
docker compose logs -f db
|
||||
$(DOCKER_COMPOSE) logs -f db
|
||||
|
||||
# Просмотр всех логов
|
||||
docker-logs-all:
|
||||
@echo "📋 Все логи..."
|
||||
docker compose logs -f
|
||||
$(DOCKER_COMPOSE) logs -f
|
||||
|
||||
# Статус контейнеров
|
||||
docker-status:
|
||||
@echo "📊 Статус контейнеров..."
|
||||
@docker compose ps
|
||||
@$(DOCKER_COMPOSE) ps
|
||||
@echo ""
|
||||
@echo "💾 Использование volumes:"
|
||||
@docker volume ls | grep lottery || echo "Нет volumes"
|
||||
@@ -281,20 +301,20 @@ docker-ps:
|
||||
# Применение миграций в контейнере
|
||||
docker-db-migrate:
|
||||
@echo "⬆️ Применение миграций в контейнере..."
|
||||
docker compose exec bot alembic upgrade head
|
||||
$(DOCKER_COMPOSE) exec bot alembic upgrade head
|
||||
@echo "✅ Миграции применены!"
|
||||
|
||||
# Подключение к PostgreSQL в контейнере
|
||||
docker-db-shell:
|
||||
@echo "🐘 Подключение к PostgreSQL..."
|
||||
@docker compose exec db psql -U $${POSTGRES_USER:-lottery_user} -d $${POSTGRES_DB:-lottery_bot_db}
|
||||
@$(DOCKER_COMPOSE) exec db psql -U $${POSTGRES_USER:-lottery_user} -d $${POSTGRES_DB:-lottery_bot_db}
|
||||
|
||||
# Создание бэкапа базы данных
|
||||
docker-db-backup:
|
||||
@echo "💾 Создание бэкапа базы данных..."
|
||||
@mkdir -p backups
|
||||
@BACKUP_FILE=backups/backup_$$(date +%Y%m%d_%H%M%S).sql; \
|
||||
docker compose exec -T db pg_dump -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db} > $$BACKUP_FILE && \
|
||||
$(DOCKER_COMPOSE) exec -T db pg_dump -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db} > $$BACKUP_FILE && \
|
||||
echo "✅ Бэкап создан: $$BACKUP_FILE"
|
||||
|
||||
# Восстановление из бэкапа
|
||||
@@ -307,7 +327,7 @@ docker-db-restore:
|
||||
@echo "Восстановление из: $(BACKUP)"
|
||||
@read -p "Это удалит текущие данные! Продолжить? [y/N] " confirm; \
|
||||
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
|
||||
cat $(BACKUP) | docker compose exec -T db psql -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db}; \
|
||||
cat $(BACKUP) | $(DOCKER_COMPOSE) exec -T db psql -U $${POSTGRES_USER:-lottery_user} $${POSTGRES_DB:-lottery_bot_db}; \
|
||||
echo "✅ База данных восстановлена!"; \
|
||||
else \
|
||||
echo "❌ Отменено"; \
|
||||
@@ -316,12 +336,12 @@ docker-db-restore:
|
||||
# Открыть shell в контейнере бота
|
||||
docker-shell:
|
||||
@echo "🐚 Открытие shell в контейнере бота..."
|
||||
docker compose exec bot /bin/bash
|
||||
$(DOCKER_COMPOSE) exec bot /bin/bash
|
||||
|
||||
# Остановка и удаление контейнеров
|
||||
docker-clean:
|
||||
@echo "🧹 Очистка контейнеров..."
|
||||
docker compose down --remove-orphans
|
||||
$(DOCKER_COMPOSE) down --remove-orphans
|
||||
@echo "✅ Контейнеры удалены!"
|
||||
|
||||
# Полная очистка (включая volumes)
|
||||
@@ -330,7 +350,7 @@ docker-prune:
|
||||
@read -p "Продолжить? [y/N] " confirm; \
|
||||
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
|
||||
echo "🗑️ Полная очистка..."; \
|
||||
docker compose down -v --remove-orphans; \
|
||||
$(DOCKER_COMPOSE) down -v --remove-orphans; \
|
||||
docker system prune -f; \
|
||||
echo "✅ Очистка завершена!"; \
|
||||
else \
|
||||
@@ -340,9 +360,9 @@ docker-prune:
|
||||
# Пересборка и перезапуск
|
||||
docker-rebuild:
|
||||
@echo "🔄 Пересборка и перезапуск..."
|
||||
docker compose down
|
||||
docker compose build --no-cache
|
||||
docker compose --env-file .env.prod up -d
|
||||
$(DOCKER_COMPOSE) down
|
||||
$(DOCKER_COMPOSE) build --no-cache
|
||||
$(DOCKER_COMPOSE) --env-file .env.prod up -d
|
||||
@echo "✅ Готово!"
|
||||
@make docker-logs
|
||||
|
||||
|
||||
Reference in New Issue
Block a user