61 lines
1.5 KiB
Bash
61 lines
1.5 KiB
Bash
#!/usr/bin/env sh
|
|
pid=0
|
|
|
|
# Respond to ctrl-c as per https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86
|
|
|
|
# SIGTERM-handler
|
|
term_handler() {
|
|
if [ $pid -ne 0 ]; then
|
|
kill -SIGTERM "$pid"
|
|
wait "$pid"
|
|
fi
|
|
exit 143; # 128 + 15 -- SIGTERM
|
|
}
|
|
|
|
# setup handlers
|
|
# on callback, kill the last background process, which is `tail -f /dev/null` and execute the specified handler
|
|
trap 'kill ${!}; term_handler' SIGTERM
|
|
|
|
# Configure defaults.
|
|
if [ "$PORT" = "" ];
|
|
then
|
|
export PORT=1965;
|
|
fi
|
|
if [ "$DOMAIN" = "" ];
|
|
then
|
|
export DOMAIN=localhost;
|
|
fi
|
|
if [ ! -d /certs ];
|
|
then
|
|
echo "Docker usage:"
|
|
echo ""
|
|
echo "Create server certificates with the domain set as the common name (all other fields can be left default):"
|
|
echo " openssl ecparam -genkey -name secp384r1 -out server.key"
|
|
echo " openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650"
|
|
echo ""
|
|
echo "Then run Docker container:"
|
|
echo ""
|
|
echo " docker run -v /path_to_your_cert_files:/certs -e PORT=1965 -e DOMAIN=localhost -v /path_to_your_content:/content -p 1965:1965 adrianhesketh/gemini:latest"
|
|
echo ""
|
|
return
|
|
fi
|
|
if [ ! -e /certs/server.crt ];
|
|
then
|
|
echo "server.crt file not found, are your certs named correctly?"
|
|
fi
|
|
if [ ! -e /certs/server.key ];
|
|
then
|
|
echo "server.key file not found, are your certs named correctly?"
|
|
fi
|
|
|
|
# run application
|
|
# Run server.
|
|
./gemini serve --path=/content --certFile=/certs/server.crt --keyFile=/certs/server.key --port=$PORT --domain=$DOMAIN &
|
|
pid="$!"
|
|
|
|
# wait forever
|
|
while true
|
|
do
|
|
tail -f /dev/null & wait ${!}
|
|
done
|