在 openSUSE Leap 中安装配置 Apache + MariaDB + PHP + PHP-FPM 网页服务器 LAMP

根据实战操作所做的笔记整理而成的笔记博文,在 openSUSE Leap 中安装配置 Apache + MariaDB + PHP + PHP-FPM 网页服务器 LAMP。实战包括将水景一页在 Linode VPS 上的虚拟机的操作系统从 CentOS 7 切换为 openSUSE Leap 以及在虚拟机里练习配置基于 LAMP 的网页服务器。

这里假设已经安装并配置了 openSUSE Leap 操作系统,并且完全在命令行下操作。下面的操作都是使用 su 切换为 root 身份来执行,这样会比较方便,虽然不符合安全原则 :D

配置系统防火墙

为了方便随时测试,先打开防火墙 HTTP 和 HTTPS 服务端口。

firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https
firewall-cmd --add-service=https --permanent

这里使用的是 FirewallD。

重新加载防火墙规则,

firewall-cmd --reload

安装相应的软件包

这里一鼓作气将需要的都安装完,比如 Apache2、MariaDB、PHP7、PHP-FPM、phpMyAdmin 然后再一个个配置。

有些估计系统已经自动安装过了。一次性安装需要的软件包,

zypper -n install apache2 apache2-mod_fcgid \
    php7 php7-fpm php7-mysql php7-openssl \
    php7-APCu php7-curl php7-fileinfo php7-gd \
    php7-imagick php7-intl php7-json php7-zip \
    php7-zlib php7-mbstring php7-opcache \
    php7-pcntl php7-pdo php7-posix \
    php7-bcmath php7-gmp php7-exif \
    mariadb mariadb-tools \
    phpMyAdmin

看看 zypper 推荐的软件包是否包括下面这些。如果需要,后期还可以再安装。

php7-pgsql php7-odbc php7-phar php7-readline

配置 Apache

删除不需要的 apache2-mod_php7,这是系统默认安装的。同时使用系统中提供的 Apache 模块配置工具 a2dismod 将 php7 这个模块禁用。因为我们打算让网页服务器工作在 php-fpm 模式下,php 模块就用不上了。

zypper remove apache2-mod_php7
a2dismod php7

启用 Apache2 服务,

systemctl start apache2 && systemctl enable apache2

先无差别禁用所有 Apache 模块,

for i in $(a2enmod -l)
do
    sudo a2dismod ${i}
done

然后按需(网页服务器,比如运行 WordPress 或者 NextCloud 等)启用下列模块,

for i in alias auth_basic authn_core authz_core authz_host dir env expires include log_config mime negotiation http2 ssl setenvif socache_shmcb reqtimeout rewrite headers proxy proxy_fcgi filter deflate
do
    sudo a2enmod ${i}
done

然后重启 Apache 服务,

systemctl restart apache2

默认的网页资源存储在 /srv/www/htdocs/

启用 proxy、proxy_fcgi 和 setenvif 模块,

a2enmod proxy proxy_fcgi setenvif

启用 HTTP2、SSL 标记,

for i in HTTP2 SSL
do
    a2enflag ${i}
done

是的,a2enmoda2dismoda2enflag 都是一次只能操作一个模块。(不知道有没有别的简便方法 :(

切换到 Apache 的 EVENT 模式,

zypper install apache2-event
zypper remove apache2-prefork

检查 /etc/apache2/httpd.conf 中是否有下面的设定,

IncludeOptional /etc/apache2/vhosts.d/*.conf

上面这个配置就是为了让 Apache 加载位于 /etc/apache2/vhosts.d/ 目录中的网站配置文件。

至于具体的网站配置,也就是 Apache 的 VirtualHost 配置文件,各个 Linux 发行版都是用的 Apache 软件的配置方式,没啥不同。只是文件的路径可能有所不同。可以参考「CentOS 7 / RHEL 7 上安装 LAMP + phpMyAdmin」里 Apache 主机配置文件中的样例。

配置 PHP 和 PHP-FPM

关于 PHP-FPM 的安装和配置详情可参考之前的博文,「Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 的方式」和「Linode VPS 上 CentOS 7 中改 LAMP 执行方式为 PHP-FPM」。软件本身的配置并不因 Linux 发行版而有不同,下面只简单提一下 openSUSE Leap 上的配置文件位置以及基本配置。

如果要给服务器上 /srv/www/htdocs/ 路径下的所有网站都通过同一个 PHP-FPM 进程来解析的话,可以如下操作。在 /etc/apache2/conf.d 下添加一个 php_fpm.conf 文件,并增加下面的内容,让 Apache 知道 PHP-FPM 的运行端口,

<Directory "/srv/www/htdocs/">
    <FilesMatch "\.ph(p[345]?|tml)$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
    <FilesMatch "\.php[345]?s$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
</Directory>

也可以用别的形式(哪个方便运行就用哪种,没有多大差别)。其中 9000 是端口,意味着 Apache 会将 /srv/www/htdocs/ 路径下的 PHP 解析任务交给监听在 9000 端口的 PHP-FPM 来处理。该端口为默认端口。有了这个配置就可以保证所有那些没有自己的单独配置的 Apache 主机都默认使用这个配置。

开启 PHP-FPM 服务,

systemctl enable php-fpm && systemctl start php-fpm

类似这样的配置可以有多个,分别来解析不同的网站服务。例如在多个网站共享同一个服务器的时候,可以给不同的用户分配不同的端口,例如 9001、9002 等等,然后让 PHP-FPM 以不同的用户身份来运行。比如把这些配置分别放到不同的网站的配置文件(见上一小节)中。

例如,

<VirtualHost otherdomain:80>
# ...... 其他配置信息

    <FilesMatch "\.ph(p[345]?|tml)$">
        SetHandler "proxy:fcgi://127.0.0.1:9001"
    </FilesMatch>
    <FilesMatch "\.php[345]?s$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>

# ...... 其他配置信息
</VirtualHost>

然后,也需要创建与上面的 Apache 配置(9000端口)对应的 php7-fpm 配置文件。

cp /etc/php7/fpm/php-fpm.conf.default /etc/php7/fpm/php-fpm.conf

php7-fpm 配置文件的基本内容大致如下(这里删去了所有注释行和空白行),

[www]
user = wwwrun
group = www
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 3
pm.max_spare_servers = 5

或者,需要分别为多个网站配置多个 PHP-FPM 实例的话,也可以把配置文件放在 目录中,下面复制 www.conf.defaultotherdomain.conf 然后修改其中的配置参数,

cp /etc/php7/fpm/php-fpm.d/www.conf.default /etc/php7/fpm/php-fpm.d/otherdomain.conf

内容例如,

[otherdomain]
user = otherdomainowner
group = otherdomainowner

listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1

listen.owner = otherdomainowner
listen.group = otherdomainowner
listen.mode = 0666

pm = dynamic
pm.max_children = 10
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1
pm.max_requests = 100

slowlog = /var/log/php-fpm/otherdomain-slow.log
chdir = /srv/www/otherdomain.com/htdocs/public_html

这个配置文件与前面的不同之处在于,端口为 9001,我们设定使用 otherdomainowner 来运行该 PHP-FPM 进程,同时也配置了日志文件 /var/log/php-fpm/otherdomain-slow.log,并将网站主目录设定到 /srv/www/otherdomain.com/htdocs/public_html

重启 Apache 和 PHP-FPM 服务,

systemctl restart apache php-fpm

配置数据库 MariaDB

开启数据库服务,

systemctl enable mysql && systemctl start mysql

日志信息在 /var/log/messages 中。

初始化配置数据库,

mysql_secure_installation

登录数据库执行配置和/或导入备份,

mysqladmin -u root password '<NEW PASSWORD>'

关于安全配置 MariaDB 数据初始化的详细操作与「2.3 安装和配置 Mariadb 数据库服务」里面介绍的一样。

配置 phpMyAdmin

前面一次性安装所有软件包的时候已经安装了 phpMyAdmin 了。按理说现在就可以直接访问了。默认在主网站的 /phpmyadmin 路径下。

如果有问题,可以参考另一篇博文中的 phpMyAdmin 的配置部分

后记

至此,在 openSUSE Leap 这个 Linux 发行版中安装并配置 APACHE + MARIADB + PHP + PHP-FPM 的操作就差不多结束了。如果是第一次这种配置,可以在自己电脑上开个虚拟机,从安装系统到配置软件,一边学习一边练习,很快就熟悉了。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/setup-apache-mariadb-php-php_fpm-lamp-opensuse-leap-vps/>。转载请保留此信息及相应链接。

1 条关于 “在 openSUSE Leap 中安装配置 Apache + MariaDB + PHP + PHP-FPM 网页服务器 LAMP” 的评论

  1. 引用通告: 升级 openSUSE Leap 15.3 到 Leap 15.4 | 水景一页

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>