blob: 1c740fa2eb825810f59d30d7aa40a167d40b51ca [file] [log] [blame]
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
runtime: python39
app_engine_apis: true
entrypoint: gunicorn -b :$PORT --timeout 60 --workers ${WORKERS} --threads 1 main:app
default_expiration: "10d"
instance_class: F4_1G
automatic_scaling:
min_idle_instances: ${MIN_IDLE_INSTANCES}
max_instances: ${MAX_INSTANCES}
max_pending_latency: ${MAX_PENDING_LATENCY}
# Note: this is interpreted by gae.py, it maps the app ID being deployed to
# values of ${...} vars.
# Reference: https://chromium.googlesource.com/infra/luci/luci-go/+/HEAD/examples/appengine/helloworld_v2/app.yaml
luci_gae_vars:
monorail-dev:
WORKERS: "1"
MIN_IDLE_INSTANCES: "1"
MAX_INSTANCES: "10"
MAX_PENDING_LATENCY: "automatic"
monorail-staging:
WORKERS: "1"
MIN_IDLE_INSTANCES: "1"
MAX_INSTANCES: "20"
MAX_PENDING_LATENCY: "0.2s"
monorail-prod:
WORKERS: "8"
MIN_IDLE_INSTANCES: "25"
MAX_INSTANCES: "300"
MAX_PENDING_LATENCY: "0.2s"
env_variables:
# https://cloud.google.com/appengine/docs/standard/python3/services/access#compatibility
MEMCACHE_USE_CROSS_COMPATIBLE_PROTOCOL: "True"
NDB_USE_CROSS_COMPATIBLE_PICKLE_PROTOCOL: "True"
handlers:
- url: /_ah/api/.*
script: main.app
- url: /robots.txt
static_files: static/robots.txt
upload: static/robots.txt
expiration: "10m"
- url: /database-maintenance
static_files: static/database-maintenance.html
upload: static/database-maintenance.html
- url: /static/dist
static_dir: static/dist
mime_type: application/javascript
secure: always
http_headers:
Access-Control-Allow-Origin: '*'
- url: /static/js
static_dir: static/js
mime_type: application/javascript
secure: always
http_headers:
Access-Control-Allow-Origin: '*'
- url: /static
static_dir: static
- url: /_ah/mail/.+
script: main.app
login: admin
- url: /_ah/warmup
script: main.app
login: admin
- url: /.*
script: main.app
secure: always
inbound_services:
- mail
- mail_bounce
- warmup
includes:
- gae_ts_mon