利用docker部署lnmp安装论坛。
环境
server3 172.25.40.3
docker搭建
1.配置7.5镜像的yum 源,便于解决依赖性
[root@server1 ~]# cat /etc/yum.repos.d/yum.repo
[rhel7.5]
name=rhel
baseurl=http://172.25.40.250/rhel7.5
gpgcheck=0
docker 软件包列表:
docker-ce-18.09.6-3.el7.x86_64.rpm
docker-ce-cli-18.09.6-3.el7.x86_64.rpm
containerd.io-1.2.5-3.1.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm
安装软件解决依赖性:
yum install -y docker-ce-18.09.6-3.el7.x86_64.rpm
docker-ce-cli-18.09.6-3.el7.x86_64.rpm
containerd.io-1.2.5-3.1.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm
开启docker服务
systemctl start docker
systemctl enable docker
yum install -y bash-* #安装tab自动补齐的软件包
配置阿里云加速器
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://93j9d23c.mirror.aliyuncs.com"]
}
部署 lnmp
关闭防火墙、关闭selinux
setenforce 0
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config //永久关闭selinux
systemctl stop firewalld
systemctl disable firewalld //开机不启动防火墙
下载所需要的镜像
下载mysql镜像
docker pull mysql
下载php的镜像
docker pull php:7.1.0-fpm
下载nginx的镜像
docker pull nginx
编写生成mysql容器的脚本并启动脚本
[root@server3 ~]# cat /root/lnmp/docker_mysql.sh
#!/bin/bash
docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=redhat \
-v /usr/lib/mysql:/usr/lib/mysql \
-p 3306:3306 \
-d mysql
[root@server3 ~]# sh /root/lnmp/docker_mysql.sh
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-e 设置环境变量,这里设置mysql的root用户的初始密码
-name 容器的名称、只要求唯一性
编写生成php容器的脚本并启动脚本
[root@server3 ~]# cat /root/lnmp/docker_php.sh
#!/bin/bash
docker run -p 9000:9000 --name php \
-v /docker/code/:/var/www/html \
--link mysql:mysql \
--privileged=true \
-d php:7.1.0-fpm
[root@server3 ~]# sh /root/lnmp/docker_php.sh
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,主机上的/docker/code映射到容器里面 的/var/www/html,如果主机没有这个目录就创建这个目录,或者映射别的目录,但是后面路径要统一
-name 容器的名字
-link 容器与另外一个容器建立联系,这样就可以在当前的容器去使用另一个容器里的服务
编写nginx配置文件,使其支持php;
提示:在容器运行前写好配置文件,在容器运行时便加载进去,不需要后续修改在拷贝到容器
[root@server3 ~]# vim /docker/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /var/www/html; #修改nginx发布目录,nginx容器内的发布目录
index index.html index.htmi index.php; # 这里加入添加php页面
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root html;
fastcgi_pass f8cbaccb61b4:9000; //这里可以用容器ID,也可以用容器IP,都具备唯一性;指向php容器
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
编写生成nginx容器的脚本并启动脚本
[root@server3 ~]# cat /root/lnmp/docker_nginx.sh
#!/bin/bash
docker run -d -p 80:80 --name nginx \
-v /docker/code:/var/www/html \
-v /var/log/nginx:/var/log/nginx \
-v /docker/nginx/conf.d:/etc/nginx/conf.d \
--link php:php \
--privileged=true \
nginx
[root@server3 ~]# sh /root/lnmp/docker_nginx.sh
如果需要修改nginx配置文件:
修改完毕导入配置文件到Nginx 容器里面
[root@server3 ~]# docker cp /docker/nginx/conf.d/default.conf f54fba48016b:/etc/nginx/conf.d/default.conf
进入到容器里面重新加载配置文件
[root@server3 ~]# docker exec -it nginx /bin/bash
[root@f54fba48016b:/etc/nginx# nginx -t #检测Nginx配置文件是否正确
[root@f54fba48016b:/etc/nginx# nginx -s reload #重新加载配置
参数说明
-t 在容器里面生产一个伪终端
-i 对容器内的标准输入(STDIN)进行交互
[root@server3 ~]# docker cp /docker/nginx/conf.d/default.conf f54fba48016b:/etc/nginx/conf.d/default.conf
进入到容器里面重新加载配置文件
测试目录映射
在主机/docker/code 目录下创建php测试页面,会直接映射到容器里面
echo “<?php phpinfo(); ?>” > /docker/code/index.php
将论坛页面压缩包解压到/docker/code/
unzip Discuz_X3.2_SC_UTF8.zip -d /docker/code/
在主机/docker/code/目录下创建文件,会直接映射到容器里面
将解压后的upload目录改名为discuz,便于访问
mv upload discuz
浏览器访问http://172.25.40.3/discuz/
报错原因
自 PHP 5.3 起,该函数已经被弃用,执行它的时候会抛出 E_DEPRECATED 异常。
自 PHP 5.4 起,尝试开启 magic quotes 时该函数会产生一个 E_CORE_ERROR 错误。
解决方法
直接注释掉 // @set_magic_quotes_runtime(0);
点击同意后会出现很多目录不存在和不可写的报错
解决:
[root@server3 discuz]# pwd
/docker/code/discuz
chmod 777 config/ -R
chmod 777 data/ -R
chmod 777 uc_server/ uc_client/ -R
给以上目录增加权限,再刷新
选择全新安装—>填写数据库名(任意) 数据库用户名:root 数据库密码:自己设定的数据库root用户密码
管理员帐号:admin 密码:redhat
6)下面会报数据库连接错误:No such file or directory
解决
编辑php主配置文件:vim /usr/local/lnmp/php/etc/php.ini
修改以下配置:
pdo_mysql.default_socket= /usr/local/lnmp/mysql/data/mysql.sock
mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
以上路径为mysql安装的目录,根据自己的路径填写
重新加载php
/etc/init.d/php-fpm reload
7)再次刷新页面,还是报错:Permission denied
解决
由于 nginx用户 对于 /usr/local/lnmp/mysql/data
目录没有权限
所以:chmod 755 data/
再次刷新,成功安装
8)点击页面中“管理中心”,会出现报错:Please delete install/index.php via FTP!
解决
[root@server5 bbs]# pwd
/usr/local/lnmp/nginx/html/bbs/install
[root@server5 install]# rm -fr index.php
再刷新页面,成功
‘如果把nginx配置文件中php模块注释掉,再刷新页面,会让你下载,这就是打开php模块的原因’