🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名 →

路径(十九):在本地 CentOS 7 上搭建 Web 开发环境 — phpMyAdmin

我们可以在命令行工具下面管理 MySQL / MariaDB 数据库。想要个图形界面的话,可以使用 phpMyAdmin,通过浏览器直接管理服务器的数据库管理系统,添加用户,设置密码,创建数据库,导入导出数据等等。

安装

在很多 Linux 类型的系统上都可以使用包管理工具去安装  phpMyAdmin,比如在 CentOS 系统里,先为系统安装 epel 仓库,然后就可以通过 yum install phpmyadmin 安装了。不过我们之前搭建的 Web 环境,用的 php 版本是 5.6,跟 phpmyadmin 依赖的包有冲突,它需要一个低版本的 php ,所以我们只能使用手工安装的方法。

先把 phpMyAdmin 下载到系统上,http://www.phpmyadmin.net/ ,点击 Download 会带你到下载的页面,页面上的 Direct link 是直接下载 phpMyAdmin 的链接,复制一下这个复制的地址,然后使用 curl 去下载它,像这样:

cd ~

curl -L http://jaist.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.3.8/phpMyAdmin-4.3.8-all-languages.zip -o phpmyadmin.zip

先进入到用户主目录的下面,然后用 curl ,后面加了一个 -L 参数,指定了下载的地址,然后用一个 -o 参数,指定了一下,下载以后这个文件的名字。下载完成以后,用 ls 命令查看一下目录下的文件,你会看到 phpmyadmin.zip,解压 .zip 文件,先去安装一个 unzip 工具:yum install unzip ,然后:

unzip phpmyadmin.zip

再用 ls 命令查看一下当前目录下的东西,会出现解压之后的目录,目录的名称取决于你下载的 phpMyAdmin 的版本,我这里现在是 phpMyAdmin-4.3.8-all-languages ,把这个目录复制一份到 nginx 定义的服务器的根目录下面,为了安全一点,你可以把目录的名字修改成一个不常用的名字,在之前的配置 nginx 的文章里,定义了一个服务器,它的根目录是 /vagrant/main/public ,所以可以这样:

mv phpMyAdmin-4.3.8-all-languages /vagrant/main/public/phpmyadmin

现在,打开浏览器,输入为 nginx 服务器绑定的主机名,后面加上 phpMyAdmin 所在的目录名,http://ninghao.dev/phpmyadmin 。显示了一个错误:

QQ20150129-2

引起这个错误的原因是 php 没有权限把 session 写到指定的目录里,这些 session 文件保存的位置是在 php 的配置文件里定义的,用我们前面测试 php 创建的 phpinfo.php 可以查看这个目录的位置,在浏览器里打开这个文件,搜索 session.save_path:

session.save_path	/var/lib/php-fpm/session

这个 /var/lib/php-fpm/session 是保存 session 用的目录,这个目录现在属于 root 这个用户,我们的 php-fpm 是用 vagrant 用户运行的,所以,你可以把这个目录的拥有者改成 vagrant :

chown vagrant /var/lib/php-fpm/session

完成以后,可以用 ls -la 命令查看这个目录的拥有者。回到浏览器,刷新,会显示一个登录的页面,使用 MySQL / MariaDB 系统里的用户与密码登录一下。

QQ20150129-5

配置

登录到 phpMyAdmin 以后,在页面底部会显示 “ 配置文件现在需要一个短语密码。” 或 “ The configuration file now needs a secret passphrase (blowfish_secret). ” , 你需要在 phpMyAdmin 的配置文件里的 blowfish_secret 这个配置里面去设置一个密码,phpMyAdmin 会用到这个密码,加密 Cookie 。phpMyAdmin 的相关配置要放在一个叫 config.inc.php 的文件里,如果这个文件不存在,你可以复制一份 config.sample.inc.php,命名为 config.inc.php 。进入到 phpMyAdmin 所在的目录以后:

cp config.sample.inc.php config.inc.php

然后去生成一串随机的密码,可以使用 openssl 去做:

openssl rand -base64 32

返回:

AhONip2q+KmANQJfbzx7NC+j+hsGRKuhuQi8ClJG4mk=

复制返回来的随机密码,然后打开 config.inc.php,搜索 $cfg['blowfish_secret'] ,把复制的密码粘贴到这个配置的后面。

$cfg['blowfish_secret'] = 'AhONip2q+KmANQJfbzx7NC+j+hsGRKuhuQi8ClJG4mk=';

保存配置文件,回到浏览器,重新登录,警告就会消失了。

安全

在生产环境下使用 phpMyAdmin,所有人也都可以看到 phpMyAdmin 的登录页面,虽然他们不知道你的数据库的用户名跟密码,不过还是挺吓人的。我们可以配置一下 nginx ,在显示 phpMyAdmin 登录页面之前,验证一下用户的身份,同样需要输入用户名还有密码,成功以后,才能进入到 phpMyAdmin 的登录页面,然后使用数据库管理系统上的用户登录。

我们要做的是创建一个密码文件,文件里的内容就是用户名与对应的密码,然后再去设置一下 nginx 的服务器配置,访问 phpMyAdmin 的时候,用密码文件里的用户名跟密码验证用户的身份。这个密码需要用 crypt() 加密一下,可以使用 openssl 去做这件事:

openssl passwd

提示你输入要加密的密码,输入好以后,回车,又会提示 Verifying - Password,再输入一次密码。再次回车,会返回加密以后的密码,像这样:

OPgfaLSmAFgQM

复制一下这串加密之后的密码,下面再去创建一个密码文件,进入到 nginx 的配置文件所在的目录:

cd /etc/nginx/conf.d

创建一个文件叫 pma_pass(意思是 phpMyAdmin password ),可以使用 vim :

vim pma_pass

文件里的内容使用 username:password 的形式,像这样:

ninghao:OPgfaLSmAFgQM

打开服务器的配置文件,之前我把 phpmyadmin 放在了 ninghao.dev.conf 这个配置文件定义的服务器的根目录下面,所以,可以打开这个配置文件去编辑一下,在 server 配置区块里面再添加一个 location 区块,去匹配 phpmyadmin 这个目录,然后在这个配置区块里,用 auth_basic 指令设置一个登录窗口的提示,再用 auth_basic_user_file 指令设置一下密码文件的位置:

  location /phpmyadmin {
    auth_basic "Login Please";
    auth_basic_user_file /etc/nginx/conf.d/pma_pass;
  }

重新加载一下 nginx:service nginx reload。现在,当请求查看服务器下面的 phpmyadmin 这个目录的时候,就会先让你用 pma_pass 文件里设置的用户名,还有你设置的密码登录一下,注意这个密码是使用 openssl 加密之前的那个密码。现在,整个配置文件的内容是这样的:

server {
  listen        80;
  server_name   ninghao.dev www.ninghao.dev;
  root          /vagrant/main/public;
  index         index.php index.html index.htm;

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  location /phpmyadmin {
    auth_basic "Login Please";
    auth_basic_user_file /etc/nginx/conf.d/pma_pass;
  }
  
}

QQ20150129-7

路径 CentOS phpMyAdmin nginx

评论

皓哥,安装了phpmyadmin访问却显示空白页,查了下说安装 yum install php-mbstring -y即可,结果出现了冲突: Processing Conflict: php56u-mbstring-5.6.4-1.ius.centos7.x86_64 conflicts ph p-mbstring < 5.6,这个要怎么弄呀?

说明你已经安装了更高版本的 mbstring 扩展,你之前配置 php 的时候,安装过这个扩展。问题,可能是 nginx 配置文件的问题,你在 server 区块里添加一个 index index.php index.html;

还是没用

再重新做一次,记得重启 nginx 。

错误越来越多了,现在连访问phpinfo.php都出错了:The page you are looking for is not found.

没事,你再检查一下。1,安装 nginx,2,安装 php-fpm,3,创建 nginx 配置文件(放在 /etc/nginx/conf.d 下面)。4,修改 nginx 的用户为 vagrant,5,修改 php-fpm 的用户也为 vagrant ,6,启动 nginx,7,启动 php-fpm。就是这几步,每次修改了配置文件以后,你需要重新加载服务,用 service xxx reload 命令。

修改nginx的用户为vagrant怎么设置?

session.save_path /var/lib/php/session 我的路径是这个 但是我查找没/session 文件夹 ,于是我创建一下 ,phpmyadmin 安装后无法登陆 但是命令行正常登陆

,phpmyadmin 下方出现报错

Warning in ./libraries/session.inc.php#101
session_start(): open(/var/lib/php/session/sess_8vvnrmj9lm62kqbl6seudigpi679n7l5, O_RDWR) failed: Permission denied (13)

Backtrace

./libraries/session.inc.php#101: session_start()
./libraries/common.inc.php#352: require(./libraries/session.inc.php)
./index.php#12: require_once(./libraries/common.inc.php)
是这个

这是因为目录权限的问题,你可以把 php-fpm 的用户修改成 vagrant ,这个用户是在 /etc/php-fpm.d/www.conf 这个配置文件里修改。然后去把 session 这个目录的拥有者,修改成 vagrant ,可以使用 chmod 命令。像这样:chmod -R vagrant /var/lib/php/session ,完成后,重启 php-fpm 。

没有按照《路径(十四):在本地 CentOS 7 上搭建 Web 开发环境 — PHP》中修改目录权限,所以现在是这样的[root@localhost php-fpm]# ls -la
total 4
drwxr-xr-x. 4 root root 36 Feb 11 01:59 .
drwxr-xr-x. 31 root root 4096 Feb 11 07:46 ..
drwxrwx---. 2 root php-fpm 50 Feb 11 08:11 session
drwxrwx---. 2 root php-fpm 6 Jan 25 00:17 wsdlcache
并且在进入http://ninghao.dev/phpmyadmin时也没有报错,标记一下,方便后面查看

请教:cp config.sample.inc.php config.inc.php后,登陆phpmyadmin提示:“配置文件权限错误,不应任何用户都能修改!”
为什么呢??

chmod -cR 755 phpmyadmin
提示成功了,查看权限仍然没有变

最终你这个问题解决了没?我也遇到同样的问题

可以通过修改phpmyadmin的配置文件解决:
找到phpmyadmin/libraries/config.default.php文件,
把 $cfg[‘CheckConfigurationPermissions’] 修改为false。

皓哥,安装完phpmyadmin后打开页面是空白的,什么都没有。怎么办,急!

没事,一般就是目录权限的问题,你是在服务器上安装的,还是在本地虚拟机上安装的? 检查你的 PHP 的 Session 目录的权限。

将文件复制到网站根目录之后,访问www.xxx.com/phpmyadmin,出现403 Forbidden错误,该怎么解决啊?

您可以查看一下 NGINX 还有 PHP-FPM 输出的错误日志,里面应该会有原因。可以把日志贴到 社区 里面。

我的也是空白页,session目录权限是vagrant

我检查了一下,是 NGINX 的配置里面,少了一行。在处理 PHP 请求的 location 区块里面,添加一行: fastcgi_index index.php;

我把 fastcgi_index index.php;放fastcgi.conf文件里,reload了php-fpm和nginx还是空白

看一下错误日志吧。多数都是因为权限问题。

贴在社区里头了,貌似都是权限问题

最后一步,我一把auth_basic 和auth_basic_user_file放进去,nginx就启动失败

您看看是不是语法写错了,比如结尾少了分号之类的。

按照本我的配置基本都成功了,就是在最后 给phpmyadmin配置身份登录这一部分,按照您的教程做下来,遇到一个问题,就是 输入用户名 密码后,密码要是不对,输入框会提示重新输入,但当我输入正确的密码后,页面就变成了 403 还是404的页面,并不能转到phpmyadmin的登陆页面,这个怎么办呀?

发现一个问题,location /phpmyadmin 是好像是区分大小写的,phpmyadmin 与 phpMyAdmin 是不一样的。

我在本地环境下,phpMyAdmin 版本是 4.7.2,目录名为:phpMyAdmin , location 区块设置为 /phpmyadmin,浏览器 /phpMyAdmin 不弹出登录验证对话框。(Safari 与 Chrome 一样)

收到 :)

皓哥,我 phpMyAdmin 使用 http://主机IP地址/phpMyAdmin,想为IP地址添加 SSL 证书,实现 https 访问,想请问有没有可行的方式?阿里云免费的证书好像不支持直接IP地址申请。
(CentOS 7.3,LEMP)

嗯,你不能使用 IP,加个域名吧。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点