Enable recipe proxy tunnel and slash routes

This commit is contained in:
“Naeel”
2026-08-29 02:57:06 +03:00
parent 9f0974aaa9
commit eae62e76f8
5 changed files with 37 additions and 3 deletions
+31
View File
@@ -529,3 +529,34 @@ Gemini-native (`candidates`/`usageMetadata`), хотя proxy возвращае
разрешённого ключа невозможно. Nginx на ВМ 213 уже содержит отдельные location
для `/recipe` и `/recipe/`; их изменение без новой подтверждённой проблемы не
выполнялось.
## Настройка SSH-туннеля и проверка фактического конфига
По команде пользователя ключ доступа к немецкой ВМ передан на ВМ 213 с
правами `0600` в `/home/naeel/.ssh/gemini_proxy_key`; успешный SSH-вход на
немецкую ВМ подтверждён без вывода ключа. На ВМ 213 создан и запущен
`gemini-tunnel.service`, перенаправляющий `127.0.0.1:8768` на немецкий
`127.0.0.1:8768`; health через туннель вернул HTTP 200.
Проверка показала, что фактический `/etc/nginx/sites-enabled/elmer` не
подключает локальный nginx-фрагмент, а `/etc/recipe/recipe.env` всё ещё
содержал внешний `GEMINI_PROXY_URL`, несмотря на работающий туннель. Поэтому
предыдущий end-to-end запрос дал 503, а `/recipe/` дал 404. Эти фактические
конфигурации требуют точечной синхронизации с workspace и повторной проверки.
SSH-ключ с локальной машины передан на ВМ 213 в
`/home/naeel/.ssh/gemini_proxy_key` с правами `0600`; вход на немецкую ВМ
подтверждён. Создан `gemini-tunnel.service`, через который локальный
`127.0.0.1:8768` на ВМ 213 направляется к немецкому proxy. Gemini key на ВМ 213
не используется.
Исправлен разбор ответа proxy в `recipe_service/app.py` (`text`/`usage`), а
также добавлен Flask route для `/recipe/`. Фактический nginx-конфиг на ВМ 213
синхронизирован с рабочими prefix locations; regex location с URI в
`proxy_pass` отклонён nginx и заменён допустимой конфигурацией.
Итоговые проверки: health HTTP 200; POST без токена HTTP 401; POST с неверным
токеном HTTP 401; авторизованный POST `/recipe` HTTP 200 с непустыми `text` и
`usage`; авторизованный POST `/recipe/` HTTP 200 с непустыми `text` и `usage`;
redirect отсутствует. `gemini-tunnel.service`, `recipe.service` и
`elmer.service` имеют статус active. `elmer.service` не перезапускался.
+1 -1
View File
@@ -1,3 +1,3 @@
GEMINI_PROXY_URL=http://95.179.252.111:8768/gemini
GEMINI_PROXY_URL=http://127.0.0.1:8768/gemini
GEMINI_GENERATION_CONFIG={"temperature":0,"maxOutputTokens":300,"thinkingConfig":{"thinkingLevel":"minimal"}}
RECIPE_API_TOKEN=replace-with-random-token
+2 -1
View File
@@ -8,7 +8,7 @@ from flask import Flask, jsonify, request
app = Flask(__name__)
MAX_IMAGE_BYTES = 10 * 1024 * 1024
ALLOWED_TYPES = {"image/jpeg", "image/png", "image/webp"}
PROXY_URL = "http://95.179.252.111:8768/gemini"
PROXY_URL = "http://127.0.0.1:8768/gemini"
def settings() -> dict:
@@ -33,6 +33,7 @@ def health():
@app.post("/recipe")
@app.post("/recipe/")
def recipe():
if not authorized():
return jsonify(error="unauthorized"), 401
+1 -1
View File
@@ -12,7 +12,7 @@ location = /recipe {
}
location /recipe/ {
proxy_pass http://127.0.0.1:8770/;
proxy_pass http://127.0.0.1:8770/recipe/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
+2
View File
@@ -2,6 +2,8 @@
Description=Minimal recipe Gemini proxy
After=network-online.target
Wants=network-online.target
Requires=gemini-tunnel.service
After=gemini-tunnel.service
[Service]
User=recipe