1、相关说明
- 该镜像基于Centos8.3;
- Nginx与PHP均为官网下载源码编译安装;
- Nginx配置目录:
/usr/local/nginx/conf
文件目录:/usr/local/nginx/html
- PHP配置目录:
/usr/local/etc/
- 已做好的镜像地址:https://hub.docker.com/r/yusian/nginx1.20-php7.4
2、安装步骤
2.0 基础环境
docker镜像市场搜索cetnos
,选择官方最新版本
[root@centos ~]# docker search centos
启动该镜像一个实例
[root@centos ~]# docker run -itd centos
进入该实例
[root@centos ~]# docker exec -it 5f4263abbcb7 bash
2.1、Nginx安装
Nginx安装相对比较简单
- 下载源码:https://nginx.org/
[root@5f4263abbcb7 src]# wget https://nginx.org/download/nginx-1.20.0.tar.gz
如果提示没有wget命令,则先安装wget,后面会多次出现类似提示,都使用yum工具安装
[root@5f4263abbcb7 src]# yum install -y wget
- 解压:
[root@5f4263abbcb7 src]# tar -zxf nginx-1.20.0.tar.gz
- 安装gcc及make工具
[root@5f4263abbcb7 src]# yum install -y gcc-c++ make
- 进入源码目录,配置源码,加带ssl模块
[root@5f4263abbcb7 nginx-1.20.0]# ./configure --with-http_stub_status_module --with-http_ssl_module
- 下载下关依赖
在configure过程当中会出现类似
checking for PCRE library ... not found
的报错信息,说明信息中提到的依赖本机没有安装,上面有提到过,类似这种提示都可以通过yum
包管理工具进行安装修复。这里有一个技巧,我们实际安装的依赖需要在提示的xxx库后面带-devel
。比如说
checking for PCRE library ... not found
,表明没有PCRE库,那么安装时装的是pcre-devel
库;这是他对应的开发库,其他的类似。[root@5f4263abbcb7 nginx-1.20.0]# yum install -y pcre-devel
安装完成后再configure一下,还会有报错,就继续完善安装,直到没有报错为止。
我这里安装的时候,相关的依赖有2个,可以一次性先安装好
[root@5f4263abbcb7 nginx-1.20.0]# yum install -y pcre-devel openssl-devel
- 编译安装
[root@5f4263abbcb7 nginx-1.20.0]# make && make install
- 安装结束
默认的安装目录为
/usr/local/nginx
,也可以在configure的时候指定,但我觉得没有必要,可执行程序是sbin目录下的nginx文件,可以通过添加一个硬链接到/usr/bin
目录下方便在任何地方执行nginx命令,不需要配置什么环境变量[root@5f4263abbcb7 nginx]# ln /usr/local/nginx/sbin/nginx /usr/bin/nginx
启动
[root@5f4263abbcb7 nginx]# nginx
修改配置文件:
[root@5f4263abbcb7 nginx]# vi conf/nginx.conf
2.2、安装php
php安装的方法思路与Nginx大致一样,也是官网下载源码,然后configure
再就是make
编译
- 官网:https://www.php.net 目前最新版本是8.0.3,但是discuz似乎目录还不支持8.0版本,所以上述镜像安装的是7.4版本;
-
discuz与wordpress需要的php模块比较多,我总结了一下,以下几个是必须安装的,上述镜像安装的就是这些,如果有需要可以再扩展,扩展的方法就中重新configure然后make编译安装
[root@5f4263abbcb7 php-7.4.16]#./configure \ --enable-fpm \ --enable-mysqlnd \ --enable-mbstring \ --enable-gd \ --enable-exif \ --with-mysqli=mysqlnd \ --with-curl \ --with-zip \ --with-openssl
- 同样的道理,遇到有缺失的库就通过
yum
包管理工具补全,但有一个例外:oniguruma
,yum
包管理工具中有oniguruma
,但没有对应的开发库oniguruma-devel
,解决方法参考:https://www.yusian.com/blog/?p=2010 -
PHP编译时间会比较久一点,我2核4G的服务器需要10~20分钟左右,安装完成后默认的配置目录为
/usr/local/etc/
-
初始化配置
在
/usr/local/etc/
目录下,将默认的php-fpm.conf
文件拷贝一份使用即可[root@5f4263abbcb7 etc]# cp php-fpm.conf.default php-fpm.conf
该配置文件中的最后一行:
include=NONE/etc/php-fpm.d/*.conf
,将NONE/
去掉,即改成include=etc/php-fpm.d/*.conf
再进入
php-fpm.d
目录中拷贝www.conf
文件[root@5f4263abbcb7 php-fpm.d]# cp www.conf.default www.conf
该配置文件中间,大概第一页的最后一行
listen = 127.0.0.1:9000
,表明php只对本机提供服务,如果外部机器需要使用,将127.0.0.1:9000
改成0.0.0.0:9000
-
启动php
[root@5f4263abbcb7 etc]# php-fpm
3、基本使用
如果直接拉取上述我已经做好的镜像docker pull yusian/nginx1.20-php7.4
,可以直接创建容器,基本步骤如下
- 创建卷宗:
[root@yusian ~]# docker volume create www
卷宗对应的本地物理路径为:
/var/lib/docker/volumes/www/_data
,可将网站的文件拷贝到该目录下; -
启动容器:
[root@yusian ~]# docker run -itd -v www:/usr/local/nginx/html -p 443:443 -p 80:80 yusian/nginx1.20-php7.4
容器启动后,到对应的配置目录下修改配置文件,主要是Nginx的配置文件,php基本上不需要额外配置;
-
启动服务
- 启动Nginx:nginx
- 启动PHP:php-fpm