使用 BASH 自动安装 LAMP 和 WordPress 以下是一个完整的 LAMP 和 WordPress 安装示例,适用于任何基于 Debian 的机器。 先决条件 一台基于 Debian 的机器(如 Ubuntu、Debian、Linux Mint 等) 功能规划 让我们先回顾一下脚本的主要功能: LAMP 安装 更新包管理器 安装防火墙 (ufw) 允许 SSH、HTTP 和 HTTPS 流量 安装 Apache2 安装并配置 MariaDB 安装 PHP 及所需插件 启用所有必需的 Apache2 模块 Apache 虚拟主机设置 在 中创建目录 配置目录权限 在 下创建 文件,并追加所需的虚拟主机内容 启用站点 重启 Apache2 SSL 配置 生成 OpenSSL 证书
以下是一个完整的 LAMP 和 WordPress 安装示例,适用于任何基于 Debian 的机器。
让我们先回顾一下脚本的主要功能:
LAMP 安装
Apache 虚拟主机设置
/var/www 中创建目录/etc/apache2/sites-available 下创建 $domain 文件,并追加所需的虚拟主机内容SSL 配置
ssl-params.conf 文件中数据库配置
WordPress 配置
wp-config.php 文件中现在,让我们开始编写脚本。
首先,我们设置变量,并提示用户输入域名:
echo 'Please enter your domain of preference without www:' read DOMAIN echo "Please enter your Database username:" read DBUSERNAME echo "Please enter your Database password:" read DBPASSWORD echo "Please enter your Database name:" read DBNAME ip=`hostname -I | cut -f1 -d' '`
现在我们可以开始编写函数了。首先创建 lamp_install() 函数。在该函数中,我们将更新系统,安装 ufw,允许 SSH、HTTP 和 HTTPS 流量,安装 Apache2,安装 MariaDB 和 PHP。我们还将启用所有必需的 Apache2 模块。
lamp_install () { apt update -y apt install ufw ufw enable ufw allow OpenSSH ufw allow in "WWW Full" apt install apache2 -y apt install mariadb-server mysql_secure_installation -y apt install php libapache2-mod-php php-mysql -y sed -i "2d" /etc/apache2/mods-enabled/dir.conf sed -i "2i\\\tDirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm" /etc/apache2/mods-enabled/dir.conf systemctl reload apache2 }
接下来,我们创建 apache_virtualhost_setup() 函数。在该函数中,我们将在 /var/www 中创建目录,配置目录权限,创建 $domain 文件并在 /etc/apache2/sites-available 下追加所需的虚拟主机内容,启用站点并重启 Apache2。
apache_virtual_host_setup () { mkdir /var/www/$DOMAIN chown -R $USER:$USER /var/www/$DOMAIN echo "<VirtualHost *:80>" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tServerName $DOMAIN" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tServerAlias www.$DOMAIN" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tServerAdmin webmaster@localhost" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tDocumentRoot /var/www/$DOMAIN" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e '\tErrorLog ${APACHE_LOG_DIR}/error.log' >> /etc/apache2/sites-available/$DOMAIN.conf echo -e '\tCustomLog ${APACHE_LOG_DIR}/access.log combined' >> /etc/apache2/sites-available/$DOMAIN.conf echo "</VirtualHost>" >> /etc/apache2/sites-available/$DOMAIN.conf a2ensite $DOMAIN a2dissite 000-default systemctl reload apache2 }
接下来,我们创建 ssl_config() 函数。在该函数中,我们将生成 OpenSSL 证书,将 SSL 证书追加到 ssl-params.conf 文件中,将 SSL 配置追加到虚拟主机文件中,启用 SSL 并重新加载 Apache2。
ssl_config () { openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt echo "SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLHonorCipherOrder On" >> /etc/apache2/conf-available/ssl-params.conf echo "Header always set X-Frame-Options DENY" >> /etc/apache2/conf-available/ssl-params.conf echo "Header always set X-Content-Type-Options nosniff" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLCompression off" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLUseStapling on" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLStaplingCache \"shmcb:logs/stapling-cache(150000)\"" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLSessionTickets Off" >> /etc/apache2/conf-available/ssl-params.conf cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak sed -i "s/var\/www\/html/var\/www\/$DOMAIN/1" /etc/apache2/sites-available/default-ssl.conf sed -i "s/etc\/ssl\/certs\/ssl-cert-snakeoil.pem/etc\/ssl\/certs\/apache-selfsigned.crt/1" /etc/apache2/sites-available/default-ssl.conf sed -i "s/etc\/ssl\/private\/ssl-cert-snakeoil.key/etc\/ssl\/private\/apache-selfsigned.key/1" /etc/apache2/sites-available/default-ssl.conf sed -i "4i\\\t\tServerName $ip" /etc/apache2/sites-available/default-ssl.conf sed -i "22i\\\tRedirect permanent \"/\" \"https://$ip/\"" /etc/apache2/sites-available/000-default.conf a2enmod ssl a2enmod headers a2ensite default-ssl a2enconf ssl-params systemctl reload apache2 }
接下来,我们创建 db_setup() 函数。在该函数中,我们将创建数据库,创建用户,并为用户授予所有权限。
db_config () { mysql -e "CREATE DATABASE $DBNAME;" mysql -e "GRANT ALL ON $DBNAME.* TO '$DBUSERNAME'@'localhost' IDENTIFIED BY '$DBPASSWORD' WITH GRANT OPTION;" mysql -e "FLUSH PRIVILEGES;" }
接下来,我们创建 wordpress_config() 函数。在该函数中,我们将创建 `` function. Inside of it, we are going to download the latest version of WordPress, extract it to the /var/www/$DOMAIN 目录,创建 wp-config.php 文件,并向其中追加所需内容。
wordpress_config () { db_config apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip -y systemctl restart apache2 sed -i "8i\\\t<Directory /var/www/$DOMAIN/>" /etc/apache2/sites-available/$DOMAIN.conf sed -i "9i\\\t\tAllowOverride All" /etc/apache2/sites-available/$DOMAIN.conf sed -i "10i\\\t</Directory>" /etc/apache2/sites-available/$DOMAIN.conf a2enmod rewrite systemctl restart apache2 apt install curl cd /tmp curl -O https://wordpress.org/latest.tar.gz tar xzvf latest.tar.gz touch /tmp/wordpress/.htaccess cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php mkdir /tmp/wordpress/wp-content/upgrade cp -a /tmp/wordpress/. /var/www/$DOMAIN chown -R www-data:www-data /var/www/$DOMAIN find /var/www/$DOMAIN/ -type d -exec chmod 750 {} \; find /var/www/$DOMAIN/ -type f -exec chmod 640 {} \; curl -s https://api.wordpress.org/secret-key/1.1/salt/ >> /var/www/$DOMAIN/wp-config.php echo "define('FS_METHOD', 'direct');" >> /var/www/$DOMAIN/wp-config.php sed -i "51,58d" /var/www/$DOMAIN/wp-config.php sed -i "s/database_name_here/$DBNAME/1" /var/www/$DOMAIN/wp-config.php sed -i "s/username_here/$DBUSERNAME/1" /var/www/$DOMAIN/wp-config.php sed -i "s/password_here/$DBPASSWORD/1" /var/www/$DOMAIN/wp-config.php }
最后,我们创建 execute() 函数。在该函数中,我们将调用上述所有已创建的函数。
execute () { lamp_install apache_virtual_host_setup ssl_config wordpress_config }
至此,脚本已经准备就绪,您可以运行它。如果您需要完整的脚本,可以在下一节中找到。
#!/bin/bash echo 'Please enter your domain of preference without www:' read DOMAIN echo "Please enter your Database username:" read DBUSERNAME echo "Please enter your Database password:" read DBPASSWORD echo "Please enter your Database name:" read DBNAME ip=`hostname -I | cut -f1 -d' '` lamp_install () { apt update -y apt install ufw ufw enable ufw allow OpenSSH ufw allow in "WWW Full" apt install apache2 -y apt install mariadb-server mysql_secure_installation -y apt install php libapache2-mod-php php-mysql -y sed -i "2d" /etc/apache2/mods-enabled/dir.conf sed -i "2i\\\tDirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm" /etc/apache2/mods-enabled/dir.conf systemctl reload apache2 } apache_virtual_host_setup () { mkdir /var/www/$DOMAIN chown -R $USER:$USER /var/www/$DOMAIN echo "<VirtualHost *:80>" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tServerName $DOMAIN" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tServerAlias www.$DOMAIN" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tServerAdmin webmaster@localhost" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e "\tDocumentRoot /var/www/$DOMAIN" >> /etc/apache2/sites-available/$DOMAIN.conf echo -e '\tErrorLog ${APACHE_LOG_DIR}/error.log' >> /etc/apache2/sites-available/$DOMAIN.conf echo -e '\tCustomLog ${APACHE_LOG_DIR}/access.log combined' >> /etc/apache2/sites-available/$DOMAIN.conf echo "</VirtualHost>" >> /etc/apache2/sites-available/$DOMAIN.conf a2ensite $DOMAIN a2dissite 000-default systemctl reload apache2 } ssl_config () { openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt echo "SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLHonorCipherOrder On" >> /etc/apache2/conf-available/ssl-params.conf echo "Header always set X-Frame-Options DENY" >> /etc/apache2/conf-available/ssl-params.conf echo "Header always set X-Content-Type-Options nosniff" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLCompression off" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLUseStapling on" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLStaplingCache \"shmcb:logs/stapling-cache(150000)\"" >> /etc/apache2/conf-available/ssl-params.conf echo "SSLSessionTickets Off" >> /etc/apache2/conf-available/ssl-params.conf cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak sed -i "s/var\/www\/html/var\/www\/$DOMAIN/1" /etc/apache2/sites-available/default-ssl.conf sed -i "s/etc\/ssl\/certs\/ssl-cert-snakeoil.pem/etc\/ssl\/certs\/apache-selfsigned.crt/1" /etc/apache2/sites-available/default-ssl.conf sed -i "s/etc\/ssl\/private\/ssl-cert-snakeoil.key/etc\/ssl\/private\/apache-selfsigned.key/1" /etc/apache2/sites-available/default-ssl.conf sed -i "4i\\\t\tServerName $ip" /etc/apache2/sites-available/default-ssl.conf sed -i "22i\\\tRedirect permanent \"/\" \"https://$ip/\"" /etc/apache2/sites-available/000-default.conf a2enmod ssl a2enmod headers a2ensite default-ssl a2enconf ssl-params systemctl reload apache2 } db_config () { mysql -e "CREATE DATABASE $DBNAME;" mysql -e "GRANT ALL ON $DBNAME.* TO '$DBUSERNAME'@'localhost' IDENTIFIED BY '$DBPASSWORD' WITH GRANT OPTION;" mysql -e "FLUSH PRIVILEGES;" } wordpress_config () { db_config apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip -y systemctl restart apache2 sed -i "8i\\\t<Directory /var/www/$DOMAIN/>" /etc/apache2/sites-available/$DOMAIN.conf sed -i "9i\\\t\tAllowOverride All" /etc/apache2/sites-available/$DOMAIN.conf sed -i "10i\\\t</Directory>" /etc/apache2/sites-available/$DOMAIN.conf a2enmod rewrite systemctl restart apache2 apt install curl cd /tmp curl -O https://wordpress.org/latest.tar.gz tar xzvf latest.tar.gz touch /tmp/wordpress/.htaccess cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php mkdir /tmp/wordpress/wp-content/upgrade cp -a /tmp/wordpress/. /var/www/$DOMAIN chown -R www-data:www-data /var/www/$DOMAIN find /var/www/$DOMAIN/ -type d -exec chmod 750 {} \; find /var/www/$DOMAIN/ -type f -exec chmod 640 {} \; curl -s https://api.wordpress.org/secret-key/1.1/salt/ >> /var/www/$DOMAIN/wp-config.php echo "define('FS_METHOD', 'direct');" >> /var/www/$DOMAIN/wp-config.php sed -i "51,58d" /var/www/$DOMAIN/wp-config.php sed -i "s/database_name_here/$DBNAME/1" /var/www/$DOMAIN/wp-config.php sed -i "s/username_here/$DBUSERNAME/1" /var/www/$DOMAIN/wp-config.php sed -i "s/password_here/$DBPASSWORD/1" /var/www/$DOMAIN/wp-config.php } execute () { lamp_install apache_virtual_host_setup ssl_config wordpress_config }
该脚本执行以下操作:
希望您喜欢这个示例。
免责声明:
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。以原始语言版本为准,其应被视为权威来源。对于关键信息,建议采用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。