/opt/canhelp
NameSizeModeActions
.git/-0755rm
.github/-0755rm
apps/-0755rm
backups/-0755rm
logs/-0755rm
node_modules/-0755rm
packages/-0755rm
scripts/-0755rm
uploads/-0755rm
.env37350644editdlrm
.env.example19780644editdlrm
.gitignore10710644editdlrm
CLAUDE.md34820644editdlrm
deploy.log5680644editdlrm
DEPLOY.md38710644editdlrm
docker-compose.yml8350644editdlrm
ecosystem.config.js9830644editdlrm
find_missing_keys.js9900644editdlrm
package-lock.json2015120644editdlrm
package.json13950644editdlrm
ru_keys.txt287680644editdlrm
STACK.md37450644editdlrm
turbo.json4620644editdlrm
uk_keys.txt287680644editdlrm
Edit: /opt/canhelp/DEPLOY.md (3871B)
# Деплой мобильного приложения ## Триггеры CI/CD Оба pipeline запускаются автоматически при создании git-тега вида `v*`: ```bash # Поднять версию в pubspec.yaml, затем: git add apps/mobile/pubspec.yaml git commit -m "chore: bump version to 1.0.0+1" git tag v1.0.0 git push origin main --tags ``` Или вручную через GitHub → Actions → выбрать workflow → Run workflow. --- ## GitHub Secrets (Settings → Secrets → Actions) ### Общие | Secret | Описание | |--------|----------| | `PRODUCTION_API_URL` | `https://api.canhelp.gr` | | `GOOGLE_CLIENT_ID` | Web OAuth 2.0 Client ID | | `GOOGLE_IOS_CLIENT_ID` | iOS OAuth 2.0 Client ID | ### iOS | Secret | Как получить | |--------|-------------| | `IOS_CERTIFICATE_BASE64` | `base64 -i Certificates.p12 \| pbcopy` | | `IOS_CERTIFICATE_PASSWORD` | Пароль от .p12 | | `KEYCHAIN_PASSWORD` | Любой случайный пароль для временного keychain | | `IOS_PROVISIONING_PROFILE_BASE64` | `base64 -i profile.mobileprovision \| pbcopy` | | `APP_STORE_CONNECT_API_KEY_ID` | App Store Connect → Users → Keys → Key ID | | `APP_STORE_CONNECT_API_KEY_ISSUER_ID` | Issuer ID (на той же странице) | | `APP_STORE_CONNECT_API_KEY_CONTENT` | Содержимое .p8 файла (без переносов строк) | ### Важно для Push на iOS / TestFlight - Для доставки push в TestFlight недостаточно только FCM ключей. - Нужно, чтобы в Firebase Console был загружен Apple APNs Auth Key (.p8) для iOS-приложения `gr.canhelp.app`. - В Apple Developer для App ID должны быть включены Push Notifications, а release provisioning profile должен содержать `aps-environment=production`. - Если push-токен появляется, но уведомления не приходят, обычно проблема именно в связке APNs ↔ Firebase, а не в коде Flutter. ### Android | Secret | Как получить | |--------|-------------| | `ANDROID_KEYSTORE_BASE64` | `base64 -i canhelp-release.jks \| pbcopy` | | `ANDROID_KEYSTORE_PASSWORD` | Пароль keystore | | `ANDROID_KEY_ALIAS` | Alias ключа | | `ANDROID_KEY_PASSWORD` | Пароль ключа | | `PLAY_STORE_JSON_KEY` | Содержимое JSON-ключа сервисного аккаунта Google Play | --- ## Локальный запуск (без CI) ```bash # iOS → TestFlight cd apps/mobile/ios bundle exec fastlane beta # Android → Play Store Internal cd apps/mobile/android # Положить play-store-key.json в android/fastlane/ bundle exec fastlane internal ``` --- ## SEO: обновление sitemap в поиске После деплоя сайта можно принудительно отправить sitemap в поисковики: ```bash cd /Users/exalted/git/CanHelp npm run seo:submit-sitemap ``` Поддерживаются переменные окружения: - `SITEMAP_URL` (по умолчанию `https://canhelp.gr/sitemap.xml`) - `PING_BING` (`1`/`0`, по умолчанию `1`) - `GSC_SITE` (например, `sc-domain:canhelp.gr` или URL-prefix свойство) - `GSC_ACCESS_TOKEN` (OAuth access token c scope `https://www.googleapis.com/auth/webmasters`) Если `GSC_SITE` и `GSC_ACCESS_TOKEN` не заданы, отправка в Google Search Console пропускается, но ping в Bing выполняется. --- ## Что куда летит | Workflow | Файл | Куда | |----------|------|------| | `mobile-ios.yml` | `.ipa` | TestFlight (Apple) | | `mobile-android.yml` | `.aab` | Play Store Internal Track |