成功使用 dnmp 构建 php 8.2 开发环境
成功使用 dnmp 构建 php 8.2 开发环境
本文编写时间:2023-01-16 2023-01-28
本文主要根据官网的文档进行装机调试,然后加入 php 8.2,因为原来的 dnmp 只有 php 8.0,不方便的。
但是,我只会用 centos 7 镜像构建 php8.2,所以本文提供的只是这种方案,但确实可用,已测试通过。
电脑环境。
我自己的电脑是 windows 10,然后已经安装了 docker desktop,已经安装了 wsl 2,然后 docker desktop 设置了 use the wsl 2 based engine。
安装步骤
进入 wsl 2 的 shell
当前是非 root 用户,
# 这个网址是 dnmp 的官方网址
git clone https://github.com/yeszao/dnmp.git
cd dnmp
cp env.sample .env
cp docker-compose.sample.yml docker-compose.yml
# 下面这个命令,花时间大约10到20分钟,耗时很长,需要耐心。其中,我是下 mysql 镜像花的时间比较长。
docker-compose up -d
成功后的显示类似
xxx@DESKTOP-IULT8FD:~/docker_php/dnmp$ docker-compose up -d
Creating network "dnmp_default" with driver "bridge"
Creating mysql5 ... done
Creating nginx ... done
Creating php ... done
Creating mysql ... done
xxx@DESKTOP-IULT8FD:~/docker_php/dnmp$
各个软件的版本定义在 .env 文件中,打开就能看到。也可以自己修改。算是比较方便的。
验证镜像是安装成功的。非常简单,打开windows 的浏览器,输入 localhost 即可。
类似如下显示:
<h1 style="text-align: center;">
欢迎使用DNMP!
</h1>
<h2>
版本信息
</h2>
<ul>
<li>
PHP版本:7.4.27
</li>
<li>
Nginx版本:nginx
</li>
<li>
MySQL服务器版本:8.0.28
</li>
<li>
Redis服务器版本:Redis 扩展未安装 ×
</li>
<li>
MongoDB服务器版本:MongoDB 扩展未安装 ×
</li>
</ul>
<h2>
已安装扩展
</h2>
<ol>
<li>
Core=7.4.27
</li>
<li>
date=7.4.27
</li>
<li>
libxml=7.4.27
</li>
<li>
openssl=7.4.27
</li>
以下忽略。。
</ol>
切换 php 版本到 8.2
1、添加目录
1-1、给 logs 下面加目录 php82
1-2、给 services 下面加目录 php82,同时把 php80 的目录下的内容拷贝到 php82
2、修改 php82 镜像的 Dockerfile 内容
FROM centos:7.9.2009
ENV TZ Asia/Shanghai
WORKDIR /www
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
&& yum makecache \
&& yum repolist \
&& yum install -y https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm \
&& sed -i 's/https*:\/\/rpms.remirepo.net/https:\/\/mirrors.aliyun.com\/remi/g' /etc/yum.repos.d/remi* \
&& sed -i 's/#baseurl/baseurl/g' /etc/yum.repos.d/remi* \
&& sed -i 's|^mirrorlist|#mirrorlist|' /etc/yum.repos.d/remi* \
&& yum makecache \
&& yum repolist \
&& yum -y install yum-utils \
&& yum-config-manager --enable remi-php82 \
&& yum install -y php82 php82-php-devel php82-php-fpm php82-php-mbstring php82-php-memcache php82-php-memcached php82-php-redis php82-php-mysqlnd php82-php-pdo php82-php-bcmath php82-php-xml php82-php-gd php82-php-gmp php82-php-igbinary php82-php-imagick php82-php-mcrypt php82-php-pdo_mysql php82-php-posix php82-php-simplexml php82-php-opcache php82-php-xsl php82-php-xmlwriter php82-php-xmlreader php82-php-swoole php82-php-zip php82-php-phalcon php82-php-yaml php82-php-yar php82-php-yaf php82-php-uuid \
&& systemctl enable php82-php-fpm \
&& groupadd www-data \
&& useradd -g www-data www-data
RUN ln -s /usr/bin/php82 /usr/bin/php
CMD "/usr/sbin/init"
3、修改 nginx 配置
services - nginx - conf.d - localhost.conf
自己找到相应的地方,自己修改内容
charset utf-8;
location ~ [^/]\.php(/|$) {
fastcgi_pass php82:9000;
include fastcgi-php.conf;
include fastcgi_params;
}
4、修改 php 配置
services - php82 - php-fpm.conf
自己找到相应位置
listen = 0.0.0.0:9000
5、修改 docker-compose.yml
5-1、需添加一个 php82 服务
php82:
build:
context: ./services/php82
args:
PHP_VERSION: php:${PHP82_VERSION}-fpm
CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
PHP_EXTENSIONS: ${PHP82_EXTENSIONS}
TZ: "$TZ"
container_name: php82
expose:
- 9501
volumes:
- ${SOURCE_DIR}:/www/:rw
- ${PHP82_PHP_CONF_FILE}:/etc/opt/remi/php82/php.ini:ro
- ${PHP82_FPM_CONF_FILE}:/etc/opt/remi/php82/php-fpm.conf:rw
- ${PHP82_LOG_DIR}:/var/log/php
- ${DATA_DIR}/composer:/tmp/composer
restart: always
cap_add:
- ALL
command: ["/opt/remi/php82/root/usr/sbin/php-fpm", "--nodaemonize", "--allow-to-run-as-root" ]
networks:
- default
5-2、把 redis 那一块的注释取消,因为绝大多数 php 项目都会使用它。
6、修改 .env
6-1、添加 php82的配置。
#
# PHP8.2
#
PHP82_VERSION=8.2.1
PHP82_PHP_CONF_FILE=./services/php82/php.ini
PHP82_FPM_CONF_FILE=./services/php82/php-fpm.conf
PHP82_LOG_DIR=./logs/php82
PHP82_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache
6-2、修改 redis 的配置
几行全部要修改成如下内容。
REDIS_VERSION=6.2.10
REDIS_HOST_PORT=6379
REDIS_CONF_FILE=./services/redis/redis-6.conf
7、构建镜像,启动。
在 dnmp 目录下,Ubuntu 的 shell 里
docker-compose down
docker-compose build php82
docker-compose up -d
8、最后验证。
打开 windows 的浏览器,输入 localhost 即可。
宿主机是 linux 时的补丁
2023-02-03
在容器内连接 mysql 肯定无问题,因为上面的程序已经显示了。
但是,可能从宿主机内连接容器内的 mysql 会出现问题。
用如下解决方案:
1、修改 msyql 配置
services - mysql - mysql.conf
在 [mysqld] 这个小节内加一句。
skip-name-resove
2、修改 docker-compose.yml
服务 mysql 中添加一句
command: --default-authentication-plugin=mysql_native_password
3、正确输入宿主机连接容器内 mysql 服务的命令
账号密码如有变动,自己改,否则默认用下面的
mysql -h127.0.0.1 -uroot -p123456 -P3306 --ssl-mode=DISABLED
本作品采用《CC 协议》,转载必须注明作者和本文链接
windows。。。
我也装好了,但不太会用,npm命令这些在哪用