1
0
Fork 0
mirror of https://github.com/overleaf/toolkit.git synced 2025-04-19 15:28:06 +02:00

Merge pull request #146 from overleaf/tm-em-msm-git-bridge-server-pro

Support git bridge in Server Pro
This commit is contained in:
Eric Mc Sween 2023-04-10 11:03:57 -04:00 committed by GitHub
commit e93dfe9977
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 121 additions and 41 deletions

View file

@ -15,28 +15,17 @@ if [[ ! -d "$TOOLKIT_ROOT/bin" ]] || [[ ! -d "$TOOLKIT_ROOT/config" ]]; then
exit 1
fi
RC_FILE="$TOOLKIT_ROOT/config/overleaf.rc"
function __main__() {
local SHARELATEX_IMAGE_VERSION
SHARELATEX_IMAGE_VERSION="$(head -n 1 "$TOOLKIT_ROOT/config/version")"
local MONGO_IMAGE="mongo:4.0"
local REDIS_IMAGE="redis:5.0"
local NGINX_IMAGE="nginx:1.19-alpine"
local MONGO_URL="mongodb://mongo/sharelatex"
local REDIS_HOST="redis"
local REDIS_PORT="6379"
if [[ ! "$SHARELATEX_IMAGE_VERSION" \
=~ ^[0-9]+\.[0-9]+\.[0-9]+(-RC)?$ ]]; then
echo "ERROR: invalid version '${SHARELATEX_IMAGE_VERSION}'"
local IMAGE_VERSION
IMAGE_VERSION="$(head -n 1 "$TOOLKIT_ROOT/config/version")"
if [[ ! "$IMAGE_VERSION" =~ ^([0-9]+)\.[0-9]+\.[0-9]+(-RC)?$ ]]; then
echo "ERROR: invalid version '${IMAGE_VERSION}'"
exit 1
fi
local IMAGE_VERSION_MAJOR=${BASH_REMATCH[1]}
# Load vars from the rc file
# shellcheck disable=SC1090
source "$RC_FILE"
read_config
# Select which docker-compose files to load
local compose_file_flags=("-f $TOOLKIT_ROOT/lib/docker-compose.base.yml")
@ -49,41 +38,40 @@ function __main__() {
if [[ "$SIBLING_CONTAINERS_ENABLED" == "true" ]]; then
compose_file_flags+=("-f $TOOLKIT_ROOT/lib/docker-compose.sibling-containers.yml")
fi
if [[ "${NGINX_ENABLED:-false}" == "true" ]]; then
if [[ "${NGINX_ENABLED}" == "true" ]]; then
compose_file_flags+=("-f $TOOLKIT_ROOT/lib/docker-compose.nginx.yml")
fi
if [[ $GIT_BRIDGE_ENABLED = "true" ]]; then
if [[ $SERVER_PRO = "true" && $IMAGE_VERSION_MAJOR -ge 4 ]]; then
compose_file_flags+=("-f $TOOLKIT_ROOT/lib/docker-compose.git-bridge.yml")
GIT_BRIDGE_IMAGE="quay.io/sharelatex/git-bridge:$IMAGE_VERSION"
else
# Git bridge is only supported in Server Pro 4+
GIT_BRIDGE_ENABLED=false
fi
fi
# Include docker-compose.override.yml if it is present
if [[ -f "$TOOLKIT_ROOT/config/docker-compose.override.yml" ]]; then
compose_file_flags+=("-f $TOOLKIT_ROOT/config/docker-compose.override.yml")
fi
# Build up the flags to pass to docker-compose
local project_name="${PROJECT_NAME:-overleaf}"
local image_name="sharelatex/sharelatex"
if [[ "${SERVER_PRO:-null}" == "true" ]]; then
if [[ "${SERVER_PRO}" == "true" ]]; then
image_name="quay.io/sharelatex/sharelatex-pro"
fi
image_name="${SHARELATEX_IMAGE_NAME:-${image_name}}"
local full_image_spec="$image_name:$SHARELATEX_IMAGE_VERSION"
local full_image_spec="$image_name:$IMAGE_VERSION"
# Canonicalize data paths
SHARELATEX_DATA_PATH=$(cd "$TOOLKIT_ROOT"; realpath "$SHARELATEX_DATA_PATH")
MONGO_DATA_PATH=$(cd "$TOOLKIT_ROOT"; realpath "$MONGO_DATA_PATH")
REDIS_DATA_PATH=$(cd "$TOOLKIT_ROOT"; realpath "$REDIS_DATA_PATH")
# users with old config/ content might not have NGINX_ENABLED in their
# overleaf.rc, this initialisation prevents an `unbound variable` error
if [ -z ${NGINX_ENABLED+x} ];
then
NGINX_ENABLED="false"
fi
GIT_BRIDGE_DATA_PATH=$(cd "$TOOLKIT_ROOT"; realpath "$GIT_BRIDGE_DATA_PATH")
if [ "${SHARELATEX_LISTEN_IP:-null}" == "null" ];
then
if [ "${SHARELATEX_LISTEN_IP:-null}" == "null" ];
then
echo "WARNING: the value of SHARELATEX_LISTEN_IP is not set in config/overleaf.rc. This value must be set to the public IP address for direct container access. Defaulting to 0.0.0.0"
SHARELATEX_LISTEN_IP="0.0.0.0"
fi
@ -103,10 +91,10 @@ function __main__() {
if [[ "${RC_DEBUG:-null}" != "null" ]]; then
echo ">>>>>>VARS>>>>>>"
echo "$(set -o posix; set)" # print all vars
echo "IMAGE_VERSION=$SHARELATEX_IMAGE_VERSION"
echo "IMAGE_VERSION=$IMAGE_VERSION"
echo "<<<<<<<<<<<<<<<<"
echo ">>>>COMPOSE-ARGS>>>>"
echo "-p $project_name"
echo "-p $PROJECT_NAME"
echo "${compose_file_flags[@]}"
echo "$@"
echo "<<<<<<<<<<<<<<<<<<<<"
@ -114,6 +102,9 @@ function __main__() {
# Export vars for use in docker-compose files
export DOCKER_SOCKET_PATH
export GIT_BRIDGE_DATA_PATH
export GIT_BRIDGE_ENABLED
export GIT_BRIDGE_IMAGE
export IMAGE="$full_image_spec"
export MONGO_DATA_PATH
export MONGO_IMAGE
@ -135,7 +126,14 @@ function __main__() {
export TLS_PRIVATE_KEY_PATH
# shellcheck disable=SC2068
exec docker-compose -p "$project_name" ${compose_file_flags[@]} "$@"
exec docker-compose -p "$PROJECT_NAME" ${compose_file_flags[@]} "$@"
}
function read_config () {
# shellcheck source=../lib/default.rc
source "$TOOLKIT_ROOT/lib/default.rc"
# shellcheck source=/dev/null
source "$TOOLKIT_ROOT/config/overleaf.rc"
}
__main__ "$@"

View file

@ -255,6 +255,8 @@ function check_config_files() {
print_point 2 "TLS_PORT: $TLS_PORT"
fi
print_point 2 "GIT_BRIDGE_ENABLED: ${GIT_BRIDGE_ENABLED:-null}"
elif [[ "$config_file" == "config/variables.env" ]]; then
print_point 1 "values"
@ -342,6 +344,14 @@ function check_config_files() {
else
print_point 2 "SHARELATEX_HISTORY_BACKEND: fs"
fi
if [[ -n ${GIT_BRIDGE_ENABLED:-} ]]; then
if [[ -n ${GIT_BRIDGE_OAUTH2_CLIENT_SECRET:-} ]]; then
print_point 2 "GIT_BRIDGE_OAUTH2_CLIENT_SECRET: [set here]"
else
add_warning "GIT_BRIDGE_OAUTH2_CLIENT_SECRET is missing in variables.env"
fi
fi
fi
fi
done

1
lib/common.env Normal file
View file

@ -0,0 +1 @@
GIT_BRIDGE_OAUTH2_CLIENT_ID="overleaf-git-bridge"

View file

@ -23,14 +23,21 @@ MONGO_IMAGE=mongo:4.4
REDIS_ENABLED=true
REDIS_DATA_PATH=data/redis
# Git-bridge configuration (Server Pro only)
#
# If you enable git bridge, you must also set GIT_BRIDGE_OAUTH2_CLIENT_SECRET
# in variables.env
GIT_BRIDGE_ENABLED=true
GIT_BRIDGE_DATA_PATH=data/git-bridge
# TLS proxy configuration (optional)
# See documentation in doc/tls-proxy.md
NGINX_ENABLED=false
NGINX_CONFIG_PATH=config/nginx/nginx.conf
NGINX_HTTP_PORT=80
# Replace these IP addresses with the external IP address of your host
NGINX_HTTP_LISTEN_IP=127.0.1.1
NGINX_HTTP_LISTEN_IP=127.0.1.1
NGINX_TLS_LISTEN_IP=127.0.1.1
TLS_PRIVATE_KEY_PATH=config/nginx/certs/overleaf_key.pem
TLS_CERTIFICATE_PATH=config/nginx/certs/overleaf_certificate.pem
TLS_PORT=443
TLS_PORT=443

View file

@ -1,4 +1,4 @@
SHARELATEX_APP_NAME=Our Overleaf Instance
SHARELATEX_APP_NAME="Our Overleaf Instance"
ENABLED_LINKED_FILE_TYPES=project_file,project_output_file

33
lib/default.rc Normal file
View file

@ -0,0 +1,33 @@
# Default values for config/overleaf.rc
PROJECT_NAME=overleaf
SERVER_PRO=false
SHARELATEX_DATA_PATH=data/sharelatex
SHARELATEX_PORT=80
# Sibling containers
SIBLING_CONTAINERS_ENABLED=false
DOCKER_SOCKET_PATH=/var/run/docker.sock
# Mongo configuration
MONGO_ENABLED=true
MONGO_IMAGE=mongo:4.0
MONGO_URL=mongodb://mongo/sharelatex
# Redis configuration
REDIS_ENABLED=true
REDIS_IMAGE=redis:5.0
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DATA_PATH=data/redis
# Git bridge configuration
GIT_BRIDGE_ENABLED=false
GIT_BRIDGE_DATA_PATH=data/git-bridge
# TLS proxy configuration
NGINX_ENABLED=false
NGINX_IMAGE=nginx:1.19-alpine
NGINX_CONFIG_PATH=config/nginx/nginx.conf
NGINX_HTTP_PORT=80
TLS_PORT=443

View file

@ -11,8 +11,14 @@ services:
ports:
- "${SHARELATEX_LISTEN_IP:-127.0.0.1}:${SHARELATEX_PORT:-80}:80"
environment:
GIT_BRIDGE_ENABLED: "${GIT_BRIDGE_ENABLED}"
GIT_BRIDGE_HOST: "git-bridge"
GIT_BRIDGE_PORT: "8000"
REDIS_HOST: "${REDIS_HOST}"
SHARELATEX_MONGO_URL: "${MONGO_URL}"
SHARELATEX_REDIS_HOST: "${REDIS_HOST}"
REDIS_HOST: "${REDIS_HOST}"
env_file: ../config/variables.env
V1_HISTORY_URL: "http://sharelatex:3100/api"
env_file:
- common.env
- ../config/variables.env
stop_grace_period: 60s

View file

@ -0,0 +1,25 @@
---
version: '2.2'
services:
git-bridge:
restart: always
image: "${GIT_BRIDGE_IMAGE}"
volumes:
- "${GIT_BRIDGE_DATA_PATH}:/tmp/wlgb"
container_name: git-bridge
expose:
- "8000"
environment:
GIT_BRIDGE_API_BASE_URL: "http://sharelatex/api/v0"
GIT_BRIDGE_OAUTH2_SERVER: "http://sharelatex"
GIT_BRIDGE_POSTBACK_BASE_URL: "http://git-bridge:8000"
env_file:
- common.env
- ../config/variables.env
user: root
command: ["/server-pro-start.sh"]
sharelatex:
links:
- git-bridge