Last active
August 12, 2023 15:11
-
-
Save Elyasnz/56f7a46eb52447ce5220dd39bba50ef1 to your computer and use it in GitHub Desktop.
create a project with related files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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