! Published.
All checks were successful
Build docker image / build_docker_image (push) Successful in 3m50s

This commit is contained in:
2025-05-01 19:26:39 +02:00
commit 7393af96ac
290 changed files with 40752 additions and 0 deletions

203
build/nginx/entrypoint.sh Executable file
View File

@@ -0,0 +1,203 @@
#!/bin/bash
# constants
dataBaseFile=database/sqlite/database.sqlite
# ---------------------------------------------------------------------------
# functions
# Creating storage folders
function create_storage_folders {
# create storage folders for laravel
mkdir -p ./storage/framework/{cache,sessions,testing,views} || {
# fail if something went wrong
php artisan cli:error "Making storage folders failed!"
exit 1
}
# create log folder
mkdir -p ./storage/logs || {
# fail if something went wrong
php artisan cli:error "Making log folder failed!"
exit 1
}
}
# Initalizing caches
function initalize_cache {
# populating/updating caches
php artisan optimize \
&& php artisan filament:cache-components || {
# fail if something went wrong
php artisan cli:error "Clearing cache failed!"
exit 5
}
}
# initialize environment file
function initalize_environment_file() {
# if the .env doesn't exists, create it
[[ ! -f .env ]] && {
# fail if environment cofig doesn't exists
[[ -f .env.config ]] || {
php artisan cli:error "Please provide a \".env.config\" file!"
exit 7
}
# fail if environment cofig is not readable
[[ -r .env.config ]] || {
php artisan cli:error "Cannot read \".env.config\" file! Please check permissions!"
exit 7
}
# create the custom environment file
cp .env.config .env
return
}
# if .env already exists and no config file is found, nothing to do
[[ ! -f .env.config ]] && {
return
}
# if the config file has ben updated since creating the .env file
[[ ".env.config" -nt ".env" ]] && {
# backup the current configuration
cp .env .env.old
# fail if environment cofig isn't readable
[[ -r .env.config ]] || {
php artisan cli:error "Cannot read \".env.config\" file! Please check permissions!"
exit 7
}
# create our custom environment file
cp .env.config .env
}
}
# create and save a new encryption key if it does not exists
function generate_application_key {
php artisan state:initialized --silent || {
php artisan cli:info "Running for the forst time, generating application key"
local key=$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64) \
&& sed s~APP_KEY=.*\$~APP_KEY\=base64:$key~ .env > /tmp/.env \
&& cat /tmp/.env > .env || {
# fail if something went wrong
php artisan cli:error "Generating the encription key failed!"
exit 2
}
}
}
# run database migration
function migrate_database {
# fail if the database file is not writeable
[[ ! -w $dataBaseFile ]] && {
php artisan cli:error "Cannot write databese! Please check permissions!"
exit 3
}
# create a backup - NOTE: this may not be a good practice...
cp $dataBaseFile $dataBaseFile.bak
php artisan migrate --force || {
# fail if something went wrong
php artisan cli:error "Migration failed! See storage/logs/laravel.log for more info."
exit 3
}
}
# run databesa seeding
function seed_database {
#NOTE: this only creates the admin user if it does not exists yet
php artisan db:seed --force || {
# fail if something went wrong
php artisan cli:error "Seeding failed! See storage/logs/laravel.log for more info."
exit 4
}
}
# start a supervisord process
# @internal
# @param string $1 command name example: "bash"
# @param string $2 command display name example: "Bourne Again Shell"
function start_process {
# variables
local process=$1
local process_name=$2
# log message
php artisan cli:info "Starting ${process_name} process..."
# start the process
supervisorctl start ${process} || {
# log and fail if the process creation failed
php artisan cli:error "Could not start ${process_name} process, exiting :("
supervisorctl shutdown
exit 99 # this should never be called
}
}
# start supervisord defined server processes
function start_server_processes {
# start php
start_process "php-fpm" "PHP-Fpm"
# start nginx
start_process "nginx" "Nginx"
# start schedule:work
start_process "scheduler" "Scheduler"
}
# ---- main -----------------------------------------------------------------
# Initalizing the environment file
initalize_environment_file
# Creating storage folders
create_storage_folders
# generating application encryption key
generate_application_key
# migrating the database
migrate_database
# seed the database (if not already seeded)
seed_database
# clear cache on (re)start
initalize_cache
# adding notice to the app log
echo -e "$(date +'[%Y-%m-%d %H:%M:%S]') production.NOTICE: Entrypoint reached.\n" >> storage/logs/laravel.log
# starting server processes
start_server_processes
# confirm successfull program startup
php artisan cli:info "Program stared succesfully."
exit 0