安装
CentOS/Rocky/Alibaba Cloud Linux
sudo yum install -y iftop nethogs
Ubuntu/Debian
sudo apt update && sudo apt install -y iftop nethogs
使用
# 查看流量
sudo iftop -i eth0 -P

sudo yum install -y iftop nethogs
sudo apt update && sudo apt install -y iftop nethogs
# 查看流量
sudo iftop -i eth0 -P

curl -o /dev/null -s \
-w "\n\
DNS 解析: %{time_namelookup} s\n\
TCP 握手: %{time_connect} s\n\
TLS 握手: %{time_appconnect} s\n\
首字节 TTFB: %{time_starttransfer} s\n\
总耗时: %{time_total} s\n\
下载大小: %{size_download} bytes\n\
HTTP 状态: %{http_code}\n" \
https://xxx.xxx/xxx.js
curl.exe -o nul -s \
-w "\n\
DNS 解析: %{time_namelookup} s\n\
TCP 握手: %{time_connect} s\n\
TLS 握手: %{time_appconnect} s\n\
首字节 TTFB: %{time_starttransfer} s\n\
总耗时: %{time_total} s\n\
下载大小: %{size_download} bytes\n\
HTTP 状态: %{http_code}\n" \
https://xxx.xxx/xxx.js
-s 静默模式,屏蔽进度条和错误信息,只输出 -w 的内容。
输出结果示例如下:
DNS 解析: 0.029579 s
TCP 握手: 0.033574 s
TLS 握手: 0.044148 s
首字节 TTFB: 0.052129 s
总耗时: 0.491568 s
下载大小: 2159257 bytes
HTTP 状态: 200
好几年前,ssl 免费证书有效期为 3 个月。搞一个能生成证书的环境就比较方便。
FROM nginx:1.29.3
# 安装 certbot https://certbot.eff.org/instructions?ws=nginx&os=snap
# 也可以在 nginx 之外使用 certbot 镜像 https://hub.docker.com/r/certbot/certbot
RUN apt-get update && \
apt-get install -y python3-venv && \
python3 -m venv /opt/certbot && \
/opt/certbot/bin/pip install certbot certbot-nginx && \
ln -s /opt/certbot/bin/certbot /usr/local/bin/certbot && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
打包镜像
docker build -t xr-nginx:1.29.3 .
运行镜像,生成容器服务。然后打开浏览器,输入 http://localhost 查看情况。
docker run --rm -it -p 80:80 --name xr-nginx xr-nginx:1.29.3
# 查看日志
docker run --rm -it -p 80:80 xr-nginx:1.29.3
# 进入容器
received
然后镜既有 nginx 的功能,还能生成证书。
# 容器外运行
docker exec -i xr-nginx sh -c "certbot -d xxx.com"
# 进入容器运行
docker exec -it xr-nginx bash
certbot -d xxx.com
默认情况下,win10 打包的 docker 镜像是 x86 架构平台的。有的服务器 cpu 是 arm 架构的,这个时候打包成 arm 架构的镜像就很有必要。或者是在服务器上去构建镜像。
创建并启用 arm64 构建器. arm-builder 是构建器名称。
docker buildx create --name arm-builder --use --platform linux/amd64,linux/arm64
准备好 Dockerfile 文件。 进行构建。 my-app-arm64 是镜像名字,1.0 是镜像版本。
docker buildx build --platform linux/arm64 -t my-app-arm64:1.0 --load .
构建成功后,验证一下。
docker run --rm -it --platform linux/arm64 my-app-arm64:1.0 uname -m
推送到远程仓库
docker tag my-app-arm64:1.0 xxxx仓库地址/my-app-arm64:1.0
docker push xxxx仓库地址/my-app-arm64:1.0
# 查看构建器列表
docker buildx ls
# 切换构建器
docker buildx use default (默认构建器)
docker buildx use desktop-linux (desktop-linux 构建器)
# 删除镜像构建器
docker buildx rm arm-buildx
服务器突然拉不下 github 代码,报下边错误,ping github 也 ping 不通。
git pull
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
这个是 github 22 端口号访问不了。既保留了 SSH 协议的便利(如使用 SSH 密钥认证),又绕开了被封锁的 22 端口。GitHub 允许通过 443 端口进行 SSH 连接。
1. 编辑 ssh 配置文件。
vim ~/.ssh/config
在文件中添加以下内容:
Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa # 这里指向你的私钥文件,如果默认是 id_rsa 通常不用改
保存退出,然后测试 ssh 连接是否畅通。
ssh -T git@github.com
# 输出以下信息
Hi 17vision! You've successfully authenticated, but GitHub does not provide shell access.
# 然后拉代码
git pull
如果不需要泛域名证书,可以不用安装对应域名运营商的 cli 工具
仅安装 certbot 的 Dockerfile
ARG NGINX_IMAGE
FROM ${NGINX_IMAGE}
# 安装 certbot https://certbot.eff.org/instructions?ws=nginx&os=snap
# 也可以在 nginx 之外使用 certbot 镜像 https://hub.docker.com/r/certbot/certbot
RUN apt-get update && \
apt-get install -y python3-venv && \
python3 -m venv /opt/certbot && \
/opt/certbot/bin/pip install certbot certbot-nginx && \
ln -s /opt/certbot/bin/certbot /usr/local/bin/certbot && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
安装 certbot 和 aliyun cli 的Dockerfile
ARG NGINX_IMAGE
FROM ${NGINX_IMAGE}
# 安装 certbot https://certbot.eff.org/instructions?ws=nginx&os=snap
# 也可以在 nginx 之外使用 certbot 镜像 https://hub.docker.com/r/certbot/certbot
RUN apt-get update && \
apt-get install -y wget python3-venv && \
python3 -m venv /opt/certbot && \
/opt/certbot/bin/pip install certbot certbot-nginx && \
ln -s /opt/certbot/bin/certbot /usr/local/bin/certbot && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 安装阿里云 cli https://help.aliyun.com/zh/cli/install-cli-on-linux?spm=a2c4g.11174283.0.0.5df9478dHNZ4T9
# https://help.aliyun.com/zh/cli/run-alibaba-cloud-cli-in-a-docker-container
RUN mkdir -p /soft && \
cd /soft && \
wget -q https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz && \
tar -xzvf aliyun-cli-linux-latest-amd64.tgz && \
cp aliyun /usr/local/bin/ && \
rm -rf /soft/aliyun-cli-linux-latest-amd64.tgz
# 验证阿里云 CLI 是否安装成功
RUN aliyun version
构建镜像,当前 nginx 最新版本是 1.28.0
docker build --build-arg NGINX_IMAGE=nginx:1.28.0 -t nginx-certbot .
假设服务器上已经使用了该 nginx 镜像。并且配置文件目录是 /etc/nginx/。假如某个 .conf 文件使用了 vini123.com 的证书。就可以通过一下命令生成。
# 找到容器的名字或 id 前三位
docker ps
# 生成证书
docker exec -i nginx1.28.0 certbot --nginx --nginx-server-root=/etc/nginx -d vini123.com -d www.vini123.com
docker exec 常用 option 说明。
常用选项
-d:在后台运行命令。
-i:保持 STDIN 打开,即使没有附加。
-t:分配一个伪终端。
-u:指定在容器内执行命令的用户。
--workdir:指定容器内的工作目录。
因为 certbot 安装在了 nginx 容器内。如果执行 docker-compose down 再执行 docker-compose up -d 就会丢失证书。所以在构建 nginx 容器的时候,一定要配置好证书的 volume。就是 certbot 生成的证书位置和本地宿主机的一个映射。
https://certbot.eff.org/instructions?ws=nginx&os=snap&tab=standard
https://snapcraft.io/docs/installing-snap-on-centos
https://snapcraft.io/docs/installing-snapd
yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
看看 snapd 状态。 snap changes
snap install --classic certbot
建立软链
ln -s /snap/bin/certbot /usr/bin/certbot
必须服务器先安装好 nginx。
nginx -t 先查找 nginx 的配置文件位置。比如:/tianwanggaidhu/service/nginx/conf/nginx.confcertbot --nginx --nginx-server-root=/tianwanggaidhu/service/nginx/conf -d vini123.com -d www.vini123.com
需要注意的是,--nginx-server-root 对应的是 nginx.conf 的配置目录,而不是具体的文件。
生第一个域名证书的时候,会让你输入 email,然后同意协议(y 回车即可)。生成一次后,后边的域名就直接生成了。
可以在任意位置执行该命令。
生成成功的同时,nginx 也一起重启了。也就是生成后,证书就 ok了。

生成的证书有效期是 3 个月的。3个月后,需要新的证书。这里用续期处理。
certbot renew --dry-run
可以通过定时任务来续订。
centos 系统,不用 docker,手动安装 coturn,部署一套 STUN/TURN 服务 webRTC打洞服务器
https://github.com/coturn/coturn/
yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel
cd /usr/local/src
wget https://codeload.github.com/coturn/coturn/tar.gz/refs/tags/4.6.2
tar -xzvf coturn-4.6.2.tar.gz
cd coturn-4.6.2
./configure
make
make install
安装结束时的最后几行日志。
install -p examples/etc/turnserver.conf /usr/local/etc/turnserver.conf.default
cp -rpf examples/etc /usr/local/share/examples/turnserver
cp -rpf examples/scripts /usr/local/share/examples/turnserver
rm -rf /usr/local/share/examples/turnserver/scripts/rfc5769.sh
cp -rpf include/turn/client /usr/local/include/turn
install -p include/turn/ns_turn_defs.h /usr/local/include/turn
cat /usr/local/share/doc/turnserver/postinstall.txt
which turnserver
输出:/usr/local/bin/turnserver
cd /usr/local/etc
cp turnserver.conf.default turnserver.conf
配置以下信息。
listening-port=3478 # 监听的端口
listening-ip=0.0.0.0 # 监听的内网IP
external-ip=x.x.x.x # 监听的外网IP
user=user:123456 # 设置账号密码
realm=xxx.com # realm 名称,通常是一个域名
no-tls
no-dtls
verbose
log-file=/var/log/turn.log # 配置日志位置
添加
vim /usr/lib/systemd/system/turnserver.service
# 配置以下内容
[Unit]
Description=turnserver for p2p
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/turnserver -o -c /usr/local/etc/turnserver.conf
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
# :wq 保存
启用
ps -ef|grep turnserver
# 只显示主进程
pgrep -a turnserver
查看监听端口。
netstat -tulnp | grep turnserver
查看 3478 端口。
lsof -i :3478
turnutils_uclient -v -t -y -u user -w password ip
替换对应的 user, password, ip 为配置的值。
或网页测试
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
长期维护,国内镜像。请访问 https://cloud.tencent.com/developer/article/2485043
# 打开或新建 daemon.json
vim /etc/docker/daemon.json
# 加入一下配置
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
# 重启
sudo systemctl daemon-reload
sudo systemctl restart docker
docker 备份数据库
/user/local/src/backup/mysql-backup.sh 文件。#!/bin/bash
CONTAINER_NAME="mysql8.2" # MySQL容器名称
MYSQL_PWD="xxxxxx" # 数据库密码
MYSQL_DATABASE="xxxxxx" # 数据库名称
BACKUP_DIR="/user/local/src/backup/mysql" # 备份存储目录
LOG_DIR="/user/local/src/backup/logs" # 备份存储目录
DATE=$(date +"%Y%m%d")
# 确保备份目录存在
mkdir -p "$BACKUP_DIR"
mkdir -p "$LOG_DIR"
# 每周日进行全量备份
if [[ $(date +%u) -eq 7 ]]; then
echo "开始备份..."
BACKUP_FILE="$BACKUP_DIR/mysql_full_$DATE.sql"
docker exec $CONTAINER_NAME sh -c "mysqldump -uroot -p'$MYSQL_PWD' $MYSQL_DATABASE" >"$BACKUP_FILE"
gzip "$BACKUP_FILE"
echo "备份完成并压缩,存储路径:$BACKUP_FILE.gz"
else
echo "今天不是周天,不备份"
fi
如果备份所有数据库。mysqldump --all-databases -uroot -p'$MYSQL_PWD'
chmod +x /user/local/src/backup/mysql-backup.sh
crontab -e
#每天凌晨 2 点启动定时任务
0 2 * * * bash /user/local/src/backup/mysql-backup.sh >> /user/local/src/backup/logs/backup_$(date +\%Y\%m\%d).log 2>&1