# CI/CD Documentation ## πŸ“‹ Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ 1. [ΠžΠ±Π·ΠΎΡ€ CI/CD](#ΠΎΠ±Π·ΠΎΡ€-cicd) 2. [АрхитСктура ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°](#Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°) 3. [Настройка Drone CI](#настройка-drone-ci) 4. [ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ](#конфигурация-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ) 5. [Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС](#локальноС-тСстированиС) 6. [Π”Π΅ΠΏΠ»ΠΎΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅](#Π΄Π΅ΠΏΠ»ΠΎΠΉ-ΠΈ-ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅) 7. [ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ увСдомлСния](#ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³-ΠΈ-увСдомлСния) 8. [УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ](#устранСниС-Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ) ## πŸš€ ΠžΠ±Π·ΠΎΡ€ CI/CD CatLink ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соврСмСнный CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π½Π° Π±Π°Π·Π΅ **Drone CI** для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ: - πŸ” **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° качСства ΠΊΠΎΠ΄Π°** (Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) - πŸ§ͺ **АвтоматизированноС тСстированиС** - πŸ”’ **Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ бСзопасности** - πŸ—οΈ **Π‘Π±ΠΎΡ€ΠΊΠ° Docker ΠΎΠ±Ρ€Π°Π·ΠΎΠ²** - πŸ“€ **ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ Π² registry** - πŸš€ **АвтоматичСский Π΄Π΅ΠΏΠ»ΠΎΠΉ** Π½Π° staging ΠΈ production ### ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСимущСства - βœ… **Автоматизация** всСх этапов развСртывания - βœ… **ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ΄Π°** обСспСчиваСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ - βœ… **Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ** Ρ‡Π΅Ρ€Π΅Π· сканированиС уязвимостСй - βœ… **ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ** благодаря Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ - βœ… **Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ** развСртывания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ## πŸ—οΈ АрхитСктура ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ### Π­Ρ‚Π°ΠΏΡ‹ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ```mermaid graph TD A[Git Push] --> B[Prepare] B --> C[Lint & Code Quality] C --> D[Build & Test] D --> E[Security Scan] E --> F[Build Production] F --> G[Publish Images] G --> H[Deploy Staging] H --> I[Deploy Production] I --> J[Notifications] ``` ### 1. **Prepare** - ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° - Настройка окруТСния - Установка зависимостСй - Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ кэша ### 2. **Lint** - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° качСства ΠΊΠΎΠ΄Π° - Python: `flake8`, `black`, `isort` - TypeScript: `ESLint`, `Prettier` - Docker: `hadolint` - YAML: `yamllint` - Security: `bandit`, `safety` ### 3. **Build & Test** - Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ тСстированиС - Π‘Π±ΠΎΡ€ΠΊΠ° Docker ΠΎΠ±Ρ€Π°Π·ΠΎΠ² - Запуск unit тСстов - API тСстированиС - Frontend тСсты - Integration тСсты ### 4. **Security Scan** - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° бСзопасности - Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ зависимостСй - Анализ исходного ΠΊΠΎΠ΄Π° - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Docker ΠΎΠ±Ρ€Π°Π·ΠΎΠ² - Аудит ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ### 5. **Build Production** - ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ сборка - ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ - Multi-stage builds - ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ - ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π»Π΅ΠΉΠ±Π»Ρ‹ ### 6. **Publish** - ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ - Push Π² Docker registry - Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ release notes - ВСрсионированиС - УвСдомлСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ### 7. **Deploy** - Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ - Staging Π΄Π΅ΠΏΠ»ΠΎΠΉ для тСстирования - Production Π΄Π΅ΠΏΠ»ΠΎΠΉ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ - Rolling updates Π±Π΅Π· простоя - Health checks ## πŸ› οΈ Настройка Drone CI ### ВрСбования - Drone CI сСрвСр - Docker registry (Docker Hub, GitLab Registry, etc.) - SSH доступ ΠΊ сСрвСрам - ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ### ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния #### ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ```bash # Docker Registry DOCKER_REGISTRY=registry.hub.docker.com DOCKER_USERNAME=your_username DOCKER_PASSWORD=your_password # Staging Environment STAGING_HOST=staging.catlink.dev STAGING_SSH_KEY=base64_encoded_ssh_key STAGING_USER=deploy # Production Environment PRODUCTION_HOST=catlink.dev PRODUCTION_SSH_KEY=base64_encoded_ssh_key PRODUCTION_USER=deploy PRODUCTION_SECRET_KEY=super_secret_key PRODUCTION_POSTGRES_PASSWORD=secure_db_password PRODUCTION_EMAIL_HOST=smtp.gmail.com PRODUCTION_EMAIL_USER=your_email@gmail.com PRODUCTION_EMAIL_PASSWORD=your_app_password ``` #### Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ```bash # Notifications SLACK_WEBHOOK_URL=https://hooks.slack.com/services/... DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/... # Monitoring SENTRY_DSN=https://...@sentry.io/... PRODUCTION_SENTRY_DSN=https://...@sentry.io/... GOOGLE_ANALYTICS_ID=GA_MEASUREMENT_ID # Backup PRODUCTION_BACKUP_S3_BUCKET=catlink-backups ``` ### Настройка SSH ΠΊΠ»ΡŽΡ‡Π΅ΠΉ 1. **ГСнСрация SSH ΠΊΠ»ΡŽΡ‡Π°**: ```bash ssh-keygen -t rsa -b 4096 -C "deploy@catlink.dev" -f deploy_key ``` 2. **ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² base64**: ```bash cat deploy_key | base64 -w 0 ``` 3. **Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π½Π° сСрвСр**: ```bash cat deploy_key.pub >> ~/.ssh/authorized_keys ``` ## βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ ### Staging ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ **ЦСль**: ВСстированиС Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ **Π₯арактСристики**: - АвтоматичСский Π΄Π΅ΠΏΠ»ΠΎΠΉ с main Π²Π΅Ρ‚ΠΊΠΈ - ВСстовыС Π΄Π°Π½Π½Ρ‹Π΅ - МСнСС строгиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности - БыстроС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ **URL**: `https://staging.catlink.dev` ### Production ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ **ЦСль**: Π Π°Π±ΠΎΡ‡Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ **Π₯арактСристики**: - Π”Π΅ΠΏΠ»ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚Π΅Π³ΠΎΠ² вСрсий - Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности - Π Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ - Rolling deployment Π±Π΅Π· простоя - ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ **URL**: `https://catlink.dev` ## πŸ§ͺ Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС ### Make ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для CI/CD ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° качСства ΠΊΠΎΠ΄Π° make ci-lint # Запуск тСстов make ci-test # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° бСзопасности make ci-security # Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ сборка make ci-build # ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ make ci-pipeline # Валидация Drone ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ make drone-validate ``` ### Π ΡƒΡ‡Π½ΠΎΠΉ запуск скриптов ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π° ./scripts/ci/lint.sh # ВСстированиС ./scripts/ci/test.sh # Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ бСзопасности ./scripts/ci/security-scan.sh # Π‘Π±ΠΎΡ€ΠΊΠ° ./scripts/ci/build.sh # ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ сборка ./scripts/ci/build-production.sh ``` ### ВСстированиС Docker ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ```bash # Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ тСстированиС docker build -t catlink-backend:test backend/ docker build -t catlink-frontend:test frontend/linktree-frontend/ # Запуск для тСстирования docker run -d -p 8001:8000 --name test-backend catlink-backend:test docker run -d -p 3001:3000 --name test-frontend catlink-frontend:test # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности curl http://localhost:8001/api/ curl http://localhost:3001/ # ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° docker stop test-backend test-frontend docker rm test-backend test-frontend ``` ## πŸš€ Π”Π΅ΠΏΠ»ΠΎΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ### АвтоматичСский Π΄Π΅ΠΏΠ»ΠΎΠΉ **Staging Π΄Π΅ΠΏΠ»ΠΎΠΉ**: - Π’Ρ€ΠΈΠ³Π³Π΅Ρ€: Push Π² `main` Π²Π΅Ρ‚ΠΊΡƒ - ВрСмя: ~10-15 ΠΌΠΈΠ½ΡƒΡ‚ - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³, тСсты, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ **Production Π΄Π΅ΠΏΠ»ΠΎΠΉ**: - Π’Ρ€ΠΈΠ³Π³Π΅Ρ€: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π΅Π³Π° `v*.*.*` - ВрСмя: ~20-30 ΠΌΠΈΠ½ΡƒΡ‚ - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: Полная валидация + Ρ€ΡƒΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ### Π ΡƒΡ‡Π½ΠΎΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ```bash # Staging make ci-deploy-staging # Production (остороТно!) make ci-deploy-production ``` ### Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π΅Π»ΠΈΠ·Π° ```bash # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π΅Π³Π° для production дСплоя git tag v1.2.3 git push origin v1.2.3 # Drone автоматичСски запустит production Π΄Π΅ΠΏΠ»ΠΎΠΉ ``` ### ΠžΡ‚ΠΊΠ°Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ```bash # SSH Π½Π° сСрвСр ssh production # ΠžΡ‚ΠΊΠ°Ρ‚ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии cd /opt/catlink ./manage-production.sh restore /opt/catlink/backups/backup-production-YYYYMMDD-HHMMSS.sql.gz # Или Ρ‡Π΅Ρ€Π΅Π· Docker ΠΎΠ±Ρ€Π°Π·Ρ‹ docker-compose -f docker-compose.production.yml down # Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ Π² docker-compose.production.yml docker-compose -f docker-compose.production.yml up -d ``` ## πŸ“Š ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ увСдомлСния ### Health checks **АвтоматичСскиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ**: - API Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ (`/api/health/`) - Frontend Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° (`/`) - Database ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ - Redis Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ **ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ**: ```bash # Бтатус сСрвисов ./manage-production.sh status # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ./manage-production.sh health # ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ рСсурсов ./monitor-production.sh ``` ### УвСдомлСния **Slack интСграция**: ```bash # Настройка Π² Drone secrets SLACK_WEBHOOK_URL=https://hooks.slack.com/services/... ``` **Discord интСграция**: ```bash # Настройка Π² Drone secrets DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/... ``` **Email увСдомлСния**: - ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ошибки дСплоя - ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ - Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ дСплоя Π² production ### Π›ΠΎΠ³ΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ```bash # ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π»ΠΎΠ³ΠΎΠ² дСплоя ssh production cd /opt/catlink ./manage-production.sh logs # ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ./monitor-production.sh # Π›ΠΎΠ³ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сСрвиса ./manage-production.sh logs web ./manage-production.sh logs frontend ``` ## πŸ”§ УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ ### ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ #### 1. Ошибка Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Docker registry **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°**: `Error response from daemon: pull access denied` **РСшСниС**: ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ echo $DOCKER_USERNAME echo $DOCKER_PASSWORD # ΠŸΠ΅Ρ€Π΅Π»ΠΎΠ³ΠΈΠ½ΡŒΡ‚Π΅ΡΡŒ docker logout docker login ``` #### 2. SSH ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°**: `Permission denied (publickey)` **РСшСниС**: ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ SSH ΠΊΠ»ΡŽΡ‡ ssh-keygen -y -f ~/.ssh/id_rsa # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² Drone cat ~/.ssh/id_rsa | base64 -w 0 # Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ Π½Π° сСрвСр ssh-copy-id user@server ``` #### 3. Π”Π΅ΠΏΠ»ΠΎΠΉ завис **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°**: Π”Π΅ΠΏΠ»ΠΎΠΉ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ **РСшСниС**: ```bash # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ статус ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker-compose ps # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈ docker-compose logs # ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ сСрвисы docker-compose restart # Π’ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС - ΠΏΠΎΠ»Π½Ρ‹ΠΉ пСрСзапуск docker-compose down docker-compose up -d ``` #### 4. ВСсты ΠΏΠ°Π΄Π°ΡŽΡ‚ Π² CI **ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°**: ВСсты проходят локально, Π½ΠΎ ΠΏΠ°Π΄Π°ΡŽΡ‚ Π² CI **РСшСниС**: ```bash # ЗапуститС тСсты локально ΠΊΠ°ΠΊ Π² CI make ci-test # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния env | grep -E "(TEST_|CI_|DJANGO_)" # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ зависимости pip list npm list ``` ### ΠžΡ‚Π»Π°Π΄ΠΊΠ° Drone ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ```bash # Валидация ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ make drone-validate # Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ запуск drone exec # ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π»ΠΎΠ³ΠΎΠ² drone build ls smartsoltech/links drone build logs smartsoltech/links ``` ### ΠžΡ‚ΠΊΠ°Ρ‚ дСплоя ```bash # 1. Быстрый ΠΎΡ‚ΠΊΠ°Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Docker docker tag catlink-backend:previous catlink-backend:latest docker tag catlink-frontend:previous catlink-frontend:latest docker-compose up -d # 2. ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‡Π΅Ρ€Π΅Π· бэкап ./manage-production.sh restore backup-file.sql.gz # 3. ΠžΡ‚ΠΊΠ°Ρ‚ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии # Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ Π² docker-compose.production.yml # ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ сСрвисы ``` ### ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ - **Email**: support@catlink.dev - **Slack**: #devops-support - **ДокумСнтация**: [docs/](./README.md) - **Issues**: GitHub Issues --- ## πŸ“š Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы - [Drone CI Documentation](https://docs.drone.io/) - [Docker Best Practices](https://docs.docker.com/develop/dev-best-practices/) - [Django Deployment](https://docs.djangoproject.com/en/stable/howto/deployment/) - [Next.js Deployment](https://nextjs.org/docs/deployment) - [Docker Security](https://docs.docker.com/engine/security/) **ПослСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅**: $(date) **ВСрсия Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ**: 1.0