From 78ae1a557dbdfddfa4ac78251021efd0885f972d Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 20 Nov 2025 01:41:54 +0300 Subject: [PATCH] mnemo --- .forgejo/workflows/deploy.yaml | 2 +- mnemo_cards_backend/PROGRESS.md | 10 ++++---- mnemo_cards_backend/TODO.md | 2 +- mnemo_cards_backend/build_app.sh | 12 +++++----- mnemo_cards_web_v2/CORS_FIX.md | 2 +- mnemo_cards_web_v2/deploy/README.md | 6 ++--- .../deploy/setup-vscode-domain.sh | 2 +- tools/README.md | 6 ++--- tools/ci/README.md | 4 ++-- tools/ci/deploy.yaml | 2 +- tools/deploy/backend-build_app_webroot.sh | 6 ++--- tools/docs/CI_CD_SETUP.md | 24 +++++++++---------- tools/scripts/check_deploy_ready.sh | 4 ++-- tools/scripts/fix_ssh_key.sh | 2 +- 14 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 0f138dd..4e851fa 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -93,7 +93,7 @@ jobs: run: | flutter pub get flutter build web --release \ - --dart-define=API_BASE_URL=https://api.memo-cards.online:8444 \ + --dart-define=API_BASE_URL=https://api.mnemo-cards.online:8444 \ --dart2js-optimization=O4 - name: Deploy Web App diff --git a/mnemo_cards_backend/PROGRESS.md b/mnemo_cards_backend/PROGRESS.md index cdcd614..bdbe3c5 100644 --- a/mnemo_cards_backend/PROGRESS.md +++ b/mnemo_cards_backend/PROGRESS.md @@ -2,7 +2,7 @@ ## 2025-11-16 (Evening) - Let's Encrypt SSL Certificate Setup ✅ COMPLETED -**Feature:** SSL Certificate Configuration for API Domain (api.memo-cards.online) +**Feature:** SSL Certificate Configuration for API Domain (api.mnemo-cards.online) **Completed Tasks:** - ✅ Configured nginx with ACME challenge support for Let's Encrypt @@ -19,17 +19,17 @@ - **Automation:** Cron job for daily certificate renewal with nginx reload **Configuration Details:** -- **Domain:** api.memo-cards.online +- **Domain:** api.mnemo-cards.online - **Backend Port:** 8081 (corrected from 8443) - **Webroot Path:** /var/www/html/.well-known/acme-challenge/ -- **Certificate Path:** /etc/letsencrypt/live/api.memo-cards.online/ +- **Certificate Path:** /etc/letsencrypt/live/api.mnemo-cards.online/ **Scripts Updated:** - `backend-build_app_webroot.sh` - Changed from dual HTTP/HTTPS mode to HTTPS-only mode, added automatic nginx config update - `backend-build_app.sh` - Changed from dual HTTP/HTTPS mode to HTTPS-only mode, fixed port configuration, replaced netstat with ss/lsof, added automatic nginx config update **Documentation Updated:** -- `public/open_api.yaml` - Updated server URL from localhost:8080 to https://api.memo-cards.online +- `public/open_api.yaml` - Updated server URL from localhost:8080 to https://api.mnemo-cards.online **Nginx Configuration:** - Updated `/etc/nginx/sites-available/api` for HTTPS-only mode @@ -47,7 +47,7 @@ - `backend-build_app.sh` - Now requests multi-domain certificate with all subdomains - Nginx configs updated to use mnemo-cards.online certificate for API - Backend service configured to use shared certificate path -- Fixed all domain names from memo-cards to mnemo-cards +- Fixed all domain names from mnemo-cards to mnemo-cards **Next Action:** - Run backend-build_app.sh to generate multi-domain certificate diff --git a/mnemo_cards_backend/TODO.md b/mnemo_cards_backend/TODO.md index e7d6204..d5425a3 100644 --- a/mnemo_cards_backend/TODO.md +++ b/mnemo_cards_backend/TODO.md @@ -12,7 +12,7 @@ ## Medium Priority - [ ] Review existing codebase architecture -- [x] **COMPLETED** - Set up Let's Encrypt SSL certificates for api.memo-cards.online with automatic renewal +- [x] **COMPLETED** - Set up Let's Encrypt SSL certificates for api.mnemo-cards.online with automatic renewal - [x] **COMPLETED** - Update nginx configuration for HTTPS-only API (redirect HTTP to HTTPS, proxy to port 8443) - [x] **COMPLETED** - Changed to multi-domain certificate approach (bypasses DNS subdomain requirements) - [ ] Verify HTTPS-only functionality and test API endpoints over SSL diff --git a/mnemo_cards_backend/build_app.sh b/mnemo_cards_backend/build_app.sh index 3f7506b..57e7c74 100644 --- a/mnemo_cards_backend/build_app.sh +++ b/mnemo_cards_backend/build_app.sh @@ -19,10 +19,10 @@ sudo cp server_build.exe server.exe rm server_build.exe # Проверяем наличие Let's Encrypt сертификатов для двойного режима -if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ]; then +if [ -d "/etc/letsencrypt/live/api.mnemo-cards.online" ]; then echo "✅ Let's Encrypt сертификаты найдены. Запускаем в двойном режиме (HTTP + HTTPS)" # Обновляем systemd сервис для двойного режима - sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service + sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.mnemo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service else echo "⚠️ Let's Encrypt сертификаты не найдены. Пытаемся создать..." @@ -30,16 +30,16 @@ else sudo systemctl stop mnemo_cards_server 2>/dev/null || true # Пытаемся получить Let's Encrypt сертификат - echo "🔐 Получаем Let's Encrypt сертификат для домена api.memo-cards.online..." - if sudo certbot certonly --standalone -d api.memo-cards.online --non-interactive --agree-tos --email admin@api.memo-cards.online; then + echo "🔐 Получаем Let's Encrypt сертификат для домена api.mnemo-cards.online..." + if sudo certbot certonly --standalone -d api.mnemo-cards.online --non-interactive --agree-tos --email admin@api.mnemo-cards.online; then echo "✅ Let's Encrypt сертификат успешно создан!" echo "🚀 Запускаем в двойном режиме (HTTP + HTTPS)" # Обновляем systemd сервис для двойного режима - sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service + sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.mnemo-cards.online -a 0.0.0.0 -p 8081|' /etc/systemd/system/mnemo_cards_server.service else echo "❌ Не удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме" echo "💡 Убедитесь, что:" - echo " - Домен api.memo-cards.online указывает на этот сервер" + echo " - Домен api.mnemo-cards.online указывает на этот сервер" echo " - Порт 80 доступен извне" echo " - Firewall разрешает входящие соединения на порт 80" # Возвращаем обычный режим diff --git a/mnemo_cards_web_v2/CORS_FIX.md b/mnemo_cards_web_v2/CORS_FIX.md index 207e7f0..abda6af 100644 --- a/mnemo_cards_web_v2/CORS_FIX.md +++ b/mnemo_cards_web_v2/CORS_FIX.md @@ -103,7 +103,7 @@ flutter run -d chrome --web-port=8080 3. **Nginx** настроен без конфликтующих COEP/COOP headers ✅ Текущая конфигурация позволяет: -- ✅ Запросы с `memo-cards.online` на `https://api.mnemo-cards.online` +- ✅ Запросы с `mnemo-cards.online` на `https://api.mnemo-cards.online` - ✅ Все необходимые HTTP методы и headers - ✅ Preflight OPTIONS запросы diff --git a/mnemo_cards_web_v2/deploy/README.md b/mnemo_cards_web_v2/deploy/README.md index 6fe71c7..d32851a 100644 --- a/mnemo_cards_web_v2/deploy/README.md +++ b/mnemo_cards_web_v2/deploy/README.md @@ -6,7 +6,7 @@ mnemo_cards_web_v2/ ├── deploy.sh # Wrapper script (run this!) └── deploy/ - ├── nginx.conf # Main domain nginx config (memo-cards.online) + ├── nginx.conf # Main domain nginx config (mnemo-cards.online) ├── vscode-nginx.conf # VSCode server nginx config ├── setup-vscode-domain.sh # VSCode domain setup script └── README.md # This file @@ -33,7 +33,7 @@ cd mnemo_cards_web_v2 This wrapper script will: 1. Use centralized config from `tools/deploy/web-app/config.sh` 2. Build the Flutter web app locally with `-O4` optimization -3. Deploy to `memo-cards.online` using `deploy/nginx.conf` +3. Deploy to `mnemo-cards.online` using `deploy/nginx.conf` ### Setup VSCode Server (Optional) @@ -46,7 +46,7 @@ cd deploy All deployment settings are in `tools/deploy/web-app/config.sh`: - Server IP: `147.45.152.129` -- Main domain: `memo-cards.online` +- Main domain: `mnemo-cards.online` - API URL: `https://api.mnemo-cards.online` (nginx reverse proxy on port 443) ## 📝 Project-Specific Files diff --git a/mnemo_cards_web_v2/deploy/setup-vscode-domain.sh b/mnemo_cards_web_v2/deploy/setup-vscode-domain.sh index 4ab3bb1..1435884 100644 --- a/mnemo_cards_web_v2/deploy/setup-vscode-domain.sh +++ b/mnemo_cards_web_v2/deploy/setup-vscode-domain.sh @@ -131,7 +131,7 @@ SYSTEMD_EOF # Stop nginx temporarily for certificate issuance systemctl stop nginx 2>/dev/null || true - if certbot certonly --standalone -d vscode.mnemo-cards.online --non-interactive --agree-tos --email admin@memo-cards.online; then + if certbot certonly --standalone -d vscode.mnemo-cards.online --non-interactive --agree-tos --email admin@mnemo-cards.online; then echo "✅ Let's Encrypt certificate obtained successfully for vscode.mnemo-cards.online!" else echo "❌ Failed to get Let's Encrypt certificate. Generating self-signed certificate..." diff --git a/tools/README.md b/tools/README.md index 0e2e346..c8f9e47 100644 --- a/tools/README.md +++ b/tools/README.md @@ -54,8 +54,8 @@ tools/ ### Компоненты -- **Backend** (Dart) → `api.memo-cards.online` -- **Web App** (Flutter) → `memo-cards.online` +- **Backend** (Dart) → `api.mnemo-cards.online` +- **Web App** (Flutter) → `mnemo-cards.online` - **Mobile App** (Flutter) → GitHub releases ## Требования @@ -67,7 +67,7 @@ tools/ ### Деплой - SSH доступ к серверу `147.45.152.129` -- DNS: `memo-cards.online`, `api.memo-cards.online` +- DNS: `mnemo-cards.online`, `api.mnemo-cards.online` - Forgejo с настроенными secrets ## Документация diff --git a/tools/ci/README.md b/tools/ci/README.md index a57e2f1..658001f 100644 --- a/tools/ci/README.md +++ b/tools/ci/README.md @@ -50,8 +50,8 @@ Forgejo Actions workflows для автоматической сборки, те - **Mobile App**: Сборка APK для Android и app для iOS ### 3. Развертывание -- **Backend**: Автоматическое обновление сервиса на `api.memo-cards.online` -- **Web App**: Rsync на веб сервер `memo-cards.online` + перезагрузка Nginx +- **Backend**: Автоматическое обновление сервиса на `api.mnemo-cards.online` +- **Web App**: Rsync на веб сервер `mnemo-cards.online` + перезагрузка Nginx - **Mobile App**: Создание GitHub релиза с APK ## Секреты Forgejo diff --git a/tools/ci/deploy.yaml b/tools/ci/deploy.yaml index 05f4946..432ee89 100644 --- a/tools/ci/deploy.yaml +++ b/tools/ci/deploy.yaml @@ -68,7 +68,7 @@ jobs: run: | cd mnemo_cards_web_v2 flutter pub get - flutter build web --release --dart-define=API_BASE_URL=https://api.memo-cards.online:8444 --dart2js-optimization=O4 + flutter build web --release --dart-define=API_BASE_URL=https://api.mnemo-cards.online:8444 --dart2js-optimization=O4 - name: Deploy Web App run: | diff --git a/tools/deploy/backend-build_app_webroot.sh b/tools/deploy/backend-build_app_webroot.sh index 835138e..2a629ad 100755 --- a/tools/deploy/backend-build_app_webroot.sh +++ b/tools/deploy/backend-build_app_webroot.sh @@ -88,8 +88,8 @@ else sudo chown -R www-data:www-data /var/www/html # Пытаемся получить Let's Encrypt сертификат через webroot - echo "🔐 Получаем Let's Encrypt сертификат через webroot для домена api.memo-cards.online..." - if sudo certbot certonly --webroot -w /var/www/html -d api.memo-cards.online --non-interactive --agree-tos --email admin@api.mnemo-cards.online; then + echo "🔐 Получаем Let's Encrypt сертификат через webroot для домена api.mnemo-cards.online..." + if sudo certbot certonly --webroot -w /var/www/html -d api.mnemo-cards.online --non-interactive --agree-tos --email admin@api.mnemo-cards.online; then echo "✅ Let's Encrypt сертификат успешно создан через webroot!" echo "🚀 Запускаем в HTTPS-only режиме" # Обновляем systemd сервис для HTTPS-only режима @@ -98,7 +98,7 @@ else echo "❌ Не удалось создать Let's Encrypt сертификат через webroot" echo "💡 Убедитесь, что:" echo " - У вас установлен и запущен веб-сервер (nginx/apache)" - echo " - Домен api.memo-cards.online указывает на этот сервер" + echo " - Домен api.mnemo-cards.online указывает на этот сервер" echo " - Директория /var/www/html доступна для записи certbot" echo " - Firewall разрешает входящие соединения на порт 80" echo " - Веб-сервер правильно настроен для обслуживания .well-known/acme-challenge/" diff --git a/tools/docs/CI_CD_SETUP.md b/tools/docs/CI_CD_SETUP.md index 3ae13c0..cd48eb0 100644 --- a/tools/docs/CI_CD_SETUP.md +++ b/tools/docs/CI_CD_SETUP.md @@ -42,8 +42,8 @@ OPENAI_API_KEY # Для AI-агента ## Настройка серверов ### Единый сервер (147.45.152.129) -- **API Backend** (api.memo-cards.online): Dart SDK, systemd сервис `mnemo_cards_server.service` -- **Web App** (memo-cards.online): Nginx, Flutter Web приложение +- **API Backend** (api.mnemo-cards.online): Dart SDK, systemd сервис `mnemo_cards_server.service` +- **Web App** (mnemo-cards.online): Nginx, Flutter Web приложение - **SSL**: Let's Encrypt сертификаты для обоих доменов - **CORS**: Правильно настроен между доменами, COEP/COOP headers отключены для совместимости - Доступ по SSH для деплоя @@ -71,7 +71,7 @@ OPENAI_API_KEY # Для AI-агента ### ✅ Чек-лист готовности - [ ] **SSH ключ сгенерирован и добавлен на сервер** -- [ ] **DNS домены настроены** (`memo-cards.online`, `api.memo-cards.online`, `code.memo-cards.online`) +- [ ] **DNS домены настроены** (`mnemo-cards.online`, `api.mnemo-cards.online`, `code.mnemo-cards.online`) - [ ] **Forgejo secrets настроены** (`DEPLOY_SSH_PRIVATE_KEY`) - [ ] **Код готов к деплою** (все тесты проходят) @@ -80,7 +80,7 @@ OPENAI_API_KEY # Для AI-агента 1. **Подготовка:** ```bash # Генерация и настройка SSH ключа - ssh-keygen -t ed25519 -C "forgejo-deploy@memo-cards.online" -f ~/.ssh/forgejo_deploy + ssh-keygen -t ed25519 -C "forgejo-deploy@mnemo-cards.online" -f ~/.ssh/forgejo_deploy ssh-copy-id -i ~/.ssh/forgejo_deploy.pub root@147.45.152.129 ``` @@ -112,9 +112,9 @@ cat ~/.ssh/forgejo_deploy #### 2. Настройка DNS доменов Убедитесь, что DNS записи настроены: -- `memo-cards.online` → `147.45.152.129` -- `api.memo-cards.online` → `147.45.152.129` -- `code.memo-cards.online` → `147.45.152.129` (для Forgejo) +- `mnemo-cards.online` → `147.45.152.129` +- `api.mnemo-cards.online` → `147.45.152.129` +- `code.mnemo-cards.online` → `147.45.152.129` (для Forgejo) #### 3. Проверка доступа к серверу ```bash @@ -227,15 +227,15 @@ ssh root@147.45.152.129 "nginx -t" ssh root@147.45.152.129 "ls -la /etc/letsencrypt/live/" # Ручное получение сертификатов -ssh root@147.45.152.129 "certbot certonly --standalone -d memo-cards.online -d api.memo-cards.online --email admin@memo-cards.online" +ssh root@147.45.152.129 "certbot certonly --standalone -d mnemo-cards.online -d api.mnemo-cards.online --email admin@mnemo-cards.online" ``` #### DNS проблемы ```bash # Проверка DNS разрешения -nslookup memo-cards.online -nslookup api.memo-cards.online -nslookup code.memo-cards.online +nslookup mnemo-cards.online +nslookup api.mnemo-cards.online +nslookup code.mnemo-cards.online # Проверка доступности портов telnet 147.45.152.129 80 @@ -254,7 +254,7 @@ flutter pub cache repair ### Проблемы с SSH ```bash # Проверка SSH ключа -ssh -T git@code.memo-cards.online +ssh -T git@code.mnemo-cards.online # Проверка доступа к серверам ssh -i ~/.ssh/forgejo_deploy root@147.45.152.129 diff --git a/tools/scripts/check_deploy_ready.sh b/tools/scripts/check_deploy_ready.sh index d56a2d3..ab04ef0 100755 --- a/tools/scripts/check_deploy_ready.sh +++ b/tools/scripts/check_deploy_ready.sh @@ -44,7 +44,7 @@ if [ -f "$SSH_KEY" ]; then print_status "SSH private key found at $SSH_KEY" else print_error "SSH private key not found at $SSH_KEY" - echo " Generate with: ssh-keygen -t ed25519 -C 'forgejo-deploy@memo-cards.online' -f $SSH_KEY" + echo " Generate with: ssh-keygen -t ed25519 -C 'forgejo-deploy@mnemo-cards.online' -f $SSH_KEY" exit 1 fi @@ -74,7 +74,7 @@ fi # Check 4: DNS resolution echo "4. Checking DNS resolution..." -for domain in "memo-cards.online" "api.memo-cards.online" "code.memo-cards.online"; do +for domain in "mnemo-cards.online" "api.mnemo-cards.online" "code.mnemo-cards.online"; do if nslookup "$domain" 2>/dev/null | grep -q "$SERVER_IP"; then print_status "DNS for $domain resolves to $SERVER_IP" else diff --git a/tools/scripts/fix_ssh_key.sh b/tools/scripts/fix_ssh_key.sh index 0906970..08b871d 100755 --- a/tools/scripts/fix_ssh_key.sh +++ b/tools/scripts/fix_ssh_key.sh @@ -37,7 +37,7 @@ print_success() { # Check if key exists if [ ! -f "$SSH_KEY" ]; then print_error "SSH key not found at $SSH_KEY" - print_info "Generate it first with: ssh-keygen -t ed25519 -C 'forgejo-deploy@memo-cards.online' -f $SSH_KEY" + print_info "Generate it first with: ssh-keygen -t ed25519 -C 'forgejo-deploy@mnemo-cards.online' -f $SSH_KEY" exit 1 fi