🎉 initial codebase
This commit is contained in:
parent
68c80fd70d
commit
65facfa8b1
15
Dockerfile
Normal file
15
Dockerfile
Normal file
@ -0,0 +1,15 @@
|
||||
FROM alpine:latest
|
||||
RUN apk --update add bash python3 py3-virtualenv py3-pip git && rm -rf /var/cache/apk/*
|
||||
|
||||
RUN git clone https://github.com/etesync/server.git /opt/etebase
|
||||
WORKDIR /opt/etebase
|
||||
RUN virtualenv -p python3 .venv
|
||||
RUN .venv/bin/pip3 install -r requirements.txt
|
||||
|
||||
# NOTE: Workaround, since some packages seem to be missing in requirements.txt (see https://github.com/etesync/server/issues/185)
|
||||
RUN .venv/bin/pip3 install tzdata
|
||||
|
||||
COPY ./entrypoint.sh /entrypoint.sh
|
||||
COPY ./index.html /index.html
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
134
entrypoint.sh
Executable file
134
entrypoint.sh
Executable file
@ -0,0 +1,134 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
|
||||
## CONSTANTS ##
|
||||
readonly CODEBASE_DIR="/opt/etebase"
|
||||
readonly DATA_DIR="/opt/etebase-data"
|
||||
|
||||
|
||||
## HANDLE EXIT SIGNALS ##
|
||||
trap trap_exit EXIT SIGINT SIGTERM
|
||||
trap_exit(){
|
||||
if [[ "${pid:+x}" ]]; then
|
||||
kill -- $pid 2> /dev/null || true
|
||||
q=0
|
||||
while proc_running $pid; do
|
||||
q=$(( q + 1 ))
|
||||
snore 1
|
||||
if [[ "$q" -ge 15 ]]; then
|
||||
log_warn "Sending kill to Etebase"
|
||||
kill -s KILL -- $pid 2> /dev/null || true
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
#
|
||||
# LIB: Efficient sleep (does not create a new process).
|
||||
#
|
||||
snore(){
|
||||
local IFS
|
||||
[[ -n "${_snore_fd:-}" ]] || exec {_snore_fd}<> <(:)
|
||||
read ${1:+-t "$1"} -u $_snore_fd || true
|
||||
}
|
||||
|
||||
|
||||
|
||||
#
|
||||
# HELPER: Check whether given pid is running.
|
||||
#
|
||||
# @param $1 Process ID.
|
||||
#
|
||||
# @exit 0: Process is running
|
||||
# 1: Process is not running.
|
||||
#
|
||||
proc_running(){
|
||||
# try reading state
|
||||
local state_path="/proc/$1/stat"
|
||||
[[ ! -f "$state_path" ]] && return 1
|
||||
local state
|
||||
state=$(cat "$state_path" 2> /dev/null | cut -d ' ' -f3) || return 1
|
||||
|
||||
# parse state
|
||||
case "$state" in
|
||||
R|S|D|Z|W|W|P|I) return 0;;
|
||||
*) return 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
|
||||
#
|
||||
# HELPER: Initialize etebase config files.
|
||||
#
|
||||
etebase_config_init(){
|
||||
## MAYBE CREATE SYMLINK ##
|
||||
if [[ ! -h "${CODEBASE_DIR}/etebase-server.ini" ]]; then
|
||||
ln -s "${DATA_DIR}/server.ini" "${CODEBASE_DIR}/etebase-server.ini"
|
||||
fi
|
||||
|
||||
|
||||
## MAYBE WRITE DEFAULT FILE ##
|
||||
if [[ ! -f "${DATA_DIR}/server.ini" ]]; then
|
||||
echo "[global]
|
||||
debug = false
|
||||
secret_file = ${DATA_DIR}/secret.txt
|
||||
static_root = ${CODEBASE_DIR}/static
|
||||
media_root = ${DATA_DIR}/media
|
||||
;language_code = en-us
|
||||
;time_zone = UTC
|
||||
|
||||
[allowed_hosts]
|
||||
allowed_host1 = *
|
||||
|
||||
[database]
|
||||
engine = django.db.backends.sqlite3
|
||||
name = db.sqlite3" > "${DATA_DIR}/server.ini"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
#
|
||||
# HELPER: Initialize django app.
|
||||
#
|
||||
etebase_app_init(){
|
||||
## RUN MIGRATIONS ##
|
||||
.venv/bin/python3 ./manage.py migrate
|
||||
|
||||
|
||||
## MAYBE COPY STATIC FILES ##
|
||||
if [[ ! -d "${CODEBASE_DIR}/static" ]]; then
|
||||
.venv/bin/python3 ./manage.py collectstatic
|
||||
fi
|
||||
|
||||
|
||||
## OVERWRITE INDEX PAGE ##
|
||||
cat /index.html > "${CODEBASE_DIR}/etebase_server/templates/success.html"
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## SET UP DATA DIRECTORIES ##
|
||||
mkdir -p "$DATA_DIR"
|
||||
mkdir -p "${DATA_DIR}/media"
|
||||
|
||||
|
||||
## INITIALIZE CONFIG ##
|
||||
etebase_config_init
|
||||
|
||||
|
||||
## INITIALIZE DJANGO APP ##
|
||||
etebase_app_init
|
||||
|
||||
|
||||
## RUN SERVER ##
|
||||
.venv/bin/uvicorn etebase_server.asgi:application --host 0.0.0.0 --port 80 & pid=$!
|
||||
wait $pid
|
13
index.html
Normal file
13
index.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>EteBase Docker</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>EteBase Docker</h1>
|
||||
<p><a href="https://git.tjdev.de/DrMaxNix/etebase-docker">Usage Instructions (README.md)</a></p>
|
||||
<p><a href="https://www.etesync.com/">EteSync Website</a></p>
|
||||
<p><a href="/admin">Admin Interface</a></p>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user