Initial QMAX production app

This commit is contained in:
sevenhill
2026-07-03 22:39:48 +03:00
commit 9fcc659438
119 changed files with 17959 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
QMAX_DOMAIN=qmax.kusoft.xyz
QMAX_PUBLIC_BASE_URL=https://qmax.kusoft.xyz
QMAX_TLS_EMAIL=admin@kusoft.xyz
# Generate with: openssl rand -base64 48
QMAX_JWT_SECRET=change-me-to-a-long-random-secret-at-least-32-characters
# Enter this once on the Android login screen to pair the device with your private bridge.
QMAX_PAIRING_CODE=change-me-pairing-code
# Use international format if MAX accepts it in your flow, otherwise the local phone format you use in MAX Web.
QMAX_MAX_PHONE_NUMBER=79000000000
# Set false temporarily if you attach a visible browser/VNC workflow for CAPTCHA/debug.
QMAX_MAX_HEADLESS=true
QMAX_CORS_ALLOWED_ORIGINS=
# Optional Firebase Cloud Messaging. Mount the service account JSON into the API container
# and set these values to enable real push notifications.
QMAX_PUSH_ENABLED=true
QMAX_PUSH_SHOW_PREVIEW=true
QMAX_FIREBASE_PROJECT_ID=
QMAX_FIREBASE_SERVICE_ACCOUNT_PATH=
+8
View File
@@ -0,0 +1,8 @@
{
email {$QMAX_TLS_EMAIL}
}
{$QMAX_DOMAIN} {
encode zstd gzip
reverse_proxy qmax-api:8080
}
+58
View File
@@ -0,0 +1,58 @@
services:
qmax-api:
build:
context: ..
dockerfile: Dockerfile.server
container_name: qmax-api
restart: unless-stopped
environment:
ASPNETCORE_ENVIRONMENT: Production
QMax__PublicBaseUrl: ${QMAX_PUBLIC_BASE_URL:-https://qmax.kusoft.xyz}
QMax__DatabasePath: /data/qmax.db
QMax__StoragePath: /data/storage
QMax__ReleasesPath: /data/releases
QMax__JwtSecret: ${QMAX_JWT_SECRET}
QMax__PairingCode: ${QMAX_PAIRING_CODE}
QMax__MaxPhoneNumber: ${QMAX_MAX_PHONE_NUMBER}
QMax__MaxMode: Worker
QMax__MaxWorkerBaseUrl: http://qmax-max-worker:3001
QMax__CorsAllowedOrigins: ${QMAX_CORS_ALLOWED_ORIGINS:-}
QMax__PushEnabled: ${QMAX_PUSH_ENABLED:-true}
QMax__PushShowPreview: ${QMAX_PUSH_SHOW_PREVIEW:-true}
QMax__FirebaseProjectId: ${QMAX_FIREBASE_PROJECT_ID:-}
QMax__FirebaseServiceAccountPath: ${QMAX_FIREBASE_SERVICE_ACCOUNT_PATH:-}
volumes:
- qmax-data:/data
- ./releases:/data/releases:ro
- ./secrets:/run/secrets/qmax:ro
ports:
- "127.0.0.1:18080:8080"
depends_on:
- qmax-max-worker
networks:
- qmax
qmax-max-worker:
build:
context: ../worker
dockerfile: Dockerfile
container_name: qmax-max-worker
restart: unless-stopped
environment:
PORT: 3001
MAX_BASE_URL: https://web.max.ru/
MAX_USER_DATA_DIR: /data/max-profile
MAX_HEADLESS: ${QMAX_MAX_HEADLESS:-true}
volumes:
- qmax-max-profile:/data
- qmax-data:/qmax-data
networks:
- qmax
volumes:
qmax-data:
qmax-max-profile:
networks:
qmax:
driver: bridge
+14
View File
@@ -0,0 +1,14 @@
{
"slug": "qmax",
"name": "QMAX",
"version": "0.1.39",
"androidVersionCode": 40,
"channel": "stable",
"platform": "android",
"packageKind": "apk",
"downloadPath": "/api/app-updates/android/download/qmax-0.1.39-stable.apk",
"packageSizeBytes": 17730369,
"sha256": "fb1ba02daf4a5e99972794bd69965bef8219388c96344902b9d8a67ed2635803",
"notes": "Chat composer now follows the Android keyboard height like Telegram, and downloaded video, audio, and document attachments keep correct local cache extensions.",
"publishedAt": "2026-07-02T18:38:00.3130417Z"
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.