LAMP架构是目前广泛应用的企业网站开发与应用模式之一,能够提供稳定、灵活的动态Web站点服务及应用开发环境。
LAMP是Linux、Apache、MySQL、PHP/Perl/Python的首字母缩写,代表一整套协同工作的软件系统:
构建LAMP环境时,通常遵循以下顺序:
Apache和MySQL的安装顺序并没有严格的限制,PHP作为中间语言需要与前后端紧密结合,通常在所有其他组件安装完成后进行配置。
首先关闭防火墙,确保安装 Apache 的过程中没有外部干扰:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
准备好 Apache 和其依赖的组件包并将其传到 /opt
目录下:
httpd-2.4.29.tar.gz
apr-1.6.2.tar.gz
apr-util-1.6.0.tar.gz
APR组件包:用于支持 Apache 上层应用跨平台,提供底层接口库,能够有效提高并发连接数、降低进程开销,并减少访问堵塞。
为了编译 Apache 服务,需要安装以下依赖包:
yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
进入 /opt
目录,解压安装包:
cd /opt/
tar zxvf apr-1.6.2.tar.gz
tar zxvf apr-util-1.6.0.tar.gz
tar jxvf httpd-2.4.29.tar.bz2
将 apr
和 apr-util
移动到 Apache 源码的 srclib
目录下:
mv apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util
配置 Apache,设置安装路径并启用相关模块:
cd /opt/httpd-2.4.29/
./configure --prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
-prefix
:指定 httpd 服务程序的安装路径。-enable-so
:启用动态加载模块支持,使 httpd 具备进一步扩展功能的能力。-enable-rewrite
:启用 URL 网页地址重写功能,用于王网站优化、防盗链及目录迁移维护。-enable-charset-lite
:启用字符集支持,以便支持使用各种字符集编码的页面。-enable-cgi
:启用 CGI (通用网关接口)脚本支持,便于网站的外部扩展应用访问能力。使用 make
命令编译程序,使用 j
参数可以并行编译,提升效率:
make # make -j 2 开两核同时编译
make install
为方便系统识别并简化操作,将相关文件链接到常用路径,把httpd服务的可执行程序文件放入路径环境变量的目录中便于系统识别:
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
可以选择两种方法将 Apache 注册为系统服务:
方法一:
复制可执行文件并创建服务:
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
# 用于service服务管理
chmod +x /etc/init.d/httpd
vi /etc/init.d/httpd
在脚本的开头添加以下三行内容:
#!/bin/bash
# chkconfig: 35 85 21
# description: Apache is a World Wide Web server
将 httpd 服务加入 chkconfig
管理(service管理器):
chkconfig --add httpd
systemctl start httpd.service
方法二:
创建 systemd 服务配置文件:
vim /lib/systemd/system/httpd.service
内容如下:
[Unit] #服务的说明
Description=The Apache HTTP Server
#描述服务
After=network.target
#依赖,当依赖的服务启动之后再启动自定义的服务
[Service] #服务运行参数的设置
Type=forking
#后台运行方式
PIDFile=/usr/local/httpd/logs/httpd.pid
#PID文件位置,必须和安装目录一致
ExecStart=/usr/local/bin/apachectl $OPTIONS
#服务的运行命令
ExecReload=/bin/kill -HUP $MAINPID
#服务安装的相关设置
[Install] #服务安装的相关设置
WantedBy=multi-user.target #设置为多用户
启动并启用服务:
systemctl start httpd.service
systemctl enable httpd.service
编辑 Apache 的配置文件 /etc/httpd.conf
:
vim /etc/httpd.conf
修改监听 IP 和端口,默认为监听所有(52行):
Listen 192.168.80.10:80
注意:此行下方还有一段 Listen
不可配置相同端口!否则会端口冲突。
修改服务器名称,取消注释(197行):
ServerName www.myweb.com:80
设置网站根目录(首页存放路径)(221行):
DocumentRoot "/usr/local/httpd/htdocs"
设置默认首页文件名(255行):
DirectoryIndex index.html
检查配置文件是否正确:
httpd -t #检查语法
#或
apachectl -t
cat /usr/local/httpd/htdocs/index.html
重启 Apache 服务:
systemctl restart httpd.service
检查端口监听状态:
netstat -anpt | grep 80
添加域名解析:
echo "192.168.80.10 www.myweb.com" >> /etc/hosts
通过浏览器访问:
LAMP 架构下的 Apache 已成功安装并配置完成。
将安装 MySQL 所需的文件包传输到 /opt
目录:
mysql-5.7.17.tar.gz
boost_1_59_0.tar.gz
(C++ 运行库)为 MySQLd 服务编译安装所需的依赖包:
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake openssl-devel
解压 MySQL 和 Boost 包:
tar zxvf mysql-5.7.17.tar.gz
tar zxvf boost_1_59_0.tar.gz
将 Boost 包移动到目标路径并重命名:
mv boost_1_59_0 /usr/local/boost
进入 MySQL 源码目录并配置编译选项:
cd /opt/mysql-5.7.17/
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
配置选项说明:
DCMAKE_INSTALL_PREFIX
:指定 MySQL 的安装路径。DMYSQL_UNIX_ADDR
:指定 MySQL 进程监听的套接字文件路径。DSYSCONFDIR
:配置文件存储路径。DSYSTEMD_PID_DIR
:指定 PID 文件存储路径。DDEFAULT_CHARSET
:设置默认字符集为 utf8
。DDEFAULT_COLLATION
:设置默认字符集的校对规则为 utf8_general_ci
。DWITH_EXTRA_CHARSETS=all
:支持所有字符集编码。DWITH_INNOBASE_STORAGE_ENGINE
:启用 InnoDB 存储引擎。DWITH_ARCHIVE_STORAGE_ENGINE
:启用 ARCHIVE 存储引擎。DWITH_BLACKHOLE_STORAGE_ENGINE
:启用 BLACKHOLE 存储引擎。DWITH_PERFSCHEMA_STORAGE_ENGINE
:启用 Performance Schema 存储引擎。DMYSQL_DATADIR
:指定数据库文件存储路径。DWITH_BOOST
:指定 Boost 的路径。DWITH_SYSTEMD
:生成便于 systemctl 管理的文件。其他存储引擎选项:
DWITH_engine_STORAGE_ENGINE=1
。注意:如果 cmake 过程中出现错误,在解决错误后,需要删除源码目录中的 CMakeCache.txt 文件,然后重新运行 cmake,否则错误将持续存在。
执行编译并安装 MySQL:
make && make install
此时,成功编译并安装 MySQLd 服务,后续可继续进行相关的配置、数据库初始化以及服务启动等操作。
创建一个专门用于管理 MySQL 的系统用户:
useradd -M -s /sbin/nologin mysql
M
:不创建用户的主目录。s /sbin/nologin
:禁止用户登录系统。编辑 MySQL 的主配置文件 /etc/my.cnf
,删除原有配置项,可使用 yum remove -y mariadb*
删除默认配置文件,并自行添加以下内容:
[client] # 客户端设置
port = 3306 # 指定 MySQL 连接的端口号
socket = /usr/local/mysql/mysql.sock # 套接字文件位置
[mysql] # MySQL 客户端设置
port = 3306 # 端口号
socket = /usr/local/mysql/mysql.sock # 套接字文件位置
auto-rehash # 启用自动补全功能
[mysqld] # MySQL 服务端设置
user = mysql # 设置管理 MySQL 的用户
basedir = /usr/local/mysql # 指定 MySQL 的安装目录
datadir = /usr/local/mysql/data # 数据库文件的存储路径
port = 3306 # 指定服务的端口号
character-set-server = utf8mb4 # 设置 MySQL 的字符集编码格式为 utf8mb4
pid-file = /usr/local/mysql/mysqld.pid # 指定 PID 文件路径
socket = /usr/local/mysql/mysql.sock # 套接字文件位置
bind-address = 0.0.0.0 # 监听地址,0.0.0.0 允许所有地址连接,如允许多个IP需空格隔开,可改为仅本机
skip-name-resolve # 禁止域名解析,包括主机名,授权时使用 IP 地址
max_connections = 4096 # 设置最大连接数为 4096
default-storage-engine = INNODB # 设置默认的存储引擎为 INNODB
max_allowed_packet = 32M # 设置最大传输数据包大小为 32M。在网络传输中一次消息传输量的最大值。系统默认值为 1MB,最大值是 1GB,必须设置 1024 的倍数。
server-id = 1 # 服务 ID 号
SQL 模式设置:
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
NO_ENGINE_SUBSTITUTION
:禁止在不支持存储引擎的情况下替换为其他存储引擎。如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常。STRICT_TRANS_TABLES
:严格事务表模式。在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制。NO_AUTO_CREATE_USER
:禁止在授权时自动创建用户。禁止GRANT创建密码为空的用户。NO_AUTO_VALUE_ON_ZERO
:禁止将零作为 AUTO_INCREMENT
值。mysql中的自增长列可以从0开始。默认情况下自增长列是从1开始的,如果插入值为0的数据会报错NO_ZERO_IN_DATE
和 NO_ZERO_DATE
:禁止不完整的日期输入。不允许日期和月份为零。mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。ERROR_FOR_DIVISION_BY_ZERO
:除以零时报错。在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MySQL返回NULL。PIPES_AS_CONCAT
:将管道符 || 视为连接符。将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似ANSI_QUOTES
:启用 ANSI 标准引号。启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符常见 sql_mode
配置值说明
GRANT
创建没有密码的用户。NULL
)。||
视为字符串连接符,而非逻辑或运算符,类似于 Oracle 数据库中的字符串拼接。清爽版 MySQL 配置文件 (/etc/my.cnf
) 完整示例
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
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 = utf8mb4
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
bind-address = 192.168.80.30
skip-name-resolve
max_connections = 4096
default-storage-engine = INNODB
max_allowed_packet = 32M
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
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
将 MySQL 安装路径加入系统环境变量:
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /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 #指定数据库文件的存储路径
清爽版:
cd /usr/local/mysql/bin/
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
将 MySQL 添加到系统服务管理中,便于使用 systemctl
管理:
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload # 刷新服务配置
systemctl start mysqld.service # 启动 MySQL 服务
systemctl enable mysqld # 设置开机自启动
netstat -anpt | grep 3306 # 查看 MySQL 是否在监听 3306 端口
为 root
用户设置密码,给root账号设置密码为abc123,原始密码为空:
mysqladmin -u root password "abc123"
登录 MySQL 并为 root
用户授权远程访问权限:
mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
root
用户可以从任何终端远程登录,密码为 abc123
,并对所有数据库和表拥有完全操作权限。show databases;
/opt
目录php-7.1.10.tar.bz2
GD 库用于处理和生成图片。执行以下命令安装相关依赖:
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
进入 PHP 安装包目录,解压并进行配置:
cd /opt
tar xf php-7.1.10.tar.bz2
cd /opt/php-7.1.10/
./configure \
--prefix=/usr/local/php \ # 指定 PHP 安装路径
--with-apxs2=/usr/local/httpd/bin/apxs \ # 指定 Apache httpd 服务提供的 apxs 模块支持程序路径
--with-mysql-sock=/usr/local/mysql/mysql.sock \ # 指定 MySQL 数据库连接文件路径
--with-config-file-path=/usr/local/php/lib \ # 设置 PHP 配置文件 php.ini 的存放路径
--with-mysqli \ # 添加 MySQLi 扩展支持,mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定
--with-zlib \ # 支持 zlib 功能,提供数据压缩
--with-curl \ # 启用 curl 扩展功能,实现HTTP的Get下载和Post请求的方法
--with-gd \ # 激活 GD 库支持
--with-jpeg-dir \ # 激活 JPEG 支持
--with-png-dir \ # 激活 PNG 支持
--with-freetype-dir \ # 激活 FreeType 字体支持
--with-openssl \ # 启用 OpenSSL 支持
--enable-mbstring \ # 启用多字节字符串功能,以便支持中文等代码
--enable-xml \ # 启用 XML 支持,开启扩展性标记语言模块
--enable-session \ # 启用会话支持
--enable-ftp \ # 启用 FTP 支持
--enable-pdo \ # 启用 PDO 数据库支持
--enable-tokenizer \ # 启用 Tokenizer 支持
--enable-zip # 启用 ZIP 压缩支持
清爽版:
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php/lib \
--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 \
--enable-zip
执行以下命令进行编译和安装:
make && make install
将 PHP 可执行文件添加到系统路径,便于系统识别:
ln -s /usr/local/php/bin/* /usr/local/bin/
php -m # 查看 PHP 加载了哪些模块
查看 PHP 使用的配置文件路径:
php --ini
复制开发环境配置文件作为 PHP 的主配置文件:
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
注意: 测试环境使用 php.ini-development
,生产环境使用 php.ini-production
。
修改 PHP 配置文件:
vim /usr/local/php/lib/php.ini
1170 行: 修改 MySQL 默认 socket 路径:
mysqli.default_socket = /usr/local/mysql/mysql.sock
939 行: 取消注释并修改时区为上海:
date.timezone = Asia/Shanghai
打开 Apache 配置文件:
vim /etc/httpd.conf
393 行: 插入以下内容,使 Apache 支持 PHP 文件解析:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
255 行: 修改默认首页文件名设置,添加 index.php
:
DirectoryIndex index.html index.php
确保加载了支持 PHP 7 的模块,检查是否存在以下模块:
LoadModule php7_module modules/libphp7.so
删除默认首页文件并创建 PHP 测试页:
rm -rf /usr/local/httpd/htdocs/index.html
vim /usr/local/httpd/htdocs/index.php
在 index.php
文件中插入以下内容:
phpinfo();
?>
重启 Apache 服务:
systemctl restart httpd.service
在浏览器中访问 PHP
测试页面:
http://192.168.80.10/index.php
登录 MySQL:
mysql -u root -p
创建论坛数据库:
CREATE DATABASE bbs;
授予用户 bbsuser
访问 bbs
数据库的所有权限,并设置密码为 admin123
:
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
刷新权限,使授权生效:
FLUSH PRIVILEGES;
查看已创建的数据库:
SHOW DATABASES;
如需软件包,可私信我,发密码。
压缩包文件:蓝奏云链接
解压 Discuz 论坛压缩包:
unzip /opt/Discuz_X3.4_SC_UTF8.zip -d /opt/dis
进入解压目录:
cd /opt/dis/dir_SC_UTF8/
将 upload/
目录复制到 Apache 的 htdocs
目录下并重命名为 bbs
:
cp -r upload/ /usr/local/httpd/htdocs/bbs
查看 Apache 进程的用户信息:
ps aux
注意: 通常,Apache 运行的用户是 daemon
。
进入论坛目录并修改权限:
cd /usr/local/httpd/htdocs/bbs
更改以下目录的属主为 daemon
:
chown -R daemon ./config
chown -R daemon ./data
chown -R daemon ./uc_client
chown -R daemon ./uc_server/data
在浏览器中访问论坛页面:
http://192.168.80.10/bbs
在安装页面中输入以下数据库配置信息:
localhost
(如果不是本地服务器,填写服务器 IP 和端口)bbs
bbsuser
admin123
admin
admin123
后台管理地址:
http://192.168.80.10/bbs/admin.php
同理同样的步骤,网站文件夹解压复制到 /usr/local/httpd/htdocs/
下,即可。