Write the Code. Change the World.

分类目录
2月 06

https://www.kylinos.cn/

离线安装

  1. 查看系统架构

    uname -p

    根据输出结果(如 x86_64 或 aarch64),方便选择对应的 Docker 离线安装包。

  2. 访问 docker 官网,下载对应的包。 https://download.docker.com/linux/static/stable/
    当前最新版本是 27.5.1。完整下载地址是。https://download.docker.com/linux/static/stable/aarch64/docker-27.5.1.tgz

  3. 将下载好的包先解压到某个目录。比如 /opt 目录下。

    tar -zxvf docker-27.5.1.tgz -C /opt
  4. 将解压好的 Docker 二进制文件移动到 /usr/local/bin 目录下。

    mv /opt/docker/* /usr/local/bin
  5. 配置 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
  1. 设置 docker.service 权限,启动,并设置自启动。
chmod +x /usr/lib/systemd/system/docker.service

systemctl daemon-reload
systemctl start docker
systemctl enable docker
  1. 查看 docker 版本
    docker -v

只安装 docker 还不够,还得安装个 docker-compose

安装 docker-compose

  1. 打开下载地址: https://github.com/docker/compose/tags ,根据系统选择对应的版本,下载到 /opt 目录下。
wget wget https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-linux-aarch64
  1. 移动到 /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 系统上跑,就是快。

步骤

  1. 先安装 Ubuntu。
  2. 再安装 docker。
  3. 设置 docker 。

设置 docker 如下图所示。

  1. win + r 输入 \\wsl$ 回车,打开 wsl 目录。或在资源管理器中打开 wsl 目录。这里要进入 Ubuntu 目录。然后将代码复制到 Ubuntu 系统中。比如将 docker-compose 相关的 service 放在 /docker-data 下。

  2. 进入 ubuntu 中。执行 docker-compose up -d,把服务跑起来。

这个时候再去请求 php 的接口就飞快。

4月 09

买了个 99 元的阿里云,最近经常卡死。通过 htop,可以看到是 /usr/bin/dnf makecache 占用 cpu 太高。

尝试处理

关闭 CentOS 的后台更新服务

systemctl stop dnf-makecache.timer

systemctl disable dnf-makecache.timer

后续

运行了许多天后,又卡死了。使用 htop 查看,发现是阿里云的监控煮助手。好吧,把监控助手也搞掉。

先干掉监控助手的守护进程。

# 停止云助手守护进程
/usr/local/share/assist-daemon/assist_daemon --stop

# 卸载云助手守护进程
/usr/local/share/assist-daemon/assist_daemon --delete

# 删除云助手守护进程目录
rm -rf /usr/local/share/assist-daemon

再来干掉监控助手。

# 查询您的ECS实例是否使用systemd初始化进程服务,有返回信息则表示使用的是systemd
strings /sbin/init | grep "/lib/system"

# 停止云助手Agent
systemctl stop aliyun.service

# 卸载云助手Agent
sudo rpm -qa | grep aliyun_assist | xargs sudo rpm -e

参考

https://blog.csdn.net/kunyus/article/details/106861400

https://help.aliyun.com/zh/ecs/user-guide/start-stop-or-uninstall-the-cloud-assistant-agent

https://help.aliyun.com/zh/ecs/user-guide/start-stop-or-uninstall-the-cloud-assistant-agent#section-ge4-ads-7ud

https://ivpsr.com/3914.html

4月 08

https://www.meilisearch.com/docs/learn/cookbooks/laravel_scout

构建 laravel 项目使用的工具不是 Sail 时。按照官方文档 https://laravel.com/docs/11.x/scout 来安装和使用 Scout 时,发现会报错。

cURL error 7: Failed to connect to 127.0.0.1 port 7700 after 0 ms: Couldn't connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://127.0.0.1:7700/indexes/resources/documents?primaryKey=id"

我这里使用的是 docker 环境。出现这个的原因是没有启动 meilisearch 服务。如果使用 sail 构建时,其会包含 meilisearch 服务。所以在这里,自己手动构建好 meilisearch 服务就可以了。docker-compose.yaml 配置如下:

  meilisearch:  
    image: getmeili/meilisearch:latest
    container_name: meilisearch_latest
    ports:  
      - "7700:7700"  
    environment:  
      - MEILI_MASTER_KEY=masterKey  
      - MEILI_NO_ANALYTICS=true  
    volumes:  
      - ./data/meilisearch:/var/lib/meilisearch  
    restart: always

其中,masterKey 为秘钥,可以自定义。

然后 laravel 的 .env 文件中,可以增加以下配置。

SCOUT_DRIVER=meilisearch  
MEILISEARCH_HOST=http://meilisearch:7700  
MEILISEARCH_KEY=masterKey

其他按照官方文档来就可以了。

1月 26

skynet 框架,在 skynet.start 方法中,对 skynet.newservice 进行 name 时候会报错 attempt to call a nil value (field 'name') 的处理。

使用 skynet.wait, 等待异步的完成就可以。下边给出示例。

local Service = '.Service'
skynet.start(function()
    local service = skynet.newservice('xxx')
    skynet.wait(service)
    skynet.name(Service, service)
end)
1月 24

在做自己的业务之前,尝试官方的样例是很有必要的。只需要一个装好 docker 的电脑,几步就可以完成测试。

官方 websocket 示例代码:
https://github.com/cloudwu/skynet/blob/master/examples/simplewebsocket.lua

skynet 的 docker 环境构建
https://blog.vini123.com/1130

准备工作

  • docker 环境
  • 并按照上边链接里的方式构建出了 docker 镜像。

开始

docker images 看看构建的镜像是否存在,这个是前提。

# 以交互式的方式构建并进入容器
docker run -it --rm -p 9948:9948 skynet:1.7 bash

# 安装 vim (因为我们要修改下 config)文件
apk add vim

# 编辑 config 文件
vim examples/config

继续阅读

1月 24

skynet 最早就能提供 socket 服务。后来,也能提供 websocket 服务。这里,接着之前的代码,构建一个 websocket 服务。

https://github.com/cloudwu/skynet/blob/master/examples/simplewebsocket.lua

上边是官方 websocket 的一个示例。

开始

以官方为借鉴,这里先创建一个 websocket.lua 文件。完整的路径是 www/websocket/service/connect/websocket.lua

继续阅读