Finalize deploy docs and production Android release settings
This commit is contained in:
+1
-1
@@ -8,7 +8,6 @@ backend/.env.*
|
|||||||
frontend/.env
|
frontend/.env
|
||||||
frontend/.env.*
|
frontend/.env.*
|
||||||
!frontend/.env.example
|
!frontend/.env.example
|
||||||
android/local.properties
|
|
||||||
android/keystore.properties
|
android/keystore.properties
|
||||||
android/*.jks
|
android/*.jks
|
||||||
android/*.keystore
|
android/*.keystore
|
||||||
@@ -70,6 +69,7 @@ android_react/ios/
|
|||||||
Thumbs.db
|
Thumbs.db
|
||||||
.idea/
|
.idea/
|
||||||
.codex
|
.codex
|
||||||
|
.tmp-venv/
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
*.swp
|
*.swp
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Deploy Android
|
||||||
|
|
||||||
|
## Pasos
|
||||||
|
|
||||||
|
1. Haz los cambios en `dev`.
|
||||||
|
2. Prueba la app:
|
||||||
|
- `source /etc/profile.d/android-sdk.sh`
|
||||||
|
- `cd android`
|
||||||
|
- `GRADLE_USER_HOME=/home/mgonzalez/desarrollo/react/linkedsign/android/.gradle-home ./gradlew assembleDebug`
|
||||||
|
3. Si todo está bien, genera release:
|
||||||
|
- `GRADLE_USER_HOME=/home/mgonzalez/desarrollo/react/linkedsign/android/.gradle-home ./gradlew assembleRelease`
|
||||||
|
4. Copia el APK release:
|
||||||
|
- `cp android/app/build/outputs/apk/release/app-release.apk android/apk/LinkedSign-release.apk`
|
||||||
|
5. Guarda cambios en git:
|
||||||
|
- `git add .`
|
||||||
|
- `git commit -m "mensaje"`
|
||||||
|
6. Sube a Gitea:
|
||||||
|
- `git push origin main`
|
||||||
|
7. Sube el APK a producción:
|
||||||
|
- `scp -P 2203 android/apk/LinkedSign-release.apk deploy@192.168.222.3:/opt/apps/linkedsign/apk/`
|
||||||
|
8. Limpia archivos `.md` en producción:
|
||||||
|
- `find /opt/apps/linkedsign -type f -iname '*.md' -delete`
|
||||||
|
9. Verifica descarga pública:
|
||||||
|
- `https://sign.linkedcorp.net/api/downloads/android-apk`
|
||||||
|
|
||||||
|
## Notas
|
||||||
|
|
||||||
|
- La `keystore` de producción está fuera de git.
|
||||||
|
- No pierdas la `keystore` ni las contraseñas.
|
||||||
|
- Si cambias algo visual de la app, no hace falta tocar la web.
|
||||||
|
- Si cambias el contrato del API, prueba login, documentos y firma antes de subir release.
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# Deploy Web
|
||||||
|
|
||||||
|
## Pasos
|
||||||
|
|
||||||
|
1. Haz los cambios en `dev`.
|
||||||
|
2. Prueba local:
|
||||||
|
- `cd frontend && npm run build`
|
||||||
|
- `cd ../backend && node -e "require('./src/app')"`
|
||||||
|
3. Guarda cambios en git:
|
||||||
|
- `git add .`
|
||||||
|
- `git commit -m "mensaje"`
|
||||||
|
4. Sube a Gitea:
|
||||||
|
- `git push origin main`
|
||||||
|
5. En el servidor app entra por SSH:
|
||||||
|
- `ssh deploy@192.168.222.3 -p 2203`
|
||||||
|
6. Actualiza código:
|
||||||
|
- `cd /opt/apps/linkedsign/source`
|
||||||
|
- `git fetch origin main`
|
||||||
|
- `git reset --hard origin/main`
|
||||||
|
7. Recompila frontend:
|
||||||
|
- `cd /opt/apps/linkedsign/source/frontend`
|
||||||
|
- `npm ci`
|
||||||
|
- `npm run build`
|
||||||
|
8. Publica frontend:
|
||||||
|
- `rm -rf /opt/apps/linkedsign/frontend/*`
|
||||||
|
- `cp -r dist /opt/apps/linkedsign/frontend/`
|
||||||
|
- `cp server.js /opt/apps/linkedsign/frontend/`
|
||||||
|
9. Publica backend:
|
||||||
|
- `rm -rf /opt/apps/linkedsign/backend/*`
|
||||||
|
- `cp -r /opt/apps/linkedsign/source/backend/* /opt/apps/linkedsign/backend/`
|
||||||
|
- `cd /opt/apps/linkedsign/backend`
|
||||||
|
- `npm ci --omit=dev`
|
||||||
|
10. Reinicia servicios:
|
||||||
|
- `sudo systemctl restart linkedsign-frontend`
|
||||||
|
- `sudo systemctl restart linkedsign-backend`
|
||||||
|
11. Limpia archivos `.md` en producción:
|
||||||
|
- `find /opt/apps/linkedsign -type f -iname '*.md' -delete`
|
||||||
|
12. Verifica:
|
||||||
|
- `curl -I http://127.0.0.1:3000`
|
||||||
|
- `curl http://127.0.0.1:4000/health`
|
||||||
|
|
||||||
|
## Notas
|
||||||
|
|
||||||
|
- Si cambias variables de entorno, actualiza `/opt/apps/linkedsign/backend/.env`.
|
||||||
|
- Si cambias rutas del APK o storage, revisa también `PRODUCCION.md`.
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
# Producción LinkedSign
|
||||||
|
|
||||||
|
## Servidor de aplicación
|
||||||
|
|
||||||
|
- Host: `192.168.222.3`
|
||||||
|
- SSH: `deploy@192.168.222.3 -p 2203`
|
||||||
|
- Ruta base: `/opt/apps/linkedsign`
|
||||||
|
|
||||||
|
## Estructura en servidor
|
||||||
|
|
||||||
|
- Código fuente: `/opt/apps/linkedsign/source`
|
||||||
|
- Frontend runtime: `/opt/apps/linkedsign/frontend`
|
||||||
|
- Backend runtime: `/opt/apps/linkedsign/backend`
|
||||||
|
- Storage persistente: `/opt/apps/linkedsign/storage`
|
||||||
|
- Logs: `/opt/apps/linkedsign/logs`
|
||||||
|
|
||||||
|
## Servicios persistentes
|
||||||
|
|
||||||
|
- Backend: `linkedsign-backend.service`
|
||||||
|
- Frontend: `linkedsign-frontend.service`
|
||||||
|
|
||||||
|
## Puertos internos
|
||||||
|
|
||||||
|
- Frontend: `127.0.0.1:3000`
|
||||||
|
- Backend: `127.0.0.1:4000`
|
||||||
|
|
||||||
|
## Estado actual
|
||||||
|
|
||||||
|
- Frontend local responde en `3000`
|
||||||
|
- Backend local responde en `4000`
|
||||||
|
- Ambos servicios quedaron `enabled` y `running`
|
||||||
|
|
||||||
|
## Nginx Proxy Manager
|
||||||
|
|
||||||
|
### Proxy host principal
|
||||||
|
|
||||||
|
- Domain: `sign.linkedcorp.net`
|
||||||
|
- Forward Hostname/IP: `192.168.222.3`
|
||||||
|
- Forward Port: `3000`
|
||||||
|
- Scheme: `http`
|
||||||
|
- SSL: certificado para `sign.linkedcorp.net`
|
||||||
|
|
||||||
|
### Custom location
|
||||||
|
|
||||||
|
- Location: `/api`
|
||||||
|
- Forward Hostname/IP: `192.168.222.3`
|
||||||
|
- Forward Port: `4000`
|
||||||
|
- Scheme: `http`
|
||||||
|
|
||||||
|
No hace falta rewrite. El backend ya acepta `/api`.
|
||||||
|
|
||||||
|
## Base de datos
|
||||||
|
|
||||||
|
- Host MariaDB: `192.168.222.32`
|
||||||
|
- Base de datos: `linkedsign`
|
||||||
|
- Usuario: `linkedsign_user`
|
||||||
|
|
||||||
|
## Bloqueo pendiente
|
||||||
|
|
||||||
|
MariaDB rechazó el acceso desde el servidor web:
|
||||||
|
|
||||||
|
- Error: `Access denied for user 'linkedsign_user'@'192.168.222.3'`
|
||||||
|
|
||||||
|
En el servidor MariaDB debes ejecutar:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
GRANT ALL PRIVILEGES ON linkedsign.* TO 'linkedsign_user'@'192.168.222.3' IDENTIFIED BY 'INa*hkFanYa_zICF';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
|
||||||
|
Si quieres permitir desde más de un host del mismo segmento:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
GRANT ALL PRIVILEGES ON linkedsign.* TO 'linkedsign_user'@'192.168.222.%' IDENTIFIED BY 'INa*hkFanYa_zICF';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comandos útiles
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl status linkedsign-frontend
|
||||||
|
sudo systemctl status linkedsign-backend
|
||||||
|
sudo journalctl -u linkedsign-frontend -n 100 --no-pager
|
||||||
|
sudo journalctl -u linkedsign-backend -n 100 --no-pager
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pendiente después del GRANT
|
||||||
|
|
||||||
|
Cuando MariaDB permita acceso desde `192.168.222.3`, falta:
|
||||||
|
|
||||||
|
1. Crear/validar tablas en producción.
|
||||||
|
2. Probar login real.
|
||||||
|
3. Confirmar operación completa del sistema.
|
||||||
|
|
||||||
|
## Seguridad
|
||||||
|
|
||||||
|
El token de Gitea usado durante esta preparación quedó expuesto en el chat. Debe rotarse.
|
||||||
@@ -586,6 +586,7 @@ private fun AuthFlow(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
if (BuildConfig.DEBUG) {
|
||||||
Text(
|
Text(
|
||||||
"Servidor: ${BuildConfig.API_BASE_URL}",
|
"Servidor: ${BuildConfig.API_BASE_URL}",
|
||||||
color = Color(0xFF9CA3AF),
|
color = Color(0xFF9CA3AF),
|
||||||
@@ -595,6 +596,7 @@ private fun AuthFlow(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun BiometricUnlockScreen(
|
private fun BiometricUnlockScreen(
|
||||||
|
|||||||
Reference in New Issue
Block a user