Mark's blog 这是 Mark 的个人博客,记录些东西。

Docker 安装 PHP 7.4

2021/12/31 更新 找到这个 DNMP 一键安装 Nginx + MySQL + PHP7/5,不用自己配置了。


如果还没有安装 Docker 和 Docker compose,参考之前的文章进行安装。

安装 php7.4

cd /root
mkdir php74
cd php74
docker pull php:7.4-fpm

在 php74 目录下创建 docker-compose.yml 内容如下:

version: "3"
services:
  php74:
    image: php:7.4-fpm
    container_name: php74
    ports:
      - 9000:9000
    volumes:
      - /usr/wwwhome/test:/var/www/test

解释: /usr/wwwhome/test 是网站存放的地方 挂载到容器的 /var/www/test 目录,/var/www/test 这个目录后面 nginx 配置要用到。

多个网站,记得添加 volumes !

启动容器:

cd /root/php74
docker-compose up -d

nginx 配置:

参考这个进行修改

server {
    listen 80;
    listen [::]:80;
    server_name test.009898.xyz;
    return 301 https://$server_name:443$request_uri;
}
server{
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name test.009898.xyz;
    charset utf-8;

        # ssl配置
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_ecdh_curve secp384r1;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;
    ssl_certificate /usr/local/etc/xray/bf.6666000.xyz.pem;
    ssl_certificate_key /usr/local/etc/xray/bf.6666000.xyz.key;

    index index.html index.htm index.php;
    root /usr/wwwhome/test;

    location / {
         try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        root /usr/wwwhome/test;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/test$fastcgi_script_name;
        include  fastcgi_params;
    }
}

解释: location / 为 url 美化,具体可以百度。 location ~ .*\ 是进入 FastCGI 的处理程序。

💥注意重点! 这一行 fastcgi_pass 127.0.0.1:9000; 这一行 fastcgi_param SCRIPT_FILENAME /var/www/test$fastcgi_script_name; 的加粗内容需要按照之前配置修改。不然会出现 File not found.

其实比较推荐在 docker-compose.yml 的 volumes 这一行本地网站目录和容器目录设置成一样的!一样的话 /var/www/test$fastcgi_script_name 就可以改成 $document_root$fastcgi_script_name

我这是没有一样,只是为了理解过程。

网站存放目录: /usr/wwwhome/test

随便放个 php 测试下吧!

安装 PHP 拓展:

#进入容器
#docker手动安装PHP7.4常用扩展命令
docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm

apt-get update && 
apt-get install -y --no-install-recommends libzip-dev && 
rm -r /var/lib/apt/lists/* && 
docker-php-ext-install -j$(nproc) zip

apt-get install -y --no-install-recommends libmcrypt-dev && 
rm -r /var/lib/apt/lists/* && 
pecl install mcrypt-1.0.3 && 
docker-php-ext-enable mcrypt

pecl install redis-5.2.2 && docker-php-ext-enable redis

apt-get install -y 
        libfreetype6-dev 
        libjpeg62-turbo-dev 
        libpng-dev 
    && docker-php-ext-configure gd --with-freetype --with-jpeg 
    && docker-php-ext-install -j$(nproc) gd

#进入php容器
docker exec -it php74 /bin/bash
#相关依赖安装
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev
#安装mysqli
docker-php-ext-install mysqli
#安装常用扩展命令
docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm

#安装完出现这一行,所有拓展就在以下目录:
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
#查看拓展
cd /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
dir
#启动 redis 扩展
docker-php-ext-enable redis
#查看redis 扩展是否可以启动,返回 redis 就启动了
php -m | grep redis

#安装完成之后按 CTRL+D 退出容器,然后重启 php74 容器
docker restart php74

#安装PECL 扩展
#因为一些扩展并不包含在 PHP 源码文件中,所有需要使用 PECL(PHP 的扩展库仓库,通过 PEAR 打包)。用 pecl install 安装扩展,然后再用官方提供的 docker-php-ext-enable 快捷脚本来启用扩展。PECL 扩展下载地址:https://pecl.php.net/
#进入php容器
docker exec -it php74 /bin/bash
#相关依赖安装
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev
 #安装swoole拓展
pecl install swoole-4.2.12
 #启用swoole拓展
docker-php-ext-enable swoole

没用 Redis 就别安装了,被当矿机了。。top 查看 CPU 占用 100 %,一查百度中病毒了。。

kdevtmpfsi 病毒的产生,通常是因为 Redis 对外开放 6379端口,且没设置密码或者密码过于简单导致。

所以服务器一定要设置好防火墙,像3306、6379 这种常用端口,尽量减少对外开放的机会。

参考链接

php.ini

#这个目录下的 ini 文件都会自动加载
cd /usr/local/etc/php/conf.d

vi upload.ini

#写入一下内容
upload_max_filesize=100M
post_max_size=100M
max_execution_time=120
allow_url_fopen=ON

echo 'extension=mcrypt.so' > mcrypt.ini

# CTRL+D 退出
docker restart php74
By Mark On