Laravel permissions
This script fixes permissions and ownership of your laravel files. Save it as fix.sh on the root of your project, make it executable ( chmod +x fix.sh) and edit only the two lines indicated at the beginning of the script to set your username and the name of the group used by your web server (usually www-data). Then just run with sudo ( sudo ./fix.sh ) and start coding!
#!/usr/bin/env bash
#Configure these two variables
MYUSER="joel"
APACHEGROUP="www-data"
#you don't need to edit anything below.
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
echo "Setting variables..."
SCRIPTPATH=`pwd -P`
BOOTSTRAP="${SCRIPTPATH}/bootstrap/"
BOOTSTRAPCACHE="${SCRIPTPATH}/bootstrap/cache/"
STORAGE="${SCRIPTPATH}/storage"
LOGS="${STORAGE}/logs"
FRAMEWORK="${STORAGE}/framework"
#add my user to the web server group
echo "adding ${MYUSER} to the ${APACHEGROUP} group ..."
usermod -a -G ${APACHEGROUP} ${MYUSER}
#if bootstrap/cache does not exist, create it
if [ ! -d ${BOOTSTRAPCACHE} ]; then
echo "Creating ${BOOTSTRAPCACHE} directory..."
mkdir -p ${BOOTSTRAPCACHE}
fi
#if we don't have a .gitignore file in bootstrap/cache, add it
if [ ! -f ${BOOTSTRAPCACHE}/.gitignore ]; then
echo "Creating .gitignore file in ${BOOTSTRAPCACHE}/..."
echo '*' > ${BOOTSTRAPCACHE}/.gitignore
echo '!.gitignore' >> ${BOOTSTRAPCACHE}/.gitignore
fi
#if storage dir does not exist, create it.
if [ ! -d ${STORAGE} ]; then
echo "Creating ${STORAGE} directory"
mkdir -p ${STORAGE}
fi
#then, make sure we have debugbar, framework and logs inside storage
#debugbar is not installed by default, but it does not hurt to have it's directory there , ready for when you install it
for DIR in debugbar framework logs db_backups
do
if [ ! -d ${STORAGE}/${DIR} ]; then
echo "Creating ${STORAGE}/${DIR} directory..."
mkdir -p ${STORAGE}/${DIR}
else
echo "Checking for existance of ${STORAGE}/${DIR}... It exists"
fi
done
#if we don't have a .gitignore file in storage/framework, add it
if [ ! -f ${FRAMEWORK}/.gitignore ]; then
echo "Creating .gitignore file in ${FRAMEWORK}..."
echo 'compiled.php' > ${FRAMEWORK}/.gitignore
echo 'config.php' >> ${FRAMEWORK}/.gitignore
echo 'down' >> ${FRAMEWORK}/.gitignore
echo 'events.scanned.php' >> ${FRAMEWORK}/.gitignore
echo 'maintenance.php' >> ${FRAMEWORK}/.gitignore
echo 'routes.php' >> ${FRAMEWORK}/.gitignore
echo 'routes.scanned.php' >> ${FRAMEWORK}/.gitignore
echo 'schedule-*' >> ${FRAMEWORK}/.gitignore
echo 'services.json' >> ${FRAMEWORK}/.gitignore
fi
#then, make sure we have cache, sessions, testing and views inside storage/framework
for DIR in cache sessions testing views
do
if [ ! -d ${FRAMEWORK}/${DIR} ]; then
echo "Creating ${FRAMEWORK}/${DIR} directory..."
mkdir -p ${FRAMEWORK}/${DIR}
else
echo "Checking for existance of ${FRAMEWORK}/${DIR}... It exists"
fi
done
#then, make sure we have a storage/framework/cache/data directory
if [ ! -d ${FRAMEWORK}/cache/data ]; then
echo "Creating ${FRAMEWORK}/cache/data directory..."
mkdir -p ${FRAMEWORK}/cache/data
else
echo "Checking for existance of ${FRAMEWORK}/cache/data... It exists"
fi
#if we don't have a .gitignore file in storage/framework/cache/data, add it
if [ ! -f ${FRAMEWORK}/cache/data/.gitignore ]; then
echo "Creating .gitignore file in ${FRAMEWORK}/cache/data/..."
echo '*' > ${FRAMEWORK}/cache/data/.gitignore
echo '!data/' >> ${FRAMEWORK}/cache/data/.gitignore
echo '!.gitignore' >> ${FRAMEWORK}/cache/data/.gitignore
fi
#if we don't have a .gitignore file in storage/framework/sessions/, add it
if [ ! -f ${FRAMEWORK}/sessions/.gitignore ]; then
echo "Creating .gitignore file in ${FRAMEWORK}/sessions/..."
echo '*' > ${FRAMEWORK}/sessions/.gitignore
echo '!.gitignore' >> ${FRAMEWORK}/sessions/.gitignore
fi
#if we don't have a .gitignore file in storage/framework/testing/, add it
if [ ! -f ${FRAMEWORK}/testing/.gitignore ]; then
echo "Creating .gitignore file in ${FRAMEWORK}/testing/..."
echo '*' > ${FRAMEWORK}/testing/.gitignore
echo '!.gitignore' >> ${FRAMEWORK}/testing/.gitignore
fi
#if we don't have a .gitignore file in storage/framework/views/, add it
if [ ! -f ${FRAMEWORK}/views/.gitignore ]; then
echo "Creating .gitignore file in ${FRAMEWORK}/views/..."
echo '*' > ${FRAMEWORK}/views/.gitignore
echo '!.gitignore' >> ${FRAMEWORK}/views/.gitignore
fi
#make my user and the apache group own everything in the directory
echo "Fixing ownership on everything..."
chown -R ${MYUSER}:${APACHEGROUP} ${SCRIPTPATH}
#change permissions on files to 644
echo "Setting permissions 0644 on all files... (excluding vendor, node_modules and .git directories)"
find ${SCRIPTPATH} -type f -not -path "${SCRIPTPATH}/vendor/*" -not -path "${SCRIPTPATH}/node_modules/*" -not -path "${SCRIPTPATH}/.git/*" -exec chmod 0644 {} \;
#change permissions on directories to 755
echo "Setting permissions 0755 on all directories... (excluding vendor, node_modules and .git directories)"
find ${SCRIPTPATH} -type d -not -path "${SCRIPTPATH}/vendor/*" -not -path "${SCRIPTPATH}/node_modules/*" -not -path "${SCRIPTPATH}/.git/*" -exec chmod 0755 {} \;
#change permissions on bootstrap/cache to 775
echo "Setting permissions 0775 on bootstrap/cache"
chmod 0775 ${BOOTSTRAPCACHE}
#change permissions on the php files that live in bootstrap/cache to 0775
echo "Setting permissions 0775 on php files in bootstrap/cache"
chmod 0775 ${BOOTSTRAPCACHE}/*.php
#if i have any bash scripts in there, make them executable
echo "Making any existing shell scripts executable"
find ${SCRIPTPATH} -type f -iname "*.sh" -exec chmod +x {} \;
#finally fix permissions on storage
echo "Setting 0775 permissions on ${STORAGE}..."
chmod -R 0775 ${STORAGE}
joelconty
Comments (0)
Please login to comment.