Установка сервиса¶
OSA Proxy Go использует конфигурационный файл osa-proxy.yml. По умолчанию сервис ищет его в рабочей директории, но путь можно передать первым аргументом запуска или через переменную окружения OSA_PROXY_CONFIG_PATH.
Docker¶
Пример запуска контейнера с внешним конфигурационным файлом:
docker run -d \
--name osa-proxy \
-p 8080:8080 \
-e OSA_PROXY_CONFIG_PATH=/etc/osa-proxy/osa-proxy.yml \
-v /path/to/osa-proxy.yml:/etc/osa-proxy/osa-proxy.yml:ro \
<registry-url>/osa-proxy:<tag>
Проверка доступности:
Docker Compose¶
services:
osa-proxy:
image: <registry-url>/osa-proxy:<tag>
container_name: osa-proxy
ports:
- "8080:8080"
env_file:
- .env
environment:
OSA_PROXY_CONFIG_PATH: /etc/osa-proxy/osa-proxy.yml
volumes:
- ./osa-proxy.yml:/etc/osa-proxy/osa-proxy.yml:ro
healthcheck:
test: ["CMD", "/app/osa-proxy", "healthcheck"]
interval: 30s
timeout: 3s
retries: 3
start_period: 5s
Если включен Redis-кэш вердиктов, добавьте Redis в Compose-файл и укажите его адрес в cache.redis.address.
.env файл¶
При запуске через Docker Compose файл .env передается в контейнер только если он указан в env_file. Эти переменные можно использовать:
- напрямую как переменные окружения процесса;
- в
osa-proxy.ymlчерез плейсхолдеры вида${VAR_NAME:default_value}.
В примере Compose путь к конфигурации задается отдельно через environment.OSA_PROXY_CONFIG_PATH, поэтому не дублируйте его в .env.
Пример .env:
CODESCORING_URL=https://codescoring.example.com
CODESCORING_TOKEN=
WORK_MODE=strict_wait
OSA_PROXY_URL=https://osa-proxy.example.com
LOG_LEVEL=info
CACHE_ENABLED=false
REDIS_ADDRESS=redis:6379
REDIS_PASSWORD=
REDIS_DB=0
Пример использования переменных в osa-proxy.yml:
codescoring:
url: ${CODESCORING_URL:https://codescoring.example.com}
token: ${CODESCORING_TOKEN:}
work-mode: ${WORK_MODE:strict_wait}
osa-proxy-url: ${OSA_PROXY_URL:http://localhost:8080}
cache:
judge:
enabled: ${CACHE_ENABLED:false}
redis:
address: ${REDIS_ADDRESS:redis:6379}
password: ${REDIS_PASSWORD:}
db: ${REDIS_DB:0}
logging:
level: ${LOG_LEVEL:info}
Для секретов используйте .env, а не literal-значения в osa-proxy.yml.
Прокси для исходящих HTTP-запросов¶
OSA Proxy Go использует стандартные HTTP-клиенты Go. Они автоматически учитывают переменные окружения HTTP_PROXY, HTTPS_PROXY и NO_PROXY; также можно задавать lowercase-варианты http_proxy, https_proxy, no_proxy.
Пример .env для корпоративного proxy:
HTTP_PROXY=http://proxy.company.example:3128
HTTPS_PROXY=http://proxy.company.example:3128
NO_PROXY=localhost,127.0.0.1,::1,redis,codescoring.example.com,.svc,.cluster.local
NO_PROXY должен включать адреса, к которым сервис должен ходить напрямую: локальные адреса, Redis, внутренние Kubernetes/Docker DNS-имена, внутренние домены CodeScoring или package registry, если они не должны проходить через корпоративный proxy.
Helm¶
Минимальный пример values.yaml:
image:
repository: <registry-url>/osa-proxy
tag: "<tag>"
service:
type: ClusterIP
port: 8080
probes:
enabled: true
path: /healthz
ingress:
enabled: true
className: nginx
hosts:
- host: osa-proxy.example.com
paths:
- path: /
pathType: Prefix
config:
create: true
key: osa-proxy.yml
mountPath: /etc/osa-proxy/osa-proxy.yml
content: |
codescoring:
url: https://codescoring.example.com
token: "<token>"
work-mode: strict_wait
osa-proxy-url: https://osa-proxy.example.com
block-on-codescoring-errors: true
remove-blocked-versions: true
block-status-code: 403
npm:
enabled: true
repository:
- name: npm
registry: https://registry.npmjs.org
scan-manifest: true
scan-package: true
work-mode: strict_wait
url-encoded-config: true
logging:
level: info
После установки проверьте endpoints: