创建新文件
文件类型
文件
文件夹
创建名称
Search file in folder and subfolders...
Are you sure want to rename?
文件管理器
/
Scripts
/
20201215 Scripts
:
dnmp_core.sh
Advanced Search
上传
创建新文件/文件夹
设置
返回
备份
高级编辑器
Save
#!/bin/bash # Usable tylemp.sh on Debian 9. # Version: Stable-20180220 ######################################################################## # Core Functions ######################################################################## function die { echo "ERROR: $1" > /dev/null 1>&2 exit 1 } function check_sanity { # Do some sanity checking. if [ $(/usr/bin/id -u) != "0" ] then die 'Must be run by root user' fi if [ ! -f /etc/debian_version ] then die "Distribution is not supported" fi } function print_info { echo -n -e '\e[1;36m' echo -n $1 echo -e '\e[0m' } function print_warn { echo -n -e '\e[1;33m' echo -n $1 echo -e '\e[0m' } function check_remove { if [ -n "`which "$1" 2>/dev/null`" ] then DEBIAN_FRONTEND=noninteractive apt-get -q -y remove --purge "$2" print_info "" print_info "$2 removed" print_info "" else print_info "" print_warn "$2 is not installed" print_info "" fi } function check_install { if [ -z "`which "$1" 2>/dev/null`" ] then executable=$1 shift while [ -n "$1" ] do DEBIAN_FRONTEND=noninteractive apt-get -q -y install "$1" print_info "" print_info "$1 installed for $executable" print_info "" shift done else print_info "" print_warn "$2 already installed" print_info "" fi } function remove_unneeded { # Remove rsyslogd, which allocates ~30MB privvmpages on an OpenVZ system, # which might make some low-end VPS inoperatable. We will do this even # before running apt-get update. check_remove /usr/sbin/rsyslogd rsyslog # Some Debian have portmap installed. We don't need that. check_remove /sbin/portmap portmap # Other packages that seem to be pretty common in standard OpenVZ # templates. check_remove /usr/sbin/named bind9 check_remove /usr/sbin/nscd nscd check_remove /usr/sbin/apache2 'apache2*' check_remove /usr/sbin/smbd 'samba*' # Need to stop sendmail as removing the package does not seem to stop it. if [ -f /usr/lib/sm.bin/smtpd ] then invoke-rc.d sendmail stop check_remove /usr/lib/sm.bin/smtpd 'sendmail*' fi } function update_upgrade { apt-get -q -y update apt-get -q -y upgrade apt-get -q -y dist-upgrade } function get_domain_name() { # Getting rid of the lowest part. domain=${1%.*} lowest=`expr "$domain" : '.*\.\([a-z][a-z]*\)'` case "$lowest" in com|net|org|gov|edu|co|top|cn|info|me|us|club|xyz|tk|io|sh|mobi|pro|name|biz|red|vip|app|life|online|shop|site|today|cc|de|be|in|it|jp|tokyo|osaka|tw|hk|uk|xxx|ltd|fun|so) domain=${domain%.*} ;; esac lowest=`expr "$domain" : '.*\.\([a-z][a-z]*\)'` [ -z "$lowest" ] && echo "$domain" || echo "$lowest" } function get_password() { # Check whether our local salt is present. SALT=/var/lib/radom_salt if [ ! -f "$SALT" ] then head -c 512 /dev/urandom > "$SALT" chmod 400 "$SALT" fi password=`(cat "$SALT"; echo $1) | md5sum | base64` echo ${password:0:18} } ######################################################################## # Core Utilities ######################################################################## function install_utilities { apt-get -q -y install libc6 perl debconf dialog bsdutils apt wget bc curl nano make zip unzip dselect dpkg apt-utils update_upgrade } function install_exim4 { check_install mail exim4 if [ -f /etc/exim4/update-exim4.conf.conf ] then sed -i \ "s/dc_eximconfig_configtype='local'/dc_eximconfig_configtype='internet'/" \ /etc/exim4/update-exim4.conf.conf invoke-rc.d exim4 restart fi } function install_syslogd { # We just need a simple vanilla syslogd. Also there is no need to log to # so many files (waste of fd). Just dump them into # /var/log/(cron/mail/messages) check_install /usr/sbin/syslogd inetutils-syslogd invoke-rc.d inetutils-syslogd stop for file in /var/log/*.log /var/log/mail.* /var/log/debug /var/log/syslog do [ -f "$file" ] && rm -f "$file" done for dir in fsck news do [ -d "/var/log/$dir" ] && rm -rf "/var/log/$dir" done cat > /etc/syslog.conf <<END *.*;mail.none;cron.none -/var/log/messages cron.* -/var/log/cron mail.* -/var/log/mail END [ -d /etc/logrotate.d ] || mkdir -p /etc/logrotate.d cat > /etc/logrotate.d/inetutils-syslogd <<END /var/log/cron /var/log/mail /var/log/messages { rotate 4 weekly missingok notifempty compress sharedscripts postrotate /etc/init.d/inetutils-syslogd reload >/dev/null endscript } END invoke-rc.d inetutils-syslogd start } ######################################################################## # DNMP Environments ######################################################################## function install_mysql { # Install the MariaDB packages check_install mysqld mariadb-server check_install mysql mariadb-client invoke-rc.d mysql stop # all the related files. cat > /etc/mysql/conf.d/actgod.cnf <<END [mysqld] key_buffer_size = 8M query_cache_size = 0 END invoke-rc.d mysql start # Generating a new password for the root user. passwd=`get_password root@mysql` mysqladmin password "$passwd" cat > ~/.my.cnf <<END [client] user = root password = $passwd END chmod 600 ~/.my.cnf } function install_nginx { check_install nginx nginx # Need to increase the bucket size for Debian 5. if [ ! -d /etc/nginx ]; then mkdir /etc/nginx fi if [ ! -d /etc/nginx/conf.d ]; then mkdir /etc/nginx/conf.d fi sed -i s/'^worker_processes [0-9];'/'worker_processes 1;'/g /etc/nginx/nginx.conf sed -i s/'^user nginx;'/'user www-data;'/g /etc/nginx/nginx.conf sed -i s/'# gzip_'/'gzip_'/g /etc/nginx/nginx.conf invoke-rc.d nginx restart if [ ! -d /var/www ]; then mkdir /var/www fi cat > /etc/nginx/proxy.conf <<EXND proxy_connect_timeout 30s; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 32k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_set_header Host \$host; proxy_set_header Referer \$http_referer; proxy_set_header Cookie \$http_cookie; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; EXND } function install_php { service mysql stop service nginx stop apt-get -q -y install php-fpm php-mysqlnd php-gd php-mcrypt php-tidy php-curl git curl zip unzip php-dom php-mbstring service mysql start service nginx start } function install_phpmyadmin { if [ -z "$1" ] then die "Usage: `basename $0` phpmyadmin <hostname>" fi # Downloading the phpmyadmin latest and greatest distribution. mkdir /tmp/phpmyadmin.$$ /var/www/$1 wget -O - https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz | \ tar zxf - -C /tmp/phpmyadmin.$$ mv /tmp/phpmyadmin.$$/phpMyAdmin* "/var/www/$1/phpMyAdmin" rm -rf /tmp/phpmyadmin.$$ chown -R www-data "/var/www/$1" chmod -R 755 "/var/www/$1" # Setting up Nginx mapping cat > "/etc/nginx/conf.d/$1.conf" <<END server { listen 80; server_name $1; index index.html index.htm index.php default.html default.htm default.php; root /var/www/$1; location / { try_files \$uri \$uri/ /index.php; } location ~ \.php$ { try_files \$uri =404; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } $al } END invoke-rc.d nginx reload ServerAdmin="" read -p "Please input Administrator Email Address:" ServerAdmin if [ "$ServerAdmin" == "" ]; then echo "Administrator Email Address will set to webmaster@example.com!" ServerAdmin="webmaster@example.com" else echo "===========================" echo Server Administrator Email="$ServerAdmin" echo "===========================" fi cat ~/.my.cnf } ######################################################################## # START OF PROGRAM ######################################################################## export PATH=/bin:/usr/bin:/sbin:/usr/sbin function dnmp { check_sanity case "$1" in system) remove_unneeded update_upgrade install_utilities install_syslogd install_exim4 ;; *) echo 'Usage:' `basename $0` '[option]' echo 'Available option:' for option in system do echo ' -' $option done ;; esac } dnmp $1 $2 $3 | tee -a /tmp/dnmp.log