All checks were successful
Build docker image / build_docker_image (push) Successful in 3m50s
204 lines
5.0 KiB
Bash
Executable File
204 lines
5.0 KiB
Bash
Executable File
#!/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
|