From 5d1723d1c38e54635c8acc876928d9b9850ed90d Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Tue, 14 Apr 2026 12:50:08 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20.gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8ee9d44..4c7c47b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ __pycache__ .env *.pem *.sqlite -*.crt \ No newline at end of file +*.crt +tmp/** +certs From 72d053cf564c43da7fff9b96c4f175d076bc1c7c Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Mon, 13 Apr 2026 22:38:53 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20Docker=20Compose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 45 +++++++++++++------------ Dockerfile | 13 +++---- docker-compose.yml | 84 ++++++++++++++++++++++++++++++---------------- readme.md | 7 ++-- 4 files changed, 88 insertions(+), 61 deletions(-) diff --git a/.env.example b/.env.example index 4e9911a..aab1663 100644 --- a/.env.example +++ b/.env.example @@ -1,29 +1,30 @@ -host = "0.0.0.0" -oneme_tcp_port = "443" -tamtam_tcp_port = "4433" +host="0.0.0.0" +oneme_tcp_port="443" +tamtam_tcp_port="4433" -oneme_ws_port = "81" -tamtam_ws_port = "82" +oneme_ws_port="81" +tamtam_ws_port="82" -log_level = "debug" +log_level="debug" -db_type = "mysql" +db_type="mysql" -db_host = "localhost" -db_port = "3306" -db_user = "root" -db_password = "password" -db_name = "openmax" +db_host="localhost" +db_port="3306" +db_user="root" +db_password="password" +db_name="openmax" -db_file = "" +db_file="" -certfile = "/certs/cert.pem" -keyfile = "/certs/key.pem" -domain = "openmax.su" +certfile="/certs/cert.pem" +keyfile="/certs/key.pem" +domain="openmax.su" -avatar_base_url = "http://127.0.0.1/avatar/" -telegram_bot_token = "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ" -telegram_bot_enabled = "1" -telegram_whitelist_ids = "1,2,3" -origins="http://127.0.0.1,https://web.openmax.su" -sms_gateway_url = "http://127.0.0.1:8100/sms-gateway" \ No newline at end of file +avatar_base_url=http://127.0.0.1/avatar/ +telegram_bot_token=123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ +telegram_bot_enabled=1 +telegram_whitelist_ids=1,2,3 + +origins=http://127.0.0.1,https://web.openmax.su +sms_gateway_url=http://127.0.0.1:8100/sms-gateway diff --git a/Dockerfile b/Dockerfile index 172113f..c355773 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,15 +2,12 @@ FROM python:3.12-slim WORKDIR /app -RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - && rm -rf /var/lib/apt/lists/* - COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt -COPY src/ ./src/ +RUN --mount=type=cache,target=/root/.cache/pip \ + pip install --upgrade pip && \ + pip install -r requirements.txt -WORKDIR /app/src +COPY src /app/src -CMD ["python", "main.py"] \ No newline at end of file +CMD ["python", "src/main.py"] diff --git a/docker-compose.yml b/docker-compose.yml index f6abed6..8c6af1e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,39 +1,65 @@ services: - app: - build: . - restart: unless-stopped - ports: - - "${oneme_tcp_port:-443}:443" - - "${tamtam_tcp_port:-4433}:4433" - - "${oneme_ws_port:-81}:81" - - "${tamtam_ws_port:-82}:82" - volumes: - - /etc/letsencrypt/live/${domain}/fullchain.pem:/certs/cert.pem:ro - - /etc/letsencrypt/live/${domain}/privkey.pem:/certs/key.pem:ro - env_file: - - .env - environment: - - db_host=db - depends_on: - db: - condition: service_healthy - - db: - image: mysql:8.0 + mysql: + image: mysql:8.4 + container_name: openmax-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD: ${db_password:-openmax} - MYSQL_DATABASE: ${db_name:-openmax} - MYSQL_USER: ${db_user:-openmax} - MYSQL_PASSWORD: ${db_password:-openmax} + MYSQL_ROOT_PASSWORD: ${db_password} + MYSQL_DATABASE: ${db_name} + MYSQL_USER: ${db_user} + MYSQL_PASSWORD: ${db_password} + MYSQL_ROOT_HOST: "%" + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci volumes: - mysql_data:/var/lib/mysql - - ./tables.sql:/docker-entrypoint-initdb.d/tables.sql:ro + - ./tables.sql:/docker-entrypoint-initdb.d/01-tables.sql:ro healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + test: + - CMD-SHELL + - mysql -h127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} -e 'SELECT 1;' interval: 10s timeout: 5s - retries: 5 + retries: 20 + start_period: 30s + + openmax: + build: + context: . + image: openmax-server:latest + container_name: openmax-server + restart: unless-stopped + depends_on: + mysql: + condition: service_healthy + environment: + host: ${host} + oneme_tcp_port: ${oneme_tcp_port} + tamtam_tcp_port: ${tamtam_tcp_port} + oneme_ws_port: ${oneme_ws_port} + tamtam_ws_port: ${tamtam_ws_port} + log_level: ${log_level} + db_type: ${db_type} + db_host: ${db_host} + db_port: ${db_port} + db_user: ${db_user} + db_password: ${db_password} + db_name: ${db_name} + certfile: /app/certs/cert.pem + keyfile: /app/certs/key.pem + avatar_base_url: ${avatar_base_url} + telegram_bot_token: ${telegram_bot_token} + telegram_bot_enabled: ${telegram_bot_enabled} + telegram_whitelist_ids: ${telegram_whitelist_ids} + volumes: + - ${OPENMAX_CERTFILE_HOST}:/app/certs/cert.pem:ro + - ${OPENMAX_KEYFILE_HOST}:/app/certs/key.pem:ro + ports: + - "${oneme_tcp_port}:443" + - "${tamtam_tcp_port}:4433" + - "${oneme_ws_port}:81" + - "${tamtam_ws_port}:82" volumes: - mysql_data: \ No newline at end of file + mysql_data: diff --git a/readme.md b/readme.md index a916879..2bf7178 100644 --- a/readme.md +++ b/readme.md @@ -3,7 +3,7 @@ > Проект находится на ранней стадии разработки и вероятно полон багов. > > Использование в профессиональных средах не рекомендовано. - +> # OpenMAX Эмулятор сервера MAX и ТамТам @@ -22,4 +22,7 @@ https://t.me/openmax_alerts Клиент может быть практически любым, главное условие - чтобы он был совместим с официальным сервером (`api.oneme.ru` / `api.tamtam.chat`). # Дополнительная информация -[Faq](faq/readme.md) + +- [FAQ](faq/readme.md) +- [Документация проекта](https://github.com/openmax-server/docs) +- [Публичные сервера](faq/servers.md) \ No newline at end of file From 22c284b8181877a13d8fc3e193b0d963b9a4d118 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Tue, 14 Apr 2026 13:17:23 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20Docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 2 +- .gitignore | 1 + docker-compose.yml | 6 +++--- tables.sql | 14 +++++++------- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index aab1663..a01d09b 100644 --- a/.env.example +++ b/.env.example @@ -11,7 +11,7 @@ db_type="mysql" db_host="localhost" db_port="3306" -db_user="root" +db_user="openmax" db_password="password" db_name="openmax" diff --git a/.gitignore b/.gitignore index 4c7c47b..48a77b0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ __pycache__ *.crt tmp/** certs +.DS_Store \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 8c6af1e..c23f57d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,7 +41,7 @@ services: tamtam_ws_port: ${tamtam_ws_port} log_level: ${log_level} db_type: ${db_type} - db_host: ${db_host} + db_host: mysql db_port: ${db_port} db_user: ${db_user} db_password: ${db_password} @@ -53,8 +53,8 @@ services: telegram_bot_enabled: ${telegram_bot_enabled} telegram_whitelist_ids: ${telegram_whitelist_ids} volumes: - - ${OPENMAX_CERTFILE_HOST}:/app/certs/cert.pem:ro - - ${OPENMAX_KEYFILE_HOST}:/app/certs/key.pem:ro + - ${certfile}:/app/certs/cert.pem:ro + - ${keyfile}:/app/certs/key.pem:ro ports: - "${oneme_tcp_port}:443" - "${tamtam_tcp_port}:4433" diff --git a/tables.sql b/tables.sql index e118764..e999a19 100644 --- a/tables.sql +++ b/tables.sql @@ -1,4 +1,4 @@ -CREATE TABLE `users` ( +CREATE TABLE IF NOT EXISTS `users` ( `id` INT PRIMARY KEY, `phone` VARCHAR(20) UNIQUE, `telegram_id` VARCHAR(64) UNIQUE, @@ -15,7 +15,7 @@ CREATE TABLE `users` ( `username` VARCHAR(60) UNIQUE ); -CREATE TABLE `tokens` ( +CREATE TABLE IF NOT EXISTS `tokens` ( `phone` VARCHAR(20) NOT NULL, `token_hash` VARCHAR(64) NOT NULL, `device_type` VARCHAR(256) NOT NULL, @@ -24,7 +24,7 @@ CREATE TABLE `tokens` ( `time` VARCHAR(16) NOT NULL ); -CREATE TABLE `auth_tokens` ( +CREATE TABLE IF NOT EXISTS `auth_tokens` ( `phone` VARCHAR(20) NOT NULL, `token_hash` VARCHAR(64) NOT NULL, `code_hash` VARCHAR(64) NOT NULL, @@ -32,7 +32,7 @@ CREATE TABLE `auth_tokens` ( `state` VARCHAR(16) ); -CREATE TABLE `user_data` ( +CREATE TABLE IF NOT EXISTS `user_data` ( `phone` VARCHAR(20) NOT NULL UNIQUE PRIMARY KEY, `contacts` JSON NOT NULL, `folders` JSON NOT NULL, @@ -40,13 +40,13 @@ CREATE TABLE `user_data` ( `chat_config` JSON NOT NULL ); -CREATE TABLE `chats` ( +CREATE TABLE IF NOT EXISTS `chats` ( `id` INT NOT NULL PRIMARY KEY, `owner` INT NOT NULL, `type` VARCHAR(16) NOT NULL ); -CREATE TABLE `messages` ( +CREATE TABLE IF NOT EXISTS `messages` ( `id` INT NOT NULL PRIMARY KEY, `chat_id` INT NOT NULL, `sender` INT NOT NULL, @@ -58,7 +58,7 @@ CREATE TABLE `messages` ( `type` VARCHAR(16) NOT NULL ); -CREATE TABLE `chat_participants` ( +CREATE TABLE IF NOT EXISTS `chat_participants` ( `chat_id` INT NOT NULL, `user_id` INT NOT NULL, `joined_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,