! Published.
All checks were successful
Build docker image / build_docker_image (push) Successful in 3m50s
All checks were successful
Build docker image / build_docker_image (push) Successful in 3m50s
This commit is contained in:
203
build/nginx/entrypoint.sh
Executable file
203
build/nginx/entrypoint.sh
Executable 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
|
||||
Reference in New Issue
Block a user