Files
Pterodactyl-Panel/root/etc/s6-overlay/scripts/initializer
2024-01-23 18:44:05 -06:00

106 lines
3.4 KiB
Plaintext

#!/command/with-contenv bash
source ContainerTools
SNAME=${0##*/}
WORKDIR="/app"
# Set user and group IDs
if [ -n "$PUID" ]; then
log "Setting User ID for nginx to $PUID"
usermod -o -u "$PUID" nginx
fi
if [ -n "$PGID" ]; then
log "Setting Group ID for nginx to $PGID"
groupmod -o -g "$PGID" nginx
fi
# If DBHOST value is present, pause boot until target container is up.
if [ -n "$DBHOST" ]; then
log "Waiting for SQL at $DBHOST:${DBPORT:=3306}"
if wait-for-it $DBHOST:$DBPORT -q -t ${TESTTIME:=30}; then
log "SQL found, continuing"
else
log "SQL could not be reached! Exiting..."
exit 1
fi
fi
# If REDISHOST value is present, pause boot until target container is up.
if [ -n "$REDISHOST" ]; then
log "Waiting for Redis at $REDISHOST:${REDISPORT:=6379}"
if wait-for-it $REDISHOST:$REDISPORT -q -t ${TESTTIME:=30}; then
log "Redis found, continuing"
else
log "Redis could not be reached! Exiting..."
exit 1
fi
fi
# Check for persistent storage directory, create file structure if not present.
if [ ! -d "/config/storage" ]; then
log "Creating storage directory"
cat $WORKDIR/.storage.tmpl | while read line; do
mkdir -p "/config/${line}"
done
ln -s /config/logs/panel $WORKDIR/storage/logs
fi
# Check for persistent Nginx logging directory, create file path if not present.
if [ ! -d "/config/logs/nginx" ]; then
log "Creating Nginx log directory."
mkdir -p "/config/logs/nginx"
fi
# Check for persistent PHP logging directory, create file path if not present.
if [ ! -d "/config/logs/php" ]; then
log "Creating PHP log directory."
mkdir -p "/config/logs/php"
fi
# Check for persistent Panel logging directory, create file path if not present.
if [ ! -d "/config/logs/panel" ]; then
log "Creating PHP log directory."
mkdir -p "/config/logs/panel"
fi
# Check for config file, create template if not present.
if [ ! -e /config/pterodactyl.conf ]; then
log "Config file does not exist, creating template"
log "[WARN] Connect to container and finish setup process"
cp $WORKDIR/.env.example /config/pterodactyl.conf
log "Generating unique Pterodactyl key"
log "$(php $WORKDIR/artisan key:generate --force --no-interaction)"
fi
# Clear views and autogenerated configs on launch. This is necessary for updates, and doesn't affect non-update launches.
log "$(php $WORKDIR/artisan view:clear)"
log "$(php $WORKDIR/artisan config:clear)"
log "Checking for database updates, preparing cache"
log "[NOTE] This will fail if the database connection has not yet been configured"
log "$(php $WORKDIR/artisan migrate --seed --force)"
chown -R nginx:nginx /config/
# Load selected Nginx conf.
if [ "$HTTPS" == "true" ]; then
if [ ! -e "/etc/nginx/http.d/pterodactyl.conf" ]; then
log "Symlinking Nginx config file for HTTPS"
ln -s /defaults/nginx/https.conf /etc/nginx/http.d/pterodactyl.conf
else
log "HTTPS Nginx config is already in place"
fi
else
if [ ! -e "/etc/nginx/http.d/pterodactyl.conf" ]; then
log "Symlinking Nginx config file for HTTP"
ln -s /defaults/nginx/http.conf /etc/nginx/http.d/pterodactyl.conf
else
log "HTTP Nginx config file is already in place"
fi
fi
# Setting permissions for /config
log "Making sure permission for config folder are correct"
chown -R nginx:nginx /config
log "Initialization complete"