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:
commit
e93dfe9977
8 changed files with 121 additions and 41 deletions
|
@ -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__ "$@"
|
||||
|
|
10
bin/doctor
10
bin/doctor
|
@ -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
1
lib/common.env
Normal file
|
@ -0,0 +1 @@
|
|||
GIT_BRIDGE_OAUTH2_CLIENT_ID="overleaf-git-bridge"
|
|
@ -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
|
||||
|
|
|
@ -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
33
lib/default.rc
Normal 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
|
|
@ -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
|
||||
|
|
25
lib/docker-compose.git-bridge.yml
Normal file
25
lib/docker-compose.git-bridge.yml
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue