mnemo
This commit is contained in:
parent
cdf6f9aa95
commit
78ae1a557d
14 changed files with 42 additions and 42 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
# Возвращаем обычный режим
|
||||
|
|
|
|||
|
|
@ -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 запросы
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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..."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
## Документация
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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: |
|
||||
|
|
|
|||
|
|
@ -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/"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue