Docker 部署Lnmp 论坛

利用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模块的原因’
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值