外观
sitespeed.io 部署应用(openEuler-24.03-LTS-SP1)
一、sitespeed.io 的介绍
1. 简介
2. 项目介绍
bash
.
├── docker_data #docker数据存储
│ ├── buildkit
│ ├── containers
│ ├── engine-id
│ ├── image
│ ├── network
│ ├── overlay2
│ ├── plugins
│ ├── runtimes
│ ├── swarm
│ ├── tmp
│ └── volumes
├── docker_packages #docker环境必要安装包
├── grafana
│ └── docker
│ └── docker-compose.yml # Performance Dashboard容器编排,用于搭建grafana和graphite进行可视化展示和数据存储
├── nginx
│ ├── conf.d
│ │ └── default.conf # Nginx 配置文件,用于展示测试结果
│ └── docker-compose.yml # Nginx 容器编排配置
└── sitespeed.io
├── config
│ └── desktop.json # sitespeed.io 的测试配置文件
├── log
│ ├── error # 错误日志目录
│ ├── info # 信息日志目录
│ ├── test.log # 测试脚本运行日志
│ ├── delete.log # 清理旧测试html报告的日志
│ └── docker-cleanup.log # Docker 容器清理日志
├── sitespeed-result
│ └── myTest1 # 测试结果输出目录
├── tests
│ └── desktop # 桌面端测试用例目录
└── test.sh # 测试执行脚本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
二、sitespeed.io 系统的的搭建
防火墙策略和磁盘挂载(可选)
bash
#端口放行
#sudo systemctl restart firewalld
sudo firewall-cmd --add-port=80/tcp --permanent #grafana
sudo firewall-cmd --add-port=81/tcp --permanent #nginx
sudo firewall-cmd --reload
echo "#firewall端口放行有:80-81"
#将SELINUX设置为disabled#将SELINUX设置为disabled
sudo setenforce 0
sudo sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
echo "将SELINUX设置为disabled"
#磁盘采用逻辑卷,以便后期扩容,但是不实行RAID
sudo pvcreate /dev/vdb
sudo vgcreate docker-storage /dev/vdb
sudo lvcreate -n docker-storage -L 400G docker-storage
sudo mkdir -p /docker
sudo chmod -R 777 /docker/
sudo bash -c "echo '/dev/docker-storage/docker-storage /docker/ xfs defaults 0 0' >> /etc/fstab"
#通知 systemd 重新读取其配置文件,包括 /etc/fstab
sudo systemctl daemon-reload1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 更新 yum 源
1.1 备份原有配置
bash
sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup1
1.2 添加清华源
如果系统有 yum-utils,则可以通过 yum-config-manager 直接导入
bash
# 创建正确的配置文件
sudo tee /etc/yum.repos.d/openEuler-tsinghua.repo > /dev/null <<EOF
[openeuler-os]
name=openEuler-OS
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/OS/\$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/OS/\$basearch/RPM-GPG-KEY-openEuler
[openeuler-everything]
name=openEuler-everything
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/everything/\$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/OS/\$basearch/RPM-GPG-KEY-openEuler
[openeuler-epol]
name=openEuler-EPOL
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/EPOL/main/\$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/OS/\$basearch/RPM-GPG-KEY-openEuler
[openeuler-update]
name=openEuler-update
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/update/\$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS-SP1/OS/\$basearch/RPM-GPG-KEY-openEuler
EOF1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1.3 清理缓存并更新
bash
sudo yum clean all
sudo yum makecache
#安装测试
sudo yum -y install bash-completion1
2
3
4
5
2
3
4
5
2. Docker 的环境搭建
2.1 docker 的下载安装
bash
#下载对应工具,方便直接下载docekr的repo
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#下载对应repo文件
#sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 如果是欧拉系统则还需要修改配置文件
sudo sed -i 's|$releasever|8|g' /etc/yum.repos.d/docker-ce.repo
sudo sed -i 's|https://download.docker.com/linux/centos|https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos|g' /etc/yum.repos.d/docker-ce.repo
#下载docker,默认下载最新(ce是社区版本,免费)
sudo yum -y install docker-ce1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
2.2 docker 的配置修改
bash
#创建docker存储目录
sudo mkdir -p /docker/docker_data
#配置docker镜像加速器,需要修改数据docker数据存储路径、镜像下载源(国内目前暂禁使用)、默认网络段(默认172网络可能会和学校vpn网段冲突)
tee /etc/docker/daemon.json <<EOF
{
"data-root": "/docker/docker_data",
"registry-mirrors": [
"https://dockerpull.org",
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm",
"https://docker.5z5f.com",
"https://a.ussh.net",
"https://docker.cloudlayer.icu",
"https://hub.littlediary.cn",
"https://hub.crdz.gq",
"https://docker.unsee.tech",
"https://docker.kejilion.pro",
"https://registry.dockermirror.com",
"https://hub.rat.dev",
"https://dhub.kubesre.xyz",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://docker.rainbond.cc",
"https://hub.geekery.cn",
"https://docker.1panelproxy.com",
"https://atomhub.openatom.cn",
"https://docker.m.daocloud.io"
],
"bip": "171.17.0.1/16",
"default-address-pools": [
{
"base": "171.0.0.0/16",
"size": 24
}
]
}
EOF
#加载配置并重启docker、并设置自启动
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
3. 使用 docker 测试运行 sitespeed.io
bash
#1.创建sitespeed.io对应挂载目录
sudo mkdir -p /docker/sitespeed.io/{sitespeed-result,config,tests/desktop}
sudo mkdir -p /docker/sitespeed.io/log/{info,error}
sudo touch /docker/sitespeed.io/tests/desktop/desktop.json
#2.将当前非root用户加入docker组,方便后续操作
sudo usermod -aG docker $(whoami)
#3.拉取镜像测试,最好是保留tag。而最新的版本查看:https://www.sitespeed.io/
docker run --rm -v "/docker/sitespeed.io:/sitespeed.io" sitespeedio/sitespeed.io:latest https://www.sitespeed.io/1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
4. 定制 sitespeed 配置文件 config.json
- 配置 sitespeed 容器运行时采用的配置文件
bash
sudo tee > /docker/sitespeed.io/config/desktop.json << EOF
{
"browsertime": {
"iterations": 1,
"visualMetrics": true,
"video": true,
"timeouts.pageCompleteCheck": 10000,
"pageCompleteCheckStartWait": 2000,
"pageCompleteWaitTime": 1000,
"browser": "chrome",
"resultBaseURL": "http://171.0.2.2:80/sitespeed-result/"
},
"graphite": {
"host": "171.0.1.3"
},
"slug": "myTest1",
"copyLatestFilesToBase": true
}
EOF1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 相关参数解释
bash
{
"browsertime": {
# 设置执行次数为2次
"iterations": 2,
# 禁用视觉指标(Speed Index等)
"visualMetrics": false,
# 禁用视频录制
"video": false,
# 设置页面完成检查的超时时间为3000毫秒(3秒)
"timeouts.pageCompleteCheck": 60000,
# 设置使用的浏览器为Chrome
"browser": "chrome",
# 设置slug(标识名称)为myTest6
"slug": "myTest6",
# 设置结果保存的基础URL
"resultBaseURL": "http://127.0.0.1:81/sitespeed-result/"
},
# 设置Graphite的主机地址
"graphite": {
"host": "http://127.0.0.1"
},
# 设置复制最新文件到基础目录的选项为true
"copyLatestFilesToBase": true
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
5. 运行脚本(/docker/sitespeed.io/test.sh)
shell
#!/bin/bash
cd /docker/sitespeed.io
DOCKER_CONTAINER="sitespeedio/sitespeed.io:latest" # 指定镜像和版本
DOCKER_SETUP="--rm -e TZ=Asia/Shanghai -v /docker/sitespeed.io:/sitespeed.io --network docker_sitespeed" # Docker运行参数, --shm-size=4g -e MAX_OLD_SPACE_SIZE=4096 --cpus=4
LOG_INFO_DIR="/docker/sitespeed.io/log/info" # 标准输出日志目录
LOG_ERROR_DIR="/docker/sitespeed.io/log/error" # 错误输出日志目录
CONFIG_FILE="./config/desktop.json" # 配置文件路径
URLS_FILE="./tests/desktop/urls1.txt" # 网址列表文件路径
# 获取脚本名称(不含扩展名)
SCRIPT_NAME=$(basename "$0" .sh)
# 进入工作目录
cd /docker/sitespeed.io
# 获取当前时间,格式为:年月日-时分秒
currentTime="$(date '+%Y%m%d-%H:%M:%S')"
echo "start: $currentTime" >> "/docker/sitespeed.io/log/${SCRIPT_NAME}.log"
# 运行 sitespeed.io 容器
docker run $DOCKER_SETUP $DOCKER_CONTAINER \
--config $CONFIG_FILE \
$URLS_FILE \
>> "$LOG_INFO_DIR/${SCRIPT_NAME}_$currentTime.log" \
2>> "$LOG_ERROR_DIR/${SCRIPT_NAME}_$currentTime.log"
# 获取结束时间
currentTime2="$(date '+%Y%m%d-%H:%M:%S')"
echo "end: $currentTime2" >> "/docker/sitespeed.io/log/${SCRIPT_NAME}.log"
echo "=========Total time: $currentTime2 - $currentTime=========" >> "/docker/sitespeed.io/log/${SCRIPT_NAME}.log"1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
- 赋予运行权限
bash
sudo chmod a+x /docker/sitespeed.io/test.sh1
6. 定时任务(含有执行测试的频率和旧数据的清理)
bash
CRON_JOBS=$(cat <<'EOF'
# 每天 9:00 和 16:00 运行测试
0 9,16 * * * /bin/bash /docker/sitespeed.io/test.sh
# 每天 23:59 删除 7 天前的测试结果
59 23 * * * find /docker/sitespeed.io/sitespeed-result/myTest1/ -maxdepth 1 -mtime +7 -type d -exec rm -rf {} \; >> /docker/sitespeed.io/log/delete.log 2>&1
# 每天 00:30 清理所有容器
30 0 * * * docker ps -aq --filter "ancestor=sitespeedio/sitespeed.io" | xargs -r docker rm >> /docker/sitespeed.io/log/docker-cleanup.log 2>&1
EOF
)
echo "$CRON_JOBS" | crontab -1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
7. sitespeed 常见配置参数介绍
bash
`sitespeed.io` 是一个开源工具,用于测量和监控网页性能。它支持多种浏览器,并能生成详细的性能报告。下面是对您提供的命令行参数的分析和一些重要参数的解释:
### 浏览器相关参数(Browser)
- `-b, --browsertime.browser`: 选择测试时使用的浏览器,默认为Chrome。
- `-n, --browsertime.iterations`: 每个页面测试的次数,默认为3次。
- `--browsertime.spa, --spa`: 如果测试的是单页应用(SPA),使用此参数可以自动等待网络活动结束后的X秒,并在文件名中使用哈希。
- `--browsertime.debug, --debug`: 运行Browsertime的调试模式。
- `-c, --browsertime.connectivity.profile`: 设置网络连接的配置文件。
### 连接性参数(Connectivity)
- `--browsertime.connectivity.engine, --connectivity.engine`: 设置网络连接引擎,可以是外部、Throttle或Humble。
- `--browsertime.timeouts.pageCompleteCheck, --maxLoadTime`: 页面加载完成的最大等待时间。
### 页面加载完成检查参数(Page Complete Check)
- `--browsertime.pageCompleteCheck, --pageCompleteCheck`: 提供一个JavaScript脚本来决定页面何时完成加载。
### 视频参数(Video)
- `--browsertime.visualMetrics, --visualMetrics`: 计算视觉指标,如SpeedIndex、First Visual Change等。
- `--browsertime.video, --video`: 录制视频并保存,需要安装FFmpeg。
### Firefox特定参数(Firefox)
- `--browsertime.firefox.binaryPath`: 设置自定义Firefox二进制文件的路径。
- `--browsertime.firefox.preference`: 传递额外的命令行参数给Firefox。
### Chrome特定参数(Chrome)
- `--browsertime.chrome.args, --chrome.args`: 传递额外的命令行参数给Chrome进程。
- `--browsertime.chrome.timeline, --chrome.timeline`: 收集Chrome的时间线数据。
### Edge特定参数(Edge)
- `--browsertime.edge.edgedriverPath`: 提供msedgedriver的路径。
### Safari特定参数(Safari)
- `--browsertime.safari.ios`: 在iOS上使用Safari。
### 代理参数(Proxy)
- `--browsertime.proxy.http, --proxy.http`: 设置HTTP代理。
- `--browsertime.proxy.https, --proxy.https`: 设置HTTPS代理。
### Grafana参数(Grafana)
- `--grafana.host`: Grafana主机,用于发送注释。
- `--grafana.auth`: Grafana认证/承载值,用于发送注释到Grafana。
### Graphite参数(Graphite)
- `--graphite.host`: Graphite主机,用于存储捕获的指标。
### InfluxDB参数(InfluxDB)
- `--influxdb.host`: InfluxDB主机,用于存储捕获的指标。
### 其他参数
- `--summary`: 在标准输出显示简短的文本摘要。
- `--open, --view`: 在默认浏览器中打开测试结果。
- `--config`: 指定JSON配置文件的路径。
--html.assetsBaseURL:如果你设置了这个选项,它将指定HTML结果的资源(如CSS、JS、图片等)的基础URL。如果这个URL指向一个实际的服务器,并且你配置了 --html.fetchHARFiles 为 true,sitespeed.io 将尝试从这个URL获取资源而不是将它们包含在HTML文件中。这可能是为什么你看不到本地的 css、js、img 目录的原因。
--html.fetchHARFiles:如果设置为 true,sitespeed.io 将使用 fetch API 来加载HAR文件,而不是将它们包含在HTML中。这通常用于当你的HTML结果通过服务器提供服务时。如果你的HTML结果不是通过服务器提供,这个选项应该保持为 false。
--html.showAllWaterfallSummary:这个选项控制是否在页面摘要HTML报告中显示所有瀑布图。如果设置为 true,可能会影响报告的生成和显示。
--html.logDownloadLink:如果设置为 true,会在HTML中添加一个链接,允许你下载 sitespeed.io 运行的日志。如果服务器是公开的,需要小心不要记录敏感信息。
--html.pageSummaryMetrics 和 --html.summaryBoxes:这些选项控制HTML报告中显示的指标和摘要框。它们通常不会影响资源目录的生成,但如果配置不正确,可能会影响报告的内容。
--html.compareURL 或 --html.compareUrl:这个选项添加一个链接到HAR比较页面,如果你有 sitespeed.io 的比较工具安装在指定的URL上。
这些参数允许用户自定义`sitespeed.io`的行为,包括选择浏览器、设置网络条件、定义页面加载完成的条件、收集视频和视觉指标、与Grafana和Graphite等监控系统集成等。通过这些参数,用户可以更细致地控制测试过程,并获取所需的性能数据。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
三、搭建 grafana 和 graphite 进行可视化展示和数据存储
1. Docker Compose 的下载安装
shell
#安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#赋予运行权限
sudo chmod a+x /usr/local/bin/docker-compose
cp /usr/local/bin/docker-compose /usr/bin/
#测试是否成功正常
docker-compose --version1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
2. 拉取 Performance Dashboard
shell
#安装git
sudo yum -y install git
#拉取sitespeed.io 存储库
sudo cd /docker
sudo git clone https://github.com/sitespeedio/sitespeed.io.git grafana1
2
3
4
5
2
3
4
5
3.配置 grafana 和 graphite 的 docker-compose.yml (需要修改映射端口和 docker 网络)
yaml
sudo -- bash -c "cat > /docker/grafana/docker/docker-compose.yml << EOF
version: '3'
services:
grafana:
image: grafana/grafana:11.0.0
hostname: grafana
depends_on:
- graphite
links:
- graphite
ports:
- "80:3000"
environment:
# See https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/
- GF_SECURITY_ADMIN_PASSWORD=fangyuan
- GF_SECURITY_ADMIN_USER=sitespeedio
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_USERS_ALLOW_SIGN_UP=false
- GF_USERS_ALLOW_ORG_CREATE=false
- GF_INSTALL_PLUGINS=grafana-piechart-panel,marcusolsson-json-datasource,marcusolsson-dynamictext-panel
- GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/var/lib/grafana/dashboards/Welcome.json
volumes:
- grafana:/var/lib/grafana
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana/provisioning/dashboards:/var/lib/grafana/dashboards
restart: always
networks:
sitespeed:
ipv4_address: 171.0.1.2 # 指定具体IP地址
graphite:
image: sitespeedio/graphite:1.1.10-3
hostname: graphite
ports:
- "2003:2003"
- "8080:80"
restart: always
volumes:
# In production, you should configure/map these to your container
# Make sure whisper and graphite.db/grafana.db lives outside your container
# https://www.sitespeed.io/documentation/sitespeed.io/graphite/#graphite-for-production-important
- whisper:/opt/graphite/storage/whisper
# Download an empty graphite.db from https://github.com/sitespeedio/sitespeed.io/tree/main/docker/graphite
# - /absolute/path/to/graphite/graphite.db:/opt/graphite/storage/graphite.db
#
# And put the configuration files on your server, configure them as you need
# Download from https://github.com/sitespeedio/docker-graphite-statsd/tree/main/conf/graphite
# - /absolute/path/to/graphite/conf/storage-schemas.conf:/opt/graphite/conf/storage-schemas.conf
# - /absolute/path/to/graphite/conf/storage-aggregation.conf:/opt/graphite/conf/storage-aggregation.conf
# - /absolute/path/to/graphite/conf/carbon.conf:/opt/graphite/conf/carbon.conf
networks:
sitespeed:
ipv4_address: 171.0.1.3 # 指定具体IP地址
volumes:
grafana:
whisper:
networks:
sitespeed:
driver: bridge
ipam:
driver: default
config:
- subnet: 171.0.1.0/24
EOF"1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
4. 运行启动 grafana 和 grahite 容器
bash
sudo docker-compose -f /docker/grafana/docker/docker-compose.yml up -d1
四、配置 nginx 查看 sitespeed.io 的 html 报告
1. 创建 nginx 对应目录和配置文件
bash
#创建nginx目录
sudo mkdir -p /docker/nginx/conf.d
sudo -- bash -c "cat > /docker/nginx/conf.d/default.conf << EOF
server {
listen 80;
listen [::]:80;
server_name localhost;
root /usr/share/nginx/html/sitespeed-result/;
location / {
autoindex on; # 启用目录列表
autoindex_exact_size off; # 以更人性化的格式显示文件大小
autoindex_localtime on; # 以服务器本地时间显示文件时间
charset utf-8; # 设置字符集为 UTF-8
add_header Content-Type text/html;
}
# 禁止访问上级目录,防止目录遍历攻击
location ~ /\.\./ {
deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF"1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2. 配置 nginx 的 docker-compose.yaml
yaml
sudo -- bash -c "cat > /docker/nginx/docker-compose.yml << EOF
services:
nginx-sitespeed-result:
image: nginx:latest
container_name: nginx-sitespeed-result
environment:
TZ: Asia/Shanghai
ports:
- "81:80"
volumes:
- /docker/sitespeed.io/sitespeed-result:/usr/share/nginx/html/sitespeed-result
- /docker/nginx/conf.d:/etc/nginx/conf.d
restart: always
networks:
nginx_network:
ipv4_address: 171.0.2.2 # 指定具体IP地址
# 定义自定义网络
networks:
nginx_network:
driver: bridge
ipam:
driver: default
config:
- subnet: 171.0.2.0/24 # 使用更小范围的子网
EOF"1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
3. 运行启动 nginx 容器
bash
sudo docker-compose -f /docker/nginx/docker-compose.yml up -d1
五、一键脚本部署
1. 防火墙策略和磁盘挂载(可选)
bash
#端口放行
#sudo systemctl restart firewalld
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=81/tcp --permanent
sudo firewall-cmd --reload
echo "#firewall端口放行有:80-81"
#将SELINUX设置为disabled#将SELINUX设置为disabled
sudo setenforce 0
sudo sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
echo "将SELINUX设置为disabled"
#磁盘采用逻辑卷,以便后期扩容,但是不实行RAID
sudo pvcreate /dev/vdb
sudo vgcreate docker-storage /dev/vdb
sudo lvcreate -n docker-storage -L 400G docker-storage
sudo mkdir -p /docker
sudo chmod -R 777 /docker/
sudo bash -c "echo '/dev/docker-storage/docker-storage /docker/ xfs defaults 0 0' >> /etc/fstab"
#通知 systemd 重新读取其配置文件,包括 /etc/fstab
sudo systemctl daemon-reload1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2. 脚本部署
2.1 一键部署命令
bash
cd / && curl -s https://cernet.ai/database-monitoring/sitespeed_install.sh | sudo tee /sitespeed_install.sh > /dev/null && sudo chmod +x /sitespeed_install.sh && sudo /sitespeed_install.sh1
注意事项
执行此命令需要 root 权限
确保系统已安装 curl 工具
确保系统能够访问互联网
建议在执行前备份重要数据
2.2 脚本自定义部署(需要修改执行频率或其他操做的情况)
shell
#!/bin/bash
# 检查是否为 root 用户
if [ "$(id -u)" != "0" ]; then
echo "当前用户不是 root 用户,尝试切换到 root 用户..."
sudo -i
fi
# 下载解压命令
yum -y install tar
# 切换到根目录
cd /
# 检查并创建 docker 目录
if [ ! -d /docker ]; then
echo "创建 /docker 目录..."
mkdir /docker
fi
# 检查并创建 /etc/docker 目录
if [ ! -d /etc/docker ]; then
echo "/etc/docker..."
mkdir /etc/docker
fi
# 检查 /docker 目录是否已挂载
mountpoint -q /docker
if [ $? -eq 0 ]; then
echo "/docker 目录已挂载到数据盘。"
else
echo "警告:/docker 目录未挂载到数据盘!"
echo "是否继续?(y/n, 15秒后默认选择 n)"
read -t 15 -n 1 response
echo ""
if [[ -z "$response" || $response != [yY] ]]; then
echo "未输入或输入 'n',退出脚本。"
exit 1
fi
fi
# 检查安装包是否存在
if [ -f /docker_sitespeed.io.tar.gz ]; then
echo "找到安装包 /docker_sitespeed.io.tar.gz"
else
echo "错误:未找到安装包 /docker_sitespeed.io.tar.gz"
exit 1
fi
# 检查 /docker 目录是否为空
echo "检查 /docker 目录状态..."
if [ -d "/docker" ] && [ "$(ls -A /docker 2>/dev/null)" ]; then
echo "警告:/docker 目录不为空!"
echo "当前目录内容:"
ls -la /docker/
echo ""
echo "解压将覆盖现有文件,是否继续?(y/n, 15秒后默认选择 n)"
read -t 15 -n 1 response
echo ""
if [[ -z "$response" || $response != [yY] ]]; then
echo "用户选择不解压,退出脚本。"
exit 1
fi
echo "用户确认继续解压..."
fi
# 解压安装包
echo "开始解压环境包..."
tar -zxvf docker_sitespeed.io.tar.gz -C /docker
# 强制覆盖复制到 /usr/local/bin/
cp -f /docker/docker_packages/docker-compose /usr/local/bin/
# 强制覆盖移动到 /usr/bin/
mv -f /docker/docker_packages/docker-compose /usr/bin/
# 显示 docker-compose 版本
echo "======================================================="
echo "Docker Compose 版本:$(docker-compose -v)"
# 安装 Docker 相关包
echo "安装 Docker 相关包..."
find /docker/docker_packages -name "*.rpm" -exec rpm -ivh --force --nodeps {} \;
# 移动 URL 文件(如果存在)
if [ -f /urls.txt ]; then
echo "移动 URL 文件..."
mv -f /urls.txt /docker/sitespeed.io/tests/desktop/urls1.txt
fi
# 配置 Docker 守护进程
echo "配置 Docker 守护进程..."
tee /etc/docker/daemon.json <<EOF
{
"data-root": "/docker/docker_data",
"registry-mirrors": [
"https://dockerpull.org",
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm",
"https://docker.5z5f.com",
"https://a.ussh.net",
"https://docker.cloudlayer.icu",
"https://hub.littlediary.cn",
"https://hub.crdz.gq",
"https://docker.unsee.tech",
"https://docker.kejilion.pro",
"https://registry.dockermirror.com",
"https://hub.rat.dev",
"https://dhub.kubesre.xyz",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://docker.rainbond.cc",
"https://hub.geekery.cn",
"https://docker.1panelproxy.com",
"https://atomhub.openatom.cn",
"https://docker.m.daocloud.io"
],
"bip": "171.17.0.1/16",
"default-address-pools": [
{
"base": "171.0.0.0/16",
"size": 24
}
]
}
EOF
# 重启 Docker 服务
echo "重启 Docker 服务..."
systemctl daemon-reload
systemctl restart docker
# 显示 Docker 信息
echo "======================================================="
echo "Docker 信息:"
echo "$(docker info)"
echo "======================================================="
echo "当前运行的容器:"
echo "$(docker ps)"
# 配置定时任务
echo "配置定时任务..."
CRON_JOBS=$(cat <<'EOF'
# 每天 9:00 和 16:00 运行测试
0 9,16 * * * /bin/bash /docker/sitespeed.io/test.sh
# 每天 23:59 删除 7 天前的测试结果
59 23 * * * find /docker/sitespeed.io/sitespeed-result/myTest1/ -maxdepth 1 -mtime +7 -type d -exec rm -rf {} \; >> /docker/sitespeed.io/log/delete.log 2>&1
# 每天 00:30 清理所有终止的容器
30 0 * * * docker ps -aq --filter "ancestor=sitespeedio/sitespeed.io" | xargs -r docker rm >> /docker/sitespeed.io/log/docker-cleanup.log 2>&1
EOF
)
echo "$CRON_JOBS" | crontab -
# 验证定时任务是否添加成功
if crontab -l | grep -q "/bin/bash /docker/sitespeed.io/test.sh"; then
echo "定时任务添加成功!"
echo "当前定时任务列表:"
echo "$(crontab -l)"
else
echo "错误:定时任务添加失败!"
fi
echo "======================================================="
echo "安装完成!"
echo "请检查以上输出信息,确保所有步骤都成功执行。"
echo "======================================================="1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169