来自 技术 2019-04-17 00:00 的文章

CentOS 7 Docker部署 phpmyadmin 网站

八年Java开发的感悟:什么才是程序员的立身之本>>>   

20190409 昨天搭建了 本地 nginx + Docker PHP + Docker mysql + Docker phpMyAdmin

利用以上环境,部署一个新网站,直接下载最新版 phpMyAdmin 部署到本地

1、 下载配置 phpMyAdmin

官网https://www.phpmyadmin.net/

下载sudo wget ttps://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip

解压

CentOS 7.6 怎么没有 unzip?先安装一下sudo yum install zipsudo yum install unzip

unzip phpMyAdmin-4.8.5-all-languages.zip

转移到 nginx WEB 目录下mv phpMyAdmin-4.8.5-all-languages /usr/share/nginx/html/phpMyAdmin

修改配置cd /usr/share/nginx/html/phpMyAdmincp config.sample.inc.php config.inc.phpvim config.inc.php*** 修改以下 2 处: mysql 容器的 ip 和 password

//by wzh 20190409 mysql in docker pass =123456 $cfg['blowfish_secret'] = '123456'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ //by wzh 20190409 mysql in docker ip = 172.17.0.3 $cfg['Servers'][$i]['host'] = '172.17.0.3';

** Docker 容器 IP 不一定是固定的,之后可以去设置成静态地址** 配置之前,提前 docker inspect mysql57 的 ip 地址

** 疑问:既然 mysql 容器已经映射到宿主机的 3306 端口,应该使用 127.0.0.1:3306 是可以的,但是尝试几次都失败了?总是提示错误:mysqli_real_connect(): (HY000/2002): Connection refused

这个问题待继续处理!

2、 配置 phpMyAdmin 网站

使用 8080 端口访问,建立一个测试网站cd /etc/nginx/conf.d/sudo vim test.conf

server { listen 8080; server_name 127.0.0.1; # this is on local root /usr/share/nginx/html/phpMyAdmin ; index index.html,index.php; location / { } location ~ \.php$ { # thsi is on docker,not local /var/www/html root /var/www/html/phpMyAdmin; index index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $uri; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; } }

** 提前启动之前创建的 Docker PHP 和 Docker Mysql ,可以不用启动 Docker phpmyadmin

    重启 nginx 之后测试sudo service nginx restart

    curl 127.0.0.1:8080浏览器打开http://192.168.1.184:8080/index.php

    出现错误!缺少 mysqli 扩展。请检查 PHP 配置。 详情请查看我们的文档。如下图

    Docker PHP 里面配置的是纯净版的,没有配置 mysqli 扩展

    3、docker PHP 扩展 mysqli

    参考https://www.jianshu.com/p/c5349ef2e910感谢这位博主!这里再抄写一遍进入容器docker exec -it myphp56 bashcd /usr/local/bin

    安装扩展./docker-php-ext-install pdo_mysql安装扩展./docker-php-ext-install mysqli重启容器docker restart myphp56

    再次测试!输入 Docker mysql57的账号密码 : root /123456http://192.168.1.184:8080/index.php出现新问题

    应该是 mysqli 扩展安装的不对!点进去 phpmyadmin 的文档http://192.168.1.184:8080/doc/html/faq.html#faqmysql也没有找到我的问题百度半天也只看到缺少 mysqli 扩展的文章

    尝试在 docker 容器内使用 pecl 安装pecl install pdo pdo_mysql...Makefile:208: recipe for target 'pdo_dbh.lo' failedmake: *** [pdo_dbh.lo] Error 1ERROR: `make' failed最后是失败的

    pecl install mysqliNo releases available for package "pecl.php.net/mysqli"install failed干脆就没有?

    从头来过的时候,发现我抄写的博客里面后一个少了一个字母 i错误的原文 ./docker-php-ext-install mysql正确的扩展 ./docker-php-ext-install mysqli罪过!罪过!

    最终的正确结果如下:

    到这里,利用了 Docker 里面的 PHP 5.6,Docker 里面的 mysql 5.7,只在宿主机上安装了 nginx,配置了一个支持 php+mysql 的网站!这种方式可以用来在同一个服务器上配置不同版本的 php 或 mysql,而无需在同一个服务器上安装若干不同版本的php 和 mysql同一个服务器上多个版本的php,会不会很烦?多个版本的mysql ,会不会头大?