#!/bin/bash # MySQL root password ROOTPASS="password" TIMEZONE="Europe/Moscow" MYSQLPASS=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12` SFTPPASS=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12` ############## echo "Enter username for site and database:" read USERNAME echo "Enter password" read PASSWORD echo "Enter domain" read DOMAIN ############## echo "Creating user and home directory..." useradd $USERNAME -m -G sftp -s "/bin/false" -d "/var/www/$USERNAME" if [ "$?" -ne 0 ]; then echo "Can't add user" exit 1 fi echo $SFTPPASS > ./tmp echo $SFTPPASS >> ./tmp cat ./tmp | passwd $USERNAME rm ./tmp ############## mkdir /var/www/$USERNAME/www mkdir /var/www/$USERNAME/tmp chmod -R 755 /var/www/$USERNAME/ chown -R $USERNAME:$USERNAME /var/www/$USERNAME/ chown root:root /var/www/$USERNAME echo "Creating vhost file" echo " upstream backend-$USERNAME {server unix:/var/run/php5-fpm/$USERNAME.sock;} server { listen 80; server_name $DOMAIN www.$DOMAIN; root /var/www/$USERNAME/www; access_log /var/log/nginx/$USERNAME-access.log; error_log /var/log/nginx/$USERNAME-error.log; index index.php index.html; rewrite_log on; location / { try_files \$uri \$uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php?q=\$1; } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; fastcgi_pass backend-$USERNAME; } location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|bmp)$ { access_log off; expires 10d; break; } location ~ /\.ht { deny all; } } " > /etc/nginx/sites-available/$USERNAME.conf ln -s /etc/nginx/sites-available/$USERNAME.conf /etc/nginx/sites-enabled/$USERNAME.conf ############## echo "Creating php5-fpm config" echo "[$USERNAME] listen = /var/run/php5-fpm/$USERNAME.sock listen.mode = 0666 user = $USERNAME group = $USERNAME chdir = /var/www/$USERNAME php_admin_value[upload_tmp_dir] = /var/www/$USERNAME/tmp php_admin_value[date.timezone] = $TIMEZONE pm = dynamic pm.max_children = 10 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 4 " > /etc/php5/fpm/pool.d/$USERNAME.conf ############## echo "Creating config.xml" echo " mysql localhost $USERNAME $USERNAME $MYSQLPASS utf8 utf8 utf8_unicode_ci modx_ 443 $DOMAIN 0 1 0 ru $USERNAME $PASSWORD admin@$DOMAIN /var/www/$USERNAME/www/core/ /var/www/$USERNAME/www/manager/ /manager/ /var/www/$USERNAME/www/connectors/ /connectors/ /var/www/$USERNAME/www/ / 1 " > /var/www/$USERNAME/config.xml ############# echo "Reloading nginx" service nginx reload echo "Reloading php5-fpm" service php5-fpm reload ############## echo "Creating database" Q1="CREATE DATABASE IF NOT EXISTS $USERNAME DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;;" Q2="GRANT ALTER,DELETE,DROP,CREATE,INDEX,INSERT,SELECT,UPDATE,CREATE TEMPORARY TABLES,LOCK TABLES ON $USERNAME.* TO '$USERNAME'@'localhost' IDENTIFIED BY '$MYSQLPASS';" Q3="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}${Q3}" mysql -uroot --password=$ROOTPASS -e "$SQL" ############## echo "Installing MODx" cd /var/www/$USERNAME/www/ echo "Getting file from modx.com..." sudo -u $USERNAME wget -O modx.zip http://modx.com/download/latest/ echo "Unzipping file..." sudo -u $USERNAME unzip "./modx.zip" -d ./ ZDIR=`ls -F | grep "\/" | head -1` if [ "${ZDIR}" = "/" ]; then echo "Failed to find directory..."; exit fi if [ -d "${ZDIR}" ]; then cd ${ZDIR} echo "Moving out of temp dir..." sudo -u $USERNAME mv ./* ../ cd ../ rm -r "./${ZDIR}" echo "Removing zip file..." rm "./modx.zip" cd "setup" echo "Running setup..." sudo -u $USERNAME php ./index.php --installmode=new --config=/var/www/$USERNAME/config.xml echo "Done!" else echo "Failed to find directory: ${ZDIR}" exit fi echo "#!/bin/bash echo \"Set permissions for /var/www/$USERNAME/www...\"; echo \"CHOWN files...\"; chown -R $USERNAME:$USERNAME \"/var/www/$USERNAME/www\"; echo \"CHMOD directories...\"; find \"/var/www/$USERNAME/www\" -type d -exec chmod 0755 '{}' \; echo \"CHMOD files...\"; find \"/var/www/$USERNAME/www\" -type f -exec chmod 0644 '{}' \; " > /var/www/$USERNAME/chmod chmod +x /var/www/$USERNAME/chmod echo "Done. Please visit http://$DOMAIN/manager/ to login." echo "Manager user: $USERNAME" echo "Manger password: $PASSWORD" echo "SFTP password: $SFTPPASS" echo "Mysql password: $MYSQLPASS"