#!/bin/bash # Usable dnmp.sh on Debian 8-10. # Version: Stable-20210520 ############################################################ # Core Functions Setup ############################################################ 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 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" apt-get clean echo "#####################################################" print_info " $1 installed for $executable" echo "#####################################################" shift done else echo "#####################################################" print_warn " $2 already installed" echo "#####################################################" fi } function check_remove { if [ -n "`which "$1" 2>/dev/null`" ] then DEBIAN_FRONTEND=noninteractive apt-get -q -y -purge remove "$2" apt-get clean echo "#####################################################" print_info " $2 removed" echo "#####################################################" else echo "#####################################################" print_warn " $2 is not installed" echo "#####################################################" fi } function check_phpversion { if grep ^8. /etc/debian_version > /dev/null then php_path=/var/run/ php_ver=php5 elif grep ^9. /etc/debian_version > /dev/null then php_path=/run/php/ php_ver=php7.0 elif grep ^10. /etc/debian_version > /dev/null then php_path=/run/php/ php_ver=php7.3 elif grep ^11. /etc/debian_version > /dev/null then php_path=/run/php/ php_ver=php7.4 fi } function check_mysqlversion { if [ $(lsb_release -sc) = "jessie" ] then check_install mysqlcommon mysql-common mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak rm -f /var/lib/mysql/ib* cat > /etc/mysql/my.cnf <<END [mysqld] [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking bind-address = 127.0.0.1 key_buffer = 16K max_allowed_packet = 1M thread_stack = 64K thread_cache_size = 8 myisam-recover = BACKUP table_cache = 20 query_cache_limit = 1M query_cache_size = 2M log_error = /var/log/mysql/error.log expire_logs_days = 10 max_binlog_size = 100M skip-innodb default-storage-engine = MyISAM [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/ END else cat > /etc/mysql/conf.d/my.cnf <<END [mysqld] key_buffer_size = 8M query_cache_size = 0 END fi } function check_hostname { if [ -z "$siteurl" ] then die "Usage: `basename $0` $command <hostname>" fi } function die { echo "ERROR: $1" > /dev/null 1>&2 exit 1 } 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|app|ba|best|biz|blog|cloud|club|cn|co|de|dev|fun|globle|inc|info|io|jp|kyoto|la|life|ltd|me|mobi|moe|name|one|online|osaka|pro|shop|site|space|store|tk|today|tokyo|top|tt|vip|web|website|work|world|wtf|xxx|xyz) 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:13} } 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 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/apache2 'apache2*' check_remove /usr/sbin/named 'bind9*' check_remove /usr/sbin/smbd 'samba*' check_remove /usr/sbin/nscd nscd check_remove mysql mysql check_remove nginx nginx check_remove php 'php*' apt-get autoremove apt-get autoclean # 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 remove_dnmp { apt-get -q -y remove mysql apt-get -q -y remove nginx apt-get -q -y remove 'php-*' apt-get -q -y remove 'mariadb-*' apt-get autoremove apt-get autoclean rm -rf /etc/mysql/ -R rm -rf /var/lib/mysql/ -R rm -rf /var/www/ rm -rf /etc/mysql/ rm -rf /etc/nginx/ rm -rf /etc/php/ } function apt_clean { apt-get -q -y autoclean apt-get -q -y clean } function mkdir_write { rm -rf /tmp/$command.$$ chown -R www-data "/var/www/$siteurl" chmod -R 755 "/var/www/$siteurl" } function print_admininfo { ServerAdmin="" read -p "Please input Administrator Email Address:" ServerAdmin if [ "$ServerAdmin" == "" ] then ServerAdmin="webmaster@example.com" fi echo "===========================" echo Server Administrator Email="$ServerAdmin" echo "===========================" } ############################################################ # System Optimization ############################################################ function update_bashrc { wget -q http://sh.dnmp.sh/Scripts/Debian/.bashrc -O .bashrc } function update_upgrade { apt-get -q -y update apt-get -q -y upgrade apt-get -q -y dist-upgrade check_install softwares apt-transport-https lsb-release ca-certificates curl openssl gnupg libc6 perl debconf dialog bsdutils dbus apt apt-utils dselect dpkg unzip zip libarchive-tools apt-get -q -y update apt-get -q -y 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'|g" /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 } function install_iptables { # Create startup rules cat > /etc/iptables.up.rules <<END *filter # http://articles.slicehost.com/2010/4/30/ubuntu-lucid-setup-part-1 # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT # Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allows all outbound traffic # You can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # UN-COMMENT THESE IF YOU USE INCOMING MAIL! # Allows POP (and SSL-POP) #-A INPUT -p tcp --dport 110 -j ACCEPT #-A INPUT -p tcp --dport 995 -j ACCEPT # SMTP (and SSMTP) #-A INPUT -p tcp --dport 25 -j ACCEPT #-A INPUT -p tcp --dport 465 -j ACCEPT # IMAP (and IMAPS) #-A INPUT -p tcp --dport 143 -j ACCEPT #-A INPUT -p tcp --dport 993 -j ACCEPT # Allows SSH connections (only 3 attempts by an IP every minute, drop the rest to prevent SSH attacks) -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name DEFAULT --rsource -j DROP -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # Allow ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # log iptables denied calls (Can grow log files fast!) #-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Misc # Reject all other inbound - default deny unless explicitly allowed policy #-A INPUT -j REJECT #-A FORWARD -j REJECT # It's safer to just DROP the packet -A INPUT -j DROP -A FORWARD -j DROP COMMIT END # Set these rules to load on startup cat > /etc/network/if-pre-up.d/iptables <<END #!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules END # Make it executable chmod +x /etc/network/if-pre-up.d/iptables # Load the rules iptables-restore < /etc/iptables.up.rules # You can flush the current rules with /sbin/iptables -F echo 'Created /etc/iptables.up.rules and startup script /etc/network/if-pre-up.d/iptables' echo 'If you make changes you can restore the rules with'; echo '/sbin/iptables -F' echo 'iptables-restore < /etc/iptables.up.rules' echo ' ' } function install_system { remove_unneeded update_bashrc update_upgrade install_exim4 install_syslogd # install_iptables apt_clean } ############################################################ # DNMP Environments ############################################################ function input_sitename { echo } function sources_sury { wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list wget -O /etc/apt/trusted.gpg.d/nginx-mainline.gpg https://packages.sury.org/nginx-mainline/apt.gpg echo "deb https://packages.sury.org/nginx-mainline/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/nginx.list } function sources_stable { cp /etc/apt/sources.list /etc/apt/sources.list.backup echo "deb http://deb.debian.org/debian stable main" > /etc/apt/sources.list echo "deb-src http://deb.debian.org/debian stable main" >> /etc/apt/sources.list echo "deb http://deb.debian.org/debian-security/ stable/updates main" >> /etc/apt/sources.list echo "deb-src http://deb.debian.org/debian-security/ stable/updates main" >> /etc/apt/sources.list echo "deb http://deb.debian.org/debian stable-updates main" >> /etc/apt/sources.list echo "deb-src http://deb.debian.org/debian stable-updates main" >> /etc/apt/sources.list apt-get update apt-get dist-upgrade } function sources_testing { cp /etc/apt/sources.list /etc/apt/sources.list.backup echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list echo "deb-src http://deb.debian.org/debian testing main" >> /etc/apt/sources.list echo "deb http://deb.debian.org/debian-security/ testing/updates main" >> /etc/apt/sources.list echo "deb-src http://deb.debian.org/debian-security/ testing/updates main" >> /etc/apt/sources.list echo "deb http://deb.debian.org/debian testing-updates main" >> /etc/apt/sources.list echo "deb-src http://deb.debian.org/debian testing-updates main" >> /etc/apt/sources.list apt-get update apt-get dist-upgrade } function install_mysql { # Install the MariaDB packages check_install mysqld mariadb-server check_install mysql mariadb-client invoke-rc.d mysql stop check_mysqlversion invoke-rc.d mysql start # Generating a new password for the root user. passwd=`get_password root@mysql` mysqladmin password "$dbpswd" cat > ~/.my.cnf <<END [client] user = root password = $dbpswd END chmod 600 ~/.my.cnf } function install_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 if [ ! -d /var/www ] then mkdir /var/www fi check_install nginx nginx sed -i "s|worker_processes \[0-9\]|worker_processes $(cat /proc/cpuinfo| grep "processor"| wc -l)|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 cat > /etc/nginx/proxy.conf <<END 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; END } function install_php { service mysql stop service nginx stop check_install php libicu-dev libjpeg* libmcrypt libapache2-mod-$php_ver $php_ver-common $php_ver-fpm $php_ver-cgi $php_ver-curl $php_ver-mysqlnd $php_ver-mysql $php_ver-sqlite3 $php_ver-xml $php_ver-xml-util $php_ver-xmlrpc $php_ver-gd $php_ver-tidy $php_ver-bcmath $php_ver-gettext $php_ver-net-socket $php_ver-mbstring $php_ver-zip $php_ver-Imagick $php_ver-APC $php_ver-Memcache $php_ver-imap $php_ver-ldap $php_ver-odbc $php_ver-pear $php_ver-intl $php_ver-mhash service mysql start service nginx start } function install_dnmp { install_mysql install_nginx install_php apt_clean echo "" hostnamectl echo "" mysql -V && nginx -v && php -v echo "" } function install_phpmyadmin { #Debian 9以上,Mariadb 10.3、10.4不允许root通过终端命令行以外的方式登录。那我们新建立一个用户,给予root权限不就好了么? #phpMyAdmin HY000/1698错误的正确解决办法 #首先,在ssh上用root登录mariadb: #mysql -u root -p #输入密码成功登录后,建立一个新的用户,并给予最大的权限: #CREATE USER '新用户'@'%' IDENTIFIED BY '新用户的密码'; #GRANT ALL PRIVILEGES ON *.* TO '新用户'@'%' WITH GRANT OPTION; #好了,用你的新用户名和密码去登录phpmyadmin吧。Farewell, HY000/1698. #echo "Creating magento2 database" #mysql -u root -p12345678 -e "CREATE DATABASE magento2;" #mysql -u root -p12345678 -e "CREATE USER 'magento2user'@'localhost' IDENTIFIED BY 'm2pass';" #mysql -u root -p12345678 -e "GRANT ALL ON magento2.* TO 'magento2user'@'localhost' IDENTIFIED BY 'm2pass' WITH GRANT OPTION;" #mysql -u root -p12345678 -e "FLUSH PRIVILEGES;" if [ -z "$1" ] then die "Usage: `basename $0` phpmyadmin <hostname>" fi # Downloading the phpmyadmin latest and greatest distribution. mkdir /tmp/phpmyadmin.$$ /var/www/$1 # if [ $(lsb_release -sc) = "buster" ] # then # wget -O - https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz | \ # tar zxf - -C /tmp/phpmyadmin.$$ # else wget -O - https://files.phpmyadmin.net/phpMyAdmin/4.9.7/phpMyAdmin-4.9.7-all-languages.tar.gz | \ tar zxf - -C /tmp/phpmyadmin.$$ # fi 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" sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 64)'|g" /var/www/$1/phpMyAdmin/libraries/config.default.php sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 64)'|g" /var/www/$1/phpMyAdmin/config.sample.inc.php # sed -e "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 64)'|" config.sample.inc.php > config.inc.php # Setting up Nginx mapping cat > "/etc/nginx/sites-available/$1" <<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:$php_path$php_ver-fpm.sock; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } $al } END ln -s /etc/nginx/sites-available/$1 /etc/nginx/sites-enabled/$1 nginx -t 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 phpMyAdmin Server Administrator Email="$ServerAdmin" echo "===========================" fi cat ~/.my.cnf } function install_letsencrypt { if [ -z "$1" ] then die "Usage: `basename $0` letsencrypt <hostname>" fi check_install python3 python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface python3-certbot-nginx certbot --nginx -d $1 } function install_vhost { check_hostname mkdir "/var/www/$siteurl" chown -R www-data "/var/www/$siteurl" chmod -R 755 "/var/www/$siteurl" # Setting up Nginx mapping cat > "/etc/nginx/sites-available/$siteurl" <<END server { server_name $siteurl; root /var/www/$siteurl; location / { index index.html index.htm; } } END ln -s /etc/nginx/sites-available/$siteurl /etc/nginx/sites-enabled/$siteurl nginx -t cat > "/var/www/$siteurl/index.html" <<END Big Brother is watching you! ----$siteurl END invoke-rc.d nginx reload } function install_dhost { check_hostname mkdir "/var/www/$siteurl" chown -R www-data "/var/www/$siteurl" chmod -R 755 "/var/www/$siteurl" # Setting up Nginx mapping cat > "/etc/nginx/sites-available/$siteurl" <<END server { listen 80; server_name $1; index index.htm index.html index.php default.htm default.html default.php; root /var/www/$siteurl; 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:$php_path$php_ver-fpm.sock; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; error_log /dev/null; access_log off; } } END ln -s /etc/nginx/sites-available/$siteurl /etc/nginx/sites-enabled/$siteurl nginx -t cat > "/var/www/$siteurl/index.php" <<END <?php phpinfo(); ?> END invoke-rc.d nginx reload } ############################################################ # DNMP Configuration ############################################################ function config_nginx { invoke-rc.d nginx stop apt-get -q -y update sed -i s|'^worker_processes.*;'|'worker_processes auto;'|g /etc/nginx/nginx.conf cat > /etc/nginx/conf.d/my.conf <<END client_max_body_size 20m; server_names_hash_bucket_size 64; END cat > /etc/nginx/proxy.conf <<END 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; END invoke-rc.d nginx restart } function config_php { # sed -i s|'^; process.max = 128'|'process.max = 1'|g /etc/php5/fpm/php-fpm.conf # sed -i "s|memory_limit = 128M|memory_limit = 2048M|" /etc/php/$php_ver/fpm/php.ini echo } function setup_mysql { # Setting up the MySQL database dbname=`echo $siteurl | tr . _` # MySQL userid cannot be more than 15 characters long dbusid="${dbname:0:15}" dbpswd=`get_password "$dbusid@mysql"` mysqladmin create "$dbname" echo "GRANT ALL PRIVILEGES ON \`$dbname\`.* TO \`$dbusid\`@localhost IDENTIFIED BY '$dbpswd';" | mysql cat >> "/root/$siteurl.mysql.txt" <<END [typecho_myqsl] dbname = $dbname userid = $dbusid passwd = $dbpswd END echo "mysql dbname:" $dbname echo "mysql userid:" $dbusid echo "mysql passwd:" $dbpswd echo "===========================" } function setup_nginx { # Setting up Nginx mapping cat > "/etc/nginx/sites-available/$siteurl" <<END server { listen 80; server_name $siteurl; index index.html index.htm index.php default.html default.htm default.php; root /var/www/$siteurl; 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:$php_path$php_ver-fpm.sock; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } $al } END ln -s /etc/nginx/sites-available/$siteurl /etc/nginx/sites-enabled/$siteurl nginx -t invoke-rc.d nginx reload } ############################################################ # Blogging Platform ############################################################ function install_wordpress { check_hostname mkdir /tmp/$command.$$ # Downloading the Wordpress' latest and greatest distribution. wget -O - http://wordpress.org/latest.tar.gz | tar zxf - -C /tmp/$command.$$ mv /tmp/$command.$$/wordpress "/var/www/$siteurl" # rm -rf latest.tar.gz mkdir_write setup_nginx print_admininfo setup_mysql cp "/var/www/$siteurl/wp-config-sample.php" "/var/www/$siteurl/wp-config.php" sed -i "s|database_name_here|$dbname|; s/username_here/$dbusid/; s/password_here/$dbpswd/" "/var/www/$siteurl/wp-config.php" sed -i "31a define(\'WP_CACHE\', true);" "/var/www/$siteurl/wp-config.php" } function install_typecho { check_hostname mkdir /tmp/$command.$$ # Downloading the typecho's latest and greatest distribution. wget -O - http://typecho.org/downloads/1.1-17.10.30-release.tar.gz | tar zxf - -C /tmp/$command.$$ mv /tmp/$command.$$/build "/var/www/$siteurl" # rm -rf latest.tar.gz mkdir_write setup_nginx print_admininfo setup_mysql sed -i "169s|('dbDatabase', 'typecho')|('dbDatabase', '$dbname')|g" /var/www/$siteurl/install/Mysql.php sed -i "160s|('dbUser', 'root')|('dbUser', '$dbusid')|g" /var/www/$siteurl/install/Mysql.php sed -i "165s|('dbPassword')|('dbPassword', '$dbpswd')|g" /var/www/$siteurl/install/Mysql.php } ############################################################ # Forum Platform ############################################################ function install_discuzx { check_hostname mkdir /tmp/$command.$$ # Downloading the DiscuzX's latest and greatest distribution. wget https://gitee.com/Discuz/DiscuzX/repository/archive/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/DiscuzX/upload "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx print_admininfo setup_mysql sed -i "35s|'ultrax'|'$dbname'|g" /var/www/$siteurl/config/config_global_default.php sed -i "31s|'root'|'$dbusid'|g" /var/www/$siteurl/config/config_global_default.php sed -i "32s|''|'$dbpswd'|g" /var/www/$siteurl/config/config_global_default.php } function install_phpbb { check_hostname mkdir /tmp/$command.$$ # Downloading the phpBB's latest and greatest distribution. wget https://download.phpbb.com/pub/release/3.3/3.3.4/phpBB-3.3.4.zip unzip phpBB-3.3.4.zip -d /tmp/$command.$$ mv /tmp/$command.$$/phpBB3 "/var/www/$siteurl" rm -rf phpBB-3.3.4.zip # chown -R www-data "/var/www/$siteurl" # chmod -R 755 "/var/www/$siteurl" # chown -R www-data "/var/www/$siteurl/store" # chmod -R 755 "/var/www/$siteurl/store" # chown -R www-data "/var/www/$siteurl/cache" # chmod -R 755 "/var/www/$siteurl/cache" # chown -R www-data "/var/www/$siteurl/files" # chmod -R 755 "/var/www/$siteurl/files" # chown -R www-data "/var/www/$siteurl/images/avatars/upload" # chmod -R 755 "/var/www/$siteurl/images/avatars/upload" mkdir_write setup_nginx print_admininfo setup_mysql # sed -i "231s|value=\"\"|value=\"$dbname\"|g" /var/www/$siteurl/install/index.php # sed -i "236s|value=\"root\"|value=\"$dbusid\"|g" /var/www/$siteurl/install/index.php # sed -i "241s|value=\"\"|value=\"$dbpswd\"|g" /var/www/$siteurl/install/index.php } function install_carbon { check_hostname mkdir /tmp/$command.$$ # Downloading the Carbon-Forum's latest and greatest distribution. wget https://github.com/lincanbin/Carbon-Forum/archive/5.9.0.zip unzip 5.9.0.zip -d /tmp/$command.$$ mv /tmp/$command.$$/Carbon-Forum-5.9.0 "/var/www/$siteurl" rm -rf 5.9.0.zip mkdir_write setup_nginx print_admininfo setup_mysql sed -i "231s|value=\"\"|value=\"$dbname\"|g" /var/www/$siteurl/install/index.php sed -i "236s|value=\"root\"|value=\"$dbusid\"|g" /var/www/$siteurl/install/index.php sed -i "241s|value=\"\"|value=\"$dbpswd\"|g" /var/www/$siteurl/install/index.php } function install_simpleforum { check_hostname mkdir /tmp/$command.$$ # Downloading the simpleforum's latest and greatest distribution. wget https://github.com/yujiandong/simpleforum/archive/refs/heads/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/simpleforum-master "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx print_admininfo setup_mysql sed -i "s|\$dbname|\$dbname = '$dbname'|g" /var/www/$siteurl/core/install_update/models/DatabaseForm.php sed -i "s|root|$dbusid|g" /var/www/$siteurl/core/install_update/models/DatabaseForm.php sed -i "s|\$password|\$password = '$dbpswd'|g" /var/www/$siteurl/core/install_update/models/DatabaseForm.php print_warn 'SimpleForum Set Up @ http://'$siteurl'/install.php' } function install_flarum { check_hostname mkdir /tmp/$command.$$ # Downloading the Flarum's latest and greatest distribution. wget https://gitee.com/FlarumChina/flarum/repository/archive/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/flarum "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx print_admininfo setup_mysql # sed -i "s|\$dbname|\$dbname = '$dbname'|g" /var/www/$siteurl/core/install_update/models/DatabaseForm.php # sed -i "s|root|$dbusid|g" /var/www/$siteurl/core/install_update/models/DatabaseForm.php # sed -i "s|\$password|\$password = '$dbpswd'|g" /var/www/$siteurl/core/install_update/models/DatabaseForm.php # print_warn 'SimpleForum Set Up @ http://$siteurl/install.php' } ############################################################ # Mall Platform ############################################################ function install_shopxo { check_hostname mkdir /tmp/$command.$$ # Downloading the Shopxo's latest and greatest distribution. wget https://github.com/gongfuxiang/shopxo/archive/v2.0.2.zip unzip v2.0.2.zip -d /tmp/$command.$$ mv /tmp/$command.$$/shopxo-2.0.2 "/var/www/$siteurl" rm -rf v2.0.2.zip mkdir_write setup_nginx print_admininfo setup_mysql sed -i "s|placeholder=\"数据库名\" value=\"shopxo\"|placeholder=\"数据库名\" value=\"$dbname\"|g" "/var/www/$siteurl/application/install/view/index/create.html" sed -i "s|placeholder=\"数据库用户名\" value=\"\"|placeholder=\"数据库用户名\" value=\"$dbusid\"|g" "/var/www/$siteurl/application/install/view/index/create.html" sed -i "s|placeholder=\"数据库密码\" value=\"\"|placeholder=\"数据库密码\" value=\"$dbpswd\"|g" "/var/www/$siteurl/application/install/view/index/create.html" } function install_imgurl { check_hostname mkdir /tmp/$command.$$ # Downloading the ImgURL's latest and greatest distribution. wget https://github.com/helloxz/imgurl/archive/refs/heads/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/imgurl-master "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx } function install_onenav { check_hostname mkdir /tmp/$command.$$ # Downloading the ImgURL's latest and greatest distribution. wget https://github.com/helloxz/onenav/archive/refs/heads/main.zip unzip main.zip -d /tmp/$command.$$ mv /tmp/$command.$$/onenav-main "/var/www/$siteurl" rm -rf main.zip mkdir_write setup_nginx print_admininfo setup_mysql cp "/var/www/$siteurl/config.simple.php" "/var/www/$siteurl/data/config.php" sed -i "s|database_name_here|$dbname|; s|username_here|$dbusid|; s|password_here|$dbpswd|" "/var/www/$siteurl/wp-config.php" } ############################################################ # Mail Platform ############################################################ function install_rainloop { check_hostname mkdir /tmp/$command.$$ # Downloading the Rainloop' latest and greatest distribution. wget http://repository.rainloop.net/v2/webmail/rainloop-latest.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/imgurl-master "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx print_admininfo setup_mysql cat > "/var/www/$siteurl/.htaccess" <<END php_value upload_max_filesize 8m php_value post_max_size 25m END } ############################################################ # Directory List Platform ############################################################ function install_dlister { check_hostname mkdir /tmp/$command.$$ # Downloading the DirectoryLister' latest and greatest distribution. wget -O - https://github.com/DirectoryLister/DirectoryLister/releases/download/3.7.9/DirectoryLister-3.7.9.tar.gz | tar zxf - -C /tmp/$command.$$ mv /tmp/$command.$$ "/var/www/$siteurl" # rm -rf DirectoryLister-3.7.9.tar.gz mkdir_write setup_nginx mv "/var/www/$siteurl/.env.example" "/var/www/$siteurl/.env" } function install_EDL { check_hostname mkdir /tmp/$command.$$ # Downloading the directorylister' latest and greatest distribution. wget https://github.com/XnSger/EvoDire/archive/refs/heads/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/EvoDire-master "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx } function install_h5ai { check_hostname mkdir /tmp/$command.$$ apt-get update apt-get -q -y install ffmpeg apt-get -q -y install imagemagick apt-get -q -y install software-properties-common add-apt-repository ppa:kirillshkrogalev/ffmpeg-next # Downloading the h5ai's latest and greatest distribution. wget https://release.larsjung.de/h5ai/h5ai-0.30.0.zip unzip h5ai-0.30.0.zip -d /tmp/$command.$$ mv /tmp/$command.$$ "/var/www/$siteurl" rm -rf h5ai-0.30.0.zip mkdir_write setup_nginx sed -i "s|default.php;|default.php \"/_h5ai/public/index.php\";|g" "/etc/nginx/sites-available/$siteurl" } function install_TFM { check_hostname mkdir /tmp/$command.$$ # Downloading the TinyFileManager's latest and greatest distribution. wget https://github.com/prasathmani/tinyfilemanager/archive/refs/heads/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/tinyfilemanager-master "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx mv "/var/www/$siteurl/config-sample.php" "/var/www/$siteurl/config.php" mv "/var/www/$siteurl/tinyfilemanager.php" "/var/www/$siteurl/index.php" print_warn 'Login Details : admin:admin@123 for Admin| user:12345 for User' } function install_zdir { check_hostname mkdir /tmp/$command.$$ # Downloading the zdir's latest and greatest distribution. wget https://github.com/helloxz/zdir/archive/refs/heads/master.zip unzip master.zip -d /tmp/$command.$$ mv /tmp/$command.$$/zdir-master "/var/www/$siteurl" rm -rf master.zip mkdir_write setup_nginx mv "/var/www/$siteurl/config.simple.php" "/var/www/$siteurl/config.php" } ############################################################ # Start of DNMP Install Script ############################################################ export PATH=/bin:/usr/bin:/sbin:/usr/sbin function dnmp_install { check_sanity check_phpversion command=$1 siteurl=$2 phpfmppath="$(ls $php_path$php_ver-fpm.sock | head -n 1)" if ! type wget >/dev/null 2>&1; then apt-get -q -y install wget; fi case "$1" in remove) remove_unneeded ;; undnmp) remove_dnmp ;; system) install_system ;; dnmp) install_system check_phpversion install_dnmp ;; stable) sources_stable install_system check_phpversion install_dnmp ;; testing) sources_testing install_system check_phpversion install_dnmp ;; sury) sources_sury install_system mkdir_www install_dnmp ;; mysql) install_mysql ;; nginx) install_nginx ;; php) install_php ;; phpmyadmin) install_phpmyadmin $2 ;; letsencrypt) install_letsencrypt $2 ;; filesize) install_filesize $2 ;; vhost) install_vhost $2 ;; dhost) install_dhost $2 ;; website) install_website $2 ;; wordpress) install_wordpress $2 ;; typecho) install_typecho $2 ;; discuzx) install_discuzx $2 ;; carbon) install_carbon $2 ;; sf) install_simpleforum $2 ;; flarum) install_flarum $2 ;; phpbb) install_phpbb $2 ;; dlister) install_dlister $2 ;; edl) install_EDL $2 ;; h5ai) install_h5ai $2 ;; tfm) install_TFM $2 ;; zdir) install_zdir $2 ;; shopxo) install_shopxo $2 ;; drupal) install_drupal $2 ;; joomla) install_joomla $2 ;; imgurl) install_imgurl $2 ;; onenav) install_onenav $2 ;; rainloop) install_rainloop $2 ;; *) echo -n -e '\e[1;31m' echo -n 'Usage:' `basename $0` '[option]' echo -e '\e[0m' echo -n -e '\e[1;31m' echo -n 'Available option:' echo -e '\e[0m' echo '#######################' print_info 'DNMP Environments :' print_warn 'undnmp system mysql nginx php dnmp stable testing sury' print_info 'Website Configuration :' print_warn 'phpmyadmin letsencrypt vhost dhost' print_info 'Blogging & CMS Platform :' print_warn 'wordpress drupal joomla' print_info 'Forum Platform :' print_warn 'discuzx phpbb carbon sf flarum' print_info 'Directory List Platform :' print_warn 'dlister edl h5ai tfm zdir' print_info 'Mall Client :' print_warn 'shopxo' print_info 'Picture Bed :' print_warn 'imgurl onenav rainloop' esac } dnmp_install $1 $2 $3| tee -a /root/install.log