Оптимизируем дисковое пространство на хостинге

Главные вкладки

Аватар пользователя olk olk 11 марта 2013 в 10:51

Это репост небольшой заметки с моего блога Оптимизируем дисковое пространство на хостинге, там же лежит сам скрипт в zip архиве.

Используйте данный скрипт на свой страх и риск Smile лучше предварительно забэкапить ваши директории.

Речь пойдет о конкретном хостинге it-patrol.ru (но думаю это реализуемо и на других хостингах).
Пока у вас один, два проекта на конкретном экаунте в хостинге то обновление версий друпала и расходуемое дисковое пространство не так актуально. Но когда количество проектов переваливает за десяток, то держать такое количество копий дистрибутива друпала становится накладно (это особенно актуально для нового тарифа Эластик, где стоимость тарифа (хоть и не значительно) зависит и от занимаемого дискового пространства.
Можно пойти по пути мультисайтинга, но порой это не всегда удобно. Одно из решений (при условии что все ваши сайты реализованы на одной версии друпала) сделать линки на актуальную копию дистрибутива и в дальнейшем обновлять только его.
Как мы понимаем сайты отличаются только одним каталогом sites - который индивидуален для каждого проекта.
Для автоматизации процесса перелинковки был написан небольшой скриптик, который собственно и выполняет всю работу.
Предварительно в домашнем каталоге создаем директорию drupal-share, куда распаковываем используемую версию друпала

Скрипт запускается с параметром - "имя директории которую нужно перелинковать"
например: sh drupal-link.sh hotel-prog.ru
(не забудьте дать права на запуск скрипта)

#!/bin/bash

DRUPALSHARE=$HOME/drupal-share
LINKDIR=$HOME/domains/$1

echo 'Drupal share dir: '$DRUPALSHARE
echo 'Linked dir: '$LINKDIR
if [ ! -d $LINKDIR ]; then
echo Bad first parameter or directory $LINKDIR not exists
exit 1;
fi
if [ ! -d $DRUPALSHARE ]; then
echo Directory $DRUPALSHARE not exists
exit 1;
fi

SHARE=$DRUPALSHARE/includes
LINK=$LINKDIR/includes
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/misc
LINK=$LINKDIR/misc
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/modules
LINK=$LINKDIR/modules
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/scripts
LINK=$LINKDIR/scripts
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/profiles
LINK=$LINKDIR/profiles
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/themes
LINK=$LINKDIR/themes
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/profiles
LINK=$LINKDIR/profiles
if [ -d $LINK ] && [ ! -h $LINK ]; then
echo Удаляю директорию $LINK
rm -R $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln -s $SHARE $LINK
fi

SHARE=$DRUPALSHARE/sites
LINK=$LINKDIR/sites
if [ ! -d $LINK ]; then
echo Копирую директори c $SHARE на $LINK
cp -r $SHARE $LINK
fi
!>
LINK=$LINKDIR/CHANGELOG.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi
LINK=$LINKDIR/COPYRIGHT.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi
LINK=$LINKDIR/INSTALL.mysql.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK

fi

LINK=$LINKDIR/INSTALL.pgsql.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi
!>
LINK=$LINKDIR/INSTALL.sqlite.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi

LINK=$LINKDIR/INSTALL.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi
!>
LINK=$LINKDIR/LICENSE.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi

LINK=$LINKDIR/MAINTAINERS.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi
!>
LINK=$LINKDIR/README.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi

LINK=$LINKDIR/UPGRADE.txt
if [ -a $LINK ]; then
echo Удаляем текстовыей файл $LINK
rm $LINK
fi

# на файлы делаем жесткие ссылки

LINK=$LINKDIR/.htaccess
SHARE=$DRUPALSHARE/.htaccess
## для начальной установки
if [ ! -a $LINK ]; then
echo Копирую файл  $SHARE в $LINK
cp $SHARE $LINK
fi
## Если у вас индивидуальные файлы .htaccess для каждого сайта то закоментируйте следующий блок
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln  $SHARE $LINK

fi

LINK=$LINKDIR/robots.txt
SHARE=$DRUPALSHARE/robots.txt
## для начальной установки
if [ ! -a $LINK ]; then
echo Копирую файл  $SHARE в $LINK
cp $SHARE $LINK
fi
#если у вас индивидульный робот то закоментируйте следующий юлок
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln $SHARE $LINK

fi

LINK=$LINKDIR/index.php
SHARE=$DRUPALSHARE/index.php
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln $SHARE $LINK

fi

LINK=$LINKDIR/cron.php
SHARE=$DRUPALSHARE/cron.php
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln  $SHARE $LINK

fi

LINK=$LINKDIR/update.php
SHARE=$DRUPALSHARE/update.php
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln  $SHARE $LINK

fi

LINK=$LINKDIR/install.php
SHARE=$DRUPALSHARE/install.php
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
# Если не хотите оставлять install.php закоментируйте следующий блок
if [ ! -h $LINK ]; then
echo Создаю символьную ссылку c $SHARE на $LINK
ln  $SHARE $LINK
fi
!>

LINK=$LINKDIR/authorize.php
SHARE=$DRUPALSHARE/authorize.php
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln  $SHARE $LINK
fi
!>
LINK=$LINKDIR/xmlrpc.php
SHARE=$DRUPALSHARE/xmlrpc.php
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln  $SHARE $LINK
fi
!>

LINK=$LINKDIR/web.config
SHARE=$DRUPALSHARE/web.config
if [ -a $LINK ] && [ ! -h $LINK ]; then
echo Удаляем файл $LINK
rm $LINK
fi
if [ ! -h $LINK ]; then
echo Создаю ссылку c $SHARE на $LINK
ln  $SHARE $LINK
fi

Комментарии

Аватар пользователя RedRat RedRat 12 марта 2013 в 11:55

Я сделал немного проще: создал каталог soft, в нём подкаталоги core, modules, libraries, translations и т.д., потом создал пустой каталог и в нём насоздавал относительных символических ссылок. Дальше оставалось только запаковать содержимое этого каталога в архив. Теперь при создании нового сайта я просто создаю пустой каталог и распаковываю в него содержимое архива. Ссылки на нужные модули и темы тоже делаю символическими.

Аватар пользователя olk olk 12 марта 2013 в 12:17

Ну мой скрипт немного гибче Smile он позволяет не только инициализировать новые домены (каталоги) но и перелинковать существующие ...