Configure from env vars at run time

In both local developent, and production.  Also, vendor the `envsubst`
binary from https://github.com/a8m/envsubst, as it supports default
values, which the gnu envsubst (from gettext-base) does not.
This commit is contained in:
Shane Kilkelly 2021-05-07 09:44:29 +01:00
parent f1c9d6108e
commit b47f21a44e
7 changed files with 49 additions and 32 deletions

View file

@ -6,3 +6,4 @@
!/pom.xml !/pom.xml
!/Makefile !/Makefile
!/LICENSE !/LICENSE
!/vendor

View file

@ -48,3 +48,6 @@ com_crashlytics_export_strings.xml
crashlytics.properties crashlytics.properties
crashlytics-build.properties crashlytics-build.properties
fabric.properties fabric.properties
# Local configuration files
conf/runtime.json

View file

@ -2,16 +2,20 @@
FROM maven:3-jdk-8 as base FROM maven:3-jdk-8 as base
RUN apt-get update && apt-get install -y make \ RUN apt-get update && apt-get install -y make git \
&& rm -rf /var/lib/apt/lists && rm -rf /var/lib/apt/lists
COPY vendor/envsubst /opt/envsubst
RUN chmod +x /opt/envsubst
RUN useradd --create-home node RUN useradd --create-home node
FROM base as builder FROM base as builder
COPY . /app
WORKDIR /app WORKDIR /app
COPY . /app
RUN make package \ RUN make package \
# The name of the created jar contains the current version tag. # The name of the created jar contains the current version tag.
# Rename it to a static path that can be used for copying. # Rename it to a static path that can be used for copying.
@ -21,15 +25,16 @@ RUN make package \
FROM openjdk:8-jre FROM openjdk:8-jre
RUN apt-get update && apt-get install -y git gettext-base\ RUN apt-get update && apt-get install -y git \
&& rm -rf /var/lib/apt/lists && rm -rf /var/lib/apt/lists
RUN useradd --create-home node RUN useradd --create-home node
CMD ["/start.sh"]
COPY --from=builder /git-bridge.jar / COPY --from=builder /git-bridge.jar /
COPY vendor/envsubst /opt/envsubst
RUN chmod +x /opt/envsubst
COPY conf/envsubst_template.json envsubst_template.json COPY conf/envsubst_template.json envsubst_template.json
COPY start.sh start.sh COPY start.sh start.sh
@ -37,3 +42,5 @@ RUN mkdir conf
RUN chown node:node conf RUN chown node:node conf
USER node USER node
ENTRYPOINT ["/start.sh"]

View file

@ -2,8 +2,14 @@
MVN_OPTS := "--no-transfer-progress" MVN_OPTS := "--no-transfer-progress"
run: package runtime-conf:
java -jar target/writelatex-git-bridge-1.0-SNAPSHOT-jar-with-dependencies.jar conf/local.json /opt/envsubst < conf/envsubst_template.json > conf/runtime.json
run: package runtime-conf
java -jar \
target/writelatex-git-bridge-1.0-SNAPSHOT-jar-with-dependencies.jar \
conf/runtime.json
build: build:
@ -22,4 +28,4 @@ package: clean
mvn $(MVN_OPTS) package -DskipTests mvn $(MVN_OPTS) package -DskipTests
.PHONY: run package build clean test .PHONY: run package build clean test runtime-conf

View file

@ -1,32 +1,32 @@
{ {
"port": 8080, "port": ${GIT_BRIDGE_PORT:-8000},
"rootGitDirectory": "/tmp/wlgb", "rootGitDirectory": "${GIT_BRIDGE_ROOT_DIR:-/tmp/wlgb}",
"apiBaseUrl": "https://localhost/api/v0", "apiBaseUrl": "${GIT_BRIDGE_API_BASE_URL:-https://localhost/api/v0}",
"username": "$GITBRIDGE_USERNAME", "username": "${GIT_BRIDGE_USERNAME}",
"password": "$GITBRIDGE_PASSWORD", "password": "${GIT_BRIDGE_PASSWORD}",
"postbackBaseUrl": "https://localhost", "postbackBaseUrl": "${GIT_BRIDGE_POSTBACK_BASE_URL:-https://localhost}",
"serviceName": "Overleaf", "serviceName": "${GIT_BRIDGE_SERVICE_NAME:-Overleaf}",
"oauth2": { "oauth2": {
"oauth2ClientID": "$GITBRIDGE_OAUTH2_CLIENT_ID", "oauth2ClientID": "${GITBRIDGE_OAUTH2_CLIENT_ID}",
"oauth2ClientSecret": "$GITBRIDGE_OAUTH2_CLIENT_SECRET", "oauth2ClientSecret": "${GITBRIDGE_OAUTH2_CLIENT_SECRET}",
"oauth2Server": "https://localhost" "oauth2Server": "${GIT_BRIDGE_OAUTH2_SERVER:-https://localhost}"
}, },
"repoStore": { "repoStore": {
"maxFileNum": 2000, "maxFileNum": ${GIT_BRIDGE_REPOSTORE_MAX_FILE_NUM:-2000},
"maxFileSize": 52428800 "maxFileSize": ${GIT_BRIDGE_REPOSTORE_MAX_FILE_SIZE:-52428800}
}, },
"swapStore": { "swapStore": {
"type": "s3", "type": "${GIT_BRIDGE_SWAPSTORE_TYPE:-noop}",
"awsAccessKey": "asdf", "awsAccessKey": "${GIT_BRIDGE_SWAPSTORE_AWS_ACCESS_KEY}",
"awsSecret": "asdf", "awsSecret": "${GIT_BRIDGE_SWAPSTORE_AWS_ACCESS_KEY}",
"s3BucketName": "com.overleaf.testbucket", "s3BucketName": "${GIT_BRIDGE_SWAPSTORE_S3_BUCKET_NAME}",
"awsRegion": "us-east-1" "awsRegion": "${GIT_BRIDGE_SWAPSTORE_AWS_REGION:-us-east-1}"
}, },
"swapJob": { "swapJob": {
"minProjects": 50, "minProjects": ${GIT_BRIDGE_SWAPJOB_MIN_PROJECTS:-50},
"lowGiB": 128, "lowGiB": ${GIT_BRIDGE_SWAPJOB_LOW_GIB:-128},
"highGiB": 256, "highGiB": ${GIT_BRIDGE_SWAPJOB_HIGH_GIB:-256},
"intervalMillis": 3600000, "intervalMillis": ${GIT_BRIDGE_SWAPJOB_INTERVAL_MILLIS:-3600000},
"compressionMethod": "gzip" "compressionMethod": "${GIT_BRIDGE_SWAPJOB_COMPRESSION_METHOD:-gzip}"
} }
} }

View file

@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
envsubst < /envsubst_template.json > /conf/runtime.json /opt/envsubst < /envsubst_template.json > /conf/runtime.json
java -jar /git-bridge.jar /conf/runtime.json exec java -jar /git-bridge.jar /conf/runtime.json

BIN
services/git-bridge/vendor/envsubst vendored Executable file

Binary file not shown.