mirror of
https://github.com/casjaysdevdocker/tools
synced 2026-10-04 08:12:52 -04:00
🗃️ Committing everything that changed 🗃️
applications/php/scripts/packages.sh applications/postgres/scripts/install.sh applications/redis/config/ applications/redis/scripts/commands.sh configs/nginx/nginx.conf configs/nginx/nginx.ssl.conf configs/nginx/vhosts.d/default.conf configs/nginx/vhosts.d/default.conf.sample configs/nginx/vhosts.d/default.ssl.conf configs/nginx/vhosts.d/default.ssl.sample configs/phppgadmin/ configs/postgres/ init/ wwwroot/404.html wwwroot/cgi-bin/ wwwroot/css/ wwwroot/favicon.ico wwwroot/health/ wwwroot/images/ wwwroot/index.php wwwroot/info.php wwwroot/js/ wwwroot/robots.txt wwwroot/site.webmanifest wwwroot/www/404.html wwwroot/www/cgi-bin/env.cgi wwwroot/www/cgi-bin/env.php wwwroot/www/cgi-bin/env.pl wwwroot/www/cgi-bin/env.py wwwroot/www/cgi-bin/env.rb wwwroot/www/cgi-bin/printenv wwwroot/www/cgi-bin/printenv.vbs wwwroot/www/cgi-bin/printenv.wsf wwwroot/www/cgi-bin/test-cgi wwwroot/www/css/bootstrap.css wwwroot/www/css/bootstrap.min.css wwwroot/www/css/bs.plain.css wwwroot/www/css/cookieconsent.css wwwroot/www/css/errorpages.css wwwroot/www/css/index.css wwwroot/www/favicon.ico wwwroot/www/health/health/index.json wwwroot/www/health/health/index.txt wwwroot/www/health/index.json wwwroot/www/health/index.txt wwwroot/www/images/403.png wwwroot/www/images/404.gif wwwroot/www/images/bg.png wwwroot/www/images/favicon.ico wwwroot/www/images/icon.png wwwroot/www/images/icon.svg wwwroot/www/index.php wwwroot/www/info.php wwwroot/www/js/app.js wwwroot/www/js/bootstrap.min.js wwwroot/www/js/errorpages/homepage.js wwwroot/www/js/errorpages/isup.js wwwroot/www/js/errorpages/loaddomain.js wwwroot/www/js/errorpages/scale.fix.js wwwroot/www/js/jquery/default.js wwwroot/www/js/passprotect.min.js wwwroot/www/robots.txt wwwroot/www/site.webmanifest
This commit is contained in:
55 files changed
+3075
-40
No files matched your search
@@ -1,4 +1,4 @@
|
||||
${PHP_VERSION}-bcmath ${PHP_VERSION}-bz2 ${PHP_VERSION}-calendar ${PHP_VERSION}-cgi ${PHP_VERSION}-common ${PHP_VERSION}-ctype \
|
||||
composer ${PHP_VERSION}-bcmath ${PHP_VERSION}-bz2 ${PHP_VERSION}-calendar ${PHP_VERSION}-cgi ${PHP_VERSION}-common ${PHP_VERSION}-ctype \
|
||||
${PHP_VERSION}-curl ${PHP_VERSION}-dba ${PHP_VERSION}-dev ${PHP_VERSION}-doc ${PHP_VERSION}-dom ${PHP_VERSION}-embed ${PHP_VERSION}-enchant ${PHP_VERSION}-exif ${PHP_VERSION}-ffi \
|
||||
${PHP_VERSION}-fileinfo ${PHP_VERSION}-fpm ${PHP_VERSION}-ftp ${PHP_VERSION}-gd ${PHP_VERSION}-gettext ${PHP_VERSION}-gmp ${PHP_VERSION}-iconv ${PHP_VERSION}-imap ${PHP_VERSION}-intl \
|
||||
${PHP_VERSION}-ldap ${PHP_VERSION}-litespeed ${PHP_VERSION}-mbstring ${PHP_VERSION}-mysqli ${PHP_VERSION}-mysqlnd ${PHP_VERSION}-odbc ${PHP_VERSION}-opcache ${PHP_VERSION}-openssl \
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
mkdir -p "/etc/phppgadmin"
|
||||
[ -e "/etc/php" ] && rm -Rf "/etc/php"
|
||||
[ -d "/etc/apache2/conf.d" ] && rm -Rf "/etc/apache2/conf.d"/*
|
||||
[ -d "/tmp/etc/php" ] && mv -f "/tmp/etc/php" "/tmp/etc/${PHP_VERSION}"
|
||||
[ -d "/etc/${PHP_VERSION}" ] && ln -sf "/etc/${PHP_VERSION}" "/etc/php"
|
||||
git clone -q --depth 1 "https://github.com/phppgadmin/phppgadmin" "${WWW_ROOT_DIR}}"
|
||||
cp -Rf "/tmp/etc/." "/etc/"
|
||||
mkdir -p "/etc/phppgadmin" "${WWW_ROOT_DIR}"
|
||||
git clone -q --depth 1 "https://github.com/phppgadmin/phppgadmin" "${WWW_ROOT_DIR}"
|
||||
cp -Rf "/usr/local/share/template-files/config/phppgadmin/config.php" "/etc/phppgadmin/config.php"
|
||||
ln -sf "/etc/phppgadmin/config.php" "${WWW_ROOT_DIR}}/conf/config.inc.php"
|
||||
@@ -0,0 +1,8 @@
|
||||
# Redis conf file
|
||||
port 6379
|
||||
unixsocket /run/redis.sock
|
||||
unixsocketperm 770
|
||||
daemonize no
|
||||
pidfile /tmp/redis.pid
|
||||
dir REPLACE_DATABASE_DIR
|
||||
save 3600 1 300 100 60 10000
|
||||
@@ -0,0 +1,14 @@
|
||||
SERVICE_PORT="6379"
|
||||
|
||||
EXEC_CMD_BIN="redis-server" # command to execute
|
||||
EXEC_CMD_ARGS="$ETC_DIR/redis.conf" # command arguments
|
||||
|
||||
sysctl vm.overcommit_memory=1
|
||||
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
|
||||
|
||||
if [ -n "$root_user_name" ] && [ -n "$root_user_pass" ]; then
|
||||
if ! grep -qs "$root_user_name" "$ETC_DIR/redis.conf"; then
|
||||
echo 'user '$root_user_name' on +@all ~* >'$root_user_pass'' >>"$ETC_DIR/redis.conf"
|
||||
fi
|
||||
fi
|
||||
grep -qs 'redis' /etc/passwd && chown -Rf redis. "$ETC_DIR" "$LOG_DIR" "$DATABASE_DIR"
|
||||
+95
-28
@@ -12,43 +12,67 @@ events {
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type "text/html";
|
||||
access_log /data/logs/nginx/access.default.log;
|
||||
access_log /data/logs/nginx/access.REPLACE_SERVER_NAME.log;
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
gzip on;
|
||||
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
|
||||
disable_symlinks off;
|
||||
root REPLACE_SERVER_WWW_DIR;
|
||||
|
||||
server {
|
||||
listen REPLACE_SERVER_PORT default_server;
|
||||
listen REPLACE_SERVER_PORT;
|
||||
server_name REPLACE_SERVER_NAME;
|
||||
root REPLACE_SERVER_WWW_DIR;
|
||||
index index.php index.html index.cgi index.pl index.aspx index.txt index.json index.unknown.php index.default.php;
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' *; frame-src 'self' *; object-src 'self'" always;
|
||||
proxy_intercept_errors off;
|
||||
|
||||
location = /favicon.ico {
|
||||
alias /usr/local/share/wwwroot/favicon.ico;
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
alias /usr/local/share/wwwroot/robots.txt;
|
||||
allow all;
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location ^~ /.well-known {
|
||||
default_type "text/plain";
|
||||
root /usr/local/share/wwwroot/.well-known;
|
||||
}
|
||||
|
||||
location ^~ /health {
|
||||
default_type "text/plain";
|
||||
allow all;
|
||||
access_log off;
|
||||
root /usr/local/share/wwwroot/health;
|
||||
}
|
||||
|
||||
location ^~ /health/txt {
|
||||
default_type application/json;
|
||||
allow all;
|
||||
access_log off;
|
||||
return 200 'ok';
|
||||
}
|
||||
|
||||
location = /favicon.ico {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
allow all;
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location /health {
|
||||
default_type text/html;
|
||||
allow all;
|
||||
access_log off;
|
||||
return 200 'OK';
|
||||
}
|
||||
|
||||
location /health/json {
|
||||
location ^~ /health/json {
|
||||
default_type application/json;
|
||||
allow all;
|
||||
access_log off;
|
||||
return 200 '{"status":"OK"}';
|
||||
}
|
||||
|
||||
location /health/status {
|
||||
|
||||
location ^~ /health/status {
|
||||
stub_status;
|
||||
}
|
||||
|
||||
@@ -57,12 +81,55 @@ http {
|
||||
if (!-f $document_root$fastcgi_script_name) {
|
||||
return 404;
|
||||
}
|
||||
fastcgi_param HTTP_PROXY "";
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param HTTP_PROXY "";
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
||||
|
||||
}
|
||||
# location /cgi-bin {
|
||||
# root /usr/local/share/wwwroot/cgi-bin;
|
||||
# gzip off;
|
||||
# fastcgi_pass unix:/var/run/fcgiwrap.socket;
|
||||
# fastcgi_param HTTP_PROXY "";
|
||||
# fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
# fastcgi_param SERVER_SOFTWARE nginx;
|
||||
# fastcgi_param QUERY_STRING $query_string;
|
||||
# fastcgi_param REQUEST_METHOD $request_method;
|
||||
# fastcgi_param CONTENT_TYPE $content_type;
|
||||
# fastcgi_param CONTENT_LENGTH $content_length;
|
||||
# fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
# fastcgi_param REQUEST_URI $request_uri;
|
||||
# fastcgi_param DOCUMENT_URI $document_uri;
|
||||
# fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
# fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
# fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
# fastcgi_param REMOTE_PORT $remote_port;
|
||||
# fastcgi_param SERVER_ADDR $server_addr;
|
||||
# fastcgi_param SERVER_PORT $server_port;
|
||||
# fastcgi_param SERVER_NAME $server_name;
|
||||
# }
|
||||
}
|
||||
include /etc/nginx/vhosts.d/*.conf;
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
# Default nginx configuration
|
||||
user root;
|
||||
worker_processes auto;
|
||||
daemon off;
|
||||
error_log /data/logs/nginx/nginx.log warn;
|
||||
pid /run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type "text/html";
|
||||
access_log /data/logs/nginx/access.default.log;
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
gzip on;
|
||||
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
|
||||
disable_symlinks off;
|
||||
root REPLACE_SERVER_WWW_DIR;
|
||||
|
||||
server {
|
||||
listen REPLACE_SERVER_PORT;
|
||||
server_name REPLACE_SERVER_NAME;
|
||||
root REPLACE_SERVER_WWW_DIR;
|
||||
index index.php index.cgi index.pl index.aspx index.txt index.json index.html index.unknown.php index.default.php;
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' *; frame-src 'self' *; object-src 'self'" always;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
||||
ssl_certificate /etc/ssl/localhost.crt;
|
||||
ssl_certificate_key /etc/ssl/localhost.key;
|
||||
proxy_intercept_errors off;
|
||||
|
||||
location ^~ /.well-known {
|
||||
default_type "text/plain";
|
||||
root REPLACE_SERVER_WWW_DIR/.well-known;
|
||||
}
|
||||
|
||||
location ^~ = /favicon.ico {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location ^~ = /robots.txt {
|
||||
allow all;
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location ^~ /health {
|
||||
default_type text/html;
|
||||
allow all;
|
||||
access_log off;
|
||||
return 200 'OK';
|
||||
}
|
||||
|
||||
location ^~ /health/json {
|
||||
default_type application/json;
|
||||
allow all;
|
||||
access_log off;
|
||||
return 200 '{"status":"OK"}';
|
||||
}
|
||||
|
||||
location ^~ /health/status {
|
||||
stub_status;
|
||||
}
|
||||
|
||||
location ~ [^/]\.php(/|$) {
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
if (!-f $document_root$fastcgi_script_name) {
|
||||
return 404;
|
||||
}
|
||||
fastcgi_param HTTP_PROXY "";
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
||||
|
||||
}
|
||||
# location /cgi-bin {
|
||||
# root /usr/local/share/wwwroot/cgi-bin;
|
||||
# gzip off;
|
||||
# fastcgi_pass unix:/var/run/fcgiwrap.socket;
|
||||
# fastcgi_param HTTP_PROXY "";
|
||||
# fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
# fastcgi_param SERVER_SOFTWARE nginx;
|
||||
# fastcgi_param QUERY_STRING $query_string;
|
||||
# fastcgi_param REQUEST_METHOD $request_method;
|
||||
# fastcgi_param CONTENT_TYPE $content_type;
|
||||
# fastcgi_param CONTENT_LENGTH $content_length;
|
||||
# fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
# fastcgi_param REQUEST_URI $request_uri;
|
||||
# fastcgi_param DOCUMENT_URI $document_uri;
|
||||
# fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
# fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
# fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
# fastcgi_param REMOTE_PORT $remote_port;
|
||||
# fastcgi_param SERVER_ADDR $server_addr;
|
||||
# fastcgi_param SERVER_PORT $server_port;
|
||||
# fastcgi_param SERVER_NAME $server_name;
|
||||
# }
|
||||
}
|
||||
include /etc/nginx/vhosts.d/*.conf;
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
server {
|
||||
listen REPLACE_SERVER_PORT;
|
||||
server_name REPLACE_SERVER_NAME;
|
||||
root REPLACE_SERVER_DIR;
|
||||
index index.php index.cgi index.pl index.aspx awstats.pl index.txt index.json index.html index.unknown.php index.default.php;
|
||||
root REPLACE_SERVER_WWW_DIR;
|
||||
index index.php index.cgi index.pl index.aspx index.txt index.json index.html index.unknown.php index.default.php;
|
||||
proxy_intercept_errors off;
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
@@ -1,7 +1,7 @@
|
||||
server {
|
||||
listen REPLACE_SERVER_PORT ssl http2 default_server;
|
||||
listen ssl http2 REPLACE_SERVER_PORT;
|
||||
server_name REPLACE_SERVER_NAME;
|
||||
root REPLACE_SERVER_DIR;
|
||||
root REPLACE_SERVER_WWW_DIR;
|
||||
index index.php index.cgi index.pl index.aspx awstats.pl index.txt index.json index.html index.unknown.php index.default.php;
|
||||
proxy_intercept_errors off;
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
$conf['servers'][1]['desc'] = 'local';
|
||||
$conf['servers'][1]['host'] = '127.0.0.1';
|
||||
$conf['servers'][1]['port'] = 5432;
|
||||
$conf['servers'][1]['sslmode'] = 'allow';
|
||||
$conf['servers'][1]['defaultdb'] = 'postgres';
|
||||
$conf['servers'][1]['pg_dump_path'] = '/usr/bin/pg_dump';
|
||||
$conf['servers'][1]['pg_dumpall_path'] = '/usr/bin/pg_dumpall';
|
||||
|
||||
// $conf['servers'][0]['desc'] = '';
|
||||
// $conf['servers'][0]['host'] = '';
|
||||
// $conf['servers'][0]['port'] = 5432;
|
||||
// $conf['servers'][0]['sslmode'] = 'allow';
|
||||
// $conf['servers'][0]['defaultdb'] = 'postgres';
|
||||
// $conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump';
|
||||
// $conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall';
|
||||
|
||||
//$conf['srv_groups'][0]['desc'] = 'group one';
|
||||
//$conf['srv_groups'][0]['servers'] = '0,1,2';
|
||||
//$conf['srv_groups'][1]['desc'] = 'group two';
|
||||
//$conf['srv_groups'][1]['servers'] = '3,1';
|
||||
//$conf['srv_groups'][2]['desc'] = 'group three';
|
||||
//$conf['srv_groups'][2]['servers'] = '4';
|
||||
//$conf['srv_groups'][2]['parents'] = '0,1';
|
||||
|
||||
//$conf['servers'][0]['theme']['default'] = 'default';
|
||||
//$conf['servers'][0]['theme']['user']['specific_user'] = 'default';
|
||||
//$conf['servers'][0]['theme']['db']['specific_db'] = 'default';
|
||||
$conf['default_lang'] = 'auto';
|
||||
$conf['autocomplete'] = 'default on';
|
||||
$conf['extra_login_security'] = false;
|
||||
$conf['owned_only'] = true;
|
||||
$conf['show_comments'] = true;
|
||||
$conf['show_advanced'] = false;
|
||||
$conf['show_system'] = false;
|
||||
$conf['min_password_length'] = 8;
|
||||
$conf['left_width'] = 200;
|
||||
$conf['theme'] = 'default';
|
||||
$conf['show_oids'] = false;
|
||||
$conf['max_rows'] = 30;
|
||||
$conf['max_chars'] = 50;
|
||||
$conf['use_xhtml_strict'] = false;
|
||||
$conf['help_base'] = 'http://www.postgresql.org/docs/%s/interactive/';
|
||||
$conf['ajax_refresh'] = 3;
|
||||
|
||||
$conf['plugins'] = array();
|
||||
|
||||
/*****************************************
|
||||
* Don't modify anything below this line *
|
||||
*****************************************/
|
||||
$conf['version'] = 19;
|
||||
?>
|
||||
@@ -0,0 +1,9 @@
|
||||
# ===================================================
|
||||
# PostgreSQL Client Authentication Configuration File
|
||||
# ===================================================
|
||||
# TYPE DATABASE USER ADDRESS METHOD
|
||||
local all postgres peer
|
||||
local all all trust
|
||||
local all all md5
|
||||
host all all 0.0.0.0/0 md5
|
||||
host all all ::/0 md5
|
||||
@@ -0,0 +1,263 @@
|
||||
# -----------------------------
|
||||
# CasjaysDev PostgreSQL configuration file
|
||||
# -----------------------------
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
# FILE LOCATIONS
|
||||
#------------------------------------------------------------------------------
|
||||
data_directory = 'REPLACE_DATABASE_DIR'
|
||||
#hba_file = 'ConfigDir/pg_hba.conf'
|
||||
#ident_file = 'ConfigDir/pg_ident.conf'
|
||||
#external_pid_file = ''
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONNECTIONS AND AUTHENTICATION
|
||||
#------------------------------------------------------------------------------
|
||||
listen_addresses = '*'
|
||||
port = 5432
|
||||
max_connections = 100
|
||||
unix_socket_directories = '/var/run/postgresql, /tmp'
|
||||
#unix_socket_group = ''
|
||||
unix_socket_permissions = 0777
|
||||
#bonjour = off
|
||||
#bonjour_name = ''
|
||||
#authentication_timeout = 1min
|
||||
#password_encryption = on
|
||||
#db_user_namespace = off
|
||||
#krb_server_keyfile = ''
|
||||
#krb_srvname = 'postgres'
|
||||
#krb_caseins_users = off
|
||||
#tcp_keepalives_idle = 0
|
||||
#tcp_keepalives_interval = 0
|
||||
#tcp_keepalives_count = 0
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# SSL configuration
|
||||
#------------------------------------------------------------------------------
|
||||
ssl = off
|
||||
ssl_ca_file = '/etc/ssl/ca.crt'
|
||||
ssl_key_file = '/etc/ssl/localhost.key'
|
||||
ssl_cert_file = '/etc/ssl/localhost.crt'
|
||||
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
|
||||
ssl_prefer_server_ciphers = on
|
||||
ssl_ecdh_curve = 'prime256v1'
|
||||
ssl_min_protocol_version = 'TLSv1.2'
|
||||
#ssl_max_protocol_version = ''
|
||||
#ssl_dh_params_file = ''
|
||||
#ssl_passphrase_command = ''
|
||||
#ssl_passphrase_command_supports_reload = off
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# RESOURCE USAGE (except WAL)
|
||||
#------------------------------------------------------------------------------
|
||||
shared_buffers = 32MB
|
||||
#temp_buffers = 8MB
|
||||
#work_mem = 1MB
|
||||
#maintenance_work_mem = 16MB
|
||||
#max_stack_depth = 2MB
|
||||
#temp_file_limit = -1
|
||||
#max_files_per_process = 1000
|
||||
#shared_preload_libraries = ''
|
||||
#vacuum_cost_delay = 0ms
|
||||
#vacuum_cost_page_hit = 1
|
||||
#vacuum_cost_page_miss = 10
|
||||
#vacuum_cost_page_dirty = 20
|
||||
#vacuum_cost_limit = 200
|
||||
#bgwriter_delay = 200ms
|
||||
#bgwriter_lru_maxpages = 100
|
||||
#bgwriter_lru_multiplier = 2.0
|
||||
#effective_io_concurrency = 1
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# WRITE AHEAD LOG
|
||||
#wal_level = minimal
|
||||
#fsync = on
|
||||
#synchronous_commit = on
|
||||
#wal_sync_method = fsync
|
||||
#full_page_writes = on
|
||||
#wal_buffers = -1
|
||||
#wal_writer_delay = 200ms
|
||||
#commit_delay = 0
|
||||
#commit_siblings = 5
|
||||
#checkpoint_segments = 3
|
||||
#checkpoint_timeout = 5min
|
||||
#checkpoint_completion_target = 0.5
|
||||
#checkpoint_warning = 30s
|
||||
#archive_mode = off
|
||||
#archive_command = ''
|
||||
#archive_timeout = 0
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPLICATION
|
||||
#------------------------------------------------------------------------------
|
||||
#max_wal_senders = 0
|
||||
#wal_keep_segments = 0
|
||||
#replication_timeout = 60s
|
||||
#synchronous_standby_names = ''
|
||||
#vacuum_defer_cleanup_age = 0
|
||||
#hot_standby = off
|
||||
#max_standby_archive_delay = 30s
|
||||
#max_standby_streaming_delay = 30s
|
||||
#wal_receiver_status_interval = 10s
|
||||
#hot_standby_feedback = off
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# QUERY TUNING
|
||||
#------------------------------------------------------------------------------
|
||||
#enable_bitmapscan = on
|
||||
#enable_hashagg = on
|
||||
#enable_hashjoin = on
|
||||
#enable_indexscan = on
|
||||
#enable_indexonlyscan = on
|
||||
#enable_material = on
|
||||
#enable_mergejoin = on
|
||||
#enable_nestloop = on
|
||||
#enable_seqscan = on
|
||||
#enable_sort = on
|
||||
#enable_tidscan = on
|
||||
|
||||
#seq_page_cost = 1.0
|
||||
#random_page_cost = 4.0
|
||||
#cpu_tuple_cost = 0.01
|
||||
#cpu_index_tuple_cost = 0.005
|
||||
#cpu_operator_cost = 0.0025
|
||||
#effective_cache_size = 128MB
|
||||
#geqo = on
|
||||
#geqo_threshold = 12
|
||||
#geqo_effort = 5
|
||||
#geqo_pool_size = 0
|
||||
#geqo_generations = 0
|
||||
#geqo_selection_bias = 2.0
|
||||
#geqo_seed = 0.0
|
||||
#default_statistics_target = 100
|
||||
#constraint_exclusion = partition
|
||||
#cursor_tuple_fraction = 0.1
|
||||
#from_collapse_limit = 8
|
||||
#join_collapse_limit = 8
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# ERROR REPORTING AND LOGGING
|
||||
#------------------------------------------------------------------------------
|
||||
log_destination = 'stderr'
|
||||
logging_collector = on
|
||||
log_directory = '/data/logs/postgres'
|
||||
log_filename = 'postgresql.log'
|
||||
#log_file_mode = 0600
|
||||
log_truncate_on_rotation = on
|
||||
log_rotation_age = 1d
|
||||
log_rotation_size = 0
|
||||
#syslog_facility = 'LOCAL0'
|
||||
#syslog_ident = 'postgres'
|
||||
#event_source = 'PostgreSQL'
|
||||
#client_min_messages = notice
|
||||
#log_min_messages = warning
|
||||
#log_min_error_statement = error
|
||||
#log_min_duration_statement = -1
|
||||
#debug_print_parse = off
|
||||
#debug_print_rewritten = off
|
||||
#debug_print_plan = off
|
||||
#debug_pretty_print = on
|
||||
#log_checkpoints = off
|
||||
#log_connections = off
|
||||
#log_disconnections = off
|
||||
#log_duration = off
|
||||
#log_error_verbosity = default
|
||||
#log_hostname = off
|
||||
#log_line_prefix = ''
|
||||
#log_lock_waits = off
|
||||
#log_statement = 'none'
|
||||
#log_temp_files = -1
|
||||
log_timezone = 'US/Eastern'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# RUNTIME STATISTICS
|
||||
#------------------------------------------------------------------------------
|
||||
#track_activities = on
|
||||
#track_counts = on
|
||||
#track_io_timing = off
|
||||
#track_functions = none
|
||||
#track_activity_query_size = 1024
|
||||
#update_process_title = on
|
||||
#stats_temp_directory = 'pg_stat_tmp'
|
||||
#log_parser_stats = off
|
||||
#log_planner_stats = off
|
||||
#log_executor_stats = off
|
||||
#log_statement_stats = off
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# AUTOVACUUM PARAMETERS
|
||||
#------------------------------------------------------------------------------
|
||||
#autovacuum = on
|
||||
#log_autovacuum_min_duration = -1
|
||||
#autovacuum_max_workers = 3
|
||||
#autovacuum_naptime = 1min
|
||||
#autovacuum_vacuum_threshold = 50
|
||||
#autovacuum_analyze_threshold = 50
|
||||
#autovacuum_vacuum_scale_factor = 0.2
|
||||
#autovacuum_analyze_scale_factor = 0.1
|
||||
#autovacuum_freeze_max_age = 200000000
|
||||
#autovacuum_vacuum_cost_delay = 20ms
|
||||
#autovacuum_vacuum_cost_limit = -1
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CLIENT CONNECTION DEFAULTS
|
||||
#------------------------------------------------------------------------------
|
||||
#search_path = '"$user",public'
|
||||
#default_tablespace = ''
|
||||
#temp_tablespaces = ''
|
||||
#check_function_bodies = on
|
||||
#default_transaction_isolation = 'read committed'
|
||||
#default_transaction_read_only = off
|
||||
#default_transaction_deferrable = off
|
||||
#session_replication_role = 'origin'
|
||||
#statement_timeout = 0
|
||||
#vacuum_freeze_min_age = 50000000
|
||||
#vacuum_freeze_table_age = 150000000
|
||||
#bytea_output = 'hex'
|
||||
#xmlbinary = 'base64'
|
||||
#xmloption = 'content'
|
||||
#gin_fuzzy_search_limit = 0
|
||||
datestyle = 'iso, mdy'
|
||||
#intervalstyle = 'postgres'
|
||||
timezone = 'US/Eastern'
|
||||
#extra_float_digits = 0
|
||||
#client_encoding = sql_ascii
|
||||
lc_messages = 'en_US.UTF-8'
|
||||
lc_monetary = 'en_US.UTF-8'
|
||||
lc_numeric = 'en_US.UTF-8'
|
||||
lc_time = 'en_US.UTF-8'
|
||||
default_text_search_config = 'pg_catalog.english'
|
||||
#dynamic_library_path = '$libdir'
|
||||
#local_preload_libraries = ''
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# LOCK MANAGEMENT
|
||||
#------------------------------------------------------------------------------
|
||||
#deadlock_timeout = 1s
|
||||
#max_locks_per_transaction = 64
|
||||
#max_pred_locks_per_transaction = 64
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VERSION/PLATFORM COMPATIBILITY
|
||||
#------------------------------------------------------------------------------
|
||||
#array_nulls = on
|
||||
#backslash_quote = safe_encoding
|
||||
#default_with_oids = off
|
||||
#escape_string_warning = on
|
||||
#lo_compat_privileges = off
|
||||
#quote_all_identifiers = off
|
||||
#sql_inheritance = on
|
||||
#standard_conforming_strings = on
|
||||
#synchronize_seqscans = on
|
||||
#transform_null_equals = off
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# ERROR HANDLING
|
||||
#------------------------------------------------------------------------------
|
||||
#exit_on_error = off
|
||||
#restart_after_crash = on
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CUSTOMIZED OPTIONS
|
||||
#------------------------------------------------------------------------------
|
||||
# Add settings for extensions here
|
||||
@@ -0,0 +1,515 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202308221958-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : 00-mariadb.sh --help
|
||||
# @@Copyright : Copyright: (c) 2023 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Tuesday, Aug 22, 2023 19:58 EDT
|
||||
# @@File : 00-mariadb.sh
|
||||
# @@Description :
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : shell/bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC2016
|
||||
# shellcheck disable=SC2031
|
||||
# shellcheck disable=SC2120
|
||||
# shellcheck disable=SC2155
|
||||
# shellcheck disable=SC2199
|
||||
# shellcheck disable=SC2317
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
printf '%s\n' "# - - - Initializing mysql - - - #"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_NAME="mysql"
|
||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
[ -f "$set_env" ] && . "$set_env"
|
||||
done
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Custom functions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Reset environment before executing service
|
||||
RESET_ENV="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show message before execute
|
||||
PRE_EXEC_MESSAGE=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the database directory
|
||||
DATABASE_DIR="${DATABASE_DIR_MYSQL:-/data/db/mysql}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set webroot
|
||||
WWW_DIR="/usr/share/webapps/mariadb"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default predefined variables
|
||||
DATA_DIR="/data" # set data directory
|
||||
CONF_DIR="/config" # set config directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the containers etc directory
|
||||
ETC_DIR="/etc/mysql"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
RUN_DIR="/run/init.d" # set scripts pid dir
|
||||
LOG_DIR="/data/logs/mysql" # set log directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the working dir
|
||||
WORK_DIR="" # set working directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Where to save passwords to
|
||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
|
||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# root/admin user info password/random]
|
||||
root_user_name="${MYSQL_ROOT_USER_NAME:-root}" # root user name
|
||||
root_user_pass="${MYSQL_ROOT_PASS_WORD:-random}" # root user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Normal user info [password/random]
|
||||
user_name="${MYSQL_USER_NAME:-}" # normal user name
|
||||
user_pass="${MYSQL_USER_PASS_WORD:-}" # normal user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Overwrite variables from files
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# port which service is listening on
|
||||
SERVICE_PORT="3306"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# execute command variables
|
||||
SERVICE_UID="0" # set the user id
|
||||
SERVICE_USER="mysql" # execute command as another user
|
||||
EXEC_CMD_BIN="mysqld" # command to execute
|
||||
EXEC_CMD_ARGS="--user=$SERVICE_USER --datadir=$DATABASE_DIR" # command arguments
|
||||
EXEC_PRE_SCRIPT="" # execute script before
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a web server
|
||||
IS_WEB_SERVER="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a database server
|
||||
IS_DATABASE_SERVICE="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional predefined variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional variables
|
||||
DATABASE_CREATE="${DATABASE_CREATE:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Specifiy custom directories to be created
|
||||
ADD_APPLICATION_FILES=""
|
||||
ADD_APPLICATION_DIRS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
APPLICATION_FILES="$LOG_DIR/mysql.log"
|
||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# define variables that need to be loaded into the service - escape quotes - var=\"value\",other=\"test\"
|
||||
CMD_ENV=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__update_conf_files() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# delete files
|
||||
#__rm ""
|
||||
|
||||
# define actions
|
||||
|
||||
# create default directories
|
||||
for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
|
||||
(
|
||||
echo "Creating directory $filedirs with permissions 777"
|
||||
mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create default files
|
||||
for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
|
||||
if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
|
||||
(
|
||||
echo "Creating file $application_files with permissions 777"
|
||||
touch "$application_files" && chmod -Rf 777 "$application_files"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create directories if variable is yes"
|
||||
if [ "$IS_WEB_SERVER" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR"
|
||||
if [ ! -d "$WWW_DIR" ]; then
|
||||
(echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
__initialize_web_health "$WWW_DIR"
|
||||
fi
|
||||
if [ "$IS_DATABASE_SERVICE" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR"
|
||||
if [ ! -d "$DATABASE_DIR" ]; then
|
||||
(echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
fi
|
||||
# copy config files to system
|
||||
__file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
# replace variables
|
||||
# __replace "" "" "$ETC_DIR/mysql.conf"
|
||||
# replace variables recursively
|
||||
# __find_replace "" "" "$ETC_DIR/"
|
||||
# replace defaults in ETC_DIR
|
||||
__initialize_replace_variables "$ETC_DIR"
|
||||
# custom commands
|
||||
if [ ! -d "$DATABASE_DIR/mysql" ] || [ ! -f "$DATABASE_DIR/ibdata1" ]; then
|
||||
mkdir -p "$DATABASE_DIR" && chown -Rf $user:$user "$DATABASE_DIR"
|
||||
mysql_install_db --datadir=$DATABASE_DIR --user=$user 2>/dev/null
|
||||
fi
|
||||
|
||||
# unset unneeded variables
|
||||
unset application_files filedirs
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run before executing
|
||||
__pre_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# define commands
|
||||
|
||||
# execute if directories is empty
|
||||
#__is_dir_empty "" && true || false
|
||||
|
||||
# create user if needed
|
||||
# __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
|
||||
# set user on files/folders
|
||||
if [ -n "$user" ] && [ "$user" != "root" ]; then
|
||||
if grep -s -q "$user:" "/etc/passwd"; then
|
||||
for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$permissions" ] && [ -e "$permissions" ]; then
|
||||
(chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# unset unneeded variables
|
||||
unset filesperms filename
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run after executing
|
||||
__post_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
sleep 60 # how long to wait before executing
|
||||
echo "Running post commands" # message
|
||||
# execute commands
|
||||
(
|
||||
if [ -f "$CONF_DIR/mysql/init.sh" ]; then
|
||||
bash -c "$CONF_DIR/mysql/init.sh"
|
||||
fi
|
||||
if [ -n "$DATABASE_CREATE" ]; then
|
||||
mysql -v -u $runas <<MYSQL_SCRIPT
|
||||
CREATE DATABASE IF NOT EXISTS $DATABASE_CREATE;
|
||||
MYSQL_SCRIPT
|
||||
fi
|
||||
if [ "$user_name" != "root" ] && [ -n "$user_name" ]; then
|
||||
mysql -v -u $runas <<MYSQL_SCRIPT
|
||||
CREATE USER IF NOT EXISTS '$user_name'@'%' IDENTIFIED BY '$user_pass';
|
||||
MYSQL_SCRIPT
|
||||
fi
|
||||
if [ "$user_name" != "root" ] && [ -n "$DATABASE_CREATE" ]; then
|
||||
mysql -v -u $runas <<MYSQL_SCRIPT
|
||||
GRANT ALL PRIVILEGES ON $DATABASE_CREATE.* TO '$user_name'@'%';
|
||||
MYSQL_SCRIPT
|
||||
elif [ "$user_name" = "root" ] && [ -n "$DATABASE_CREATE" ]; then
|
||||
mysql -v -u $runas <<MYSQL_SCRIPT
|
||||
GRANT ALL PRIVILEGES ON $DATABASE_CREATE.* TO 'root'@'localhost';
|
||||
MYSQL_SCRIPT
|
||||
fi
|
||||
mysql -v -u $runas <<MYSQL_SCRIPT
|
||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '$root_user_pass';
|
||||
FLUSH PRIVILEGES;
|
||||
MYSQL_SCRIPT
|
||||
) 2>/dev/stderr >/dev/null
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__pre_message() {
|
||||
local exitCode=0
|
||||
[ -n "$user_name" ] && echo "username: $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$user_pass" ] && echo "password: saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
[ -n "$root_user_name" ] && echo "root username: $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$root_user_pass" ] && echo "root password: saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to setup ssl support
|
||||
__update_ssl_conf() {
|
||||
local exitCode=0
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__create_service_env() {
|
||||
cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
|
||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
# EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # execute before commands
|
||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}" #
|
||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}" #
|
||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}" #
|
||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}" #
|
||||
|
||||
EOF
|
||||
__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# script to start server
|
||||
__run_start_script() {
|
||||
local user="${SERVICE_USER:-root}"
|
||||
local cmd="${EXEC_CMD_BIN:-}"
|
||||
local args="${EXEC_CMD_ARGS:-}"
|
||||
local name="${EXEC_CMD_NAME:-}"
|
||||
local pre="${EXEC_PRE_SCRIPT:-}"
|
||||
local workdir="${WORK_DIR:-$WORK_DIR}"
|
||||
local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
|
||||
local home="${workdir//\/root/\/tmp\/docker}"
|
||||
local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
local message=""
|
||||
if [ -z "$cmd" ]; then
|
||||
__post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
echo "Initializing $SCRIPT_NAME has completed"
|
||||
else
|
||||
# ensure the command exists
|
||||
if [ ! -x "$cmd" ]; then
|
||||
echo "$name is not a valid executable"
|
||||
exit 2
|
||||
fi
|
||||
# set working directories
|
||||
[ -z "$home" ] && home="${workdir:-/tmp/docker}"
|
||||
[ "$home" = "/root" ] && home="/tmp/docker"
|
||||
[ "$home" = "$workdir" ] && workdir=""
|
||||
# create needed directories
|
||||
[ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
|
||||
[ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
|
||||
[ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
|
||||
[ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
|
||||
[ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
|
||||
# check and exit if already running
|
||||
if __proc_check "$name" || __proc_check "$cmd"; then
|
||||
echo "$name is already running" >&2
|
||||
exit 0
|
||||
else
|
||||
if [ -n "$pre" ] && [ -f "$pre" ]; then
|
||||
cmd_exec="$pre $cmd $args"
|
||||
message="Starting service: $name $args through $pre"
|
||||
else
|
||||
cmd_exec="$cmd $args"
|
||||
message="Starting service: $name $args"
|
||||
fi
|
||||
echo "$message"
|
||||
su_cmd touch "$SERVICE_PID_FILE"
|
||||
__post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
|
||||
if [ "$RESET_ENV" = "yes" ]; then
|
||||
su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" HOSTNAME="$sysname" USER="$user" ${CMD_ENV//,/ } sh -c "$cmd_exec" || return 10
|
||||
else
|
||||
eval "$cmd_exec" || return 10
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# username and password actions
|
||||
__run_secure_function() {
|
||||
if [ -n "$user_name" ] || [ -n "$user_pass" ]; then
|
||||
for filesperms in "${USER_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then
|
||||
for filesperms in "${ROOT_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# simple cd function
|
||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# process check functions
|
||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
|
||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# check if process is already running
|
||||
__proc_check() {
|
||||
cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
|
||||
cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
|
||||
if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
|
||||
SERVICE_IS_RUNNING="true"
|
||||
touch "$SERVICE_PID_FILE"
|
||||
echo "$cmd_name is already running"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow ENV_ variable - Import env file
|
||||
__file_exists_with_content"/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_EXIT_CODE=0 # default exit code
|
||||
WORK_DIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# application specific
|
||||
EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # Pre
|
||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid" # set the pid file location
|
||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
SERVICE_PID_NUMBER="$(__pgrep)" # check if running
|
||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
|
||||
EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT" || echo "$EXEC_PRE_SCRIPT")" # set full path
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create auth directories
|
||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
|
||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ "$IS_WEB_SERVER" = "yes" ] && RESET_ENV="yes"
|
||||
[ "$IS_DATABASE_SERVICE" = "yes" ] && RESET_ENV="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow per init script usernames and passwords
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/name" && user_name="$(<"$ETC_DIR/auth/user/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/pass" && user_pass="$(<"$ETC_DIR/auth/user/pass")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/name" && root_user_name="$(<"$ETC_DIR/auth/root/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/pass" && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow setting initial users and passwords via environment
|
||||
user_name="${user_name:-$ENV_USER_NAME}"
|
||||
user_pass="${user_pass:-$ENV_USER_PASS}"
|
||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
|
||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set password to random if variable is random
|
||||
if [ "$user_pass" = "random" ]; then
|
||||
user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$root_user_pass" = "random" ]; then
|
||||
root_user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow variables via imports - Overwrite existing
|
||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Only run check
|
||||
if [ "$1" = "check" ]; then
|
||||
__proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
|
||||
exit $?
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show message if env exists
|
||||
if [ -n "$EXEC_CMD_BIN" ]; then
|
||||
[ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
|
||||
[ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set switch user command
|
||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
elif [ "$(builtin type -P gosu)" ]; then
|
||||
su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P runuser)" ]; then
|
||||
su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P sudo)" ]; then
|
||||
su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P su)" ]; then
|
||||
su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
|
||||
else
|
||||
echo "Can not switch to $SERVICE_USER: attempting to run as root"
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Change to working directory
|
||||
[ -n "$WORK_DIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORK_DIR" && echo "Changed to $PWD"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show init message
|
||||
__pre_message
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Initialize ssl
|
||||
__update_ssl_conf
|
||||
__update_ssl_certs
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Updating config files
|
||||
__create_service_env
|
||||
__update_conf_files
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run the pre execute commands
|
||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
|
||||
__pre_execute
|
||||
__run_secure_function
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
|
||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
|
||||
echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
|
||||
SERVICE_EXIT_CODE=10
|
||||
SERVICE_IS_RUNNING="false"
|
||||
rm -Rf "$SERVICE_PID_FILE"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $SERVICE_EXIT_CODE
|
||||
@@ -0,0 +1,516 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202308222209-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : 00-postgres.sh --help
|
||||
# @@Copyright : Copyright: (c) 2023 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Tuesday, Aug 22, 2023 22:09 EDT
|
||||
# @@File : 00-postgres.sh
|
||||
# @@Description :
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : shell/bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC2016
|
||||
# shellcheck disable=SC2031
|
||||
# shellcheck disable=SC2120
|
||||
# shellcheck disable=SC2155
|
||||
# shellcheck disable=SC2199
|
||||
# shellcheck disable=SC2317
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
printf '%s\n' "# - - - Initializing postgres - - - #"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_NAME="postgres"
|
||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
[ -f "$set_env" ] && . "$set_env"
|
||||
done
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Custom functions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Reset environment before executing service
|
||||
RESET_ENV="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show message before execute
|
||||
PRE_EXEC_MESSAGE=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the database directory
|
||||
DATABASE_DIR="${DATABASE_DIR_POSTGRES:-/data/db/postgres}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set webroot
|
||||
WWW_DIR="/usr/share/webapps/postgres"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default predefined variables
|
||||
DATA_DIR="/data" # set data directory
|
||||
CONF_DIR="/config" # set config directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the containers etc directory
|
||||
ETC_DIR="/etc/postgres"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
RUN_DIR="/run/init.d" # set scripts pid dir
|
||||
LOG_DIR="/data/logs/postgres" # set log directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the working dir
|
||||
WORK_DIR="" # set working directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Where to save passwords to
|
||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
|
||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# root/admin user info password/random]
|
||||
root_user_name="${POSTGRES_ROOT_USER_NAME:-}" # root user name
|
||||
root_user_pass="${POSTGRES_ROOT_PASS_WORD:-}" # root user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Normal user info [password/random]
|
||||
user_name="${POSTGRES_USER_NAME:-}" # normal user name
|
||||
user_pass="${POSTGRES_USER_PASS_WORD:-}" # normal user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Overwrite variables from files
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# port which service is listening on
|
||||
SERVICE_PORT="5432"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# execute command variables
|
||||
SERVICE_UID="0" # set the user id
|
||||
SERVICE_USER="postgres" # execute command as another user
|
||||
EXEC_CMD_BIN="postgres" # command to execute
|
||||
EXEC_CMD_ARGS="-D $DATABASE_DIR" # command arguments
|
||||
EXEC_PRE_SCRIPT="" # execute script before
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a web server
|
||||
IS_WEB_SERVER="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a database server
|
||||
IS_DATABASE_SERVICE="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional predefined variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional variables
|
||||
DATABASE_CREATE="${DATABASE_CREATE:-}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Specifiy custom directories to be created
|
||||
ADD_APPLICATION_FILES=""
|
||||
ADD_APPLICATION_DIRS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
APPLICATION_FILES="$LOG_DIR/postgres.log"
|
||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# define variables that need to be loaded into the service - escape quotes - var=\"value\",other=\"test\"
|
||||
CMD_ENV=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__update_conf_files() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# delete files
|
||||
#__rm ""
|
||||
|
||||
# define actions
|
||||
|
||||
# create default directories
|
||||
for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
|
||||
(
|
||||
echo "Creating directory $filedirs with permissions 777"
|
||||
mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create default files
|
||||
for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
|
||||
if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
|
||||
(
|
||||
echo "Creating file $application_files with permissions 777"
|
||||
touch "$application_files" && chmod -Rf 777 "$application_files"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create directories if variable is yes"
|
||||
if [ "$IS_WEB_SERVER" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR"
|
||||
if [ ! -d "$WWW_DIR" ]; then
|
||||
(echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
__initialize_web_health "$WWW_DIR"
|
||||
fi
|
||||
if [ "$IS_DATABASE_SERVICE" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR"
|
||||
if [ ! -d "$DATABASE_DIR" ]; then
|
||||
(echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
fi
|
||||
# copy config files to system
|
||||
__file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
# replace variables
|
||||
# __replace "" "" "$ETC_DIR/postgres.conf"
|
||||
# replace variables recursively
|
||||
# __find_replace "" "" "$ETC_DIR/"
|
||||
# replace defaults in ETC_DIR
|
||||
__initialize_replace_variables "$ETC_DIR"
|
||||
# custom commands
|
||||
if [ ! -s "$DATABASE_DIR/PG_VERSION" ]; then
|
||||
sudo -u $user initdb --username="$user" -A md5 --pwfile="${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" -D "$DATABASE_DIR" >/dev/null
|
||||
fi
|
||||
|
||||
chmod -f 0750 "$DATABASE_DIR"
|
||||
__file_copy "$CONF_DIR/." "$DATABASE_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
# unset unneeded variables
|
||||
unset application_files filedirs
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run before executing
|
||||
__pre_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# define commands
|
||||
|
||||
# execute if directories is empty
|
||||
#__is_dir_empty "" && true || false
|
||||
|
||||
# create user if needed
|
||||
# __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
|
||||
# set user on files/folders
|
||||
if [ -n "$user" ] && [ "$user" != "root" ]; then
|
||||
if grep -s -q "$user:" "/etc/passwd"; then
|
||||
for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$permissions" ] && [ -e "$permissions" ]; then
|
||||
(chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# unset unneeded variables
|
||||
unset filesperms filename
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run after executing
|
||||
__post_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="postgres" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
sleep 60 # how long to wait before executing
|
||||
echo "Running post commands" # message
|
||||
# execute commands
|
||||
(
|
||||
if [ -f "$CONF_DIR/postgres/init.sh" ]; then
|
||||
bash -c "$CONF_DIR/postgres/init.sh"
|
||||
fi
|
||||
if [ -n "$DATABASE_CREATE" ]; then
|
||||
sudo -u $runas psql -d template1 -U postgres -d template1 -U postgres <<-PGSQL_SCRIPT
|
||||
CREATE DATABASE IF NOT EXISTS $DATABASE_CREATE;
|
||||
PGSQL_SCRIPT
|
||||
fi
|
||||
if [ "$user_name" != "root" ] && [ -n "$user_name" ]; then
|
||||
sudo -u $runas psql -d template1 -U postgres <<-PGSQL_SCRIPT
|
||||
CREATE USER IF NOT EXISTS '$user_name'@'%' IDENTIFIED BY '$user_pass';
|
||||
PGSQL_SCRIPT
|
||||
fi
|
||||
if [ "$user_name" != "root" ] && [ -n "$DATABASE_CREATE" ]; then
|
||||
sudo -u $runas psql -d template1 -U postgres <<-PGSQL_SCRIPT
|
||||
GRANT ALL PRIVILEGES ON $DATABASE_CREATE.* TO '$user_name'@'%';
|
||||
PGSQL_SCRIPT
|
||||
elif [ "$user_name" = "root" ] && [ -n "$DATABASE_CREATE" ]; then
|
||||
sudo -u $runas psql -d template1 -U postgres <<-PGSQL_SCRIPT
|
||||
GRANT ALL PRIVILEGES ON $DATABASE_CREATE.* TO 'root'@'localhost';
|
||||
PGSQL_SCRIPT
|
||||
fi
|
||||
sudo -u $runas psql -d template1 -U postgres <<-PGSQL_SCRIPT
|
||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '$root_user_pass';
|
||||
FLUSH PRIVILEGES;
|
||||
PGSQL_SCRIPT
|
||||
) 2>/dev/stderr >/dev/null
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__pre_message() {
|
||||
local exitCode=0
|
||||
[ -n "$user_name" ] && echo "username: $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$user_pass" ] && echo "password: saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
[ -n "$root_user_name" ] && echo "root username: $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$root_user_pass" ] && echo "root password: saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to setup ssl support
|
||||
__update_ssl_conf() {
|
||||
local exitCode=0
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__create_service_env() {
|
||||
cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
|
||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
# EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # execute before commands
|
||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}" #
|
||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}" #
|
||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}" #
|
||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}" #
|
||||
|
||||
EOF
|
||||
__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# script to start server
|
||||
__run_start_script() {
|
||||
local user="${SERVICE_USER:-root}"
|
||||
local cmd="${EXEC_CMD_BIN:-}"
|
||||
local args="${EXEC_CMD_ARGS:-}"
|
||||
local name="${EXEC_CMD_NAME:-}"
|
||||
local pre="${EXEC_PRE_SCRIPT:-}"
|
||||
local workdir="${WORK_DIR:-$WORK_DIR}"
|
||||
local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
|
||||
local home="${workdir//\/root/\/tmp\/docker}"
|
||||
local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
local message=""
|
||||
if [ -z "$cmd" ]; then
|
||||
__post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
echo "Initializing $SCRIPT_NAME has completed"
|
||||
else
|
||||
# ensure the command exists
|
||||
if [ ! -x "$cmd" ]; then
|
||||
echo "$name is not a valid executable"
|
||||
exit 2
|
||||
fi
|
||||
# set working directories
|
||||
[ -z "$home" ] && home="${workdir:-/tmp/docker}"
|
||||
[ "$home" = "/root" ] && home="/tmp/docker"
|
||||
[ "$home" = "$workdir" ] && workdir=""
|
||||
# create needed directories
|
||||
[ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
|
||||
[ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
|
||||
[ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
|
||||
[ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
|
||||
[ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
|
||||
# check and exit if already running
|
||||
if __proc_check "$name" || __proc_check "$cmd"; then
|
||||
echo "$name is already running" >&2
|
||||
exit 0
|
||||
else
|
||||
if [ -n "$pre" ] && [ -f "$pre" ]; then
|
||||
cmd_exec="$pre $cmd $args"
|
||||
message="Starting service: $name $args through $pre"
|
||||
else
|
||||
cmd_exec="$cmd $args"
|
||||
message="Starting service: $name $args"
|
||||
fi
|
||||
echo "$message"
|
||||
su_cmd touch "$SERVICE_PID_FILE"
|
||||
__post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
|
||||
if [ "$RESET_ENV" = "yes" ]; then
|
||||
su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" HOSTNAME="$sysname" USER="$user" ${CMD_ENV//,/ } sh -c "$cmd_exec" || return 10
|
||||
else
|
||||
eval "$cmd_exec" || return 10
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# username and password actions
|
||||
__run_secure_function() {
|
||||
if [ -n "$user_name" ] || [ -n "$user_pass" ]; then
|
||||
for filesperms in "${USER_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then
|
||||
for filesperms in "${ROOT_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# simple cd function
|
||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# process check functions
|
||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
|
||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# check if process is already running
|
||||
__proc_check() {
|
||||
cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
|
||||
cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
|
||||
if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
|
||||
SERVICE_IS_RUNNING="true"
|
||||
touch "$SERVICE_PID_FILE"
|
||||
echo "$cmd_name is already running"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow ENV_ variable - Import env file
|
||||
__file_exists_with_content"/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_EXIT_CODE=0 # default exit code
|
||||
WORK_DIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# application specific
|
||||
EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # Pre
|
||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid" # set the pid file location
|
||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
SERVICE_PID_NUMBER="$(__pgrep)" # check if running
|
||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
|
||||
EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT" || echo "$EXEC_PRE_SCRIPT")" # set full path
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create auth directories
|
||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
|
||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ "$IS_WEB_SERVER" = "yes" ] && RESET_ENV="yes"
|
||||
[ "$IS_DATABASE_SERVICE" = "yes" ] && RESET_ENV="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow per init script usernames and passwords
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/name" && user_name="$(<"$ETC_DIR/auth/user/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/pass" && user_pass="$(<"$ETC_DIR/auth/user/pass")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/name" && root_user_name="$(<"$ETC_DIR/auth/root/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/pass" && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow setting initial users and passwords via environment
|
||||
user_name="${user_name:-$ENV_USER_NAME}"
|
||||
user_pass="${user_pass:-$ENV_USER_PASS}"
|
||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
|
||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set password to random if variable is random
|
||||
if [ "$user_pass" = "random" ]; then
|
||||
user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$root_user_pass" = "random" ]; then
|
||||
root_user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow variables via imports - Overwrite existing
|
||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Only run check
|
||||
if [ "$1" = "check" ]; then
|
||||
__proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
|
||||
exit $?
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show message if env exists
|
||||
if [ -n "$EXEC_CMD_BIN" ]; then
|
||||
[ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
|
||||
[ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set switch user command
|
||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
elif [ "$(builtin type -P gosu)" ]; then
|
||||
su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P runuser)" ]; then
|
||||
su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P sudo)" ]; then
|
||||
su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P su)" ]; then
|
||||
su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
|
||||
else
|
||||
echo "Can not switch to $SERVICE_USER: attempting to run as root"
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Change to working directory
|
||||
[ -n "$WORK_DIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORK_DIR" && echo "Changed to $PWD"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show init message
|
||||
__pre_message
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Initialize ssl
|
||||
__update_ssl_conf
|
||||
__update_ssl_certs
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Updating config files
|
||||
__create_service_env
|
||||
__update_conf_files
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run the pre execute commands
|
||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
|
||||
__pre_execute
|
||||
__run_secure_function
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
|
||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
|
||||
echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
|
||||
SERVICE_EXIT_CODE=10
|
||||
SERVICE_IS_RUNNING="false"
|
||||
rm -Rf "$SERVICE_PID_FILE"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $SERVICE_EXIT_CODE
|
||||
Executable
+491
@@ -0,0 +1,491 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202308221821-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : 00-redis.sh --help
|
||||
# @@Copyright : Copyright: (c) 2023 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Tuesday, Aug 22, 2023 18:21 EDT
|
||||
# @@File : 00-redis.sh
|
||||
# @@Description :
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : shell/bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC2016
|
||||
# shellcheck disable=SC2031
|
||||
# shellcheck disable=SC2120
|
||||
# shellcheck disable=SC2155
|
||||
# shellcheck disable=SC2199
|
||||
# shellcheck disable=SC2317
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
printf '%s\n' "# - - - Initializing redis - - - #"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_NAME="redis"
|
||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
[ -f "$set_env" ] && . "$set_env"
|
||||
done
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Custom functions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Reset environment before executing service
|
||||
RESET_ENV="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show message before execute
|
||||
PRE_EXEC_MESSAGE=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the database directory
|
||||
DATABASE_DIR="${DATABASE_DIR_REDIS:-/data/db/redis}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set webroot
|
||||
WWW_DIR="/usr/share/webapps/redis"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default predefined variables
|
||||
DATA_DIR="/data" # set data directory
|
||||
CONF_DIR="/config" # set config directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the containers etc directory
|
||||
ETC_DIR="/etc/redis"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
RUN_DIR="/run/init.d" # set scripts pid dir
|
||||
LOG_DIR="/data/logs/redis" # set log directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the working dir
|
||||
WORK_DIR="" # set working directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Where to save passwords to
|
||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
|
||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# root/admin user info password/random]
|
||||
root_user_name="${REDIS_ROOT_USER_NAME:-root}" # root user name
|
||||
root_user_pass="${REDIS_ROOT_PASS_WORD:-random}" # root user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Normal user info [password/random]
|
||||
user_name="${REDIS_USER_NAME:-}" # normal user name
|
||||
user_pass="${REDIS_USER_PASS_WORD:-}" # normal user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Overwrite variables from files
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# port which service is listening on
|
||||
SERVICE_PORT="6379"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# execute command variables
|
||||
SERVICE_UID="0" # set the user id
|
||||
SERVICE_USER="root" # execute command as another user
|
||||
EXEC_CMD_BIN="redis" # command to execute
|
||||
EXEC_CMD_ARGS="redis-server" # command arguments
|
||||
EXEC_PRE_SCRIPT="$ETC_DIR/redis.conf" # execute script before
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a web server
|
||||
IS_WEB_SERVER="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a database server
|
||||
IS_DATABASE_SERVICE="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional predefined variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Specifiy custom directories to be created
|
||||
ADD_APPLICATION_FILES=""
|
||||
ADD_APPLICATION_DIRS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
APPLICATION_FILES="$LOG_DIR/redis.log"
|
||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# define variables that need to be loaded into the service - escape quotes - var=\"value\",other=\"test\"
|
||||
CMD_ENV=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__update_conf_files() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# delete files
|
||||
#__rm ""
|
||||
|
||||
# define actions
|
||||
|
||||
# create default directories
|
||||
for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
|
||||
(
|
||||
echo "Creating directory $filedirs with permissions 777"
|
||||
mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create default files
|
||||
for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
|
||||
if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
|
||||
(
|
||||
echo "Creating file $application_files with permissions 777"
|
||||
touch "$application_files" && chmod -Rf 777 "$application_files"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create directories if variable is yes"
|
||||
if [ "$IS_WEB_SERVER" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR"
|
||||
if [ ! -d "$WWW_DIR" ]; then
|
||||
(echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
__initialize_web_health "$WWW_DIR"
|
||||
fi
|
||||
if [ "$IS_DATABASE_SERVICE" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR"
|
||||
if [ ! -d "$DATABASE_DIR" ]; then
|
||||
(echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
fi
|
||||
# copy config files to system
|
||||
__file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
# replace variables
|
||||
# __replace "" "" "$ETC_DIR/redis.conf"
|
||||
# replace variables recursively
|
||||
# __find_replace "" "" "$ETC_DIR/"
|
||||
# replace defaults in ETC_DIR
|
||||
__initialize_replace_variables "$ETC_DIR"
|
||||
# custom commands
|
||||
sysctl vm.overcommit_memory=1
|
||||
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
|
||||
if [ -n "$root_user_name" ] && [ -n "$root_user_pass" ]; then
|
||||
if ! grep -qs "$root_user_name" "$ETC_DIR/redis.conf"; then
|
||||
echo 'user '$root_user_name' on +@all ~* >'$root_user_pass'' >>"$ETC_DIR/redis.conf"
|
||||
fi
|
||||
fi
|
||||
grep -qs 'redis' /etc/passwd && chown -Rf redis. "$ETC_DIR" "$LOG_DIR" "$DATABASE_DIR"
|
||||
|
||||
# unset unneeded variables
|
||||
unset application_files filedirs
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run before executing
|
||||
__pre_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# define commands
|
||||
|
||||
# execute if directories is empty
|
||||
#__is_dir_empty "" && true || false
|
||||
|
||||
# create user if needed
|
||||
# __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
|
||||
# set user on files/folders
|
||||
if [ -n "$user" ] && [ "$user" != "root" ]; then
|
||||
if grep -s -q "$user:" "/etc/passwd"; then
|
||||
for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$permissions" ] && [ -e "$permissions" ]; then
|
||||
(chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# unset unneeded variables
|
||||
unset filesperms filename
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run after executing
|
||||
__post_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
sleep 60 # how long to wait before executing
|
||||
echo "Running post commands" # message
|
||||
# execute commands
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__pre_message() {
|
||||
local exitCode=0
|
||||
[ -n "$user_name" ] && echo "username: $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$user_pass" ] && echo "password: saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
[ -n "$root_user_name" ] && echo "root username: $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$root_user_pass" ] && echo "root password: saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to setup ssl support
|
||||
__update_ssl_conf() {
|
||||
local exitCode=0
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__create_service_env() {
|
||||
cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
|
||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
# EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # execute before commands
|
||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}" #
|
||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}" #
|
||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}" #
|
||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}" #
|
||||
|
||||
EOF
|
||||
__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# script to start server
|
||||
__run_start_script() {
|
||||
local user="${SERVICE_USER:-root}"
|
||||
local cmd="${EXEC_CMD_BIN:-}"
|
||||
local args="${EXEC_CMD_ARGS:-}"
|
||||
local name="${EXEC_CMD_NAME:-}"
|
||||
local pre="${EXEC_PRE_SCRIPT:-}"
|
||||
local workdir="${WORK_DIR:-$WORK_DIR}"
|
||||
local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
|
||||
local home="${workdir//\/root/\/tmp\/docker}"
|
||||
local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
local message=""
|
||||
if [ -z "$cmd" ]; then
|
||||
__post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
echo "Initializing $SCRIPT_NAME has completed"
|
||||
else
|
||||
# ensure the command exists
|
||||
if [ ! -x "$cmd" ]; then
|
||||
echo "$name is not a valid executable"
|
||||
exit 2
|
||||
fi
|
||||
# set working directories
|
||||
[ -z "$home" ] && home="${workdir:-/tmp/docker}"
|
||||
[ "$home" = "/root" ] && home="/tmp/docker"
|
||||
[ "$home" = "$workdir" ] && workdir=""
|
||||
# create needed directories
|
||||
[ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
|
||||
[ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
|
||||
[ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
|
||||
[ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
|
||||
[ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
|
||||
# check and exit if already running
|
||||
if __proc_check "$name" || __proc_check "$cmd"; then
|
||||
echo "$name is already running" >&2
|
||||
exit 0
|
||||
else
|
||||
if [ -n "$pre" ] && [ -f "$pre" ]; then
|
||||
cmd_exec="$pre $cmd $args"
|
||||
message="Starting service: $name $args through $pre"
|
||||
else
|
||||
cmd_exec="$cmd $args"
|
||||
message="Starting service: $name $args"
|
||||
fi
|
||||
echo "$message"
|
||||
su_cmd touch "$SERVICE_PID_FILE"
|
||||
__post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
|
||||
if [ "$RESET_ENV" = "yes" ]; then
|
||||
su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" HOSTNAME="$sysname" USER="$user" ${CMD_ENV//,/ } sh -c "$cmd_exec" || return 10
|
||||
else
|
||||
eval "$cmd_exec" || return 10
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# username and password actions
|
||||
__run_secure_function() {
|
||||
if [ -n "$user_name" ] || [ -n "$user_pass" ]; then
|
||||
for filesperms in "${USER_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then
|
||||
for filesperms in "${ROOT_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# simple cd function
|
||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# process check functions
|
||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
|
||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# check if process is already running
|
||||
__proc_check() {
|
||||
cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
|
||||
cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
|
||||
if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
|
||||
SERVICE_IS_RUNNING="true"
|
||||
touch "$SERVICE_PID_FILE"
|
||||
echo "$cmd_name is already running"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow ENV_ variable - Import env file
|
||||
__file_exists_with_content"/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_EXIT_CODE=0 # default exit code
|
||||
WORK_DIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# application specific
|
||||
EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # Pre
|
||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid" # set the pid file location
|
||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
SERVICE_PID_NUMBER="$(__pgrep)" # check if running
|
||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
|
||||
EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT" || echo "$EXEC_PRE_SCRIPT")" # set full path
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create auth directories
|
||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
|
||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ "$IS_WEB_SERVER" = "yes" ] && RESET_ENV="yes"
|
||||
[ "$IS_DATABASE_SERVICE" = "yes" ] && RESET_ENV="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow per init script usernames and passwords
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/name" && user_name="$(<"$ETC_DIR/auth/user/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/pass" && user_pass="$(<"$ETC_DIR/auth/user/pass")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/name" && root_user_name="$(<"$ETC_DIR/auth/root/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/pass" && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow setting initial users and passwords via environment
|
||||
user_name="${user_name:-$ENV_USER_NAME}"
|
||||
user_pass="${user_pass:-$ENV_USER_PASS}"
|
||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
|
||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set password to random if variable is random
|
||||
if [ "$user_pass" = "random" ]; then
|
||||
user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$root_user_pass" = "random" ]; then
|
||||
root_user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow variables via imports - Overwrite existing
|
||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Only run check
|
||||
if [ "$1" = "check" ]; then
|
||||
__proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
|
||||
exit $?
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show message if env exists
|
||||
if [ -n "$EXEC_CMD_BIN" ]; then
|
||||
[ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
|
||||
[ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set switch user command
|
||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
elif [ "$(builtin type -P gosu)" ]; then
|
||||
su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P runuser)" ]; then
|
||||
su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P sudo)" ]; then
|
||||
su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P su)" ]; then
|
||||
su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
|
||||
else
|
||||
echo "Can not switch to $SERVICE_USER: attempting to run as root"
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Change to working directory
|
||||
[ -n "$WORK_DIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORK_DIR" && echo "Changed to $PWD"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show init message
|
||||
__pre_message
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Initialize ssl
|
||||
__update_ssl_conf
|
||||
__update_ssl_certs
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Updating config files
|
||||
__create_service_env
|
||||
__update_conf_files
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run the pre execute commands
|
||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
|
||||
__pre_execute
|
||||
__run_secure_function
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
|
||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
|
||||
echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
|
||||
SERVICE_EXIT_CODE=10
|
||||
SERVICE_IS_RUNNING="false"
|
||||
rm -Rf "$SERVICE_PID_FILE"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $SERVICE_EXIT_CODE
|
||||
@@ -0,0 +1,485 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202308221958-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : 05-php-fpm.sh --help
|
||||
# @@Copyright : Copyright: (c) 2023 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Tuesday, Aug 22, 2023 19:58 EDT
|
||||
# @@File : 05-php-fpm.sh
|
||||
# @@Description :
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : shell/bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC2016
|
||||
# shellcheck disable=SC2031
|
||||
# shellcheck disable=SC2120
|
||||
# shellcheck disable=SC2155
|
||||
# shellcheck disable=SC2199
|
||||
# shellcheck disable=SC2317
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
printf '%s\n' "# - - - Initializing php - - - #"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_NAME="php"
|
||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
[ -f "$set_env" ] && . "$set_env"
|
||||
done
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Custom functions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Reset environment before executing service
|
||||
RESET_ENV="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show message before execute
|
||||
PRE_EXEC_MESSAGE=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the database directory
|
||||
DATABASE_DIR="${DATABASE_DIR_PHP:-/data/db/php}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set webroot
|
||||
WWW_DIR="/usr/share/webapps/php"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default predefined variables
|
||||
DATA_DIR="/data" # set data directory
|
||||
CONF_DIR="/config" # set config directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the containers etc directory
|
||||
ETC_DIR="/etc/php"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
RUN_DIR="/run/init.d" # set scripts pid dir
|
||||
LOG_DIR="/data/logs/php" # set log directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the working dir
|
||||
WORK_DIR="" # set working directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Where to save passwords to
|
||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
|
||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# root/admin user info password/random]
|
||||
root_user_name="${PHP_ROOT_USER_NAME:-}" # root user name
|
||||
root_user_pass="${PHP_ROOT_PASS_WORD:-}" # root user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Normal user info [password/random]
|
||||
user_name="${PHP_USER_NAME:-}" # normal user name
|
||||
user_pass="${PHP_USER_PASS_WORD:-}" # normal user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Overwrite variables from files
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# port which service is listening on
|
||||
SERVICE_PORT="9000"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# execute command variables
|
||||
SERVICE_UID="0" # set the user id
|
||||
SERVICE_USER="nginx" # execute command as another user
|
||||
EXEC_CMD_BIN="php-fpm" # command to execute
|
||||
EXEC_CMD_ARGS="--allow-to-run-as-root --nodaemonize --fpm-config /etc/php/php-fpm.conf" # command arguments
|
||||
EXEC_PRE_SCRIPT="" # execute script before
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a web server
|
||||
IS_WEB_SERVER="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a database server
|
||||
IS_DATABASE_SERVICE="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional predefined variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Specifiy custom directories to be created
|
||||
ADD_APPLICATION_FILES=""
|
||||
ADD_APPLICATION_DIRS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
APPLICATION_FILES="$LOG_DIR/php.log"
|
||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# define variables that need to be loaded into the service - escape quotes - var=\"value\",other=\"test\"
|
||||
CMD_ENV=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__update_conf_files() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# delete files
|
||||
#__rm ""
|
||||
|
||||
# define actions
|
||||
|
||||
# create default directories
|
||||
for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
|
||||
(
|
||||
echo "Creating directory $filedirs with permissions 777"
|
||||
mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create default files
|
||||
for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
|
||||
if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
|
||||
(
|
||||
echo "Creating file $application_files with permissions 777"
|
||||
touch "$application_files" && chmod -Rf 777 "$application_files"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create directories if variable is yes"
|
||||
if [ "$IS_WEB_SERVER" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR"
|
||||
if [ ! -d "$WWW_DIR" ]; then
|
||||
(echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
__initialize_web_health "$WWW_DIR"
|
||||
fi
|
||||
if [ "$IS_DATABASE_SERVICE" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR"
|
||||
if [ ! -d "$DATABASE_DIR" ]; then
|
||||
(echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
fi
|
||||
# copy config files to system
|
||||
__file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
# replace variables
|
||||
# __replace "" "" "$ETC_DIR/php.conf"
|
||||
# replace variables recursively
|
||||
# __find_replace "" "" "$ETC_DIR/"
|
||||
# replace defaults in ETC_DIR
|
||||
__initialize_replace_variables "$ETC_DIR"
|
||||
# custom commands
|
||||
sed -i 's|user.*=.*|user = '$user'|g' "$ETC_DIR"/*/www.conf
|
||||
sed -i 's|group.*=.*|group = '$user'|g' "$ETC_DIR"/*/www.conf
|
||||
|
||||
# unset unneeded variables
|
||||
unset application_files filedirs
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run before executing
|
||||
__pre_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# define commands
|
||||
|
||||
# execute if directories is empty
|
||||
#__is_dir_empty "" && true || false
|
||||
|
||||
# create user if needed
|
||||
# __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
|
||||
# set user on files/folders
|
||||
if [ -n "$user" ] && [ "$user" != "root" ]; then
|
||||
if grep -s -q "$user:" "/etc/passwd"; then
|
||||
for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$permissions" ] && [ -e "$permissions" ]; then
|
||||
(chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# unset unneeded variables
|
||||
unset filesperms filename
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run after executing
|
||||
__post_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
sleep 60 # how long to wait before executing
|
||||
echo "Running post commands" # message
|
||||
# execute commands
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__pre_message() {
|
||||
local exitCode=0
|
||||
[ -n "$user_name" ] && echo "username: $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$user_pass" ] && echo "password: saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
[ -n "$root_user_name" ] && echo "root username: $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$root_user_pass" ] && echo "root password: saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to setup ssl support
|
||||
__update_ssl_conf() {
|
||||
local exitCode=0
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__create_service_env() {
|
||||
cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
|
||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
# EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # execute before commands
|
||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}" #
|
||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}" #
|
||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}" #
|
||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}" #
|
||||
|
||||
EOF
|
||||
__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# script to start server
|
||||
__run_start_script() {
|
||||
local user="${SERVICE_USER:-root}"
|
||||
local cmd="${EXEC_CMD_BIN:-}"
|
||||
local args="${EXEC_CMD_ARGS:-}"
|
||||
local name="${EXEC_CMD_NAME:-}"
|
||||
local pre="${EXEC_PRE_SCRIPT:-}"
|
||||
local workdir="${WORK_DIR:-$WORK_DIR}"
|
||||
local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
|
||||
local home="${workdir//\/root/\/tmp\/docker}"
|
||||
local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
local message=""
|
||||
if [ -z "$cmd" ]; then
|
||||
__post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
echo "Initializing $SCRIPT_NAME has completed"
|
||||
else
|
||||
# ensure the command exists
|
||||
if [ ! -x "$cmd" ]; then
|
||||
echo "$name is not a valid executable"
|
||||
exit 2
|
||||
fi
|
||||
# set working directories
|
||||
[ -z "$home" ] && home="${workdir:-/tmp/docker}"
|
||||
[ "$home" = "/root" ] && home="/tmp/docker"
|
||||
[ "$home" = "$workdir" ] && workdir=""
|
||||
# create needed directories
|
||||
[ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
|
||||
[ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
|
||||
[ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
|
||||
[ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
|
||||
[ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
|
||||
# check and exit if already running
|
||||
if __proc_check "$name" || __proc_check "$cmd"; then
|
||||
echo "$name is already running" >&2
|
||||
exit 0
|
||||
else
|
||||
if [ -n "$pre" ] && [ -f "$pre" ]; then
|
||||
cmd_exec="$pre $cmd $args"
|
||||
message="Starting service: $name $args through $pre"
|
||||
else
|
||||
cmd_exec="$cmd $args"
|
||||
message="Starting service: $name $args"
|
||||
fi
|
||||
echo "$message"
|
||||
su_cmd touch "$SERVICE_PID_FILE"
|
||||
__post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
|
||||
if [ "$RESET_ENV" = "yes" ]; then
|
||||
su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" HOSTNAME="$sysname" USER="$user" ${CMD_ENV//,/ } sh -c "$cmd_exec" || return 10
|
||||
else
|
||||
eval "$cmd_exec" || return 10
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# username and password actions
|
||||
__run_secure_function() {
|
||||
if [ -n "$user_name" ] || [ -n "$user_pass" ]; then
|
||||
for filesperms in "${USER_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then
|
||||
for filesperms in "${ROOT_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# simple cd function
|
||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# process check functions
|
||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
|
||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# check if process is already running
|
||||
__proc_check() {
|
||||
cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
|
||||
cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
|
||||
if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
|
||||
SERVICE_IS_RUNNING="true"
|
||||
touch "$SERVICE_PID_FILE"
|
||||
echo "$cmd_name is already running"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow ENV_ variable - Import env file
|
||||
__file_exists_with_content"/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_EXIT_CODE=0 # default exit code
|
||||
WORK_DIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# application specific
|
||||
EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # Pre
|
||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid" # set the pid file location
|
||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
SERVICE_PID_NUMBER="$(__pgrep)" # check if running
|
||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
|
||||
EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT" || echo "$EXEC_PRE_SCRIPT")" # set full path
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create auth directories
|
||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
|
||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ "$IS_WEB_SERVER" = "yes" ] && RESET_ENV="yes"
|
||||
[ "$IS_DATABASE_SERVICE" = "yes" ] && RESET_ENV="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow per init script usernames and passwords
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/name" && user_name="$(<"$ETC_DIR/auth/user/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/pass" && user_pass="$(<"$ETC_DIR/auth/user/pass")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/name" && root_user_name="$(<"$ETC_DIR/auth/root/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/pass" && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow setting initial users and passwords via environment
|
||||
user_name="${user_name:-$ENV_USER_NAME}"
|
||||
user_pass="${user_pass:-$ENV_USER_PASS}"
|
||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
|
||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set password to random if variable is random
|
||||
if [ "$user_pass" = "random" ]; then
|
||||
user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$root_user_pass" = "random" ]; then
|
||||
root_user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow variables via imports - Overwrite existing
|
||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Only run check
|
||||
if [ "$1" = "check" ]; then
|
||||
__proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
|
||||
exit $?
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show message if env exists
|
||||
if [ -n "$EXEC_CMD_BIN" ]; then
|
||||
[ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
|
||||
[ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set switch user command
|
||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
elif [ "$(builtin type -P gosu)" ]; then
|
||||
su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P runuser)" ]; then
|
||||
su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P sudo)" ]; then
|
||||
su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P su)" ]; then
|
||||
su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
|
||||
else
|
||||
echo "Can not switch to $SERVICE_USER: attempting to run as root"
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Change to working directory
|
||||
[ -n "$WORK_DIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORK_DIR" && echo "Changed to $PWD"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show init message
|
||||
__pre_message
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Initialize ssl
|
||||
__update_ssl_conf
|
||||
__update_ssl_certs
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Updating config files
|
||||
__create_service_env
|
||||
__update_conf_files
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run the pre execute commands
|
||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
|
||||
__pre_execute
|
||||
__run_secure_function
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
|
||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
|
||||
echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
|
||||
SERVICE_EXIT_CODE=10
|
||||
SERVICE_IS_RUNNING="false"
|
||||
rm -Rf "$SERVICE_PID_FILE"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $SERVICE_EXIT_CODE
|
||||
@@ -0,0 +1,489 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck shell=bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
##@Version : 202308221957-git
|
||||
# @@Author : Jason Hempstead
|
||||
# @@Contact : jason@casjaysdev.pro
|
||||
# @@License : WTFPL
|
||||
# @@ReadME : zz-nginx.sh --help
|
||||
# @@Copyright : Copyright: (c) 2023 Jason Hempstead, Casjays Developments
|
||||
# @@Created : Tuesday, Aug 22, 2023 19:57 EDT
|
||||
# @@File : zz-nginx.sh
|
||||
# @@Description :
|
||||
# @@Changelog : New script
|
||||
# @@TODO : Better documentation
|
||||
# @@Other :
|
||||
# @@Resource :
|
||||
# @@Terminal App : no
|
||||
# @@sudo/root : no
|
||||
# @@Template : shell/bash
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# shellcheck disable=SC2016
|
||||
# shellcheck disable=SC2031
|
||||
# shellcheck disable=SC2120
|
||||
# shellcheck disable=SC2155
|
||||
# shellcheck disable=SC2199
|
||||
# shellcheck disable=SC2317
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|
||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
printf '%s\n' "# - - - Initializing nginx - - - #"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_NAME="nginx"
|
||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run trap command on exit
|
||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import the functions file
|
||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# import variables
|
||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
||||
[ -f "$set_env" ] && . "$set_env"
|
||||
done
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Custom functions
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Reset environment before executing service
|
||||
RESET_ENV="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Show message before execute
|
||||
PRE_EXEC_MESSAGE=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the database directory
|
||||
DATABASE_DIR="${DATABASE_DIR_NGINX:-/data/db/nginx}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set webroot
|
||||
WWW_DIR="/usr/share/webapps/nginx"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Default predefined variables
|
||||
DATA_DIR="/data" # set data directory
|
||||
CONF_DIR="/config" # set config directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set the containers etc directory
|
||||
ETC_DIR="/etc/nginx"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
RUN_DIR="/run/init.d" # set scripts pid dir
|
||||
LOG_DIR="/data/logs/nginx" # set log directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Set the working dir
|
||||
WORK_DIR="" # set working directory
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Where to save passwords to
|
||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
|
||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# root/admin user info password/random]
|
||||
root_user_name="${NGINX_ROOT_USER_NAME:-}" # root user name
|
||||
root_user_pass="${NGINX_ROOT_PASS_WORD:-}" # root user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Normal user info [password/random]
|
||||
user_name="${NGINX_USER_NAME:-}" # normal user name
|
||||
user_pass="${NGINX_USER_PASS_WORD:-}" # normal user password
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Overwrite variables from files
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
||||
__file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# port which service is listening on
|
||||
SERVICE_PORT="80"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# execute command variables
|
||||
SERVICE_UID="0" # set the user id
|
||||
SERVICE_USER="root" # execute command as another user
|
||||
EXEC_CMD_BIN="nginx" # command to execute
|
||||
EXEC_CMD_ARGS="-c $ETC_DIR/nginx.conf" # command arguments
|
||||
EXEC_PRE_SCRIPT="" # execute script before
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a web server
|
||||
IS_WEB_SERVER="yes"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Is this service a database server
|
||||
IS_DATABASE_SERVICE="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional predefined variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Additional variables
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Specifiy custom directories to be created
|
||||
ADD_APPLICATION_FILES=""
|
||||
ADD_APPLICATION_DIRS=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
APPLICATION_FILES="$LOG_DIR/nginx.log"
|
||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# define variables that need to be loaded into the service - escape quotes - var=\"value\",other=\"test\"
|
||||
CMD_ENV=""
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__update_conf_files() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
local blowfish_pass="$(htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/')"
|
||||
# delete files
|
||||
#__rm ""
|
||||
|
||||
# define actions
|
||||
|
||||
# create default directories
|
||||
for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
|
||||
(
|
||||
echo "Creating directory $filedirs with permissions 777"
|
||||
mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create default files
|
||||
for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
|
||||
if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
|
||||
(
|
||||
echo "Creating file $application_files with permissions 777"
|
||||
touch "$application_files" && chmod -Rf 777 "$application_files"
|
||||
) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
# create directories if variable is yes"
|
||||
if [ "$IS_WEB_SERVER" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR"
|
||||
if [ ! -d "$WWW_DIR" ]; then
|
||||
(echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
__initialize_web_health "$WWW_DIR"
|
||||
fi
|
||||
if [ "$IS_DATABASE_SERVICE" = "yes" ]; then
|
||||
APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR"
|
||||
if [ ! -d "$DATABASE_DIR" ]; then
|
||||
(echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
fi
|
||||
# copy config files to system
|
||||
__file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
__file_copy "/config/phpmyadmin/." "/etc/phpmyadmin/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
# replace variables
|
||||
sed -i 's|REPLACE_BLOWFISH_SECRECT|'$blowfish_pass'|g' /config/phpmyadmin/config.inc.php
|
||||
# __replace "" "" "$ETC_DIR/nginx.conf"
|
||||
# replace variables recursively
|
||||
# __find_replace "" "" "$ETC_DIR/"
|
||||
# replace defaults in ETC_DIR
|
||||
__initialize_replace_variables "$ETC_DIR"
|
||||
__initialize_replace_variables "/usr/local/share/wwwroot"
|
||||
# custom commands
|
||||
if [ ! -d "/config/phpmyadmin" ]; then
|
||||
mkdir -p "/config/phpmyadmin"
|
||||
__file_copy "/etc/phpmyadmin/." "/config/phpmyadmin/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
# unset unneeded variables
|
||||
unset application_files filedirs
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run before executing
|
||||
__pre_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
# define commands
|
||||
|
||||
# execute if directories is empty
|
||||
#__is_dir_empty "" && true || false
|
||||
|
||||
# create user if needed
|
||||
# __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
|
||||
# set user on files/folders
|
||||
if [ -n "$user" ] && [ "$user" != "root" ]; then
|
||||
if grep -s -q "$user:" "/etc/passwd"; then
|
||||
for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
|
||||
if [ -n "$permissions" ] && [ -e "$permissions" ]; then
|
||||
(chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# unset unneeded variables
|
||||
unset filesperms filename
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# function to run after executing
|
||||
__post_execute() {
|
||||
local exitCode=0 # default exit code
|
||||
local user="${SERVICE_USER:-root}" # specifiy different user
|
||||
local runas="root" # run as a different user
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
sleep 60 # how long to wait before executing
|
||||
echo "Running post commands" # message
|
||||
# execute commands
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to update config files - IE: change port
|
||||
__pre_message() {
|
||||
local exitCode=0
|
||||
[ -n "$user_name" ] && echo "username: $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$user_pass" ] && echo "password: saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
[ -n "$root_user_name" ] && echo "root username: $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
|
||||
[ -n "$root_user_pass" ] && echo "root password: saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# use this function to setup ssl support
|
||||
__update_ssl_conf() {
|
||||
local exitCode=0
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
|
||||
return $exitCode
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__create_service_env() {
|
||||
cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
|
||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
# EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # execute before commands
|
||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}" #
|
||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}" #
|
||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}" #
|
||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}" #
|
||||
|
||||
EOF
|
||||
__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# script to start server
|
||||
__run_start_script() {
|
||||
local user="${SERVICE_USER:-root}"
|
||||
local cmd="${EXEC_CMD_BIN:-}"
|
||||
local args="${EXEC_CMD_ARGS:-}"
|
||||
local name="${EXEC_CMD_NAME:-}"
|
||||
local pre="${EXEC_PRE_SCRIPT:-}"
|
||||
local workdir="${WORK_DIR:-$WORK_DIR}"
|
||||
local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
|
||||
local home="${workdir//\/root/\/tmp\/docker}"
|
||||
local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
||||
local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
|
||||
local message=""
|
||||
if [ -z "$cmd" ]; then
|
||||
__post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
echo "Initializing $SCRIPT_NAME has completed"
|
||||
else
|
||||
# ensure the command exists
|
||||
if [ ! -x "$cmd" ]; then
|
||||
echo "$name is not a valid executable"
|
||||
exit 2
|
||||
fi
|
||||
# set working directories
|
||||
[ -z "$home" ] && home="${workdir:-/tmp/docker}"
|
||||
[ "$home" = "/root" ] && home="/tmp/docker"
|
||||
[ "$home" = "$workdir" ] && workdir=""
|
||||
# create needed directories
|
||||
[ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
|
||||
[ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
|
||||
[ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
|
||||
[ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
|
||||
[ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
|
||||
# check and exit if already running
|
||||
if __proc_check "$name" || __proc_check "$cmd"; then
|
||||
echo "$name is already running" >&2
|
||||
exit 0
|
||||
else
|
||||
if [ -n "$pre" ] && [ -f "$pre" ]; then
|
||||
cmd_exec="$pre $cmd $args"
|
||||
message="Starting service: $name $args through $pre"
|
||||
else
|
||||
cmd_exec="$cmd $args"
|
||||
message="Starting service: $name $args"
|
||||
fi
|
||||
echo "$message"
|
||||
su_cmd touch "$SERVICE_PID_FILE"
|
||||
__post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
|
||||
if [ "$RESET_ENV" = "yes" ]; then
|
||||
su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" HOSTNAME="$sysname" USER="$user" ${CMD_ENV//,/ } sh -c "$cmd_exec" || return 10
|
||||
else
|
||||
eval "$cmd_exec" || return 10
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# username and password actions
|
||||
__run_secure_function() {
|
||||
if [ -n "$user_name" ] || [ -n "$user_pass" ]; then
|
||||
for filesperms in "${USER_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then
|
||||
for filesperms in "${ROOT_FILE_PREFIX}"/*; do
|
||||
if [ -e "$filesperms" ]; then
|
||||
chmod -Rf 600 "$filesperms"
|
||||
chown -Rf root:root "$filesperms"
|
||||
fi
|
||||
done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# simple cd function
|
||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# process check functions
|
||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
|
||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# check if process is already running
|
||||
__proc_check() {
|
||||
cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
|
||||
cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
|
||||
if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
|
||||
SERVICE_IS_RUNNING="true"
|
||||
touch "$SERVICE_PID_FILE"
|
||||
echo "$cmd_name is already running"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow ENV_ variable - Import env file
|
||||
__file_exists_with_content"/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SERVICE_EXIT_CODE=0 # default exit code
|
||||
WORK_DIR="${ENV_WORKDIR:-$WORK_DIR}" # change to directory
|
||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}" # set default web dir
|
||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}" # set default etc dir
|
||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}" # set default data dir
|
||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}" # set default config dir
|
||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}" # set database dir
|
||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}" # execute command as another user
|
||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}" # set the user id
|
||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}" # port which service is listening on
|
||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# application specific
|
||||
EXEC_PRE_SCRIPT="${ENV_EXEC_PRE_SCRIPT:-$EXEC_PRE_SCRIPT}" # Pre
|
||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}" # command to execute
|
||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")" # set the binary name
|
||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid" # set the pid file location
|
||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}" # command arguments
|
||||
SERVICE_PID_NUMBER="$(__pgrep)" # check if running
|
||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
|
||||
EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT" || echo "$EXEC_PRE_SCRIPT")" # set full path
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# create auth directories
|
||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
|
||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
[ "$IS_WEB_SERVER" = "yes" ] && RESET_ENV="yes"
|
||||
[ "$IS_DATABASE_SERVICE" = "yes" ] && RESET_ENV="no"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow per init script usernames and passwords
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/name" && user_name="$(<"$ETC_DIR/auth/user/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/user/pass" && user_pass="$(<"$ETC_DIR/auth/user/pass")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/name" && root_user_name="$(<"$ETC_DIR/auth/root/name")"
|
||||
__file_exists_with_content "$ETC_DIR/auth/root/pass" && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow setting initial users and passwords via environment
|
||||
user_name="${user_name:-$ENV_USER_NAME}"
|
||||
user_pass="${user_pass:-$ENV_USER_PASS}"
|
||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
|
||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set password to random if variable is random
|
||||
if [ "$user_pass" = "random" ]; then
|
||||
user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ "$root_user_pass" = "random" ]; then
|
||||
root_user_pass="$(__random_password)"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Allow variables via imports - Overwrite existing
|
||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Only run check
|
||||
if [ "$1" = "check" ]; then
|
||||
__proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
|
||||
exit $?
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show message if env exists
|
||||
if [ -n "$EXEC_CMD_BIN" ]; then
|
||||
[ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
|
||||
[ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# set switch user command
|
||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
elif [ "$(builtin type -P gosu)" ]; then
|
||||
su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P runuser)" ]; then
|
||||
su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P sudo)" ]; then
|
||||
su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
|
||||
elif [ "$(builtin type -P su)" ]; then
|
||||
su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
|
||||
else
|
||||
echo "Can not switch to $SERVICE_USER: attempting to run as root"
|
||||
su_cmd() { eval "$*" || return 1; }
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Change to working directory
|
||||
[ -n "$WORK_DIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORK_DIR" && echo "Changed to $PWD"
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# show init message
|
||||
__pre_message
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Initialize ssl
|
||||
__update_ssl_conf
|
||||
__update_ssl_certs
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# Updating config files
|
||||
__create_service_env
|
||||
__update_conf_files
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
# run the pre execute commands
|
||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
|
||||
__pre_execute
|
||||
__run_secure_function
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
|
||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
|
||||
echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
|
||||
SERVICE_EXIT_CODE=10
|
||||
SERVICE_IS_RUNNING="false"
|
||||
rm -Rf "$SERVICE_PID_FILE"
|
||||
fi
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
exit $SERVICE_EXIT_CODE
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user