remoteexec_proxy can run on Google App Engine Flexible Environment.
Need to setup cloud memorystore and cloud storage.
Cloud memorystore is used for digest cache. You need to create an instance in the same location as App Engine apps.
NOTE If different location, your server will get many context deadline exceeded errors.
If not created, run gcloud app create can create App Engine app in the specific region in the cloud project.
$ gcloud app create --region=$REGION
If it is already created, you can check it by gcloud app describe
$ gcloud app describe --format='get(locationId)'
It is sufficient with 1GB size, but you might want to set maxmemory-policy: allkeys-lru.
$ gcloud redis instances create $REDIS_INSTANCE_NAME \ --region=$REGION \ --redis-config='maxmemory-poclicy=allkeys-lru'
Cloud storage is used to store file cache.
$ gsutil mb gs://${PROJECT_ID}-file-cache
$ gsutil lifecycle set '{"rule": [{"action": {"type": "Delete"}, "condition": {"age": 1}}]}' gs://${PROJECT_ID}-file-cache
To deploy the server, create a workspace
$ mkdir /path/to/workspace
$ cd /path/to/workspace
$ TOPDIR=$(pwd)
$ git clone https://chromium.googlesource.com/infra/goma/server
$ cd server
$ GO111MODULE=on go mod vendor
$ mkdir ../gopath/src
$ export GOPATH=$(TOPDIR)/gopath
$ mv vendor/* ../gopath/src
$ mkdir app
$ cd app
$ cp ../server/cmd/remoteexec_server/* .
$ REDISHOST=$(gcloud redis instances describe $REDIS_INSTANCE_NAME \
--region $REGION --format='get(host)')
$ REDISPORT=$(gcloud redis instances describe $REDIS_INSTANCE_NAME \
--region $REGION --format='get(port)')
$ cat > app.yaml <<EOF
runtime: go
env: flex
network:
name: default
liveness_check:
path: "/healthz"
readiness_check:
path: "/healthz"
env_variables:
REDISHOST: "$REDISHOST"
REDISPORT: "$REDISPORT"
EOF
$ cat > flag.go << EOF
package main
func init() {
*port = 8080
*remoteexecAddr = "remotebuildexecution.googleapis.com:443"
*remoteInstanceName = "projects/$PROJECT_ID/instances/default_instance"
*allowedUsers = "<comma separated allowed-users-email-address>"
*platformContainerImage = "docker://gcr.io/..."
*fileCacheBucket = "$PROJECT_ID-file-cache"
}
EOF
$ gcloud app deploy
Then, you can use $PROJECT_ID.appspot.com as $GOMA_SERVER_HOST. You need to specify GOMA_ARBTRARY_TOOLCHAIN_SUPPORT=true.