Настройка сервера PHP 7.1 + Nginx + MySQL. Часть 2

Эта заметка посвящена созданию скриптов управления виртуальными хостами на нашем сервере. Мы создадим скрипт создания пустого сайта, сайта с установленной системой MODX, а также скрипты удаления сайта и обновления версии MODX.

Для начала сделаем бэкап существующего конфигурационного файла NGINX и взамен создадим новый
cd /etc/nginx
Файл nginx.conf переименовываем и создаем новый
nano nginx.conf
Вставляем
user                    www-data;
worker_processes        4;
error_log               /var/log/nginx/error.log;
pid                     /var/run/nginx.pid;
events {
                        worker_connections  1024;
}
http {
    include             /etc/nginx/mime.types;
    client_max_body_size 100m;
    access_log          /var/log/nginx/access.log;
    sendfile            on;
    keepalive_timeout   65;
    tcp_nodelay         on;
    gzip                on;
    gzip_min_length     1000;
    gzip_proxied        any;
    gzip_types          text/plain ext/html text/xml application/xml application/x-javascript text/javascript text/css text/json;
    gzip_disable        "msie6";
    gzip_comp_level     8;
    charset             utf-8;
    include             /etc/nginx/conf.d/*.conf;
    include             /etc/nginx/sites-enabled/*;
}
Создаем скрипт установки сайта (создает пользователя, файл конфигурации NGINX и базу данных)
cd /root
nano addplace.sh
Вставляем
#!/bin/bash
 
# MySQL root password
ROOTPASS='mysql_root_pass'
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`
PASSWORD=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12`
##############
 
echo "Enter username for site and database:"
read USERNAME
 
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/php/php7.1-$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;
	if (\$host != '$DOMAIN' ) {
		rewrite			^/(.*)$  http://$DOMAIN/\$1  permanent;
	}
	location ~* ^/core/ {
		deny			all;
	}
	location / {
		try_files		\$uri \$uri/ @rewrite;
	}
	location /index.html {
		rewrite			/ / permanent;
	}
 
	location ~ ^/(.*?)/index\.html$ {
		rewrite			^/(.*?)/ /$1/ permanent;
	}
	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;
	}
	location = /favicon.ico {
		access_log off; log_not_found off;
        }
}
" > /etc/nginx/sites-available/$USERNAME.conf
ln -s /etc/nginx/sites-available/$USERNAME.conf /etc/nginx/sites-enabled/$USERNAME.conf
 
##############
echo "Creating php7-fpm config"
 
echo "[$USERNAME]
 
listen = /run/php/php7.1-$USERNAME.sock
listen.mode = 0666
user = $USERNAME
group = $USERNAME
chdir = /var/www/$USERNAME

listen.owner = $USERNAME
listen.group = $USERNAME
 
php_admin_value[upload_tmp_dir] = /var/www/$USERNAME/tmp
php_admin_value[soap.wsdl_cache_dir] = /var/www/$USERNAME/tmp
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 100M
php_admin_value[open_basedir] = /var/www/$USERNAME/
php_admin_value[cgi.fix_pathinfo] = 0
php_admin_value[date.timezone] = $TIMEZONE
php_admin_value[session.gc_probability] = 1
php_admin_value[session.gc_divisor] = 100
 
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
" > /etc/php/7.1/fpm/pool.d/$USERNAME.conf
 
#############
 
echo "Reloading nginx"
service nginx reload
echo "Reloading php7-fpm"
service php7.1-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 "#!/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!
SFTP and Mysql user: $USERNAME
SFTP password: $SFTPPASS
Mysql password: $MYSQLPASS" > /var/www/$USERNAME/pass.txt
 
cat /var/www/$USERNAME/pass.txt
Делаем исполняемым
chmod +x addplace.sh
Для запуска скрипта
cd /root
./addplace.sh
Создаем скрипт удаления сайта
cd /root
nano remove.sh
Вставляем
#!/bin/bash
 
ROOTPASS='mysql_root_pass'
 
echo "Enter username to delete:"
read USERNAME
 
mysql -uroot --password=$ROOTPASS -e "DROP USER $USERNAME@localhost"
mysql -uroot --password=$ROOTPASS -e "DROP DATABASE $USERNAME"
rm -f /etc/nginx/sites-enabled/$USERNAME.conf
rm -f /etc/nginx/sites-available/$USERNAME.conf
rm -f /etc/php/7.1/fpm/pool.d/$USERNAME.conf
find /var/log/nginx/ -type f -name "$USERNAME-*" -exec rm '{}' \;
 
service nginx reload
service php7.1-fpm reload
 
userdel -rf $USERNAME
Делаем исполняемым
chmod +x remove.sh
17 марта 2017, 20:46    Alexey Заметки 0    1 0

Комментарии (0)

    Вы должны авторизоваться, чтобы оставлять комментарии.