Скрипт установки типового веб-сервера на Linux (CentOS)
May 13th, 2009
Задача: в автоматическом режиме установить основное ПО необходимое для работы веб-сервер: nginx/Apache/PHP/MySQL/vsftpd.
Скачать скрипт целиком
#!/bin/bash
### ver. 0.98 from 11.10.2010
os=`cat /etc/issue |grep -c CentOS`
if [ $os = "0" ]; then
echo "This script work only on CentOS. Exit."
exit
fi
echo "Enter username to create (default, admin):"
read USER
echo "This host is VPS? (yes/no. Default, no):"
read thisvps
echo "Use Remi repos? (yes/no. Default, yes):"
read useremi
if [ -z $USER ]; then
USER=admin
fi
if [ -z $thisvps ]; then
thisvps=no
fi
if [ -z $useremi ]; then
useremi=yes
fi
confighost=unix-notes.ru
USERPASS=`< /dev/urandom tr -dc A-Za-z0-9 | head -c15`
SQLPASS=`< /dev/urandom tr -dc A-Za-z0-9 | head -c15`
thiswebazilla=`uname -a | grep -c "webazilla"`
sestat=`sestatus|grep -c enabled`
if [ $sestat = "1" ]; then
sed -i 's/enforcing/disabled/gi' /etc/selinux/config
sed -i 's/permissive/disabled/gi' /etc/selinux/config
chkconfig sshd on
echo "Need reboot to SELinux disable ... After reboot run script again"
exit
fi
checkarch=`uname -a | grep -c "i386"`
if [ $checkarch = "1" ]; then
PL=i386
else
PL=x86_64
fi
# check to exist homedir
if [ ! -d /home ]; then
echo "/home is no exist! setup canceled."
exit
fi
iptables -F
iptables -X
/etc/init.d/iptables save
# add additional dns servers, OpenDNS
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
mkdir /root/.ssh
cd /root/.ssh
chown -R root /root
chmod -R 400 /root
if [ $thisvps = "no" ]; then
cd /etc
rm -f /etc/sysctl.conf
wget http://$confighost/config/linux/sysctl.conf
sysctl -p
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
yum --noplugins -y install ntp
ntpdate pool.ntp.org
echo "1 1 * * * root ntpdate pool.ntp.org" >> /etc/crontab
fi
if [ $thisvps = "yes" ]; then
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
fi
if [ $PL = x86_64 ]; then
cd /root
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
rpm -ihv /root/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
if [ $useremi = yes ]; then
rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
fi
fi
if [ $PL = i386 ]; then
cd /root
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -ihv /root/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
if [ $useremi = yes ]; then
rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
fi
fi
if [ $useremi = yes ]; then
yum --noplugins --enablerepo=remi install mc.$PL vsftpd.$PL httpd.$PL httpd-devel.$PL php.$PL mysql-server.$PL php-mysql.$PL nginx.$PL mod_geoip.$PL php-mbstring.$PL php-gd.$PL php-mcrypt.$PL make.$PL which.$PL
else yum --noplugins install mc.$PL vsftpd.$PL httpd.$PL httpd-devel.$PL php.$PL mysql-server.$PL php-mysql.$PL nginx.$PL mod_geoip.$PL php-mbstring.$PL php-gd.$PL php-mcrypt.$PL make.$PL which.$PL
fi
chkconfig --level 2345 mysqld on
chkconfig --level 2345 httpd on
chkconfig --level 2345 vsftpd on
chkconfig --level 2345 nginx on
chkconfig --level 2345 cups off
chkconfig --level 2345 sendmail on
chkconfig --level 2345 sshd on
cd /etc/vsftpd
rm -f /etc/vsftpd/vsftpd.conf
wget http://$confighost/config/linux/vsftpd.conf
chmod 400 /etc/vsftpd/vsftpd.conf
cd /usr/local/src
wget http://$confighost/config/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
ln -s /usr/sbin/apxs /usr/sbin/apxs2
make rpaf-2.0
make install-2.0
cd /etc/httpd/conf.d
wget http://$confighost/config/linux/mod_rpaf.conf
iplist=`ifconfig | grep inet | awk '{print $2}' | awk -F: '{print $2}' | grep -v '^$' | tr "\n" " "`
sed -i "s/127.0.0.1/$iplist/g" /etc/httpd/conf.d/mod_rpaf.conf
# Create user and setup user folders
adduser -d /home/$USER -m -s /sbin/nologin $USER
echo "$USER:$USERPASS" |chpasswd
mkdir /home/$USER/domains
chmod -R 755 /home/$USER
cd /home/$USER
wget http://$confighost/config/linux/create_domain.sh
sed -i "s/testuser/$USER/g" /home/$USER/create_domain.sh
chmod +x /home/$USER/create_domain.sh
mkdir /etc/httpd/vhosts
cd /etc/httpd/vhosts
wget http://$confighost/config/linux/sample
cd /home/$USER
wget http://$confighost/config/linux/create_base.sh
sed -i "s/INSERTPASSHERE/$SQLPASS/g" /home/$USER/create_base.sh
chmod +x /home/$USER/create_base.sh
cd /home/$USER
wget http://$confighost/config/linux/create_multi_bases.sh
sed -i "s/INSERTPASSHERE/$SQLPASS/g" /home/$USER/create_multi_bases.sh
sed -i "s/username/$USER/g" /home/$USER/create_multi_bases.sh
chmod +x /home/$USER/create_multi_bases.sh
cd /etc/httpd/conf/
rm -f /etc/httpd/conf/httpd.conf
wget http://$confighost/config/linux/httpd.conf
rm -f /etc/httpd/conf.d/proxy_ajp.conf
rm -f /etc/httpd/conf.d/welcome.conf
cd /etc/nginx/
rm -f /etc/nginx/nginx.conf
wget http://$confighost/config/linux/nginx.conf
iplist2=`ifconfig | grep inet | awk '{print $2}' | awk -F: '{print $2}' | grep -v '^$'|grep -v 127.0.0.1 | sed 's/\(.*\)/listen \1;/'`
sed -i "s/user_name/$USER/gi" /etc/nginx/nginx.conf
sed -i "s/IPADDR/$iplist2/gi" /etc/nginx/nginx.conf
mkdir /home/mysql
mkdir /home/mysql/tmp
chown -R mysql /home/mysql/
chmod -R 755 /home/mysql/
cd /etc
rm -f /etc/my.cnf
if [ $thisvps = "no" ]; then
wget http://$confighost/config/linux/my.cnf
fi
if [ $thisvps = "yes" ]; then
wget http://$confighost/config/linux/vps/my.cnf
fi
service mysqld start
mysqladmin password $SQLPASS
echo "DELETE FROM mysql.user WHERE Password=''" | mysql --password=$SQLPASS
service vsftpd start
service httpd start
service nginx start
service cups stop
if [ $PL = x86_64 ]; then
cd /root
wget http://$confighost/config/linux/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
tar zxvf /root/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
cd /root/ZendOptimizer-3.3.3-linux-glibc23-x86_64
./install.sh
fi
if [ $PL = i386 ]; then
cd /root
wget http://$confighost/config/linux/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
tar zxvf /root/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install.sh
fi
echo "##############################"
echo "Setup ready!"
echo "FTP username: $USER"
echo "FTP password: $USERPASS"
echo "MySQL root password: $SQLPASS"
echo "##############################"
### ver. 0.98 from 11.10.2010
os=`cat /etc/issue |grep -c CentOS`
if [ $os = "0" ]; then
echo "This script work only on CentOS. Exit."
exit
fi
echo "Enter username to create (default, admin):"
read USER
echo "This host is VPS? (yes/no. Default, no):"
read thisvps
echo "Use Remi repos? (yes/no. Default, yes):"
read useremi
if [ -z $USER ]; then
USER=admin
fi
if [ -z $thisvps ]; then
thisvps=no
fi
if [ -z $useremi ]; then
useremi=yes
fi
confighost=unix-notes.ru
USERPASS=`< /dev/urandom tr -dc A-Za-z0-9 | head -c15`
SQLPASS=`< /dev/urandom tr -dc A-Za-z0-9 | head -c15`
thiswebazilla=`uname -a | grep -c "webazilla"`
sestat=`sestatus|grep -c enabled`
if [ $sestat = "1" ]; then
sed -i 's/enforcing/disabled/gi' /etc/selinux/config
sed -i 's/permissive/disabled/gi' /etc/selinux/config
chkconfig sshd on
echo "Need reboot to SELinux disable ... After reboot run script again"
exit
fi
checkarch=`uname -a | grep -c "i386"`
if [ $checkarch = "1" ]; then
PL=i386
else
PL=x86_64
fi
# check to exist homedir
if [ ! -d /home ]; then
echo "/home is no exist! setup canceled."
exit
fi
iptables -F
iptables -X
/etc/init.d/iptables save
# add additional dns servers, OpenDNS
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
mkdir /root/.ssh
cd /root/.ssh
chown -R root /root
chmod -R 400 /root
if [ $thisvps = "no" ]; then
cd /etc
rm -f /etc/sysctl.conf
wget http://$confighost/config/linux/sysctl.conf
sysctl -p
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
yum --noplugins -y install ntp
ntpdate pool.ntp.org
echo "1 1 * * * root ntpdate pool.ntp.org" >> /etc/crontab
fi
if [ $thisvps = "yes" ]; then
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
fi
if [ $PL = x86_64 ]; then
cd /root
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
rpm -ihv /root/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
if [ $useremi = yes ]; then
rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
fi
fi
if [ $PL = i386 ]; then
cd /root
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -ihv /root/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
if [ $useremi = yes ]; then
rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
fi
fi
if [ $useremi = yes ]; then
yum --noplugins --enablerepo=remi install mc.$PL vsftpd.$PL httpd.$PL httpd-devel.$PL php.$PL mysql-server.$PL php-mysql.$PL nginx.$PL mod_geoip.$PL php-mbstring.$PL php-gd.$PL php-mcrypt.$PL make.$PL which.$PL
else yum --noplugins install mc.$PL vsftpd.$PL httpd.$PL httpd-devel.$PL php.$PL mysql-server.$PL php-mysql.$PL nginx.$PL mod_geoip.$PL php-mbstring.$PL php-gd.$PL php-mcrypt.$PL make.$PL which.$PL
fi
chkconfig --level 2345 mysqld on
chkconfig --level 2345 httpd on
chkconfig --level 2345 vsftpd on
chkconfig --level 2345 nginx on
chkconfig --level 2345 cups off
chkconfig --level 2345 sendmail on
chkconfig --level 2345 sshd on
cd /etc/vsftpd
rm -f /etc/vsftpd/vsftpd.conf
wget http://$confighost/config/linux/vsftpd.conf
chmod 400 /etc/vsftpd/vsftpd.conf
cd /usr/local/src
wget http://$confighost/config/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
ln -s /usr/sbin/apxs /usr/sbin/apxs2
make rpaf-2.0
make install-2.0
cd /etc/httpd/conf.d
wget http://$confighost/config/linux/mod_rpaf.conf
iplist=`ifconfig | grep inet | awk '{print $2}' | awk -F: '{print $2}' | grep -v '^$' | tr "\n" " "`
sed -i "s/127.0.0.1/$iplist/g" /etc/httpd/conf.d/mod_rpaf.conf
# Create user and setup user folders
adduser -d /home/$USER -m -s /sbin/nologin $USER
echo "$USER:$USERPASS" |chpasswd
mkdir /home/$USER/domains
chmod -R 755 /home/$USER
cd /home/$USER
wget http://$confighost/config/linux/create_domain.sh
sed -i "s/testuser/$USER/g" /home/$USER/create_domain.sh
chmod +x /home/$USER/create_domain.sh
mkdir /etc/httpd/vhosts
cd /etc/httpd/vhosts
wget http://$confighost/config/linux/sample
cd /home/$USER
wget http://$confighost/config/linux/create_base.sh
sed -i "s/INSERTPASSHERE/$SQLPASS/g" /home/$USER/create_base.sh
chmod +x /home/$USER/create_base.sh
cd /home/$USER
wget http://$confighost/config/linux/create_multi_bases.sh
sed -i "s/INSERTPASSHERE/$SQLPASS/g" /home/$USER/create_multi_bases.sh
sed -i "s/username/$USER/g" /home/$USER/create_multi_bases.sh
chmod +x /home/$USER/create_multi_bases.sh
cd /etc/httpd/conf/
rm -f /etc/httpd/conf/httpd.conf
wget http://$confighost/config/linux/httpd.conf
rm -f /etc/httpd/conf.d/proxy_ajp.conf
rm -f /etc/httpd/conf.d/welcome.conf
cd /etc/nginx/
rm -f /etc/nginx/nginx.conf
wget http://$confighost/config/linux/nginx.conf
iplist2=`ifconfig | grep inet | awk '{print $2}' | awk -F: '{print $2}' | grep -v '^$'|grep -v 127.0.0.1 | sed 's/\(.*\)/listen \1;/'`
sed -i "s/user_name/$USER/gi" /etc/nginx/nginx.conf
sed -i "s/IPADDR/$iplist2/gi" /etc/nginx/nginx.conf
mkdir /home/mysql
mkdir /home/mysql/tmp
chown -R mysql /home/mysql/
chmod -R 755 /home/mysql/
cd /etc
rm -f /etc/my.cnf
if [ $thisvps = "no" ]; then
wget http://$confighost/config/linux/my.cnf
fi
if [ $thisvps = "yes" ]; then
wget http://$confighost/config/linux/vps/my.cnf
fi
service mysqld start
mysqladmin password $SQLPASS
echo "DELETE FROM mysql.user WHERE Password=''" | mysql --password=$SQLPASS
service vsftpd start
service httpd start
service nginx start
service cups stop
if [ $PL = x86_64 ]; then
cd /root
wget http://$confighost/config/linux/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
tar zxvf /root/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
cd /root/ZendOptimizer-3.3.3-linux-glibc23-x86_64
./install.sh
fi
if [ $PL = i386 ]; then
cd /root
wget http://$confighost/config/linux/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
tar zxvf /root/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install.sh
fi
echo "##############################"
echo "Setup ready!"
echo "FTP username: $USER"
echo "FTP password: $USERPASS"
echo "MySQL root password: $SQLPASS"
echo "##############################"

Спасибо за скрипт. Очень помог.
Всегда пожалуйста. Доработки и замечания приветствуются =)
Привет, я полный новичок в linux системах, возможно ли использовать данный скрипт для ос debian? если нет то что нужно подправить в вашем скрипте, чтобы получить работающую версию связки? заранее спасибо за ответ.
Нет, к дебиану скрипт не подойдет. Там другая система установки пакетов, расположение конфигов и прочее.
а возможно ли написать такое для дебиана, может быть только в этом скрипте поменять пакеты для дебина и некоторые команды?
Конечно можно написать. Попробуйте, это не сложно.
извините но так как я не силен в линуксах может быть вы попробуете сами переписать его под дебиан?, у меня что то не получилось нормально это сделать =(
К сожалению, пока у меня такой возможности нет.
http://forum.searchengines.ru/showthread.php?t=599874
кто автор этого скрипта?
Если посмотрите в код скрипта выложенного на серче, то все поймете.
Жаль, что автор топика не указал откуда скрипт.
admin
а можете его переделать? как здесь просят – http://forum.searchengines.ru/showthread.php?t=599874
и сколько будет стоить?
….
и где (путь) создовать сайт, а то:
Forbidden
You don’t have permission to access / on this server.
спасибо
в каком файле изменить путь к сайту на такой?
/var/www/site.ru
После установки вам в хоумдир скачается файл “create_domain.sh”. Вот в нем и надо исправить строчку:
BASE=”/home/$USR/domains”
К сожалению, переделать пока возможности нет.