从零开始Apache2配置php/mysql/phpmyadmin服务并支持网页访问

前言

最近打算再做一版服务器状态查看的dashboard,采用“子服务器主动向主服务器推送自己的状态”的方案。一种方案是用php写,Apache作为后台服务器。简单写一下构建过程。

TL;DR

github有个docker compose做的lamp全套环境,只需要git clonedocker compose up -d两个命令就能直接搭好linux端的apache+mysql+php环境。试了下确实直接能用,可以参考https://github.com/sprintcube/docker-compose-lamp

准备Apache2环境

以下均为Ubuntu 22.04的服务器,以root运行。配置apache2需要apr、apr-util的runtime包,可以从https://apr.apache.org/download.cgi下载,以及正则、压缩传输、加密、xml的库。

wget https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
wget https://dlcdn.apache.org/httpd/httpd-2.4.58.tar.gz
tar xf httpd-2.4.58.tar.gz
tar xf apr-util-1.6.3.tar.gz
tar xf apr-1.7.4.tar.gz
mv apr-util-1.6.3 httpd-2.4.58/srclib/apr-util
mv apr-1.7.4 httpd-2.4.58/srclib/apr

apt install libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev libexpat1 libexpat1-dev

cd httpd-2.4.58 && ./configure --prefix=/usr/local/apache2 # 可以设置下path
# 系统里已经有过别的apr版本,可能报错configure: error: Cannot use an external APR with the bundled APR-util。此时可以为configure添加一个--with-included-apr参数

make install

准备PHP环境

https://www.php.net/downloads.php下载最新的php包,从https://pkgconfig.freedesktop.org/releases/下载最新的php-config包,比如

# 准备php所需要的一些环境
wget https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
tar xf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2 && ./configure --with-internal-glib
make install

# 非常重要
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig

# 简化安装
apt-get install build-essential autoconf automake libtool libsqlite3-dev pkg-config libjpeg-dev libpng-dev libxml2-dev libbz2-dev libcurl4-gnutls-dev libssl-dev libffi-dev libwebp-dev libonig-dev libzip-dev libjpeg-dev
wget https://www.php.net/distributions/php-8.3.4.tar.gz
tar xf php-8.3.4.tar.gz
cd php-8.3.4
./configure --prefix=/usr/local/src/php --sysconfdir=/etc/php --with-openssl --with-zlib --with-bz2 --with-curl --enable-bcmath --enable-gd --with-webp --with-jpeg --with-mhash --enable-mbstring --with-imap-ssl --with-mysqli --enable-exif --with-ffi --with-zip --enable-sockets --with-pcre-jit --enable-fpm --with-pdo-mysql --enable-pcntl --with-apxs2=/usr/local/src/apache2/bin/apxs
make install # 编译很慢,可以根据核数增加线程加快编译,比如make -j16 && make install 

# 然后,把/usr/local/src/php/bin加到PATH里(应该不会有人不会加吧)
# 然后可以用php --ini检查一下php.ini的配置位置。如果发现都是none没有加载,可以拷贝一份
# 在之前解压缩的php的tar包里有php.ini-development和php.ini-production,可以拷贝到php.ini的配置位置
cp xxxx/php-8.3.4/php.ini-production /usr/local/src/php/lib/php.ini # 举个例子

# 为了启用php-fpm,需要修改默认配置文件名
cp /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf
cp /etc/php/php-fpm.d/www.conf.default /etc/php/php-fpm.d/www.conf

# 修改php-fpm配置
# /etc/php/php-fpm.d/www.conf中,user和group两个变量比较关键,默认是nologin,用于配置php用户
# 可以都修改为用户www,然后为www创建用户和用户组
# 不过这里还要说一句的是,我本地这样设置还是不行,最后把user和group设置成自己的普通用户名和用户组,没新建www
adduser --no-create-home --disabled-password --disabled-login --shell /sbin/nologin www

# 设置php-fpm服务,纳入systemctl管理
# vi新建/usr/lib/systemd/system/php-fpm.service 文件,文件内容为
[Unit]
Description=php-fpm
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/src/php/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 然后刷新daemon并启动服务、设置为开机自启动,并检查下运行状态
systemctl daemon-reload
systemctl start php-fpm && systemctl enable php-fpm && systemctl status php-fpm

# 应该可以正常work,如果有报错,可以systemctl status php-fpm、cat /usr/local/src/php/var/log/php-fpm.log检查一下原因

配置mysql

参考官网,我这里选择了最简单的apt安装方法。更多详细配置可以参考官网原文。

先在这里获取最新的apt包,然后点击download,新页面里拷贝下“No thanks, just start my download.”的链接地址,比如

wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
dpkg -i mysql-apt-config_0.8.29-1_all.deb # 这里会进入配置页面,一路选默认的ok就行
apt-get update
apt-get install mysql-server # 这里应该会引导创建一个root用户,密码记得设复杂些

mysql默认用3306端口,暂时不用管其他配置

配置phpmyadmin(可选)

phpmyadmin是一款管理数据库的web端应用,用了以后感觉就回不去了hhh

不需要安装,直接从官网下载zip包,解压缩到网站目录里,以下是一个例子:

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip
unzip phpMyAdmin-5.2.1-all-languages.zip
mv phpMyAdmin-5.2.1-all-languages myphp0x29341995 # 可以随机取一个入口名防止爆破
cd myphp0x29341995
cp config.sample.inc.php config.inc.php

初次使用前需要修改一下配置文件(即config.inc.php),主要是为$cfg['blowfish_secret'] 填充一个32字节的随机字符串用来加密流量,然后把$cfg['Servers'][$i]['host']改为127.0.0.1,否则登录时容易出现2002的报错。

最后,在浏览器里访问xxx/myphp0x29341995/index.php,然后输入之前安装mysql时的用户名密码即可。

配置Apache2服务器

如果按以上方式安装,则修改/usr/local/apache2/conf/httpd.conf文件的ServerName选项到实际ip和端口。比如ServerName 172.19.202.144:80。这里的ip可以运行ifconfig看一下。

为了使apache对php文件进行解释执行,在httpd.conf文件添加:

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

设置文档目录,比如


#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>



#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride None
    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

检查下php模块是不是打开了:

LoadModule php_module         modules/libphp.so

最后启动Apache2服务器

apachestl start # 假设在准备环境阶段设置了path

随后浏览器直接访问即可。

配置Nginx服务器

除了apache2,也可以使用nginx服务器。比如可以从源码编译,或使用apt 源

./configure --user=<username> --group=<groupname> --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-compat

由于nginx本身不解析php文件,所以需要启用转发,在对应的nginx.conf文件启用:

location ~ \.php$ {
            fastcgi_pass  127.0.0.1:9000;	# 注意这里没有http的前缀……
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            error_page  404              /404.html;
        }

参考资料

  1. nginx配置php-fpm
  2. 配置更丰富的php configure
  3. 配置nginx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 1.2.1 创建订单表单 1.2.2 表单处理 1.3 在HTML中嵌入PHP 1.3.1 使用PHP标记 1.3.2 PHP语句 1.3.3 空格 1.3.4 注释 1.4 添加动态内容 1.4.1 调用函数 1.4.2 使用date()函数 1.5 访问表单变量 1.5.1 简短、中等以及长风格的表单变量 1.5.2 字符串的连接 1.5.3 变量和文本 1.6 理解标识符 1.7 检查变量类型 1.7.1 PHP的数据类型 1.7.2 类型强度 1.7.3 类型转换 1.7.4 可变变量 1.8 声明和使用常量 1.9 理解变量的作用域 1.10 使用操作符 1.10.1 算术操作符 1.10.2 字符串操作符 1.10.3 赋值操作符 1.10.4 比较操作符 1.10.5 逻辑操作符 1.10.6 位操作符 1.10.7 其他操作符 1.11 计算表单总金额 1.12 理解操作符的优先级和结合性: 1.13 使用可变函数 1.13.1 测试和设置变量类型 1.13.2 测试变量状态 1.13.3 变量的重解释 1.14 根据条件进行决策 1.14.1 if语句 1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 1.15 通过迭代实现重复动作 1.15.1 while循环 1.15.2 for和foreach循环 1.15.3 do...while循环 1.16 从控制结构或脚本中跳出 1.17 使用可替换的控制结构语法 1.18 使用declare 1.19 下一章 第2章 数据的存储与检索 2.1 保存数据以便后期使用 2.2 存储和检索Bob的订单 2.3 文件处理 2.4 打开文件 2.4.1 选择文件模式 2.4.2 使用fopen()打开文件 2.4.3 通过FTP或HTTP打开文件 2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() 2.7.4 读取整个文件:readfile()、fpassthru()和file() 2.7.5 读取一个字符:fgetc() 2.7.6 读取任意长度:fread() 2.8 使用其他有用的文件函数 2.8.1 查看文件是否存在:file_exists() 2.8.2 确定文件大小:filesize() 2.8.3 删除一个文件:unlink() 2.8.4 在文件中定位:rewind()、fseek()和ftell() 2.9 文件锁定 2.10 更好的方式:数据库管理系统 2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用循环访问数组 3.3 使用不同索引的数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()函数 3.9 从文件载入数组 3.10 执行其他的数组操作 3.10.1 在数组中浏览:each()、current()、reset()、end()、next()、pos()和prev() 3.10.2 对数组的每一个元素应用任何函数:array_walk() 3.10.3 统计数组元素个数:count()、sizeof()和array_count_values() 3.10.4 将数组转换成标量变量:extract() 3.11 进一步学习 3.12 下一章 第4章 字符串操作与正则表达式 4.1 创建一个示例应用程序:智能表单邮件 4.2 字符串的格式化 4.2.1 字符串的整理:chop()、ltrim()和trim() 4.2.2 格式化字符串以便显示 4.2.
1.首先本人声明者这只是一个迅雷下载的种子文件,下载该种子后再用迅雷下载。因为有五百多兆。分解上传不大好 2. 本教材从零开始,由浅入深,全面采用X Window和Webmin相结合的图形管理界面作为配置手段,开创了Linux管理的新概念,让您无需记忆Linux的命令,就能轻松快速地完成Red Hat Linux 9各种流行网络服务器的配置与管理。主要内容包括:Linux系统和相关管理工具的安装与使用,常用网络服务(DNS、DHCP、网关、路由)的启动与配置,Squid局域网共享上网服务器、Samba资源共享服务器、NFS网络文件服务器、LDAP目录服务器、Wu-FTP文件服务器、Sendmail电子邮件服务器、Apache WWW服务器、MySQL数据库服务器、Jabber即时消息服务器、INN新闻组服务器的快速架设与应用,以及系统安全和防火墙的配置等。 光盘主要内容:快速安装Linux系统与管理工具、Linux系统的配置与管理、架设Samba资源共享服务器、架设FTP服务器、架设Sendmail电子邮件服务器、架设Apache服务器等。    图书目录 第一章 Linux概述和快速安装 第一节 认识Linux 1.Linux的起源 2.Linux发行版本 第二节 安装Red Hat Linux 1.安装前的准备工作 2.快速安装系统 第三节 初识Linux 1.登录Linux系统2.图形操作环境X Window3.常用Linux命令简介 第二章 Linux系统管理 第一节 Linux系统管理工具 1.基于X Window的管理工具Linuxconf 2.基于浏览器的管理工具Webmin 第二节 用户管理与磁盘限额 1.用户管理 2.用户组管理 3.用户磁盘限制 第三节 配置本机网络信息 1.基本主机信息 2.指定DNS服务器地址 第四节 网络服务配置与管理 1.网络服务的启动方式 2.Xinetd服务管理 3.DNS服务 4.DHCP服务 5.网关和路由 6.网络诊断命令 第三章 局域网共享上网 第一节 使用Modem拨号上网 1.准备工作 2.使用KPPP拨号上网 第二节 使用Squid共享上网 1.认识代理服务器 2.Squid代理服务器 3.安装Squid 4.Squid代理服务配置 5.Squid高级配置 6.启动Squid 7.设置Squid客户机 第四章 资源共享与应用 第一节 管理Samba服务器 1.认识Samba 2.Samba的组成 3.Samba的安装 4.Samba的配置 5.启动Samba 6.使用Samba 7.Samba实用程序 第二节 资源共享 1.文件共享 2.打印机共享第三节 Samba安全 1.加密口令认证 第五章 NFS、LDAP和FTP服务 第一节 NFS网络文件服务 1.认识NFS 2.安装NFS软件包 3.配置NFS服务器 4.启动NFS服务器 5.使用NFS 第二节 LDAP目录服务 1.认识目录服务 2.目录结构 3.LDAP协议 4.安装OpenLDAP 5.配置OpenLDAP服务器 6.启动OpenLDAP 7.OpenLDAP应用 第三节 FTP服务 1.安装Wu-FTP服务器 2.配置Wu-FTP服务器 3.启动Wu-FTP 第六章 电子邮件服务 第一节 电子邮件系统 1.E-mail系统组成 2.E-mail协议 3.E-mail工作方式 4.认识Sendmail 第二节 SMTP邮件系统 1.配置DNS邮件交换记录 2.安装Sendmail 3.配置Sendmail 4.启动Sendmail 5.测试Sendmail 6.管理邮件队列 第三节 POP和IMAP邮件系统 1.安装POP和IMAP服务器 2.启动POP和IMAP服务器 3.测试POP服务器 4.测试IMAP服务器 第七章 配置与管理WWW服务 第一节 Apache服务器管理 1.认识Apache 2.安装Apache 3.配置Apache 4.启动Apache 第二节 主页空间管理 1.开辟个人主页空间 2.基于IP的虚拟主机 3.基于域名的虚拟主机 第三节 授权访问 1.基于主机的授权 2.基于用户的认证 第四节 动态网站开发 1.认识PHP 2.搭建PHP运行环境 3.用PHP开发动态网站 第八章 数据库服务 第一节 数据库系统与SQL 1.数据库系统 2.SQL服务器 3.认识MySQL 第二节 管理MySQL 1.安装MySQL 2.启动MySQL 3.数据库管理 4.权限管理 5.MySQL客户端工具 第三节 MySQL应用 1.用Perl同MySQL交互 2.ApachePHPMySQL的完美组合 第九章 信息交流服务 第一节 即时消息服务 1.认识Jabber 2.安装Jabber服务器 3.配置Jabber服务器 4.Jabber网上聊天 第二节 Usenet新闻服务 1.认识INN 2.安装INN服务器 3.配置INN服务器 4.启动INN 5.新闻组管理 6.阅读新闻 第十章 Linux系统安全 第一节 扫描和嗅探 1.认识扫描和嗅探 2.安装安全工具 3.端口扫描 4.网络嗅探 第二节 安全网络连接 1.认识安全网络连接 2.安装OpenSSH 3.配置OpenSSH服务器 4.启动OpenSSH服务器 5.安全连接 第三节 防火墙 1.认识防火墙 2.配置防火墙 3.启用防火墙 附录 Linux常用命令快速查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c01dkit

好可怜一博主,都没人打赏>_<

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值