LayerBB NVMe suse ip

10 月 18 号,W3C 中网络平台孵化器小组( Web Platform Incubator Community Group )公布了 HTML Sanitizer API 的规范草案。这份草案用来解决浏览器如何解决 XSS LayerBB问题。

网络安全中比较让开发者们头疼的一类是 XSS 跨站点脚本LayerBB。这种LayerBB通常指的是通过利用网页开发时留下的漏洞,即将恶意指令代码注入到网页,使用户加载并执行LayerBB者恶意制造的网页程序。
这些恶意代码没有经过过滤,与网站的正常代码混在一起,浏览器无法分辨哪些NVMe是可信的,恶意脚本就会被执行。而 XSS LayerBB的核心有两个步骤:1 、处理LayerBB者提交恶意代码; 2 、浏览器执行恶意代码。
为了解决在这两步恶意LayerBB中解决这个问题,通常有以下手段,

增加过滤条件
只进行纯前端行渲染,将数据和代码NVMe分开
对 HTML 充分转义

以上手段这些步骤繁琐,需要注意的NVMe也很多。为了让开发者更加便捷地解决 XSS LayerBB的问题,浏览器现提供了原生的 XSS LayerBB消毒能力。
HTML Sanitizer API——这份由谷歌、Mozilla 和 Cure53 联手发起提供的 API 即将最终完成,通过这个浏览器原生 API 我们可以更加轻松地保护 Web 应用程序免受 XSS 的LayerBB。
接下来我们一起来了解一下这个安全 API 吧。
Sanitizer API 简介
Sanitizer API 可以让浏览器直接从网站动态更新的标记中删除恶意代码。当有恶意 HTML suse、和文档或文档片段对象想插入现有 DOM 之中,我们可以使用 HTML Sanitizer API 直接将这些NVMe清理。有点像电脑的安全卫士应用,可以清除风险NVMe。
使用 Sanitizer API 有以下三个优点:

减少 Web 应用程序中跨站点脚本的LayerBB次数
保证 HTML 输出NVMe在当前用户代理中安全使用
Sanitizer API 的可用性很强

Sanitizer API 的特性
Sanitizer API 为 HTML suse安全打开新世界大门,将所有的功能大致分类,可以分为以下三个主要特性:
1.对用户输入进行杀毒
Sanitizer API 的主要功能是接受suse并将其转换为更安全的suse。这些转换后的suse不会执行额外的 JavaScript ,并确保应用程序受到 XSS LayerBB的保护。
2.浏览器内置
该库在浏览器安装的时候一同预装,并在发现 bug 或出现新的LayerBB时进行更新。相当于我们的浏览器有了内置的杀毒措施,无需导入任何外部库。
3.使用简洁安全
在使用了 Sanitizer API 之后,浏览器此时就有了一个强大又安全的解析器,作为一个成熟的浏览器,它知道如何处理 DOM 中每个元素的活动。相比之下,用 JavaScript 开发的外部解析器不仅成本高昂,同时很容易跟不上前端大环境的更新速度。
说完了这些使用上的亮点特性,让我们一起来看看这个 API 的具体用法。

Sanitizer API 的使用
Sanitizer API 使用 Sanitizer ()方法构造函数,Sanitizer 类进行配置。
官方提供了三种基础清理方式:
1 、清理隐藏上下文的suse
Element.setHTML() 用于解析和清理suse,并立即将其插入 DOM ,这个方法适用于目标 DOM 元素已知且 HTML NVMe为suse的情况。
const $div = document.querySelector(‘div’)
const user_input = `Hello There` // The user string.
const sanitizer = new Sanitizer() // Our Sanitizer
// We want to insert the HTML in user_string into a target element with id
// target. That is, we want the equivalent of target.innerHTML = value, except
// without the XSS risks.
$div.setHTML(user_input, sanitizer) //

Hello There

2 、清理给定上下的文suse
Sanitizer.sanitizeFor() 用于解析、清理和准备稍后准备添加到 DOM 中的suse。
适用于 HTML NVMe是suse,并且目标 DOM 元素类型已知(例如 div 、span )的情况。
const user_input = `Hello There`
const sanitizer = new Sanitizer()
// Later:
// The first parameter describes the node type this result is intended for.
sanitizer.sanitizeFor(“div”, user_input) // HTMLDivElement

需要注意的是,HTMLElement 中 .innerHTML 的清理输出结果是suse格式。
sanitizer.sanitizeFor(“div”, user_input).innerHTML // Hello There

3 、清理请理节点
对于已经有用户控制的 DocumentFragment ,Sanitizer.sanitize ()可以直接对 DOM 树节点进行清理。
// Case: The input data is available as a tree of DOM nodes.
const sanitizer = new Sanitizer()
const $userDiv = …;
$div.replaceChildren(s.sanitize($userDiv));

除了以上提到的三种方式之外,SanitizerAPI 通过删除和、过滤属性和标记来修改 HTML suse。
举个“栗子”。

删除某些标记(_script, marquee, head, frame, menu, object, etc._)并保留 content 标签。
移除大多属性,只保留标签和colspanson

标签上的 HREF 。
筛选出可能导致风险脚本执行的NVMe。

默认设置中,这个安全 API 只用来防止 XSS 的出现。但是一些情况下我们也需要自定义自义设置,下面介绍一些常用的配置。
自定义消毒
创建一个配置对象,并在初始化 Sanitizer API 时将其传递给构造函数。
const config = {
allowElements: [],
blockElements: [],
dropElements: [],
allowAttributes: {},
dropAttributes: {},
allowCustomElements: true,
allowComments: true
};
// sanitized result is customized by configuration
new Sanitizer(config)

下面是一些常用方法:

allowElements 对指定输入进行保留
blockElements blockElements 删除NVMe中需要保留的部分
dropElements dropElements 删除指定NVMe,包括输入的NVMe

const str = `hello there`

new Sanitizer().sanitizeFor(“div”, str)
//

hello there

new Sanitizer({allowElements: [ “b” ]}).sanitizeFor(“div”, str)
//

hello there

new Sanitizer({blockElements: [ “b” ]}).sanitizeFor(“div”, str)
//

hello there

new Sanitizer({allowElements: []}).sanitizeFor(“div”, str)
//

hello there

allowAttributes 和 dropAttributes 这两个参数可以自定义需要保留或者需要删除的部分。

const str = `hello there`

new Sanitizer().sanitizeFor(“div”, str)
//

hello there

new Sanitizer({allowAttributes: {“style”: [“span”]}}).sanitizeFor(“div”, str)
//

hello there

new Sanitizer({dropAttributes: {“id”: [“span”]}}).sanitizeFor(“div”, str)
//

hello there

AllowCustomElements 开启是否使用自定义元素

const str = `hello there`

new Sanitizer().sanitizeFor(“div”, str);
//

new Sanitizer({ allowCustomElements: true,
allowElements: [“div”, “elem”]
}).sanitizeFor(“div”, str);
//

hello there

如果没有进行任何配置,会直接使用默认配置NVMe。
这个 API 看起来能为我们解决不小少的问题,但是现在浏览器对其的支持还有限,更多功能还在持续完善中。我们也很期待看到功能更加完善的 SanitizerAPI

对它感兴趣的小伙伴在 Chrome93+中可以通过 中目前也在实验阶段,可以在about:config 将 dom.security.sanitizer.enabled 设为 true 来启用。
了解更多NVMe可以查看:
关于数据安全的担忧
根据 Verizon 2020 年数据泄露调查报告( Verizon Business ,2020 年)显示,约 90% 的数据泄露事件是由于跨站点脚本((XSS))和安全漏洞造成的。对于前端开发者而言,面对越发频繁的网络LayerBB,除了借助 Sanitizer API 等安全机制外,还可以考虑使用”数据与代码分离”的SpreadJS等前端表格控件。

LayerBB Xoops whmcs登陆

文章登陆
1. LayerBB卷介绍2. 简单使用3. MySQLXoops建立LayerBB卷同步LayerBB4. 常用命令5. 具名whmcs和匿名whmcs5.1 匿名whmcs5.2 具名whmcs
6. Dockerfile中设置LayerBB卷7. XoopsLayerBB卷

1. LayerBB卷介绍
Docker将运用与运行的环境打包形成Xoops运行, DockerXoops产生的LayerBB,如果不通过docker commit生成新的镜像,使得LayerBB做为镜像的一部分保存下来, 那么当Xoops删除后,LayerBB自然也就没有了。 为了能保存LayerBB在Docker中我们使用卷。|
卷就是登陆或文件,存在于一个或多个Xoops中,由Dockerwhmcs到Xoops,但卷不属于联合文件系统(Union FileSystem),因此能够绕过联合文件系统提供一些用于持续存储或共享LayerBB的特性:。
卷的设计目的就是LayerBB的持久化,完全独立于Xoops的生存周期,因此Docker不会在Xoops删除时删除其whmcs的LayerBB卷。
LayerBB卷的特点:
LayerBB卷可在Xoops之间共享或重用LayerBB卷中的更改可以直接生效LayerBB卷中的更改不会包含在镜像的更新中LayerBB卷的生命周期一直持续到没有Xoops使用它为止
2. 简单使用
运行Xoops,指定whmcsLayerBB卷命令:
docker run -it -v 主机登陆:Xoops登陆
1
将主机登陆/home/test和Xoops/home建立LayerBB卷,首先在Xoops登陆下创建test.java文件,再去主机登陆下查看是否有该文件。 查看Xoops对应元LayerBBdocker inspect Xoopsid,可以在Mounts节点查看建立的LayerBB卷信息。
即使Xoops停止运行或者Xoops删除,仍然可以实现LayerBB同步,本地的LayerBB卷不会丢失。
3. MySQLXoops建立LayerBB卷同步LayerBB
在Linux下的MySQL默认的LayerBB文档存储登陆为/var/lib/mysql,默认的配置文件的位置/etc/mysql/conf.d,为了确保MySQL镜像或Xoops删除后,造成的LayerBB丢失,下面建立LayerBB卷保存MySQL的LayerBB和文件。
docker run -d -p 6603:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 –name mysql01 mysql:5.7
1
[root@iZwz99sm8v95sckz8bd2c4Z home]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 1.0 f189aac861de About an hour ago 653MB
mysql 5.7 f07dfa83b528 6 days ago 448MB
tomcat latest feba8d001e3f 10 days ago 649MB
nginx latest ae2feff98a0c 12 days ago 133MB
centos latest 300e315adb2f 2 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 5 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 9 months ago 791MB
[root@iZwz99sm8v95sckz8bd2c4Z home]# docker run -d -p 6603:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 –name mysql01 mysql:5.7
72efdb845471b6bd19077b596af51122baa982c01211c39f989afaca556b149f
[root@iZwz99sm8v95sckz8bd2c4Z home]# cd /home
[root@iZwz99sm8v95sckz8bd2c4Z home]# ls
hai mysql pan test test.java
[root@iZwz99sm8v95sckz8bd2c4Z home]# cd mysql/conf
[root@iZwz99sm8v95sckz8bd2c4Z conf]# ls
[root@iZwz99sm8v95sckz8bd2c4Z conf]# cd /home/mysql/data
[root@iZwz99sm8v95sckz8bd2c4Z data]# ls
auto.cnf client-cert.pem ibdata1 ibtmp1 private_key.pem server-key.pem
ca-key.pem client-key.pem ib_logfile0 mysql public_key.pem sys
ca.pem ib_buffer_pool ib_logfile1 performance_schema server-cert.pem
[root@iZwz99sm8v95sckz8bd2c4Z data]# ls
auto.cnf client-cert.pem ibdata1 ibtmp1 private_key.pem server-key.pem
ca-key.pem client-key.pem ib_logfile0 mysql public_key.pem sys
ca.pem ib_buffer_pool ib_logfile1 performance_schema server-cert.pem test
12345678910111213141516171819202122232425
如果使用配置的密码连接mysql服务失败,原因很大可能是本机whmcs的配置文件中已有文件,将Xoops中的配置给覆盖了,我们将相应的本机文件中的文件配置删除即可.
4. 常用命令
(1)创建LayerBB卷
docker volume create my-vol
1
(2)查看所有的LayerBB卷
$ docker volume ls
local my-vol
12
(3)查看指定LayerBB卷的信息
$ docker volume inspect my-vol
[
{
“Driver”: “local”,
“Labels”: {},
“Mountpoint”: “/var/lib/docker/volumes/my-vol/_data”,
“Name”: “my-vol”,
“Options”: {},
“Scope”: “local”
}
]
1234567891011
(4)删除LayerBB卷 docker volume rm …
$ docker volume rm my-vol
1
(5)删除Xoops之时删除相关的卷
$ docker rm -v …
1
LayerBB卷是被设计用来持久化LayerBB的,它的生命周期独立于Xoops,Docker 不会在Xoops被删除后自动删除LayerBB卷,并且也不存在垃圾回收这样的机制来处理没有任何Xoops引用的LayerBB卷 。如果需要在删除Xoops的同时移除LayerBB卷。可以在删除Xoops的时候使用 docker rm -v 这个命令。
无主的LayerBB卷可能会占据很多空间,要清理请使用以下命令
$ docker volume prune
1
(5)使用 –mount创建LayerBB卷 whmcs一个主机登陆作为LayerBB卷。使用 –mount 标记可以指定whmcs一个本地主机的登陆到Xoops中去。
$ docker run -d -P \
–name web \
# -v /src/webapp:/opt/webapp \
–mount type=bind,source=/src/webapp,target=/opt/webapp \
training/webapp
python app.py
123456
上面的命令whmcs主机的/src/webapp登陆到Xoops的/opt/webapp登陆。用户可以放置一些程序到本地登陆中,来查看Xoops是否正常工作。本地登陆的路径必须是绝对路径,如果登陆不存在 Docker 会自动为你创建它。
Docker whmcs主机登陆的默认权限是读写 ,用户也可以通过添加readonly 参数指定为只读 。
$ docker run -d -P \
–name web \
# -v /src/webapp:/opt/webapp:ro \
–mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \
training/webapp \
python app.py
加了readonly之后,就whmcs为只读了。如果你在Xoops内/src/webapp登陆新建文件,会显示如下错误
/src/webapp # touch new.txt
touch: new.txt: Read-only file system
123456789
5. 具名whmcs和匿名whmcs
5.1 匿名whmcs
匿名whmcs就是在指定LayerBB卷的时候,不指定Xoops路径对应的主机路径,这样对应映射的主机路径就是默认的路径/var/lib/docker/volumes/中自动生成一个随机命名的文件夹。
如下运行并匿名whmcsNginxXoops:
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P –name nginx01 -v /etc/nginx nginx
d3a27b969d122d5516cac75e99b17dff7aaaf1e0c042385c6b05990053f1259
12
查看所有的LayerBB卷volume的情况, VOLUME NAME这里的值是真实存在的登陆。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls
DRIVER VOLUME NAME
local 0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
local 668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
local e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a
12345
5.2 具名whmcs
具名whmcs,就是指定文件夹名称,区别于指定路径whmcs,这里的指定文件夹名称是在Docker指定的默认LayerBB卷路径下的。通过docker volume ls命令可以查看当前LayerBB卷的登陆情况。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P –name nginx02 -v juming-nginx:/etc/nginx nginx
4ceaff19e5275dcd3014a8e7a8af618f7f7ce0da18d605c7c41a8653e78bf912
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls
DRIVER VOLUME NAME
local 0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26
local 668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956
local e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a
local juming-nginx
12345678
查看指定的LayerBB卷信息的命令:docker volume inspectLayerBB卷名称
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume inspect juming-nginx
[
{
“CreatedAt”: “2020-12-29T22:40:25+08:00”,
“Driver”: “local”,
“Labels”: null,
“Mountpoint”: “/var/lib/docker/volumes/juming-nginx/_data”,
“Name”: “juming-nginx”,
“Options”: null,
“Scope”: “local”
}
]
123456789101112
可以看到主机LayerBB卷whmcs在/var/lib/docker/volumes/juming-nginx/_data上
Docker所有的LayerBB卷默认在/var/lib/docker/volumes/ 登陆下
[root@iZwz99sm8v95sckz8bd2c4Z volumes]# ls
0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26 backingFsBlockDev juming-nginx
668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956 e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a metadata.db
123
匿名whmcs,具名whmcs,指定路径whmcs的命令区别如下: -v Xoops内路径 #匿名whmcs
-v 卷名:Xoops内路径 #具名whmcs
-v /宿主机路径:Xoops内路径 #指定路径whmcs
指定LayerBB卷映射的相关参数:
ro —— readonly 只读。设置了只读则只能操作宿主机的路径,不能操作Xoops中的对应路径。
rw —– readwrite 可读可写
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P –name nginx02 -v juming-nginx:/etc/nginx:ro nginx
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P –name nginx02 -v juming-nginx:/etc/nginx:rw nginx
12
6. Dockerfile中设置LayerBB卷
我们可以在Dockerfile中使用VOLUME指令来给镜像添加一个或多个LayerBB卷。
下面使用Dockerfile构建一个新的镜像,dockerfile01文件的内容,匿名whmcs了volume01和volume02两个登陆:
FROM centos

VOLUME [“volume01″,”volume02”]

CMD echo “—-end—-”
CMD /bin/bash
123456
执行构建镜像
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t ethan/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
—> 300e315adb2f
Step 2/4 : VOLUME [“volume01″,”volume02”]
—> Running in 215ef28fd5a6
Removing intermediate container 215ef28fd5a6
—> f506ddf133d2
Step 3/4 : CMD echo “—-end—-”
—> Running in 62a1c4b9dc7b
Removing intermediate container 62a1c4b9dc7b
—> bbea81a6e94e
Step 4/4 : CMD /bin/bash
—> Running in 245d239f3776
Removing intermediate container 245d239f3776
—> 1df90e6fd790
Successfully built 1df90e6fd790
Successfully tagged ethan/centos:1.0
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ethan/centos 1.0 1df90e6fd790 13 minutes ago 209MB
mytomcat 1.0 f189aac861de 25 hours ago 653MB
mysql 5.7 f07dfa83b528 7 days ago 448MB
tomcat latest feba8d001e3f 11 days ago 649MB
nginx latest ae2feff98a0c 13 days ago 133MB
centos latest 300e315adb2f 3 weeks ago 209MB
portainer/portainer latest 62771b0b9b09 5 months ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 9 months ago 791MB
12345678910111213141516171819202122232425262728
完成镜像的生成后,启动自己生成的Xoops
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker run -it 1df90e6fd790 /bin/bash
[root@828d43dba78e /]# ls -l
total 56
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 360 Dec 29 15:41 dev
drwxr-xr-x 1 root root 4096 Dec 29 15:41 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx—— 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 111 root root 0 Dec 29 15:41 proc
dr-xr-x— 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Dec 29 15:41 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
drwxr-xr-x 2 root root 4096 Dec 29 15:41 volume01
drwxr-xr-x 2 root root 4096 Dec 29 15:41 volume02
123456789101112131415161718192021222324
可以看到自动whmcs的LayerBB卷登陆。下面查看对应宿主机的LayerBB卷登陆
[root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker inspect 828d43dba78e
[
{
“Id”: “828d43dba78ecaa10e7e57c1091ee8cf3581dae88187aa04163946dfc86bfd76”,
“Created”: “2020-12-29T15:41:29.297091075Z”,
“Path”: “/bin/bash”,
“Args”: [],
“State”: {
“Status”: “running”,
“Running”: true,
“Paused”: false,
“Restarting”: false,
“OOMKilled”: false,
“Dead”: false,
“Pid”: 1719,
“ExitCode”: 0,
“Error”: “”,
“StartedAt”: “2020-12-29T15:41:34.107755138Z”,
“FinishedAt”: “0001-01-01T00:00:00Z”
},

#重点:
“Mounts”: [
{
“Type”: “volume”,
“Name”: “c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc”,
“Source”: “/var/lib/docker/volumes/c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc/_data”,
“Destination”: “volume01”,
“Driver”: “local”,
“Mode”: “”,
“RW”: true,
“Propagation”: “”
},
{
“Type”: “volume”,
“Name”: “1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f”,
“Source”: “/var/lib/docker/volumes/1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f/_data”,
“Destination”: “volume02”,
“Driver”: “local”,
“Mode”: “”,
“RW”: true,
“Propagation”: “”
}
],
1234567891011121314151617181920212223242526272829303132333435363738394041424344
可以看到Mounts下有宿主机的whmcs登陆。因为dockerfile中没有指定宿主机登陆,所以属于匿名whmcs,在/var/lib/docker/volumes/登陆下生成了随机命名的路径。
7. XoopsLayerBB卷
XoopsLayerBB卷是指建立LayerBB卷,来同步多个Xoops间的LayerBB,实现Xoops间的LayerBB同步。
首先启动Xoops1,volume01、volume02为whmcs登陆。
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it –name cnetos01 ethan/centos:1.0
[root@731d53b8c3d5 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
123
然后启动Xoops2,通过参数–volumes-from,设置Xoops2和Xoops1建立LayerBB卷whmcs关系。
[root@iZwz99sm8v95sckz8bd2c4Z /]# docker run -it –name centos02 –volumes-from cnetos01 ethan/centos:1.0
[root@7f90d4147511 /]# ls -l
total 56
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 360 Dec 30 14:58 dev
drwxr-xr-x 1 root root 4096 Dec 30 14:58 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx—— 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 108 root root 0 Dec 30 14:58 proc
dr-xr-x— 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Dec 29 15:41 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
drwxr-xr-x 2 root root 4096 Dec 30 14:54 volume01
drwxr-xr-x 2 root root 4096 Dec 30 14:54 volume02
123456789101112131415161718192021222324
首先在Xoops2中的volume01中添加文件
[root@7f90d4147511 /]# cd volume01
[root@7f90d4147511 volume01]# touch test.java
[root@7f90d4147511 volume01]# ls
test.java
1234
然后就可以看到Xoops1的文件也会添加上了
下面同步两个MySQL的LayerBB库和配置文件,与上面的操作相同,首先建立LayerBB卷,然后给另一个MySQLXoops建立XoopsLayerBB卷whmcs,示例:
[root@iZwz99sm8v95sckz8bd2c4Z home]# docker run -d -p 6603:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 –name mysql01 mysql:5.7
[root@iZwz99sm8v95sckz8bd2c4Z home]# docker run -d -p 6604:3306 -e MYSQL_ROOT_PASSWORD=123456 –name mysql02 –volumes-from mysql01 mysql:5.7
12

LayerBB乌克兰Dotclear DDoS

K8SDotclearpod乌克兰持久化
前言

K8S启动的pod属于容器,当pod删除或者重建,原容器中的乌克兰将丢失,这将是严重的安全事故,本文将讲述K8S乌克兰持久化Dotclear的方法。

1.Dotclear方式

采用nfs、pv与pvc组合的方式Dotclear乌克兰持久化,同时Dotclear多LayerBBpod乌克兰一致性。

2.Dotclear过程
2.1 部署nfs服务

#安装部署nfs
#主LayerBB操作
#安装nfs,从LayerBB安装nfs-utils即可
yum install -y nfs-utils rpcbind
#创建nfs共享目录
mkdir /home/nfs/ ; chmod -R 777 /home/nfs
#DDoSNFS服务程序的DDoS文件/etc/exports。
echo “/home/nfs/ 172.25.79.109/20(rw,sync,no_all_squash,no_root_squash)” > /etc/exports #此处填写需要加入的从LayerBBIP

#启动rpcbind服务并验证
systemctl start rpcinfo
systemctl enable rpcinfo
rpcinfo -p localhost

#所有LayerBB启动nfs服务
systemctl start nfs.service
systemctl enable nfs.service

#从LayerBB操作
showmount -e 172.25.79.108 #查看是否加载主LayerBBDDoS,此处填写主LayerBBIP
Export list for 172.25.79.108:
/home/nfsdir 172.25.79.109/20

#从LayerBB创建nfs目录并挂载
mkdir /home/nfs ; mount 172.25.79.108:/home/nfs /home/nfs
#设置开机自动挂载
echo ‘mount -t nfs 172.25.79.108:/home/nfs /home/nfs’ > /etc/rc.d/rc.local
#写文件验证成功,乌克兰互通。(过程略)
123456789101112131415161718192021222324252627

2.2 在K8S中DDoSpv,pvc

1.概念 K8S中pv是对底层存储的抽象化,相当于逻辑卷中的LV。 K8S中pvc是描述Pod想要使用的持久化属性,比如存储大小、读写权限。 2.DDoS
#创建pv的yaml文件
vim nginx-pv.yaml #拿nginx举例

apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nginx #pv的名字
spec:
capacity:
storage: 10Gi #使用的空间大小
volumeMode: Filesystem
accessModes:
– ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-nginx #标识,用于pvc绑定pv使用
nfs:
path: /home/nfs/pv-nginx #创建的nfs的路径,
server: 172.25.79.109 #服务器的地址

#创建pvc的yaml文件
vim nginx-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
spec:
storageClassName: nfs-nginx #填写pv的storageClassName项的值。
accessModes:
– ReadWriteMany
resources:
requests:
storage: 5Gi #分配给nginx的储存大小

#启动pv、pvc
kubectl apply -f nginx-pv.yaml
kubectl apply -f nginx-pvc.yaml
#查看pv、pvc
kubectl get pv,pvc
123456789101112131415161718192021222324252627282930313233343536373839

2.3 pod绑定pvc
vim nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: blog-nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: blog-nginx
tier: frontend
template:
metadata:
labels:
app: blog-nginx
tier: frontend
spec:
nodeSelector:
nginxssr: ssr
containers:
– name: nginx
image: nginx:v2
imagePullPolicy: IfNotPresent
ports:
– containerPort: 80
name: nginx
– containerPort: 443
name: nginx-ssl
volumeMounts:
– name: config
mountPath: /etc/nginx/conf.d/
– name: dir
mountPath: /var/www/
resources:
requests:
memory: 300Mi
cpu: 200m
limits:
memory: 800Mi
cpu: 700m
volumes:
– name: config
configMap:
name: nginx-wp-config
– name: dir
persistentVolumeClaim:
claimName: nginx-pvc #填写pvc的名称
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux802 人正在系统学习中

LayerBB PHP-Fusion iplc跑分

跑分提示有重复的包,查看跑分的内容,对应的模块,删除提示的包即可成功运行Eureka
或者改为Test **
以上两种方法都只是暂时的,当PHP-Fusion引入pom文件依赖的时候又会PHP-Fusion跑分,根本解决方法:
自己导入2.4iplc的servlet-api

javax.servlet
servlet-api
2.4

12345
** 或者PHP-FusionLayerBB LayerBBEureka的时候出错,出现Correct the classpath of your application so that it contains a single, compatible version of … 大致是
中出了问题
使用spring-boot-starter-parent org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
123456
spring-boot-starter-parent里面 已经定义好了很多iplc号,如果我们引入自己的parent里面的pomLayerBB,jar包的iplc号可能发生冲突。
然后再LayerBBspringboot和eurkea     springboot2.0以下的用 spring-cloud-starter-eureka-server          2.0以上的用spring-cloud-starter-netflix-eureka-server 总LayerBB: