Skip to content

Instantly share code, notes, and snippets.

@Elyasnz
Last active August 12, 2023 15:11
Show Gist options
  • Save Elyasnz/56f7a46eb52447ce5220dd39bba50ef1 to your computer and use it in GitHub Desktop.
Save Elyasnz/56f7a46eb52447ce5220dd39bba50ef1 to your computer and use it in GitHub Desktop.
create a project with related files
#!/bin/bash
# setup <project> <username> <giturl=null>
if [ "$1" ]; then
PROJECT="$1"
else
echo "Usage: setup <project> <username> <giturl=null>"
exit 1
fi
if [ "$2" ]; then
USERNAME="$2"
else
echo "Usage: setup <project> <username> <giturl=null>"
exit 1
fi
if [ "$3" ]; then
GITURL="$3"
else
GITURL="NotSpecified"
fi
echo "PROJECT: $PROJECT"
echo "USERNAME: $USERNAME"
echo "GITURL: $GITURL"
PATH_SCRIPT="$(
cd -- "$(dirname "$0")" >/dev/null 2>&1
pwd -P
)"
echo "creating group: developer, "$USERNAME"_run"
sudo groupadd developer &>/dev/null || true
sudo groupadd "$USERNAME"_run &>/dev/null || true
echo "creating user: $USERNAME"
sudo useradd -M -s /bin/bash -G developer,"$USERNAME"_run,sudo,adm "$USERNAME" &>/dev/null || true
echo "adding www-data user to "$USERNAME"_run group (for nginx to access .sock files) "
sudo usermod -aG "$USERNAME"_run www-data
echo "creating project files"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/Project"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/Files/postgresql"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/Files/nginx"
sudo touch "$PATH_SCRIPT/$PROJECT/Files/conf.env"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/Logs"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/Backups"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/.run"
sudo mkdir -p "$PATH_SCRIPT/$PROJECT/.tmp"
echo "creating pgpass file at $PATH_SCRIPT/$PROJECT/.px (remember to fill it)"
touch "$PATH_SCRIPT/$PROJECT/.px"
if [[ -z "$(ls -A "$PATH_SCRIPT/$PROJECT/Files/nginx")" ]]; then
echo "cloning NginxInstaller to $PATH_SCRIPT/$PROJECT/Files/nginx (remember to fill it)"
git clone https://github.com/Elyasnz/NginxInstaller.git "$PATH_SCRIPT/$PROJECT/Files/nginx"
fi
if [[ -z "$(ls -A "$PATH_SCRIPT/$PROJECT/Files/postgresql")" ]]; then
echo "creating default files at $PATH_SCRIPT/$PROJECT/Files/postgresql (remember to fill it and run linker)"
touch "$PATH_SCRIPT/$PROJECT/Files/postgresql/postgresql.conf"
touch "$PATH_SCRIPT/$PROJECT/Files/postgresql/pg_hba.conf"
echo "#!/usr/bin/env bash
# linker 15/main
if [[ (\"\$#\" -ne 1) || !(\$1 == *\"/\"*) ]]; then
echo 'must provide database name like 15/main'
exit 1
fi
SCRIPTPATH=\"\$( cd -- \"\$(dirname \"\$0\")\" >/dev/null 2>&1 ; pwd -P )\"
sudo chown postgres:postgres \$SCRIPTPATH/postgresql.conf
sudo chown postgres:postgres \$SCRIPTPATH/pg_hba.conf
sudo chmod u=rw,og=r \$SCRIPTPATH/postgresql.conf
sudo chmod u=rw,og=r \$SCRIPTPATH/pg_hba.conf
sudo ln -f \$SCRIPTPATH/postgresql.conf /etc/postgresql/\$1/
sudo ln -f \$SCRIPTPATH/pg_hba.conf /etc/postgresql/\$1" > "$PATH_SCRIPT/$PROJECT/Files/postgresql/linker"
sudo chmod u+x,g+x "$PATH_SCRIPT/$PROJECT/Files/postgresql/linker"
fi
echo "creating installation files"
echo "#!/bin/bash
PATH_SCRIPT=\"\$(
cd -- \"\$(dirname \"\$0\")\" >/dev/null 2>&1
pwd -P
)\"
sudo ln -sf \"\$PATH_SCRIPT\" /opt" > "$PATH_SCRIPT/$PROJECT/install"
sudo chmod u+x,g+x "$PATH_SCRIPT/$PROJECT/install"
echo "#!/bin/bash
PATH_SCRIPT=\"\$(
cd -- \"\$(dirname \"\$0\")\" >/dev/null 2>&1
pwd -P
)\"
NAME=\"\$(basename \"\$PATH_SCRIPT\")\"
sudo rm -r \"/opt/\$NAME\"" > "$PATH_SCRIPT/$PROJECT/uninstall"
sudo chmod u+x,g+x "$PATH_SCRIPT/$PROJECT/uninstall"
echo "setting project files ownership and permissions"
sudo chown -R "$USERNAME":developer "$PATH_SCRIPT/$PROJECT"
sudo chmod -R u+rw,g+rw,o+r "$PATH_SCRIPT/$PROJECT"
sudo find "$PATH_SCRIPT/$PROJECT" -type d -exec chmod u+x,g+xs,o+x {} +
sudo setfacl -R -m d:u::rwx,d:g::rwx,d:o::rx "$PATH_SCRIPT/$PROJECT"
echo "setting project run files ownership and permissions"
sudo chown -R "$USERNAME":"$USERNAME"_run "$PATH_SCRIPT/$PROJECT/.run"
sudo chmod -R u+rw,g+rw,o+r "$PATH_SCRIPT/$PROJECT/.run"
sudo find "$PATH_SCRIPT/$PROJECT/.run" -type d -exec chmod u+x,g+xs,o+x {} +
sudo setfacl -R -m d:u::rwx,d:g::rwx,d:o::rx "$PATH_SCRIPT/$PROJECT/.run"
echo "setting project log files ownership and permissions"
sudo chown -R "$USERNAME":adm "$PATH_SCRIPT/$PROJECT/Logs"
sudo chmod -R u+rw,g+rw,o+r "$PATH_SCRIPT/$PROJECT/Logs"
sudo find "$PATH_SCRIPT/$PROJECT/Logs" -type d -exec chmod u+x,g+xs,o+x {} +
sudo setfacl -R -m d:u::rwx,d:g::rwx,d:o::rx "$PATH_SCRIPT/$PROJECT/Logs"
echo "creating Logs/services_names (remember to fill it)"
touch "$PATH_SCRIPT/$PROJECT/Logs/services_names"
sudo chown "$USERNAME":developer "$PATH_SCRIPT/$PROJECT/Logs/services_names"
echo "creating Logs/services"
sudo echo "#!/usr/bin/env bash
PATH_SCRIPT=\"\$(
cd -- \"\$(dirname \"\$0\")\" >/dev/null 2>&1
pwd -P
)\"
owner=\$(stat -c \"%U\" \"\$PATH_SCRIPT\")
# comma-separated list of service names
services=\"\$(cat \"\$PATH_SCRIPT/services_names\")\"
echo \$services
IFS=','
for service in \$services; do
sudo -u \"\$owner\" mkdir -p \"\$PATH_SCRIPT/\$service\"
sudo -u \"\$owner\" touch \"\$PATH_SCRIPT/\$service/main.log\"
sudo -u \"\$owner\" touch \"\$PATH_SCRIPT/\$service/sout.log\"
sudo -u \"\$owner\" touch \"\$PATH_SCRIPT/\$service/serr.log\"
done
sudo -u \"\$owner\" mkdir -p \"\$PATH_SCRIPT/unknown\"
sudo -u \"\$owner\" touch \"\$PATH_SCRIPT/unknown/main.log\"
sudo -u \"\$owner\" touch \"\$PATH_SCRIPT/unknown/sout.log\"
sudo -u \"\$owner\" touch \"\$PATH_SCRIPT/unknown/serr.log\"" > "$PATH_SCRIPT/$PROJECT/Logs/services"
sudo chown "$USERNAME":developer "$PATH_SCRIPT/$PROJECT/Logs/services"
sudo chmod u+x,g+x "$PATH_SCRIPT/$PROJECT/Logs/services"
sudo "$PATH_SCRIPT/$PROJECT/Logs/services"
echo "creating Logs/log-archive"
sudo echo "#!/usr/bin/env bash
PATH_SCRIPT=\"\$(
cd -- \"\$(dirname \"\$0\")\" >/dev/null 2>&1
pwd -P
)\"
owner=\$(stat -c \"%U\" \"\$PATH_SCRIPT\")
# comma-separated list of service names
services=\$(sudo \"\$PATH_SCRIPT/services\")
archive=\$(date +\"%Y-%m-%d_%H-%M-%S\")
sudo -u \"\$owner\" rm -rf \$archive
sudo -u \"\$owner\" mkdir \$archive
IFS=','
for service in \$services; do
sudo -u \"\$owner\" cp -r \"\$PATH_SCRIPT/\$service\" \"\$archive\"
sudo -u \"\$owner\" rm -f \"\$PATH_SCRIPT/\$service/\"*.log.*
sudo -u \"\$owner\" find \"\$PATH_SCRIPT/\$service\" -name \"*.log\" -exec truncate -s0 {} +
done
sudo -u \"\$owner\" tar cf \"\$archive.tar.gz\" \$archive
sudo -u \"\$owner\" rm -rf \$archive
sudo chgrp developer \"\$archive.tar.gz\"" > "$PATH_SCRIPT/$PROJECT/Logs/log-archive"
sudo chown "$USERNAME":developer "$PATH_SCRIPT/$PROJECT/Logs/log-archive"
sudo chmod u+x,g+x "$PATH_SCRIPT/$PROJECT/Logs/log-archive"
# restore the changed permissions
sudo chmod 0600 "$PATH_SCRIPT/$PROJECT/.px"
sudo chown postgres:postgres "$PATH_SCRIPT/$PROJECT/Files/postgresql/postgresql.conf"
sudo chown postgres:postgres "$PATH_SCRIPT/$PROJECT/Files/postgresql/pg_hba.conf"
if [ "$GITURL" != "NotSpecified" ]; then
echo "cloning project $GITURL"
cd "$PATH_SCRIPT/$PROJECT/Project"
git clone "$GITURL"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment