从零开始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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

c01dkit

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

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

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

打赏作者

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

抵扣说明:

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

余额充值