基于公网完成跨云厂商服务器 k3s 集群部署
Kubernetes 在当下的火热程度不必多言,但由 继续阅读
基于公网完成跨云厂商服务器 k3s 集群部署
Kubernetes 在当下的火热程度不必多言,但由 继续阅读
汇集几乎全部 k8s 配置项注释,方便查阅和学习
# yaml格式的pod定义文件
<a href="https://blog.frytea.com/archives/1142/#more-1142" class="more-link">继续阅读 <span class="meta-nav">→</span></a> Kubernetes系列文章概述
接触,了解 k8s 已经有一段时间了,但由于工作内容没有涉及到, 继续阅读
Linux 2.6.13 内核中引入了新的文件系统变化通知机制 inotify ,使用该特性提供的用户态调用 api ,可以方便的完成文件变化监听。
各种语言基本都提供了对该接口的调用方法: C 不必多说, Perl 使用 [Linux::Inotify2](https://metacpan.org/pod/Linux::Inotify2) , Golang 使用 golang.org/x/sys/unix , Python 则使用 [pyinotify](https://github.com/seb-m/pyinotify) 即可完成调用。
这里汇总所有相关监听事件,理论上针对所有语言通用:
* IN_ACCESS 文件被访问
* IN_ATTRIB 文件属性发生变化(文件元数据改变, 如权限, 链接计数, 扩展属性, 用户ID或组ID等)
* IN_CLOSE_WRITE 关闭以write方式打开的文件
* IN_CLOSE_NOWRITE 关闭以非write方式打开的文件
* IN_CREATE 在受监控目录内创建了文件/目录
* IN_DELETE 在受监控目录内删除了文件/目录
* IN_DELETE_SELF 被监测的文件/目录被删除
* IN_MODIFY 文件被修改
* IN_MOVE_SELF 移动受监测的文件或目录
* IN_MOVED_FROM 文件移出被监测的目录
* IN_MOVED_TO 文件移入被监测的目录
* IN_OPEN 文件被打开
* --------- 上述flag的集合
* IN_ALL_EVENTS 以上所有flag的集合
* IN_MOVE IN_MOVED_TO + IN_MOVED_FROM
* IN_CLOSE IN_CLOSE_WRITE + IN_CLOSE_NOWRITE
* --------- 不常用的flag
* IN_DONT_FOLLOW 不对符号链接解引用, 监控符号链接自身
* IN_MASK_ADD 将事件追加到pathname的当前监控掩码
* IN_ONESHOT 只监测一个事件, 事件发生后, 被监控项会从监控列表中消失
* IN_ONLYDIR 只监测目录
* IN_IGNORED 监控项被内核或应用程序移除
* IN_ISDIR 发生事件的是一个目录
* IN_Q_OVERFLOW Event队列溢出
* IN_UNMOUNT 文件系统unmount
最近想在内网搭建一套 Wiki,在调研了各种 wiki 的搭建方式、功能之后,选择了 wiki.js。但是在部署过程中,发现其默认是通过公网拉取语言包等资源,内网安装需要一些特别的方法。
这篇文章就来介绍内网部署 wiki.js 并拉取语言包的方法。
按照 官网安装方法,可以较快的将整个服务启动起来:
# 安装前请确保安装了 node npm
$ apt-get install node npm
# 若内网服务器没有安装,可参考官网二进制离线安装的方法
# 首先获取离线包,可在互联网上下载,拷入内网服务器
$ wget https://github.com/Requarks/wiki/releases/download/2.5.272/wiki-js.tar.gz
# 之后将所有内容解压到一个安装路径,我装在 /opt/wiki 下
$ mkdir wiki
$ tar xzf wiki-js.tar.gz -C ./wiki
$ cd ./wiki
# 下面需要进行配置
$ mv config.sample.yml config.yml
# 按照自己的需求修改配置文件
$ vim config.yml
# 如果使用 sqlite,在这里完成数据库初始化
$ npm rebuild sqlite3
# 服务启动
$ node server
官网提供了 systemd 配置文件,直接创建,配置好之后即可使用
nano /etc/systemd/system/wiki.service
[Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
# Consider creating a dedicated user for Wiki.js here:
User=nobody
Environment=NODE_ENV=production
WorkingDirectory=/var/wiki
[Install]
WantedBy=multi-user.target
最后:
$ systemctl daemon-reload
$ systemctl enable wiki
$ systemctl start wiki
# 检查一下是否启动
$ systemctl status wiki
# 查看日志
$ journalctl -xef -u wiki
内网环境无法直接下载语言包,此时需要按照如下步骤手动导入语言包:
首先需要告诉 wiki.js 当前运行在离线环境中,因此在配置文件中进行如下修改:
- offline: false
+ offline: true
之后在安装目录下创建一个文件夹 data/sideload 用来存放离线资源,比如我是安装在 /opt/wiki/ 下,配置文件中配置的数据文件夹为 /opt/wiki/data ,那么我就创建一个新的文件夹 /opt/wiki/data/sideload 即可。
官方提供的语言包资源可以在这里下载:https://github.com/Requarks/wiki-localization
务必下载 locales.json ,之后下载您需要的语言包(如 zh.json )。
将下载好的 locales.json , zh.json , en.json 等资源拷入上面创建好的文件夹中。
最后重启服务即可:
systemctl restart wiki
介绍三种桌面平台下连接 spice 云桌面的方法。
最近需要使用到云桌面办公,但目前仅支持 win 继续阅读
最近需要使用到云桌面办公,但目前仅支持 windows 客户端。后经过询问,发现是使用 spice 协议链接,提供地址后,即可使用第三方客户端链接。
MacOS 平台下没有很好的支持 spice 协议的图形化客户端,但是可以使用 remote-viewer 这个工具,也比较好用,下面介绍安装方法:
# jeffreywildman/homebrew-virt-manager 有些问题
# Krish-sysadmin 对它进行了修复,因此首先卸载参与包和地址
brew remove virt-manager
brew remove virt-viewer
brew untap jeffreywildman/homebrew-virt-manager
# 安装工具
brew tap Krish-sysadmin/homebrew-virt-manager
brew install virt-manager virt-viewer
# 如果缺少某些依赖库,安装后重试即可
# 使用
remote-viewer

输入 spice 地址链接即可。

这次探索走了不少弯路,从尝试各种第三方远程桌面客户端,到 remote-viewer 的安装,工具的安装也遇到不少问题,最后在我的 MacBook Air m1 上成功安装,在这里分享方法。
在 Linux 下可以使用 remmina 这款工具,支持 「X2Go RDP SPICE VNC SSH HTTP/HTTPS」。
在 Windows 下则可以使用 virt-mananger 来链接,参考「windows和linux下的spice客户端使用方法」。
至此,Windows、Linux、MacOS 链接 spice 服务的方法介绍完毕。
工作中常需要连接着服务器,下班或暂时离开时会出现一段时间不操作终端,此时就会自动断开。
这本身无伤大雅,重连即可,直到我发现,一些依赖 SSH 提供的服务也会因此受到影响,比如 Pychram 远程开发,会在一段时间后无响应,只能重启 Pychram 解决,很影响效率。
为解决该问题,在网上找到一种配置方法,亲测一夜 (10h+) 不会再断开,在此分享:
众所周知,SSH 是用于与远程服务器建立加密通信通道的,因此配置涉及服务端和客户端:
/etc/ssh/sshd_config-#ClientAliveInterval 0 #服务器向客户端发送请求消息的时间间隔,默认为0,不发送
-#ClientAliveCountMax 3 #服务器发出求后客户端没有响应的最大次数,超过后将自动断开。
+ClientAliveInterval 60 #每60秒发送一个KeepAlive请求
+ClientAliveCountMax 15 #总时间为:15*60 ,15分钟没有操作,终端断开。
# 以下任意命令重启 sshd 服务
service sshd reload
service sshd restart
systemctl sshd restart
~/.ssh/config# 修改 ~/.ssh/config 对当前用户生效
# 这样配置通配所有服务端
Host *
ServerAliveInterval 60
# 指定IP配置
Host *hostname.com #指定IP
ServerAliveInterval 60
# 或是全局配置(对所有用户生效)
vim /etc/ssh/sshd_config
+ ServerAliveInterval 60
先说结论:python不允许程序员选择采用传值还是传引用。
在函数传值,或函数内部函数引用外部变量时,基本符合这个逻辑,比如:
def test_dect_out():
lvs = {}
num1 = 3
def lan():
lvs['sss'] = 4
num1 = 5
return lvs, num1
print(lvs, num1)
print(lan())
print(lvs, num1)
{} 3
({'sss': 4}, 5)
{'sss': 4} 3