LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP介绍

LAMP是由Linux, Apache, MySQL, PHP组成的,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件,而MySQL是比较小型的数据库软件。三个角色可以安装在一台机器上,也可以分开(但httpd和php要在一起的)
在这里插入图片描述

为什么需要LAMP?

手动逐个编译安装各个组件,需要输入各种命令,且有可能会中途出错。
对于想要成功搭建 LAMP 建站环境来说,可以节约大量时间和精力。

LAMP 有什么优点?

LAMP 是最经典的建站环境之一,风靡世界十几年。
而本脚本只需几个简单交互,选择需要安装的包,即可一路安装,无人值守。

准备工作

yum install -y bzip2 tar net-tools wget expect

安装MySQL:

MySQL介绍

MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)

MySQL官网https://www.mysql.com 最新版本5.7GA/8.0DMR

MySQL5.6变化比较大,5.7性能上有很大提升

MySQL安装过程

# 安装必要的软件包
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
# 添加mysql用户,设置不登录
useradd -s /sbin/nologin mysql
# 解压MySQL源码
tar xf /opt/mysql-5.7.17.tar.gz -C /opt
# 解压Boost源码
tar xf /opt/boost_1_59_0.tar.gz -C /usr/local/
# 重命名Boost源码目录
mv -f /usr/local/boost_1_59_0 /usr/local/boost
# 进入MySQL源码目录
cd /opt/mysql-5.7.17 
# 配置MySQL编译选项
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1
# 使用多核编译并安装
make -j $(nproc) && make install
# 修改MySQL安装目录及配置文件的权限
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
# 将自定义的my.cnf配置文件移动到/etc并修改权限
cp -f /opt/my.cnf /etc/my.cnf
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
# 在环境变量中添加MySQL/bin路径
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
# 初始化MySQL数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
# 复制MySQL的systemd服务文件
cp -f /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
# 重新加载systemd配置
systemctl daemon-reload
# 启动MySQL服务并设置开机自启动
systemctl start mysqld.service
systemctl enable mysqld
# 检查MySQL服务是否正常运行在3306端口
netstat -anpt | grep 3306

在这里插入图片描述

my.cnf

[client]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

mysql设置用户密码脚本

#!/usr/bin/expect
set timeout 30
spawn mysqladmin -u root -p password \"123456\"
expect {"*password*" {send "\r"}
}
expect eof

在这里插入图片描述

安装Httpd(Apache)

脚本源代码:

#!/bin/bash# 安装软件包
function install_packages {yum install -y $1
}# 提取tarball文件并将其解压到/opt目录下
function extract_tarball {tar xf $1 -C /opt
}# 配置并编译安装软件
function configure_and_make {cd $1./configure $2make -j $(nproc) && make install
}# 配置Apache,将IP和端口替换为更安全的值
function configure_httpd {LOCAL_IP=$(ip addr show ens33 | grep "inet " | awk '{print $2}' | cut -d/ -f1) sed -i "s/Listen 80/Listen $LOCAL_IP:80/g" /usr/local/httpd/conf/httpd.confsed -i "s/#ServerName www.example.com:80/ServerName $LOCAL_IP:80/" /usr/local/httpd/conf/httpd.conf
}# 启动服务并设置开机自启动
function start_service {systemctl daemon-reloadsystemctl start $1.servicesystemctl enable $1
}# 创建符号链接
function create_symbolic_links {local source_path="$1"local target_path="$2"# 检查是否以root身份运行if [ "$(id -u)" -ne 0 ]; thenecho "必须以root身份运行此脚本。" >&2return 1fi# 遍历源路径下的文件,创建符号链接for file in "$source_path"/*dobase=$(basename "$file")link_target="$target_path/$base"# 检查目标是否已存在if [ -L "$link_target" ]; thenecho "警告:$link_target 已存在,将被覆盖。" >&2elseif [ -e "$file" ]; thenecho "创建符号链接: $file => $link_target"ln -s -T "$file" "$link_target" || { echo "创建链接失败,请检查权限和路径。" >&2; return 1; }elseecho "错误:$file 不存在。" >&2return 1fifidone
}# 主脚本逻辑开始
extract_tarball "/opt/apr-1.6.2.tar.gz"
extract_tarball "/opt/apr-util-1.6.0.tar.gz"
extract_tarball "/opt/httpd-2.4.29.tar.bz2"
mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util
# 安装编译依赖包
install_packages \"gcc gcc-c++ make pcre-devel expat-devel perl"
# 配置并编译安装Apache
configure_and_make "/opt/httpd-2.4.29" \"--prefix=/usr/local/httpd \--enable-so \--enable-rewrite \--enable-charset-lite \--enable-cgi"configure_httpd
# 创建必要的符号链接
create_symbolic_links "/usr/local/httpd/conf" "/etc"
create_symbolic_links "/usr/local/httpd/bin" "/usr/local/bin"
# 创建Apache的systemd服务文件
echo '[Unit]
Description=The Apache HTTP
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
' > /usr/lib/systemd/system/httpd.service
# 启动Apache服务并设置开机自启动
start_service httpd

在这里插入图片描述

安装PHP

#!/bin/bash
# 主脚本,用于环境配置和软件安装# 安装软件包
#
# 参数:
# $1: 要安装的软件包名称
function install_packages {yum install -y $1
}# 提取tarball文件
#
# 参数:
# $1: 要提取的tarball文件路径
function extract_tarball {tar xf $1 -C /opt
}# 配置并编译软件
#
# 参数:
# $1: 软件源代码目录
# $2: 配置参数
function configure_and_make {cd $1./configure $2make -j $(nproc) && make install
}
function create_symbolic_links {local source_path="$1"local target_path="$2"# 检查是否以root身份运行if [ "$(id -u)" -ne 0 ]; thenecho "必须以root身份运行此脚本。" >&2return 1fi# 遍历源路径下的文件for file in "$source_path"/*dobase=$(basename "$file")link_target="$target_path/$base"# 检查目标是否已存在if [ -L "$link_target" ]; thenecho "警告:$link_target 已存在,将被覆盖。" >&2elseif [ -e "$file" ]; thenecho "创建符号链接: $file => $link_target"ln -s -T "$file" "$link_target" || { echo "创建链接失败,请检查权限和路径。" >&2; return 1; }elseecho "错误:$file 不存在。" >&2return 1fifidone
# 配置PHP环境
function configure_php {# 定义变量PHP_INI_SRC=/opt/php-7.1.24/php.ini-developmentPHP_INI_DEST=/usr/local/php7/php.iniHTTPD_CONF=/etc/httpd.confHTTPD_HTDICT=/usr/local/httpd/htdocsMYSQL_INIT_SH=/opt/mysql_init2.expUNZIP_FILE=/opt/Discuz_X3.4_SC_UTF8.zipDIS_DIR=/opt/dis/dir_SC_UTF8/uploadBBS_DIR=/usr/local/httpd/htdocs/bbs# 复制并配置php.inicp -f "$PHP_INI_SRC" "$PHP_INI_DEST"sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/g' /usr/local/php7/php.inised -i "s/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/g" /usr/local/php7/php.ini# 配置php命令的符号链接# 修改httpd.conf以支持PHPsed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' "$HTTPD_CONF"sed -i -e '396a\AddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps' "$HTTPD_CONF"# 重置index.php并重启httpd服务rm -f "$HTTPD_HTDICT/index.html"touch "$HTTPD_HTDICT/index.php"echo '<?php phpinfo();?>' >"$HTTPD_HTDICT/index.php"chmod 644 "$HTTPD_HTDICT/index.php"systemctl restart httpd.service# 安装unzip,解压Discuz!并配置权限sudo yum install unzip -yunzip -f "$UNZIP_FILE" -d "$DIS_DIR"cp -r /opt/dis/dir_SC_UTF8/upload/ /usr/local/httpd/htdocs/bbschmod 755 "$MYSQL_INIT_SH"chmod -R 755 "$DIS_DIR"chown -R daemon "$BBS_DIR/config"chown -R daemon "$BBS_DIR/data"chown -R daemon "$BBS_DIR/uc_client"chown -R daemon "$BBS_DIR/uc_server/data"# 复制并配置php.inicp -f "$PHP_INI_SRC" "$PHP_INI_DEST"sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/g' /usr/local/php7/php.inised -i "s/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/g" /usr/local/php7/php.ini# 配置php命令的符号链接create_symbolic_links "/usr/local/php7/bin/*" "/usr/local/bin/"# 修改httpd.conf以支持PHPsed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' "$HTTPD_CONF"sed -i -e '396a\AddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps' "$HTTPD_CONF"# 重置index.php并重启httpd服务rm -f "$HTTPD_HTDICT/index.html"touch "$HTTPD_HTDICT/index.php"echo '<?php phpinfo();?>' > "$HTTPD_HTDICT/index.php"chmod 644 "$HTTPD_HTDICT/index.php"systemctl restart httpd.service# 安装unzip,解压Discuz!并配置权限sudo yum install unzip -yunzip -f "$UNZIP_FILE" -d "$DIS_DIR"cp -r /opt/dis/dir_SC_UTF8/upload/ /usr/local/httpd/htdocs/bbschmod 755 "$MYSQL_INIT_SH"chmod -R 755 "$DIS_DIR"chown -R daemon "$BBS_DIR/config"chown -R daemon "$BBS_DIR/data"chown -R daemon "$BBS_DIR/uc_client"chown -R daemon "$BBS_DIR/uc_server/data"# 确认设置完成echo "Setup completed."
}# 执行PHP安装流程
install_packages \"gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel"
extract_tarball "/opt/php-7.1.24.tar.gz"
configure_and_make "/opt/php-7.1.24" \"--prefix=/usr/local/php7 \--with-apxs2=/usr/local/httpd/bin/apxs \--with-mysql-sock=/usr/local/mysql/mysql.sock \--with-config-file-path=/usr/local/php7 \--with-mysqli \--with-zlib \--with-curl \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-openssl \--enable-mbstring \--enable-xml \--enable-session \--enable-ftp \--enable-pdo \--enable-tokenizer"
configure_php
systemctl restart httpd

安装论坛

创建数据库脚本

#!/usr/bin/expect
set timeout 30
set password "123456"
spawn mysql -uroot -p
expect {"*password*" {send "$password\r"}
}
expect ">*"
send "CREATE DATABASE bbs;\r"
expect ">*"
send "GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';\r"
expect ">*"
send "flush privileges;\r"
expect ">*"
send "quit\r"
expect eof

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纸箱码垛机:从传统到智能,科技如何助力产业升级

随着科技的飞速发展&#xff0c;传统工业领域正经历着一场重要的变革。作为物流行业重要一环的纸箱码垛机&#xff0c;其从传统到智能的转型升级&#xff0c;不仅提高了生产效率&#xff0c;还大幅降低了人工成本&#xff0c;为产业升级提供了强大助力。星派将探讨纸箱码垛机的…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中&#xff0c;事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦&#xff0c;使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具&#xff0c;为开发者提供了…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代&#xff0c;数据已经渗透到了我们生活的方方面面&#xff0c;成为了决策、创新和竞争优势的关键。因此&#xff0c;构建一套高效的数据分析体系&#xff0c;对于企业和个人而言&#xff0c;都是至关重要的。那么&#xff0c;如何在众多的数据海洋中脱颖而…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络&#xff0c;如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息&#xff0c;一般是通过…

5分钟——测试搭建的springboot接口(二)

5分钟——测试搭建的springboot接口&#xff08;二&#xff09; 1. 查看数据库字段2. 测试getAll接口3. 测试add接口4. 测试update接口5. 测试deleteById接口 1. 查看数据库字段 2. 测试getAll接口 3. 测试add接口 4. 测试update接口 5. 测试deleteById接口

Docker 开启远程安全访问

说明 如果你的服务器是公网IP&#xff0c;并且开放了docker的远程访问&#xff0c;如果没有进行保护是非常危险的&#xff0c;任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的远程访问权限&#xff0c;在没有开启保护的状态下&#xff0c;几…

用 LMDeploy 高效部署 Llama-3-8B,1.8倍vLLM推理效率

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

Springboot 整合 Quartz框架做定时任务

在Spring Boot中整合Quartz&#xff0c;可以实现定时任务调度的功能 1、首先&#xff0c;在pom.xml文件中添加Quartz和Spring Boot Starter Quartz的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…

synchronized的底层原理

目录 介绍 实现原理 对象头 Monitor&#xff08;监视器&#xff09; 锁升级 偏向锁 轻量级锁 重量级锁 锁的优缺点 介绍 synchronized 是 Java 中的关键字&#xff0c;它用于锁定代码块或方法&#xff0c;以确保同一时刻只有一个线程可以进入被锁定的部分。这在多线程…

css盒子设置圆角边框的方法

前言 欢迎来到我的博客 个人主页&#xff1a;北岭敲键盘的荒漠猫-CSDN博客 本文为我整理的设置圆角边框的方法 需求描述 我们在设置盒子边框时&#xff0c;他总是方方正正的。 我们想让这个直直的边框委婉一点该怎么办呢。这个就提到了我们这篇文章讲的东西&#xff1a; bord…

聚观早报 | OpenAI在印度开始招聘;特斯拉将发布一季度财报

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月23日消息 OpenAI在印度开始招聘 特斯拉将发布一季度财报 理想汽车全线产品降价 优酷升级悬疑剧场为白夜剧场 …

ffmpeg支持MP3编码的方法

目录 现象 解决办法 如果有编译包没有链接上的情况 现象 解决办法 在ffmpeg安装包目录下 &#xff0c;通过./configure --list-encoders 和 ./configure --list-decoders 命令可以看到&#xff0c;ffmpeg只支持mp3解码&#xff0c;但是不支持mp3编码。 上网查寻后发现&…

C++ :设计模式实现

文章目录 原则单一职责原则开闭原则依赖倒置原则接口隔离原则里氏替换原则 设计模式单例模式观察者模式策略模式代理模式 原则 单一职责原则 定义&#xff1a; 即一个类只负责一项职责 问题&#xff1a; 类 T 负责两个不同的职责&#xff1a;职责 P1&#xff0c;职责 P2。当…

Tomcat源码解析——一次请求的处理流程

在上一篇文章中&#xff0c;我们知道Tomcat在启动后&#xff0c;会在Connector中开启一个Acceptor(接收器)绑定线程然后用于监听socket的连接&#xff0c;那么当我们发出请求时&#xff0c;第一步也就是建立TCP连接&#xff0c;则会从Acceptor的run方法处进入。 Acceptor&…

使用CSS+HTML完成导航栏

HTML <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>导航栏示例</title> &l…

07 内核开发-避免命名冲突经验技巧分享

07 内核开发-避免命名冲突经验技巧分享 目录 07 内核开发-避免命名冲突经验技巧分享 1.如何在内核开发过程中&#xff0c;避免命名冲突 2. 背景 3.避免方法 4.了解下 文件/proc/kallsyms 5.总结 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的…

java-异常

一、异常的概念及分类 Exception&#xff1a;异常&#xff0c;代表程序可能出现的问题 Exception分为两类&#xff1a; 1、运行时异常&#xff1a;RuntimeException以及其子类&#xff0c;编译阶段不会出现异常提醒&#xff0c;在运行阶段会出现异常提醒 2、编译时异常&…

基于SpringBoot+Vue网上商城系统的设计与实现

系统介绍 随着社会的不断进步与发展&#xff0c;人们经济水平也不断的提高&#xff0c;于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来&#xff0c;利用计算机网络来处理各行业事务这一概念更深入人心&#xff0c;由于用户工作繁忙的原因&#xff0c;去商…

抽象工厂模式设计实验

【实验内容】 楚锋软件公司欲开发一套界面皮肤库&#xff0c;可以对 Java 桌面软件进行界面美化。为了保护版权&#xff0c;该皮肤库源代码不打算公开&#xff0c;而只向用户提供已打包为 jar 文件的 class 字节码文件。用户在使用时可以通过菜单来选择皮肤&#xff0c;不同的…