8月
27
服务器突然拉不下 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
5月
08
如果不需要泛域名证书,可以不用安装对应域名运营商的 cli 工具
nginx 镜像
仅安装 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 生成的证书位置和本地宿主机的一个映射。
4月
28
https://certbot.eff.org/instructions?ws=nginx&os=snap&tab=standard
安装
安装 snapd
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
安装 certbot
snap install --classic certbot
建立软链
ln -s /snap/bin/certbot /usr/bin/certbot
生成证书
必须服务器先安装好 nginx。
生成单个域名证书
生第一个域名证书的时候,会让你输入 email,然后同意协议(y 回车即可)。生成一次后,后边的域名就直接生成了。
可以在任意位置执行该命令。
生成成功的同时,nginx 也一起重启了。也就是生成后,证书就 ok了。
证书续期
生成的证书有效期是 3 个月的。3个月后,需要新的证书。这里用续期处理。
certbot renew --dry-run
可以通过定时任务来续订。
生泛域名证书
参考
https://www.cnblogs.com/michaelshen/p/18538178
4月
27
coturn
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
配置 turn
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 保存
启用
- systemctl daemon-reload 重置服务列表
- systemctl enable turnserver.service 开启开机自启
- systemctl start turnserver.service 启动服务
- systemctl restart turnserver.service 重启服务
- systemctl status turnserver.service 查看状态
- systemctl disable turnserver.service 关闭开机自启。()不关闭,就不执行这个)
查看进程
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://sanyers.github.io/blog/web/webrtc/turn%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%83%A8%E7%BD%B2.html#_6%E3%80%81%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1
https://coturn.net/turnserver/
https://github.com/coturn/coturn/wiki/Downloads
3月
28
长期维护,国内镜像。请访问 https://cloud.tencent.com/developer/article/2485043
centos
# 打开或新建 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
3月
26
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
2月
06
https://www.kylinos.cn/
离线安装
-
查看系统架构
uname -p
根据输出结果(如 x86_64 或 aarch64),方便选择对应的 Docker 离线安装包。
-
访问 docker 官网,下载对应的包。 https://download.docker.com/linux/static/stable/
当前最新版本是 27.5.1。完整下载地址是。https://download.docker.com/linux/static/stable/aarch64/docker-27.5.1.tgz
-
将下载好的包先解压到某个目录。比如 /opt 目录下。
tar -zxvf docker-27.5.1.tgz -C /opt
-
将解压好的 Docker 二进制文件移动到 /usr/local/bin 目录下。
mv /opt/docker/* /usr/local/bin
-
配置 Docker 服务。创建并编辑/usr/lib/systemd/system/docker.service文件。
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
- 设置 docker.service 权限,启动,并设置自启动。
chmod +x /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker
systemctl enable docker
- 查看 docker 版本
docker -v
只安装 docker 还不够,还得安装个 docker-compose
安装 docker-compose
- 打开下载地址: https://github.com/docker/compose/tags ,根据系统选择对应的版本,下载到 /opt 目录下。
wget wget https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-linux-aarch64
- 移动到 /usr/local/bin 下,并设置权限。
v docker-compose-linux-aarch64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
配置镜像源
如果不配置镜像源,国内很难下载到想要的镜像。配置镜像源是很必须的。
mkdir /etc/docker
vim /etc/docker/daemon.json
#内容如下
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
systemctl daemon-reload
systemctl restart docker
参考:https://cloud.tencent.com/developer/article/2485043
1月
02
局域网内,即使不配置 stun/turn, webrtc 也是能音视频通话。如果在广域网环境,必须得有 turn 服务。那么自己构建一个 turn 服务就很有必要。不过广域网的 webrtc 对带宽的消耗也是很大。
STUN
STUN(Session Traversal Utilities for NAT,NAT 会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的 Internet 端端口。这些信息被用来在两个同时处于 NAT 路由器之后的主机之间创建 UDP 通信。该协议由 RFC 5389 定义。(提供客户端检测自己的公共 IP 地址和端口)
STUN 并不是每次都能成功的为需要 NAT 通话设备分配 IP 地址的,P2P 在传输媒体流时,使用的本地带宽,在多人视频通话的过程中,通话质量的好坏往往需要根据使用者本地的带宽确定。
TURN
TURN 的全称为 Traversal Using Relays around NAT,是 STUN/RFC5389 的一个拓展,主要添加了 Relay 功能。如果终端在 NAT 之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继, 对来往的数据进行转发。这个转发的协议就被定义为 TURN。
在 STUN 分配公网 IP 失败后,可以通过 TURN 服务器请求公网 IP 地址作为中继地址。这种方式的带宽由服务器端承担,在多人视频聊天的时候,本地带宽压力较小,并且,根据 Google 的说明,TURN 协议可以使用在所有的环境中。(中继流量,当点对点连接不可用时,Coturn 会接管通信。)
ICE 跟 STUN 和 TURN 不一样,ICE 不是一种协议,而是一个框架(Framework),它整合了 STUN 和 TURN。coturn 开源项目集成了 STUN 和 TURN 的功能。
继续阅读
8月
02
操作
有就编辑,没有就创建 .vimrc 文件
vim ~/.vimrc
增加以下配置。
set encoding=utf-8
set fileencodings=utf-8,gbk,gb2312,gb18030,cp936,latin1
set termencoding=utf-8
使得生效
source ~/.vimrc
4月
11
win10 系统,安装 docker,然后跑 php 项目,通常会很慢,一个最简单接口都可能要好几秒,真叫人肝疼。改变不了 win10,只能找解决方法。
处理方法
慢的原因网上有很多,怎么解决网上也很多,也实践过。不过,有一条是真的快。将代码放在 ubuntu 系统上跑,就是快。
步骤:
- 先安装 Ubuntu。
- 再安装 docker。
- 设置 docker 。
设置 docker 如下图所示。
-
win + s 搜索安装的 ubuntu,点击图标,进入终端中。在 /mnt/ 目录对应的本地磁盘中的文件复制到 ubuntu 系统中,比如 /docker-data/p1, p1 是项目名
-
配置自启动。在 /etc/systemmd/system/ 下创建 p1-docker.service。vim p1-docker.service 写入脚本。
[Unit]
Description=My Docker Compose Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c 'cd /docker-data/p1 && docker-compose up'
ExecStop=/bin/bash -c 'cd /docker-data/p1 && docker-compose down'
Restart=on-failure
[Install]
WantedBy=multi-user.target
Description:服务的描述。
After:指定该服务在 network.target 之后启动。
ExecStart:启动服务时执行的命令。
ExecStop:停止服务时执行的命令。
Restart:服务失败时自动重启。
WantedBy:指定该服务在多用户目标下启动。
设置权限。
sudo chmod +x p1-docker.service
设置自启动
systemctl enable mydocker.service
systemctl start mydocker.service
查看服务状态
systemctl status mydocker.service
这个时候再去请求 php 的接口就飞快。
测试
查看接口响应时间
docker ps
docker exec -it xxx bash
curl --request POST http://xxx.com/xxxx -w "请求时间:%{time_total} 秒\n" -o /dev/null -s
这里有个问题,将本地的文件复制的 ubuntu 上对开发不太友好。可以挂载或直接使用 /mnt/ 目录下的文件吗,暂时没试过