LAMP方式搭建论坛

LAMP(Linux, Apache, MySQL, PHP)相比LNMP(Linux, Nginx, MySQL, PHP)的优势在于其成熟稳定、文档丰富、社区支持强大。Apache的模块化设计带来高度灵活性,支持.htaccess文件,便于共享主机环境配置。LAMP=Linux+Apache+Mysql/MariaDB+PHP/Perl/Python。LAMP 相对于 NGINX 来说较为安全,但是Nginx处理高并发比Apache要强。最好的架构是Nginx和Apache结合使用:使用Nginx可以做集群等相关配置,可以和apache一起使用,有的会用apache去跑php,然后用nginx做反向代理,比如apache运行在8080端口,nginx在80端口,访问php文件时,反向代理到apache,静态页通过nginx处理。

当前Apache 最新版(2024.12):httpd-2.4.62.tar.gz


通过这个官方网站,可以下到最新的版本:下载地址

在这里插入图片描述

1、安装Apache

Apache本身只处理静态页面,处理动态页面需要使用libphp5.so这个模块去工作,编译php其实是将一个至关重要的模块打入到apache内部,然后apache收到php请求,将请求交给这个模块来处理!

# 开通防火墙:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload

# 安装依赖:
yum groupinstall "Development Tools" && \
yum install apr-devel apr-util-devel pcre-devel openssl-devel

# 创建目录:
mkdir -p /usr/local/web/apache/

# 解压:
tar -zxvf httpd-2.4.62.tar.gz -C
cd httpd-2.4.62
./configure --prefix=/usr/local/web/apache \
    --enable-so \
    --enable-rewrite \
    --enable-mods-shared=all


# 编译安装
make && make install

添加httpd系统服务

cat << eof > /etc/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/web/apache/logs/httpd.pid
ExecStart=/usr/local/web/apache/bin/httpd -k start
ExecReload=/usr/local/web/apache/bin/httpd -k graceful-restart
ExecStop=/usr/local/web/apache/bin/httpd -k stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
eof

systemctl enable httpd
systemctl start httpd

把httpd服务的可执行程序文件放入路径环境变量的目录中

ln -s /usr/local/web/apache/conf/httpd.conf /etc/
ln -s /usr/local/web/apache/bin/* /usr/local/bin/

**修改httpd 服务配置文件:**vi /etc/httpd.conf

[!NOTE]

Listen 192.168.10.11:80 # 本地地址
ServerName www.ppyython.cn:80 # 取消注释
DocumentRoot “/usr/local/web/apache/htdocs” # 默认首页存放路径
DirectoryIndex index.html # 默认首页文件名设置

httpd -t # 检查配置文件的配置项是否有误

echo "192.168.10.11 www.ppyython.cn" >> /etc/hosts
# win上配置:C:\Windows\System32\drivers\etc\hosts
192.168.10.11 www.ppyython.cn

浏览器访问:
在这里插入图片描述

2、安装mariadb

卸载安装的包:yum remove mariadb-libs-5.5.68-1.el7.x86_64 -y
安装依赖:卸载安装的包:yum remove mariadb-libs-5.5.68-1.el7.x86_64 -y
安装数据库:yum install MariaDB-server -y

启动、开机自启并查看是否安装成功
systemctl start mariadb
systemctl enable mariadb
mariadb --version

# 初始化配置:
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的新密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;

# mariadb查看字符集:
show variables like "%character%";show variables like "%collation%";

vi /etc/my.cnf.d/server.cnf
[mysqld] # 这个的下面添加信息
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

vi /etc/my.cnf.d/mysql-clients.cnf
在[mysql]标签下添加
default-character-set=utf8

# 重启:systemctl restart mysqld

3、安装php

php-8.0.0官网下载地址:官网下载:php-8.0.0.tar.gz

这是我当前的理解,可能有偏差:lamp中安装php和lnmp中安装php是不一样的,因为原理都不一样。lamp中安装php,要通过安装php*_module模块(with-apxs2)来实现互联互通。而lnmp中安装pap是通过nginx代理到9000端口是实现的。【–with-mysqli=mysqlnd】用于与 MySQL 数据库进行交互,而【with-pdo-mysql】提供了一个轻量级的、一致性的接口来访问多个数据库。

# 安装依赖:
yum install -y libxml2-devel sqlite-devel oniguruma-devel bzip2-devel \
libpng-devel libjpeg-turbo-devel freetype-devel readline-devel libxslt-devel \
php-gd libzip-devel libpng-devel libjpeg-turbo-devel
# 源码安装:
tar -xvf php-8.0.0.tar.gz
cd php-8.0.0

# 确保在配置 PHP 时也指定 Apache 的安装路径,以便它们可以找到彼此。
./configure --prefix=/usr/local/php \
    --with-apxs2=/usr/local/web/apache/bin/apxs \
    --enable-mbstring \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
	--with-zlib \
    --with-libxml \
    --enable-gd \
    --enable-gd-jis-conv \
    --with-openssl \
	--with-jpeg \
    --with-freetype \
    --with-zip \
    --enable-sockets \
    --enable-soap \
    --enable-calendar \
    --enable-intl \
    --enable-exif \
    --enable-bcmath \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-opcache \
	--enable-fpm


make && make install

# 问题处理:No package 'icu-uc' found;No package 'icu-io' found;No package 'icu-i18n' found
yum install -y icu libicu-devel
# 问题2:Requested 'libzip >= 0.11' but version of libzip is 0.10.1
yum remove libzip-devel libzip -y
wget https://libzip.org/download/libzip-1.3.2.tar.gz --no-check-certificate
./configure
make
make install
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH #若配置php报错,在php目录执行一下就可以了。
echo $PKG_CONFIG_PATH    # 能返回信息
# 配置完了,还可以继续配置,make clean或者make distclean
# 复制配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# 启用php-fpm:
/usr/local/php/sbin/php-fpm

# 查看进程和占用的端口
ps aux | grep php | grep -v grep
ss -lntp | grep php

# 查看版本:
php --version

# 遇到问题:-bash: php: 未找到命令
# 解决问题:
vi /etc/profile
PATH=$PATH:/usr/local/php/bin
export PATH
# 刷新配置:
source /etc/profile

# 配置php-fpm用户
useradd -s /sbin/nologin php-fpm
# 配置php-fmp:
vi /usr/local/php/etc/php-fpm.d/www.conf
[www]
user = php-fpm
group = php-fpm
listen = 127.0.0.1:9000           # PHP端口号
pm.max_children = 50              # 最大进程数量
pm.start_servers = 5              # 最小进程数量
pm.min_spare_servers = 2          # 最少需要几个空闲着的进程
pm.max_spare_servers = 10         # 最多允许几个进程处于空闲状态
# 其他参数可设置:
pm = dynamic        // 选择动态模式
pm.max_requests = 300


# 启用systemctl来管理php
cat << eof > /etc/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
eof


# 开机启动
systemctl enable php-fpm
systemctl start php-fpm

至此,三个服务每次开机后都会自动启动。经过测试,没有问题。

4、配置 Apache 以识别 PHP 文件

vi /etc/httpd.conf

# 加载 PHP 模块
LoadModule php_module /usr/local/web/apache/modules/libphp.so   # 安装完发现就有了

# 设置Apache处理PHP文件
AddHandler php-script .php
AddType application/x-httpd-php .php

# 检测配置是否有语法错误:
httpd -t

# 重启:
systemctl restart httpd

创建一个简单的 PHP 脚本以测试配置

vi /usr/local/web/apache/htdocs/info.php
<?php
phpinfo();
?>

浏览器:http://www.ppyython.cn/info.php

在这里插入图片描述

5、配置 Apache 以读取到数据库

5.1、创建一个测试数据库和表:
CREATE DATABASE testdb;
USE testdb;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL
);

INSERT INTO users (username, password) VALUES ('testuser', 'testpass');
5.2、创建 PHP 脚本

1、使用mysqli 版本连接:vi /usr/local/web/apache/htdocs/testdb1.php

<?php
// mysqli 版本
$servername = "192.168.10.11";
$username = "your_username"; // 替换为你的数据库用户名
$password = "your_password"; // 替换为你的数据库密码
$dbname = "testdb";

// 创建连接
$conn = new mysqli($servername, $username,$password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$sql = "SELECT id, username, password FROM users";$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 输出数据
    while($row =$result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Username: " .$row["username"]. " - Password: " . $row["password"]. "<br>";
    }
} else {
    echo "0 结果";
}

$conn->close();
?>

2、使用PDO版本连接:vi /usr/local/web/apache/htdocs/testdb2.php

<?php
$servername = "192.168.10.11";
$username = "your_username"; // 替换为你的数据库用户名
$password = "your_password"; // 替换为你的数据库密码
$dbname = "testdb";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname",$username, $password);
    // 设置 PDO 错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT id, username, password FROM users";
    $result =$conn->query($sql);

    while($row =$result->fetch()) {
        echo "id: " . $row["id"]. " - Username: " .$row["username"]. " - Password: " . $row["password"]. "<br>";
    }
}
catch(PDOException $e)
{
    echo "连接失败: " . $e->getMessage();
}

$conn = null;
?>

浏览器访问:

在这里插入图片描述

6、安装论坛

# 创建数据库:
mysql -uroot -p
create database liang;
CREATE USER 'lianguser'@'%' IDENTIFIED BY 'admin@123';
GRANT ALL PRIVILEGES ON liang.* TO 'lianguser'@'%' IDENTIFIED BY 'admin@123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

下载论坛:https://www.dismall.com/thread-14660-1-1.html

unzip Discuz_X3.5_SC_UTF8_20240520.zip

mkdir /usr/local/web/apache/htdocs/liang

cp -r upload/* /usr/local/web/apache/htdocs/liang

chmod -R 777 liang/

浏览器访问:http://www.ppyython.cn/liang/install/index.php

创建数据库环节:把刚才创建的数据库相关信息填写进去,并设置管理员信息。

完成配置之后,提示:您的服务器不支持 CURL,这将会导致应用无法安装。请联系您的服务商或者网站技术人员

# 安装依赖:
yum install curl-devel
# 编译 PHP 的 cURL 扩展
cd /root/php-8.0.0
配置的时候加上:--with-curl
make && make install
# 重启:
systemctl restart httpd
# 查看是否显示了 cURL 扩展
php -m

在这里插入图片描述

7、apache配置https

# 配置、编译和安装 Apache
cd httpd-2.4.62
./configure --prefix=/usr/local/web/apache \
    --enable-so \
    --enable-rewrite \
    --enable-mods-shared=all \
    --enable-ssl

# 编译安装
make && make install

# vi /etc/httpd.conf
LoadModule ssl_module modules/mod_ssl.so  # 取消注释
Include /etc/httpd/conf.d/ssl.conf   # 添加一行

生成自签名证书:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/certs/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

这个命令会创建一个有效期为 365 天的 RSA 密钥和证书,并且会提示你输入一些证书信息。

# 配置apache
cd /etc/httpd/conf.d && cp ssl.conf.rpmsave ssl.conf
vi /etc/httpd/conf.d/ssl.conf
#SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog   # 不需要密钥,注释掉
<VirtualHost _default_:443>
	ServerName www.ppyython.cn:443
    ServerAdmin webmaster@yourdomain.com
    DocumentRoot "/usr/local/web/apache/htdocs"

    SSLEngine on

    SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/certs/apache-selfsigned.key

    <Directory "/usr/local/web/apache/htdocs">
        Require all granted
    </Directory>

</VirtualHost>

重启apache:systemctl restart httpd

https登录访问:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值