59 lines
1.8 KiB
Bash
59 lines
1.8 KiB
Bash
#!/usr/bin/env sh
|
|
set -euo pipefail
|
|
|
|
FTP_SYSTEM_USER=${FTP_SYSTEM_USER:-ftpuser}
|
|
FTP_SYSTEM_GROUP=${FTP_SYSTEM_GROUP:-ftpgroup}
|
|
FTP_ROOT=${PHOTOBOOTH_ROOT:-/photobooth}
|
|
FTP_PUBLIC_HOST=${FTP_PUBLIC_HOST:-localhost}
|
|
FTP_PORT=${FTP_PORT:-2121}
|
|
FTP_PASSIVE_MIN=${FTP_PASSIVE_MIN:-30000}
|
|
FTP_PASSIVE_MAX=${FTP_PASSIVE_MAX:-30009}
|
|
FTP_MAX_CLIENTS=${FTP_MAX_CLIENTS:-50}
|
|
FTP_MAX_PER_IP=${FTP_MAX_PER_IP:-10}
|
|
REQUIRE_FTPS=${REQUIRE_FTPS:-0}
|
|
|
|
# Ensure group/user exist with stable IDs
|
|
if command -v getent >/dev/null 2>&1; then
|
|
if ! getent group "${FTP_SYSTEM_GROUP}" >/dev/null 2>&1; then
|
|
addgroup -g 2100 "${FTP_SYSTEM_GROUP}" || true
|
|
fi
|
|
else
|
|
addgroup -g 2100 "${FTP_SYSTEM_GROUP}" 2>/dev/null || true
|
|
fi
|
|
|
|
if ! id -u "${FTP_SYSTEM_USER}" >/dev/null 2>&1; then
|
|
adduser -D -H -s /sbin/nologin -G "${FTP_SYSTEM_GROUP}" -u 2100 "${FTP_SYSTEM_USER}" || true
|
|
fi
|
|
|
|
mkdir -p "${FTP_ROOT}" /var/log/pure-ftpd
|
|
chown -R "${FTP_SYSTEM_USER}:${FTP_SYSTEM_GROUP}" "${FTP_ROOT}"
|
|
|
|
FTP_SYSTEM_UID=${FTP_SYSTEM_UID:-$(id -u "${FTP_SYSTEM_USER}")}
|
|
FTP_SYSTEM_GID=${FTP_SYSTEM_GID:-$(id -g "${FTP_SYSTEM_USER}")}
|
|
export FTP_SYSTEM_UID FTP_SYSTEM_GID FTP_SYSTEM_USER FTP_SYSTEM_GROUP FTP_ROOT
|
|
|
|
TLS_FLAG="0"
|
|
if [ "${REQUIRE_FTPS}" = "1" ] || [ "${REQUIRE_FTPS}" = "true" ]; then
|
|
TLS_FLAG="2"
|
|
fi
|
|
|
|
PURE_FLAGS="-c ${FTP_MAX_CLIENTS} -C ${FTP_MAX_PER_IP} -E -j -R -A -H -B -4 -p ${FTP_PASSIVE_MIN}:${FTP_PASSIVE_MAX} -P ${FTP_PUBLIC_HOST} -u 1000 -Y ${TLS_FLAG} -l puredb:/etc/pure-ftpd/pureftpd.pdb -O w3c:/var/log/pure-ftpd/transfer.log"
|
|
|
|
echo "[control] Starting pure-ftpd with: ${PURE_FLAGS}"
|
|
pure-ftpd ${PURE_FLAGS} &
|
|
FTP_PID=$!
|
|
|
|
echo "[control] Starting control API"
|
|
node /app/control-service.js &
|
|
API_PID=$!
|
|
|
|
term_handler() {
|
|
echo "[control] Stopping..."
|
|
kill "${FTP_PID}" "${API_PID}" 2>/dev/null || true
|
|
wait
|
|
}
|
|
|
|
trap term_handler INT TERM
|
|
|
|
wait
|