根据实战操作所做的笔记整理而成的笔记博文,在 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
是的,a2enmod
、a2dismod
和 a2enflag
都是一次只能操作一个模块。(不知道有没有别的简便方法 :(
切换到 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.default
为 otherdomain.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/>。转载请保留此信息及相应链接。
引用通告: 升级 openSUSE Leap 15.3 到 Leap 15.4 | 水景一页