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