add docker server file
This commit is contained in:
parent
3187f48919
commit
23fabb5d89
1 changed files with 283 additions and 0 deletions
283
dockerserver.sh
Executable file
283
dockerserver.sh
Executable file
|
@ -0,0 +1,283 @@
|
|||
#!/bin/bash
|
||||
|
||||
# PHP + Nginx + SQL, Docker Local Test Server Setup/Management File
|
||||
# Based on nginx docker because I don't know how to use docker compose .d
|
||||
# TODO Make docker compose file for running components under different dockers
|
||||
|
||||
CONTAINER_PREFIX="YURTDLE" # nginx docker name prefix
|
||||
MOUNT_PATH="/source" # binded mount path in nginx docker
|
||||
SCRIPT_NAME="dockerserver.sh" # name of the *this* file
|
||||
SCRIPT_DIR="Yurtdle" # containing directory of the *this* file
|
||||
DEBUG="FALSE" # debug mode
|
||||
BUILD_DIR="." # build results of local source code (insert a dot (.) if you do not need to build your application)
|
||||
DATABASE_TYPE="postgresql" # database type, either mysql or postgresql
|
||||
MAIN_NAME="yurtdle" # main program name
|
||||
PORT1="8000" # TODO what is the difference between 8000 and 80
|
||||
PORT2="80"
|
||||
|
||||
### REMOTE RELEASE ###
|
||||
LATEST_RELEASE="-"
|
||||
FILE_NAME="$MAIN_NAME-$LATEST_RELEASE.zip"
|
||||
DOWNLOAD_LINK=https://git.aliberksandikci.com.tr/ifl/$MAIN_NAME/releases/download/$LATEST_RELEASE/$FILE_NAME
|
||||
WEB_ROOT_DIR="/usr/share/nginx/html/"
|
||||
|
||||
############################
|
||||
############################
|
||||
|
||||
# COLORS
|
||||
_RED='\033[0;31m'
|
||||
_NC='\033[0m \e[0m' # No Color, No Effect
|
||||
|
||||
HELP="""
|
||||
Usage:
|
||||
dock [command] [subcommand]
|
||||
|
||||
COMMANDS:
|
||||
${_RED}ini:${_NC} initialize dock command
|
||||
install: install $MAIN_NAME
|
||||
local: get from local /source/
|
||||
remote: get from git service
|
||||
reconf : reconfigure configs
|
||||
debug: change application debug status [ON / OFF]
|
||||
restart: restart services (nginx, $DATABASE_TYPE, php-fpm)
|
||||
update: update source files with new build on /source/
|
||||
status: see current webserver status
|
||||
help: see this help text
|
||||
root: cd to web root folder
|
||||
|
||||
BUNDLE COMMANDS:
|
||||
complete-restart: update + reconf + restart + root
|
||||
"""
|
||||
|
||||
NGINX_CONFIG_FILE="""
|
||||
server {
|
||||
listen $PORT2;
|
||||
server_name localhost:$PORT1;
|
||||
|
||||
location / {
|
||||
alias $WEB_ROOT_DIR;
|
||||
#root $WEB_ROOT_DIR;
|
||||
index index.php;
|
||||
|
||||
# Common parameter to increase upload size limit in conjunction with dedicated php-fpm file
|
||||
client_max_body_size 50M;
|
||||
|
||||
try_files \$uri \$uri/ index.php;
|
||||
location ~ [^/]\.php(/|\$) {
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)\$;
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm-$MAIN_NAME.sock;
|
||||
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param REMOTE_USER \$remote_user;
|
||||
fastcgi_param PATH_INFO \$fastcgi_path_info;
|
||||
fastcgi_param SCRIPT_FILENAME \$request_filename;
|
||||
}
|
||||
}
|
||||
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root $WEB_ROOT_DIR;
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
PHP_FPM_CONFIG_FILE="""
|
||||
[$MAIN_NAME]
|
||||
|
||||
user = $MAIN_NAME
|
||||
group = $MAIN_NAME
|
||||
|
||||
chdir = /usr/share/nginx/html
|
||||
|
||||
listen = /var/run/php/php8.2-fpm-$MAIN_NAME.sock
|
||||
listen.owner = nginx
|
||||
listen.group = nginx
|
||||
listen.mode = 0660
|
||||
|
||||
pm = ondemand
|
||||
pm.max_children = 8
|
||||
pm.max_requests = 500
|
||||
request_terminate_timeout = 1d
|
||||
|
||||
|
||||
pm.process_idle_timeout = 10s
|
||||
|
||||
; Additional php.ini defines, specific to this pool of workers.
|
||||
|
||||
php_admin_value[upload_max_filesize] = 50M
|
||||
php_admin_value[post_max_size] = 50M
|
||||
"""
|
||||
|
||||
_exit() {
|
||||
echo
|
||||
echo
|
||||
echo -e "${_RED}exiting...${_NC}"
|
||||
exit
|
||||
}
|
||||
|
||||
_status() {
|
||||
set +x
|
||||
echo
|
||||
echo
|
||||
echo "----------------------------------"
|
||||
echo -e "${_RED}SYSTEM STATUS HEAD${_NC}"
|
||||
echo "----------------------------------"
|
||||
service nginx status
|
||||
service mariadb status
|
||||
service php8.2-fpm status
|
||||
echo "----------------------------------"
|
||||
echo -e "${_RED}SYSTEM STATUS HEAD${_NC}"
|
||||
echo "----------------------------------"
|
||||
echo
|
||||
echo
|
||||
set -x
|
||||
}
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
if [[ $(pwd) != *$SCRIPT_DIR ]]; then
|
||||
echo "PLEASE CHANGE DIRECTORY TO \`$SCRIPT_DIR/\` BEFORE STARTING SCRIPT"
|
||||
exit
|
||||
fi
|
||||
# TODO silmeden önce onay iste!
|
||||
# TODO extra docker oluşturma ve istenilen docker'a attach
|
||||
|
||||
echo -e "${_RED}CONTAINER WILL BE REMOVED !!!${_NC} (10)"
|
||||
sleep 10
|
||||
docker stop $CONTAINER_PREFIX
|
||||
docker rm $CONTAINER_PREFIX
|
||||
echo "removed"
|
||||
|
||||
docker run -it -d --name "$CONTAINER_PREFIX" --mount type=bind,source=".",target=/source/,readonly --publish $PORT1:$PORT2 nginx bash
|
||||
echo -e "RUN SCRIPT: \`${_RED}bash $MOUNT_PATH/$SCRIPT_NAME docker ini${_NC}\`"
|
||||
docker attach $CONTAINER_PREFIX --detach-keys="ctrl-k"
|
||||
_exit
|
||||
|
||||
elif [[ $1 == "attach" ]]; then
|
||||
if [ -n "$(docker ps -f "name=$CONTAINER_PREFIX" -f "status=running" -q)" ]; then
|
||||
echo "the container is already running!"
|
||||
else
|
||||
docker start $CONTAINER_PREFIX
|
||||
fi
|
||||
|
||||
docker attach $CONTAINER_PREFIX --detach-keys="ctrl-k"
|
||||
|
||||
elif [[ $1 == "docker" ]]; then
|
||||
set -x
|
||||
|
||||
if [[ $2 == "ini" ]]; then
|
||||
echo "alias dock=\"bash /source/$SCRIPT_NAME docker\"" >>/root/.bashrc
|
||||
echo "alias root=\"cd $WEB_ROOT_DIR\"" >>/root/.bashrc
|
||||
sleep 1
|
||||
exec bash
|
||||
|
||||
elif [[ $2 == "debug" ]]; then
|
||||
case "$3" in
|
||||
["oO"]["nN"] | ["tT"]["rR"]["uU"]["eE"] | 1) sed -i "s/\(DEBUG_MODE * = *\).*/\1TRUE;/" "$WEB_ROOT_DIR/config.php" ;;
|
||||
["oO"]["fF"]["fF"] | ["fF"]["aA"]["lL"]["sS"]["eE"] | 0) sed -i "s/\(DEBUG_MODE * = *\).*/\1FALSE;/" "$WEB_ROOT_DIR/config.php" ;;
|
||||
*) echo -e "$_RED please input ON or OFF $_NC" ;;
|
||||
esac
|
||||
|
||||
elif [[ $2 == "restart" ]]; then
|
||||
service mariadb restart
|
||||
sleep 3
|
||||
service php8.2-fpm restart
|
||||
sleep 3
|
||||
service nginx restart
|
||||
|
||||
_status
|
||||
|
||||
elif [[ $2 == "reconf" ]]; then
|
||||
|
||||
echo -e "$CONFIG_FILE_CONTENT" >"$WEB_ROOT_DIR/config.php"
|
||||
echo -e "$NGINX_CONFIG_FILE" >"/etc/nginx/conf.d/default.conf"
|
||||
echo -e "$PHP_FPM_CONFIG_FILE" >"/etc/php/8.2/fpm/pool.d/$MAIN_NAME.conf"
|
||||
echo RECONFIGURED
|
||||
echo
|
||||
_exit
|
||||
elif [[ $2 == "complete-restart" ]]; then
|
||||
echo "updating sources!"
|
||||
rsync -a --progress /source/build/ $WEB_ROOT_DIR --exclude config.php --exclude storage
|
||||
|
||||
sleep 1
|
||||
|
||||
echo -e "$CONFIG_FILE_CONTENT" >"$WEB_ROOT_DIR/config.php"
|
||||
echo -e "$NGINX_CONFIG_FILE" >"/etc/nginx/conf.d/default.conf"
|
||||
echo -e "$PHP_FPM_CONFIG_FILE" >"/etc/php/8.2/fpm/pool.d/$MAIN_NAME.conf"
|
||||
echo RECONFIGURED
|
||||
echo
|
||||
|
||||
service mariadb restart
|
||||
sleep 3
|
||||
service php8.2-fpm restart
|
||||
sleep 3
|
||||
service nginx restart
|
||||
|
||||
_status
|
||||
|
||||
elif [[ $2 == "update" ]]; then
|
||||
echo "updating sources!"
|
||||
rsync -a --progress /source/build/ $WEB_ROOT_DIR --exclude config.php --exclude storage
|
||||
elif [[ $2 == "status" ]]; then
|
||||
_status
|
||||
|
||||
elif [[ $2 == "install" ]]; then
|
||||
if [[ $# -eq 2 || ! ($3 == "local" || $3 == "remote") ]]; then
|
||||
echo -e "use $_RED dock install local $NC or $_RED dock install remote"
|
||||
_exit
|
||||
fi
|
||||
sleep 1
|
||||
apt update
|
||||
apt install nano exa tree wget unzip less rsync -y
|
||||
rm -rf $WEB_ROOT_DIR
|
||||
mkdir -p $WEB_ROOT_DIR
|
||||
cd $WEB_ROOT_DIR || exit
|
||||
if [[ $3 == "local" ]]; then
|
||||
cp -r /source/$BUILD_DIR/* $WEB_ROOT_DIR/
|
||||
elif [[ $3 == "remote" ]]; then
|
||||
wget "$DOWNLOAD_LINK"
|
||||
sleep 3
|
||||
unzip $FILE_NAME
|
||||
mv $FILE_NAME ../
|
||||
|
||||
else
|
||||
echo -e "${_RED}use docker local or docker remote${_NC}"
|
||||
fi
|
||||
|
||||
### CONFIGURATIONS ###
|
||||
apt install php php-fpm -y
|
||||
if [[ $DATABASE_TYPE == "mysql" ]]; then
|
||||
apt install mariadb-server php-mysql -y
|
||||
service mariadb start
|
||||
mysql -u root -e "create database $MAIN_NAME"
|
||||
mysql -u root -e "set password for root@localhost = password('root');"
|
||||
elif [[ $DATABASE_TYPE == "postgresql" ]]; then
|
||||
apt install postgresql php-pgsql -y
|
||||
fi
|
||||
|
||||
echo -e "$CONFIG_FILE_CONTENT" >"$WEB_ROOT_DIR/config.php"
|
||||
echo -e "$NGINX_CONFIG_FILE" >"/etc/nginx/conf.d/default.conf"
|
||||
echo -e "$PHP_FPM_CONFIG_FILE" >"/etc/php/8.2/fpm/pool.d/$MAIN_NAME.conf"
|
||||
groupadd $MAIN_NAME
|
||||
useradd -g $MAIN_NAME $MAIN_NAME
|
||||
cd $WEB_ROOT_DIR || exit
|
||||
chown $MAIN_NAME:nginx -R .
|
||||
chmod 770 storage
|
||||
|
||||
service php8.2-fpm start
|
||||
service nginx start
|
||||
service nginx status
|
||||
service nginx restart
|
||||
echo -e "${_RED}DONE! - OPEN localhost:$PORT1 TO TEST${_NC}"
|
||||
elif [[ $2 == "help" ]]; then
|
||||
echo -e "$HELP!"
|
||||
else
|
||||
echo -e "$_RED ! COMMAND NOT FOUND ! $_NC"
|
||||
echo
|
||||
echo -e "$HELP"
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "$_RED ! COMMAND NOT FOUND ! $_NC"
|
||||
|
||||
fi
|
Loading…
Reference in a new issue