存档

作者存档

CentOS 7 下搭建高可用集群(转)

2020年2月27日 没有评论

一、安装集群软件
必须软件pcs,pacemaker,corosync,fence-agents-all,如果需要配置相关服务,也要安装对应的软件。

二、配置防火墙
1、禁止防火墙和selinux
# systemctl disable firewalld
# systemctl stop firewalld
2、设置防火墙规则
# firewall-cmd –permanent –add-service=high-availability
# firewall-cmd –add-service=high-availability
三、各节点之间主机名互相解析
分别修改2台主机名分别为node1和node2,在CentOS 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。

#vi /etc/hostname
node1
#systemctl restart network.service
#hostname
node1
配置2台主机的主机表,在/etc/hosts中加入

192.168.122.168 node1
192.168.122.169 node2
四、各节点之间时间同步
在node1和node2分别进行时间同步,可以使用ntp实现。

[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1 为时间服务器
五、各节点之间配置ssh的无密码密钥访问
下面的操作需要在各个节点上操作。

# ssh-keygen -t rsa -P ‘’ #这个生成一个密码为空的公钥和一个密钥,把公钥复制到对方节点上即可
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 #对方主机名用登录用户名
两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名, 192.168.122.168 node1 192.168.122.169 node2

# ssh node2 ‘date’;date #测试一下是否已经互信
六、通过pacemaker来管理高可用集群
1、创建集群用户
为了有利于各节点之间通信和配置集群,在每个节点上创建一个hacluster的用户,各个节点上的密码必须是同一个。

# passwd hacluster

Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2、设置pcsd开机自启动
# systemctl start pcsd.service
# systemctl enable pcsd.service
3、集群各节点之间进行认证
# pcs cluster auth node1 node2Username: hacluster Password: node1: Authorized node2: Authorized
4、创建并启动集群
[root@z1 ~]# pcs cluster setup –start –name my_cluster node1 node2

node1: Succeeded
node1: Starting Cluster…
node2: Succeeded
node2: Starting Cluster…
5、设置集群自启动
# pcs cluster enable –all
6、查看集群状态信息
[root@z1 ~]# pcs cluster status
7、设置fence设备
这个可以参考
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默 认配置目前尚不可用,这可以通过如下命令验证:

#crm_verify -L -V
可以通过如下面命令禁用stonith:

#pcs property set stonith-enabled=false(默认是true)
8、配置存储
高可用集群既可以使用本地磁盘来构建纯软件的镜像型集群系统,也可以使用专门的共享磁盘装置来构建大规模的共享磁盘型集群系统,充分满足客户的不同需求。
共享磁盘主要有iscsi或DBRD。本文并没有使用共享磁盘

9、配置浮点ip
不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择192.168.122.101作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群 每30秒检查它一次。

# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.122.170 cidr_netmask=24 op monitor interval=30s
# pcs update VIP op monitor interval=15s
10、配置apache服务
在node1和node2上安装httpd ,确认httpd开机被禁用。

# systemctl status httpd.service;
配置httpd监控页面(貌似不配置也可以通过systemd监控),分别在node1和node2上执行。

# cat > /etc/httpd/conf.d/status.conf << EOF
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
EOF
首先我们为Apache创建一个主页。在centos上面默认的Apache docroot是/var/www/html,所以我们在这个目录下面建立一个主页。
node1节点修改如下:

[root@node1 ~]# cat

Hello node1

END
node2节点修改如下:

[root@node2 ~]# cat

Hello node2

END
下面语句是将httpd作为资源添加到集群中:

#pcs resource create WEB apache configfile=”/etc/httpd/conf/httpd.conf” statusurl=”http://127.0.0.1/server-status”
11、创建group
将VIP和WEB resource捆绑到这个group中,使之作为一个整体在集群中切换(此配置为可选)。

# pcs resource group add MyGroup VIP
# pcs resource group add MyGroup WEB
12、配置服务启动顺序
以避免出现资源冲突,语法:(pcs resource group add的时候也可以根据加的顺序依次启动,此配置为可选)。

# pcs constraint order [action] then [action]
# pcs constraint order start VIP then start WEB
13、指定优先的 Location (此配置为可选)
Pacemaker 并不要求你机器的硬件配置是相同的,可能某些机器比另外的机器配置要好。这种状况下我们会希望设置:当某个节点可用时,资源就要跑在上面之类的规则。为了达到这个效果我们创建location约束。同样的,我们给他取一个描述性的名字(prefer-node1),指明我们想在上面跑WEB 这个服务,多想在上面跑(我们现在指定分值为50,但是在双节点的集群状态下,任何大于0的值都可以达到想要的效果),以及目标节点的名字:

# pcs constraint location WEB prefers node1=50
# pcs constraint location WEB prefers node2=45
这里指定分值越大,代表越想在对应的节点上运行。

14、资源粘性(此配置为可选)
一些环境中会要求尽量避免资源在节点之间迁移,迁移资源通常意味着一段时间内无法提供服务,某些复杂的服务,比如Oracle数据库,这个时间可能会很长。为了达到这个效果,Pacemaker 有一个叫做“资源粘性值”的概念,它能够控制一个服务(资源)有多想呆在它正在运行的节点上。
Pacemaker为了达到最优分布各个资源的目的,默认设置这个值为0。我们可以为每个资源定义不同的粘性值,但一般来说,更改默认粘性值就够了。资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示负无穷,inf表示正无穷。

# pcs resource defaults resource-stickiness=100
常用命令汇总:
查看集群状态:#pcs status

查看集群当前配置:#pcs config

开机后集群自启动:#pcs cluster enable –all

启动集群:#pcs cluster start –all

查看集群资源状态:#pcs resource show

验证集群配置情况:#crm_verify -L -V

测试资源配置:#pcs resource debug-start resource

设置节点为备用状态:#pcs cluster standby node1

分类: Linux, 解决方案 标签: ,

Centos7 firewalld·动态防火墙使用方法示例

2020年1月9日 没有评论

# systemctl start firewalld # 启动,
# systemctl enable firewalld # 开机启动
# systemctl stop firewalld # 关闭
# systemctl disable firewalld # 取消开机启动
具体的规则管理,可以使用firewall-cmd ,具体的使用方法可以
$ firewall-cmd –help

–zone=NAME # 指定 zone
–permanent # 永久修改,–reload 后生效
–timeout=seconds # 持续效果,到期后自动移除,用于调试,不能与 –permanent 同时使用
1. 查看规则

查看运行状态
$ firewall-cmd –state
查看已被激活的 Zone 信息
$ firewall-cmd –get-active-zones
public
interfaces: eth0 eth1
查看指定接口的 Zone 信息
$ firewall-cmd –get-zone-of-interface=eth0
public
查看指定级别的接口
$ firewall-cmd –zone=public –list-interfaces
eth0
查看指定级别的所有信息,譬如 public

$ firewall-cmd –zone=public –list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client http ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

查看所有级别被允许的信息
$ firewall-cmd –get-service
查看重启后所有 Zones 级别中被允许的服务,即永久放行的服务
$ firewall-cmd –get-service –permanent
2. 管理规则

# firewall-cmd –panic-on # 丢弃
# firewall-cmd –panic-off # 取消丢弃
# firewall-cmd –query-panic # 查看丢弃状态
# firewall-cmd –reload # 更新规则,不重启服务
# firewall-cmd –complete-reload # 更新规则,重启服务
添加某接口至某信任等级,譬如添加 eth0 至 public,永久修改
# firewall-cmd –zone=public –add-interface=eth0 –permanent

设置 public 为默认的信任级别
# firewall-cmd –set-default-zone=public
a. 管理端口

列出 dmz 级别的被允许的进入端口
# firewall-cmd –zone=dmz –list-ports

允许 tcp 端口 8080 至 dmz 级别
# firewall-cmd –zone=dmz –add-port=8080/tcp

允许某范围的 udp 端口至 public 级别,并永久生效
# firewall-cmd –zone=public –add-port=5060-5059/udp –permanent

b. 网卡接口

列出 public zone 所有网卡
# firewall-cmd –zone=public –list-interfaces

将 eth0 添加至 public zone,永久
# firewall-cmd –zone=public –permanent –add-interface=eth0

eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
# firewall-cmd –zone=work –permanent –change-interface=eth0

删除 public zone 中的 eth0,永久
# firewall-cmd –zone=public –permanent –remove-interface=eth0

c. 管理服务

添加 smtp 服务至 work zone
# firewall-cmd –zone=work –add-service=smtp

移除 work zone 中的 smtp 服务
# firewall-cmd –zone=work –remove-service=smtp

d. 配置 external zone 中的 ip 地址伪装

查看
# firewall-cmd –zone=external –query-masquerade

打开伪装
# firewall-cmd –zone=external –add-masquerade

关闭伪装
# firewall-cmd –zone=external –remove-masquerade

e. 配置 public zone 的端口转发

要打开端口转发,则需要先
# firewall-cmd –zone=public –add-masquerade

然后转发 tcp 22 端口至 3753
# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=3753

转发 22 端口数据至另一个 ip 的相同端口上
# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100

转发 22 端口数据至另一 ip 的 2055 端口上
# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100

f. 配置 public zone 的 icmp

查看所有支持的 icmp 类型
# firewall-cmd –get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

列出
# firewall-cmd –zone=public –list-icmp-blocks

添加 echo-request 屏蔽
# firewall-cmd –zone=public –add-icmp-block=echo-request [--timeout=seconds]

移除 echo-reply 屏蔽
# firewall-cmd –zone=public –remove-icmp-block=echo-reply

g. IP 封禁

# firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4′ source address=’222.222.222.222′ reject”

分类: Linux 标签: ,

rm删除文件恢复

2019年12月3日 没有评论

误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各种风险问题。方法总比问题多~
说在前面的话
针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收站,删除后的文件可以到垃圾箱寻回,要知道linux文件修复比较费劲,网络上面的文档也是五花八门。所以本次研究一种比较靠谱的文件和目录恢复方法,也给维护人员留一条后路。
分析对比debugfs. testdisk 6.14. extundelete,对比各自官网介绍和操作说明本次决定研究extundelete对文件和目录的恢复操作。
extundelete下载官网地址:https://pkgs.org/download/extundelete

Linux下文件误删除,使用extundelete恢复测试过程
1. 给虚拟主机添加一块磁盘,磁盘为/dev/sdb,如下:

2. 格式化磁盘,并进行挂载
3. # mkfs.ext4 /dev/sdb
4. # mkdir /usr/local/dbdata/
# mount /dev/sdb /usr/local/dbdata/

5. 测试误操作删除以下文件
6. /usr/local/dbdata/gperftools-2.4.tar.gz #文件
7.
/usr/local/dbdata/pcre-8.32 #目录
执行误操作:
# rm -rf /usr/local/dbdata/gperftools-2.4.tar.gz /usr/local/dbdata/pcre-8.32
8. 将误操作所在分区进行只读保护
如果确定文件被误删,在没有备份的情况下请马上对分区实施写入保护(预防新的写入覆盖误删的块数据,因此权限给只读):
# mount -o remount,ro /dev/sdb
# mount -o remount,ro /usr/local/dbdata/
9. 数据恢复工具安装
工具安装部署
官方网站是http://extundelete.sourceforge.net/ ,其目前的稳定版本是extundelete-0.2.4.
工具下载
# wget https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
解压安装
依赖包
# yum -y install gcc-c++ e2fsprogs.x86_64 e2fsprogs-devel.x86_64
# tar -jxvf extundelete-0.2.4.tar.bz2
# cd extundelete-0.2.4
# ./configure
# make && make install
验证安装结果
# extundelete -v
10. 文件恢复过程
恢复指定文件:
原理:从根节点(inode=2)开始找到被删除文件的i节点,然后recover i节点。
以下是模拟删除gperftools-2.4.tar.gz(文件)和pcre-8.32 (目录)
先检测被删除的文件有哪些:
# extundelete /dev/sdb –inode 2

从圈出来的可以看到,有以下两个
gperftools-2.4.tar.gz 15 Deleted

pcre-8.32 655361 Deleted
注意:恢复过程不要在误删分区进行,谨防inode. block块相互覆盖
先恢复文件(可根据文件名进行恢复):
# extundelete /dev/sdb –restore-file gperftools-2.4.tar.gz

恢复目录(根据目录名恢复):
# extundelete /dev/sdb –restore-directory pcre-8.32

最后会在当前目录下看到一个名为RECOVERED_FILES的目录,在目录里就可以看到被误删除的文件以及目录:
说在后面的话

根据上面操作证明extundelete 工具可以实现对误删数据的恢复,而且操作简单。
总结:
1. 使用rm一定要谨慎
2. 磁盘按照功能进行分区是必要的
3. 最少掌握一种数据恢复方式

centos 下查看本机公网IP

2019年11月6日 没有评论

centos 下查看本机公网IP

1
curl ifconfig.me
分类: Linux, 解决方案 标签: ,

记一次驱动级浏览器主页被修改的解决过程

2019年11月2日 没有评论

这段时间也不知道怎么的,打开IE自动跳到hao123.1668pg.com,打开360浏览器跳到hao360.1668pg.com,打开google跳到baidu.1668pg.com

用360主页锁定都没用。终于发现也有人和我一样的情况。要用更厉害些的一种办法删除这种东西。用360的系统急救箱扫了一遍。扫出来这么一个驱动服务“IQGoGVItrvtHoE.sys”的东西。

启动项目中也有类似在c:\windows\system32\drivers\这目录下的。一并清了

然后重启机器就解决问题了。

哎现在动不动这些恶意软件都绑这种驱动级的。太恶心了。

远程桌面无法复制粘贴传输文件解决办法(转)

2019年10月15日 没有评论

远程服务器,复制粘贴文件到服务器的时候卡了一下,后来就无法复制粘贴了,今天查了一下资料终于找到原因了,特此给大家分享一下解决办法。

远程桌面无法复制粘贴传输文件解决办法

电脑、远程服务器
检查本机电脑

第一步:打开远程桌面连接。
点开电脑左下角的开始菜单,找到远程桌面连接,点开。如果你不常用远程桌面连接,那么这个图标就在附件里面,仔细找找就看到了。
远程桌面无法复制粘贴传输文件解决办法

第二步:点开远程桌面连接的对话框,在对话框的左下角找到“显示选项”点开它。
远程桌面无法复制粘贴传输文件解决办法

第三步:点开显示选项后,找到“本地资源”这一栏,点开它,找到粘贴板,勾选中。
远程桌面无法复制粘贴传输文件解决办法

检查服务器

第一步:打开远程的服务器,在服务器的任务栏随便一块空白处右击鼠标,选择“启动任务管理器”。
远程桌面无法复制粘贴传输文件解决办法

第二步:在打开的任务管理器中,我们找到“rdpclip.exe”这个进程,如果没有找到就算了。
远程桌面无法复制粘贴传输文件解决办法

第三步:找到这个进程后,选择”结束进程”,如果没有找到这个进程往下看。
远程桌面无法复制粘贴传输文件解决办法

第四步:第二步跟第三步结束掉的进程我们要恢复回来,我们在服务器的开始菜单找到运行的框,在运行框内输入”rdpclip“然后会显示这个进程出来,直接回车。
远程桌面无法复制粘贴传输文件解决办法

最后:做完服务器的这个操作后,然后再往服务器复制粘贴就成功了,小编已经解决了,你可以试试。
远程桌面无法复制粘贴传输文件解决办法

注意事项
服务器端没有找到rdpclip.exe这个进程的可以创建了结束再创建。

分类: 解决方案 标签:

蜘蛛池是干什么的?对网站收录有好处吗?

2019年10月6日 没有评论

在互联网上争取做好营销的,这款工具难免不得不懂。可以简单的来说蜘蛛池就是一种通过利用大型平台权重来获得百度收录以及排名的一种程序。蜘蛛池其中的一个功能就是可以帮助用户将大量的长尾关键字利用大型平台推送到百度进行收录与排名,通过百度蜘蛛池程序用户可以在短时间内将大量包含广告信息的页面推送到互联网中。并且这一切都是全自动化完成。

蜘蛛池其实就是一种特殊的外链,网站一般外链是我们自己做到某个网站的内页(发外链)或和谁交换的友情链接,虽然现在对百度权重等项目几乎没什么影响了,但链接的口多了就容易让百度等的蜘蛛顺着这些口爬进我们的网站,如果你的网站质量不错(编程规范、内容好、更新及时、数量足等等)百度就可能很喜欢,常来爬取你的网站。
蜘蛛池不一定是什么网站就能把你要做的关键词都能提升排名,最最关键的还是网站质量和用户体验,脱离了这个什么都是胡说。所谓蜘蛛池,指的是做大量泛站让搜索引擎收录,作为一个属于自己的外链资源。当有新的网站或新的页面时,把新URL放入到这些泛站资源页面上,可以马上获得蜘蛛的抓取和权重的一个传递。

说白了蜘蛛池起的就是一种辅助作用,想当于一个中间人,可以让你和姑娘(搜索引擎各种蜘蛛)多见几次,但能否XX还看你小子自己的本事。而它的原理就是有些服务器运营商把你的网站链接到整个服务器上的所有网站上去了,我们通常把这些服务器运营商手上的服务器称为他们自己养的蜘蛛,就这些服务器,据我所知有分权重蜘蛛和非权重蜘蛛的,还有分普通池和繁殖池的,好像算法上繁殖池好一些,因为这种好像可以让你的网站自己模拟蜘蛛爬行。

那么搜索引擎收录一个页面的机制是什么样的,有哪些考虑?
搜索引擎收录页面的规则可不是发现页面就可以收录,并不是解决了所谓的“孤岛”问题之后,页面就可以很快被收录了。所以,关键点并不是在于发现。

搜索引擎收录页面简单列列这些方面的因素至少有影响:
1.新站的时间短。我觉得这个影响是最大的。就是如果你是个新网站,你的内页收录上就是慢。即使你的内容已经开始在慢慢走向正规了,但是有些不同的类型的页面,收录依然是慢。这点,我觉得如果不是相当数量的高质量链接,是很难改变这个情况。
2.网站整体权重。如果是在新站周期内,你再加什么蜘蛛池也没用。可能反而有反面作用。网站整体权重会影响网站内页的收录速度。
3.搜索收录可能分页面类型。例如,我们互联网十八般武艺的常规文章页收录都比较及时。但是专题页的收录非常缓慢,我们做了几个专题,现在超过了1个月时间还没收录。所以,这里面搜索引擎可能已经细化了收录策略。对不同的页面类型采取不同的收录机制。
4.页面内容质量。页面内容的质量当然也会影响到页面的收录速度,这点也是肯定会有影响。
5.网站更新频率。我们在「优化抓取频率的重要性」这篇文章里面也说过。其实要提高搜索引擎蜘蛛的来访次数,唯一的方法还是要通过网站本身的内容更新。频繁更新有质量的内容,才能够提高蜘蛛的来访次数。如果本身内容更新不多,外部引流的蜘蛛过多,最终发现没什么内容索引,蜘蛛来访的次数也会下降。
我觉得从影响收录的影响来说,前面2点影响最大,也就是网站权重的影响。如果权重不高,又是新站的话,内容的收录肯定是不会那么顺利。
蜘蛛池本质上是希望解决一个什么问题呢,核心就是引蜘蛛的问题。引蜘蛛的目的是在于让蜘蛛发现网站里面这些新页面或者是还没被收录的页面。

分类: 搜索&seo 标签: ,

Centos7系统安装配置GitLab服务器

2019年9月3日 没有评论

1、首先

sudo yum update
更新当前库

2、执行以下命令

sudo yum install curl policycoreutils openssh-server openssh-clients -y
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd –permanent –add-service=http
sudo systemctl reload firewalld
其中 sudo yum install postfix 可能会报错,部分环境可能已经配置好此步,报错直接跳过。

3、添加gitlb官方地址至源文件

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
提示如下:

The repository is setup! You can now install packages.
即可以开始安装

执行安装:

sudo yum install gitlab-ce -y
提示如下:

Installed:
gitlab-ce.x86_64 0:9.4.2-ce.0.el7

Complete!
即安装成功

4、执行配置脚本

sudo gitlab-ctl reconfigure
此步骤大概会执行3分钟左右,结果大概如下:

unning handlers:
Running handlers complete
Chef Client finished, 362/517 resources updated in 03 minutes 40 seconds
gitlab Reconfigured!
即可通过访问服务器地址访问,并进行初始化配置(默认为80端口,配置文件为:/etc/gitlab/gitlab.rb)

分类: Linux, 网络产品 标签: ,

Centos同步网络时间方法(tcp和udp方式)

2019年8月7日 没有评论

ntpdate只能用udp协议来同步时间,rdate支持用tcp协议或udp协议同步时间。

使用ntpdate更新时间

yum -y install ntpdate

/usr/sbin/ntpdate ntp1.aliyun.com

使用rdate更新时间

yum -y install rdate

查看时间rdate time-b.nist.gov

TCP方式更新(对时)服务器时间:rdate -s time-b.nist.gov或rdate -s time.nist.gov

UDP方式更新(对时)服务器时间:rdate -u time-b.nist.gov或rdate -u time.nist.gov

docker-compose搭建nginx+php+mysql

2019年8月4日 没有评论

转自: https://blog.csdn.net/miwumuge/article/details/83386679

安装Docker Compose之前应先确保系统已经安装了Docker

安装Docker Compose

1.下载Docker Compose

sudo curl -L “https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

2.添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

3.测试

$ docker-compose –version
docker-compose version 1.22.0, build 1719ceb

搭建nginx+php+mysql

系统环境

CentOS minimal 7.2.1511
Docker CE 18.06.1-ce

docker镜像版本:
php 7.2.11-fpm
mysql 8.0
nginx 1.15

构建目录结构

www
├── docker-compose.yml
├── html
│ └── index.php
├── mysql
├── nginx
│ └── default.conf
└── php
└── Dockerfile

docker-compose.yml

version: ‘3.7’
services:
nginx:
image: nginx
ports:
– “80:80″
depends_on:
– php
volumes:
– “$PWD/nginx/default.conf:/etc/nginx/conf.d/default.conf”
– “$PWD/html:/usr/share/nginx/html”
networks:
– app_net
container_name: “compose-nginx”
php:
build: ./php
image: php:fpm
ports:
– “9000:9000″
volumes:
– “$PWD/html:/var/www/html”
networks:
– app_net
container_name: “compose-php”
mysql:
image: mysql
ports:
– “3306:3306″
environment:
– MYSQL_ROOT_PASSWORD=123456
networks:
app_net:
ipv4_address: 10.10.10.1
container_name: “compose-mysql”
networks:
app_net:
driver: bridge
ipam:
config:
– subnet: 10.10.0.0/16

html/index.php

phpinfo();

nginx/default.conf

server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}

error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
# Fastcgi服务器和程序(PHP,Python)沟通的协议.
location ~ \.php$ {
# php容器的网站根目录
root /var/www/html/;
# 设置监听端口
fastcgi_pass php:9000;
fastcgi_index index.php;
# 设置脚本文件请求的路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 引入fastcgi的配置文件
include fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}

因为nginx镜像里没有fastcgi.conf文件,就需要引入fastcgi_params文件并配置SCRIPT_FILENAME参数
php/Dockerfile

FROM php:fpm

RUN apt-get update \
&& apt-get install -y iputils-ping \
&& docker-php-ext-install mysqli && docker-php-ext-enable mysqli

启动服务

# www目录下执行
docker-compose up -d

测试

浏览器访问http://localhost,会出现php的介绍文档

如果在虚拟机里搭建的项目,localhost要改成虚拟机的IP地址
遇到的问题

在docker-compose.yml文件所在目录执行

$ docker-compose up -d

报错:

ERROR: Couldn’t connect to Docker daemon at http+docker://localhost – is it running?
If it’s at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

解决方法是把当前用户添加到docker用户组,然后重新登录即可

sudo usermod -aG docker ${USER}

参考网址

https://docs.docker.com/compose/install/

https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements

分类: 编程实践 标签: