Initial comit - Clone
This commit is contained in:
69
docker/Dockerfile
Normal file
69
docker/Dockerfile
Normal file
@ -0,0 +1,69 @@
|
||||
###############################################################################
|
||||
# STAGE 1: Build geneweb
|
||||
###############################################################################
|
||||
FROM ocaml/opam:debian-12-ocaml-4.14 AS builder
|
||||
ENV OPAMYES=yes
|
||||
|
||||
# Install required packages for build
|
||||
USER root
|
||||
|
||||
# Ignore the apt warning here as apt-get does not allow wildcarding versions
|
||||
# hadolint ignore=DL3027
|
||||
RUN export DEBIAN_FRONTEND=noninteractive \
|
||||
&& apt-get update -q \
|
||||
&& apt install -yq --no-install-recommends \
|
||||
libgmp-dev=2:6.* \
|
||||
libipc-system-simple-perl=1.* \
|
||||
libstring-shellquote-perl=1.* \
|
||||
perl=5.*
|
||||
|
||||
# Set up geneweb package and dependencies
|
||||
USER opam
|
||||
RUN git clone https://github.com/geneweb/geneweb.git ./geneweb \
|
||||
&& opam init --disable-sandboxing && opam update
|
||||
WORKDIR /home/opam/geneweb
|
||||
RUN opam pin add geneweb.dev . --no-action && opam depext geneweb
|
||||
|
||||
# Build geneweb
|
||||
RUN opam install geneweb --deps-only \
|
||||
&& eval "$(opam env)" \
|
||||
&& ocaml ./configure.ml --release && make clean distrib
|
||||
|
||||
###############################################################################
|
||||
# STAGE 2: Export build via blank image
|
||||
###############################################################################
|
||||
|
||||
FROM scratch AS export
|
||||
COPY --from=builder /home/opam/geneweb/distribution /
|
||||
|
||||
###############################################################################
|
||||
# STAGE 3: Assemble Docker image
|
||||
###############################################################################
|
||||
|
||||
FROM debian:12-slim AS container
|
||||
|
||||
# Install runtime tools and add geneweb user
|
||||
# Ignore the apt warning here as apt-get does not allow wildcarding versions
|
||||
# hadolint ignore=DL3027
|
||||
RUN apt-get update -q \
|
||||
&& apt install -qy --no-install-recommends sudo openssl \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& adduser --system --group --uid 1000 --home /usr/local/share/geneweb --shell /bin/bash geneweb \
|
||||
&& usermod -aG sudo geneweb \
|
||||
&& echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
|
||||
|
||||
# Add required directories and copy geneweb distribution
|
||||
USER geneweb
|
||||
WORKDIR /usr/local/share/geneweb
|
||||
RUN mkdir -p bin etc log share/data share/dist \
|
||||
&& echo "172.17.0.1" >> etc/gwsetup_only
|
||||
COPY --from=builder /home/opam/geneweb/distribution share/dist
|
||||
COPY geneweb-launch.sh bin/geneweb-launch.sh
|
||||
|
||||
EXPOSE 2316-2317
|
||||
VOLUME [ "/usr/local/share/geneweb/share/data", "/usr/local/share/geneweb/etc" ]
|
||||
ENV GENEWEB_DATA_PATH=/usr/local/share/geneweb/share/data
|
||||
ENV GENEWEB_HOME=/usr/local/share/geneweb
|
||||
|
||||
CMD [ "bin/geneweb-launch.sh" ]
|
90
docker/geneweb-launch.sh
Executable file
90
docker/geneweb-launch.sh
Executable file
@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
GENEWEB_HOME="/usr/local/share/geneweb"
|
||||
GENEWEB_DB=${GENEWEB_DB:=database}
|
||||
GENEWEB_DB_PATH=${GENEWEB_HOME}/share/data/${GENEWEB_DB}
|
||||
GENEWEB_ADMIN=${GENEWEB_ADMIN:=admin}
|
||||
GENEWEB_ADMIN_PASS=${GENEWEB_ADMIN_PASS:=$(openssl rand -hex 32)}
|
||||
GENEWEB_LANG=${GENEWEB_LANG:=en}
|
||||
|
||||
gwlaunch_log() {
|
||||
echo "$(date +%Y-%m-%d_%H:%M:%S) geneweb-launch: $1"
|
||||
}
|
||||
|
||||
set_db_config() {
|
||||
SETTING_NAME=${1,,}
|
||||
SETTING_VALUE=$2
|
||||
gwlaunch_log "-- Setting $SETTING_NAME to $SETTING_VALUE in database ${GENEWEB_DB}."
|
||||
if grep -q "^$SETTING_NAME=.*$" ${GENEWEB_DB_PATH}.gwf; then
|
||||
sed -i "s/^$SETTING_NAME=.*$/$SETTING_NAME=$SETTING_VALUE/" ${GENEWEB_DB_PATH}.gwf
|
||||
else
|
||||
echo "$SETTING_NAME=$SETTING_VALUE" >> ${GENEWEB_DB_PATH}.gwf
|
||||
fi
|
||||
}
|
||||
|
||||
init() {
|
||||
# Create default database if it doesn't exist
|
||||
if [ ! -f ${GENEWEB_DB_PATH}.gwf ] || [ ! -d ${GENEWEB_DB_PATH}.gwb ]; then
|
||||
gwlaunch_log "Database ${GENEWEB_DB} not found, creating empty database..."
|
||||
cd ${GENEWEB_HOME}/share/data || exit 1
|
||||
${GENEWEB_HOME}/share/dist/gw/gwc -f -o ${GENEWEB_DB} > comm.log 2>&1
|
||||
cp ${GENEWEB_HOME}/share/dist/gw/a.gwf ${GENEWEB_DB_PATH}.gwf
|
||||
set_db_config "wizard_passwd_file" "wizard_passwd"
|
||||
echo "${GENEWEB_ADMIN}:${GENEWEB_ADMIN_PASS}" >> ${GENEWEB_HOME}/share/data/wizard_passwd
|
||||
gwlaunch_log "Configured access control."
|
||||
gwlaunch_log "-- ADMIN USERNAME: ${GENEWEB_ADMIN}"
|
||||
gwlaunch_log "-- ADMIN PASSWORD: ${GENEWEB_ADMIN_PASS}"
|
||||
else
|
||||
gwlaunch_log "Database ${GENEWEB_DB} exists."
|
||||
fi
|
||||
|
||||
gwlaunch_log "Configuring settings for database ${GENEWEB_DB}"...
|
||||
for setting in $(env | grep GENEWEB_CONFIG_); do
|
||||
set_db_config "$(echo "${setting#GENEWEB_CONFIG_}" | cut -f1 -d=)" "$(echo "${setting#GENEWEB_CONFIG_}" | cut -f2 -d=)"
|
||||
done
|
||||
|
||||
gwlaunch_log "Setting correct ownership of geneweb data."
|
||||
sudo chown -R geneweb:geneweb ${GENEWEB_HOME}/share/data
|
||||
sudo chown -R geneweb:geneweb ${GENEWEB_HOME}/etc
|
||||
sudo chown -R geneweb:geneweb ${GENEWEB_HOME}/log
|
||||
gwlaunch_log "-- Set ownership of geneweb data."
|
||||
|
||||
}
|
||||
|
||||
start() {
|
||||
cd ${GENEWEB_HOME}/share/data || exit 1
|
||||
|
||||
gwlaunch_log "Starting gwsetup."
|
||||
${GENEWEB_HOME}/share/dist/gw/gwsetup \
|
||||
-daemon \
|
||||
-gd ${GENEWEB_HOME}/share/dist/gw \
|
||||
-only ${GENEWEB_HOME}/etc/gwsetup_only \
|
||||
>>${GENEWEB_HOME}/log/gwsetup.log 2>&1
|
||||
gwlaunch_log "-- Started gwsetup!"
|
||||
|
||||
GWD_AUTH_FILE=${GWD_AUTH_FILE:=${GENEWEB_HOME}/etc/gwd_passwd}
|
||||
if [ -f $GWD_AUTH_FILE ]; then
|
||||
AUTH_ARG="-auth $GWD_AUTH_FILE"
|
||||
else
|
||||
AUTH_ARG=""
|
||||
fi
|
||||
|
||||
gwlaunch_log "Starting gwd."
|
||||
${GENEWEB_HOME}/share/dist/gw/gwd \
|
||||
-daemon \
|
||||
-plugins -unsafe ${GENEWEB_HOME}/share/dist/gw/plugins \
|
||||
-trace_failed_passwd \
|
||||
-hd ${GENEWEB_HOME}/share/dist/gw \
|
||||
-log ${GENEWEB_HOME}/log/gwd.log \
|
||||
-bd ${GENEWEB_DATA_PATH} \
|
||||
$AUTH_ARG 2>&1
|
||||
gwlaunch_log "-- Started gwd!"
|
||||
|
||||
gwlaunch_log "Launch complete! -------------------------------------------------------"
|
||||
|
||||
tail -f ${GENEWEB_HOME}/log/gwsetup.log | sed "s/^/$(date +%Y-%m-%d_%H:%M:%S) gwsetup: /" & \
|
||||
tail -f ${GENEWEB_HOME}/log/gwd.log | sed "s/^/$(date +%Y-%m-%d_%H:%M:%S) gwd: /"
|
||||
|
||||
}
|
||||
|
||||
init
|
||||
start
|
Reference in New Issue
Block a user