Enable recipe proxy tunnel and slash routes
This commit is contained in:
@@ -529,3 +529,34 @@ Gemini-native (`candidates`/`usageMetadata`), хотя proxy возвращае
|
|||||||
разрешённого ключа невозможно. Nginx на ВМ 213 уже содержит отдельные location
|
разрешённого ключа невозможно. Nginx на ВМ 213 уже содержит отдельные location
|
||||||
для `/recipe` и `/recipe/`; их изменение без новой подтверждённой проблемы не
|
для `/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,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"}}
|
GEMINI_GENERATION_CONFIG={"temperature":0,"maxOutputTokens":300,"thinkingConfig":{"thinkingLevel":"minimal"}}
|
||||||
RECIPE_API_TOKEN=replace-with-random-token
|
RECIPE_API_TOKEN=replace-with-random-token
|
||||||
@@ -8,7 +8,7 @@ from flask import Flask, jsonify, request
|
|||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
MAX_IMAGE_BYTES = 10 * 1024 * 1024
|
MAX_IMAGE_BYTES = 10 * 1024 * 1024
|
||||||
ALLOWED_TYPES = {"image/jpeg", "image/png", "image/webp"}
|
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:
|
def settings() -> dict:
|
||||||
@@ -33,6 +33,7 @@ def health():
|
|||||||
|
|
||||||
|
|
||||||
@app.post("/recipe")
|
@app.post("/recipe")
|
||||||
|
@app.post("/recipe/")
|
||||||
def recipe():
|
def recipe():
|
||||||
if not authorized():
|
if not authorized():
|
||||||
return jsonify(error="unauthorized"), 401
|
return jsonify(error="unauthorized"), 401
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ location = /recipe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
Description=Minimal recipe Gemini proxy
|
Description=Minimal recipe Gemini proxy
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
Wants=network-online.target
|
Wants=network-online.target
|
||||||
|
Requires=gemini-tunnel.service
|
||||||
|
After=gemini-tunnel.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
User=recipe
|
User=recipe
|
||||||
|
|||||||
Reference in New Issue
Block a user