Skip to content

Instantly share code, notes, and snippets.

@aminin
Last active April 18, 2018 09:33
Show Gist options
  • Select an option

  • Save aminin/1179299 to your computer and use it in GitHub Desktop.

Select an option

Save aminin/1179299 to your computer and use it in GitHub Desktop.
Shell scripts for managing local websites under Apache web-server. Valid for Ubuntu 14.04.
#!/bin/bash
if [[ "$DB_NAME" == "" ]]; then
echo "Error: DB_NAME is not set"
exit 1
fi
if [[ "$DB_PASSWORD" == "" ]]; then
echo "Error: DB_PASSWORD is not set"
exit 1
fi
if [[ "$DB_USER" == "" ]]; then
DB_USER=$DB_NAME;
fi
query="CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';
GRANT USAGE ON * . * TO '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON \`${DB_NAME}\` . * TO '${DB_USER}'@'localhost';"
echo "Accessing MySQL as root"
mysql -u root -p -e "$query"

Установка и настройка PostgreSQL

packages='postgresql postgis postgresql-8.4-postgis'
sudo apt-get install $packages

Настроить /etc/postgresql/8.4/main/pg_hba.conf

Подключиться к сервреу БД

sudo su postgres
psql

Создать пользователя example_user

CREATE ROLE example_user
    WITH
        CREATEDB
        LOGIN
        PASSWORD 'qwerty';

CREATE DATABASE example_db;

GRANT ALL PRIVILEGES 
    ON DATABASE example_db 
    TO example_user
    WITH GRANT OPTION;

ALTER DATABASE example_db OWNER TO example_user;
\q

Проверить что пользователь может соединиться с БД

psql -U example_user -W -d example_db

Установить PostGis в бд example_db

scripts="postgis.sql spatial_ref_sys.sql postgis_comments.sql"
for script in $scripts; do
    psql -U example_user -W -d example_db -f /usr/share/postgresql/8.4/contrib/$script
done;
#!/bin/sh
if [[ "$SITE_NAME" == "" ]]; then
echo "Error: SITE_NAME is not set"
echo "Example usage: sudo SITE_NAME=example.dev bash create_site.sh"
exit 1
fi
SERVER_ADMIN=webmaster@localhost
SITE_IP=127.0.0.1
SITE_VH=*
OWNER=$USER:www-data
echo "Making virtual host configuration for ${SITE_NAME}"
echo "# Configuration for ${SITE_NAME}
# Ensure that NameVirtualHost IP-addres from /etc/apache2/ports.conf
# In modern apache AH00548: NameVirtualHost has no effect
# matches the following one
<VirtualHost $SITE_VH:80>
ServerAdmin $SERVER_ADMIN
ServerName $SITE_NAME
DocumentRoot /var/www/vhosts/$SITE_NAME/httpdocs/
<Directory />
Options FollowSymLinks
#AllowOverride None
</Directory>
<Directory /var/www/vhosts/$SITE_NAME/httpdocs/>
Options Indexes FollowSymLinks MultiViews
#AllowOverride None
Require all granted
#Order allow,deny
#allow from all
</Directory>
ScriptAlias /cgi-bin/ /var/www/vhosts/$SITE_NAME/cgi-bin/
<Directory /var/www/vhosts/$SITE_NAME/cgi-bin>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/www/vhosts/$SITE_NAME/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/www/vhosts/$SITE_NAME/access.log combined
</VirtualHost>" > /etc/apache2/sites-available/$SITE_NAME.conf
ln -s /etc/apache2/sites-available/$SITE_NAME.conf /etc/apache2/sites-enabled/$SITE_NAME.conf
echo "Updating /etc/hosts"
if [ 1 -gt `grep "^[ \t]*\?$SITE_IP[ \t]\+$SITE_NAME[ \t]*\?$" /etc/hosts | wc -l` ]; then
echo "
$SITE_IP $SITE_NAME" >> /etc/hosts
echo "Writing $SITE_NAME to /etc/hosts"
else
echo "$SITE_NAME is already exists in /etc/hosts"
fi
echo "Making DOCUMENT_ROOT CGI-BIN"
if [ ! -d /var/www/vhosts/$SITE_NAME ]; then
mkdir -p /var/www/vhosts/$SITE_NAME
fi
if [ ! -d /var/www/vhosts/$SITE_NAME/httpdocs ]; then
mkdir /var/www/vhosts/$SITE_NAME/httpdocs
fi
if [ ! -d /var/www/vhosts/$SITE_NAME/cgi-bin ]; then
mkdir /var/www/vhosts/$SITE_NAME/cgi-bin
fi
echo "Creating log files"
echo "" > /var/www/vhosts/$SITE_NAME/error.log
echo "" > /var/www/vhosts/$SITE_NAME/access.log
echo "Setting site directory owner and write permissions"
chown -R anton:www-data /var/www/vhosts/$SITE_NAME
chmod -R ug+w /var/www/vhosts/$SITE_NAME
echo "Restarting web server"
service apache2 restart
#!/bin/bash
if [[ "$SITE_NAME" == "" ]]; then
echo "Error: SITE_NAME is not set"
echo "Example usage: sudo SITE_NAME=example.dev bash dump_delete_site.sh"
exit 1
fi
BACKUP_DIR=~
if [ ! -d /var/www/vhosts/$SITE_NAME/ ]; then
echo "Site $SITE_NAME not exists"
exit;
fi
cd /var/www/vhosts/$SITE_NAME/
if [ $DB_NAME ];
then
echo "Dumping db $DB_NAME"
mysqldump -h localhost -u root -p $DB_NAME > ${DB_NAME}.sql
echo "Packing files into archive"
tar -czf ${SITE_NAME}.tar.gz httpdocs/ ${DB_NAME}.sql
echo "DROP DATABASE ${DB_NAME}; DROP USER ${DB_USER}@localhost;" | mysql -h localhost -u root -p
else
echo "Packing files into archive"
tar -czf ${SITE_NAME}.tar.gz httpdocs/
fi
echo "Moving archive to $BACKUP_DIR"
mv ${SITE_NAME}.tar.gz $BACKUP_DIR
cd /var/www/vhosts/
echo "Deleting site files"
rm -rf /var/www/vhosts/$SITE_NAME/
echo "Deleting virtual-host configuration"
sudo rm /etc/apache2/sites-available/$SITE_NAME
sudo rm /etc/apache2/sites-enabled/$SITE_NAME
echo "Deleting $SITE_NAME from /etc/hosts"
sed "/.\+[0-9][[:space:]]\+$SITE_NAME/d" -i /etc/hosts
#!/bin/sh
# Тест создания нового сайта
#
# Проверяет:
# - На новый домен указывают NS-сервера
# - На новый домен указывает NS-сервер хостинг-провайдера
# - Новый сайт отдаёт страницу HTML, а не ошибку сервера
HOST=example.com
IP=0
NS=ns1.hosting-provider.com
#========================================
IP=`echo $IP | grep -o -m 1 "[0-9]\+\(\.[0-9]\+\)\{3\}"`
IP_OF_NS=`host $NS | grep -m 1 "$NS" | grep -o "[0-9]\+\(\.[0-9]\+\)\{3\}"`
echo
echo Testing Global DNS
echo ========================================
G_IP=`host $HOST | grep -o -m 1 "[0-9]\+\(\.[0-9]\+\)\{3\}"`
if [ "$G_IP" ]; then
echo PASSED $G_IP
if [ ! "$IP" ]; then IP=$G_IP; fi
else
echo FAILED
fi
if [ ! "$G_IP" ]; then
echo
echo Testing Local DNS
echo ========================================
L_IP=`host $HOST $NS | grep -m 1 "$HOST" | grep -o "[0-9]\+\(\.[0-9]\+\)\{3\}"`
if [ "$L_IP" ]; then
echo PASSED $L_IP
if [ ! "$IP" ]; then IP=$L_IP; fi
else
echo FAILED
fi
fi
echo
echo Testing HTML
echo ========================================
if [ "$IP" ] && [ -w /etc/hosts ] || [ "$G_IP" ]; then
if [ ! "$G_IP" ] && [ "$IP" ]; then
# Переопределяем на всякий случай домен
cp -f /etc/hosts ~/hosts
echo "$IP $HOST" > /etc/hosts
fi
NUM_LINES=`wget -O - http://$HOST 2>/dev/null | wc -l`
if ((NUM_LINES>0)); then
echo PASSED
else
echo FAILED
fi
if [ ! "$G_IP" ] && [ "$IP" ]; then
# Возвращаем старые домены
mv -f ~/hosts /etc/hosts
fi
else
echo FAILED
if [ ! -w /etc/hosts ]; then
echo WARNING: can\'t write to /etc/hosts
fi
fi
@aminin
Copy link
Author

aminin commented Apr 18, 2018

-- Даём пользователю создавать БД начинающиеся с его имени
GRANT ALL PRIVILEGES ON `username\_%` . * TO 'username'@'localhost';
-- Даём пользователю создавать БД начинающиеся с его имени при подключении к любому домену
GRANT ALL PRIVILEGES ON `username\_%` . * TO 'username'@'%';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment