彻底删除Docker Desktop for Mac

Docker Desktop for Mac 4.6 增加了一个新特性VirtioFS(戳这里看Docker官方Blog介绍),虽然截止目前(4.7版本)为止还是实验性的(Experimental),但是98%的文件读写性能提升还是太有诱惑力了。

昨天手欠开了一下想尝试一番,结果点击Apply之后就一直转圈圈,等了2个钟头之后我放弃了。然后重启Docker,发现无法启动,这下就懵了。

Docker Desktop stopped

通过查看日志发现com.docker.virtualization报错:Invalid virtual machine configuration.

无奈之下只好选择重新安装。

结果不管是删除后重新安装还是降级到4.5,还是一样的问题。始终无法正常启动,猜测应该是有配置没删干净。期间尝试各种姿势删除Docker,包括官方提供的命令行删除也没有起作用。

最后经过一番查找分析,得出以下命令:

sudo rm -rf /Applications/Docker.app 
sudo rm -rf /private/var/folders/0y/frd89c5s3yx4pg6fjbn9d8j00000gn/C/com.electron.dockerdesktop 
rm -rf ~/Library/Containers/com.docker.docker 
rm -rf ~/Library/Application\ Support/Docker\ Desktop 
rm -rf ~/Library/Saved\ Application\ State/com.electron.dockerdesktop.savedState 
rm -rf ~/Library/HTTPStorages/com.docker.docker 
rm -rf ~/Library/Caches/com.docker.docker 
rm -rf ~/Library/Group\ Containers/group.com.docker 
rm -rf ~/Library/Application\ Support/com.bugsnag.Bugsnag/com.docker.docker

注意第二行的路径需要自己查找一下,中间部分会有区别。

Read: 719

虚拟机硬盘空间增加方法QEMU(QCOW) LVM

# 先停止虚拟机
virsh stop test-server-1
# 修改磁盘镜像大小
qemu-img resize test-server-data +100G
# 进入虚拟机后pvresize
pvresize -v /dev/vdb
# 扩展lv空间
lvextend -l +100%FREE /dev/mapper/vgdata-data
# 调整文件系统大小,这里是ext4的文件系统,用resize2fs,在此之前还需要先执行e2fsck
e2fsck -f /dev/mapper/vgdata-data
resize2fs /dev/mapper/vgdata-data
# 最后挂载磁盘
mount -a

完成

Read: 170

改hosts不生效?教你清理Chrome的DNS缓存

在进行web开发的时候,我们经常会修改hosts文件进行测试,但是偶尔会发现改了hosts文件并不能立刻生效。这是由于浏览器自身对DNS(域名指向)是有进行缓存的,除了缓存之外,由于HTTP1.1支持连接复用,如果之前打开过这个页面,那么即使清理了DNS缓存也会因为复用连接再继续连接到旧的域名指向地址。如果出现连接被复用的情况就需要手动关闭活跃连接了。

查看实际连接地址

查看实际实际连接地址可以通过开发工具的网络面板进行查看。

清理缓存方法

1、在地址栏输入:chrome://net-internals

2、在DNS选项卡下,点击“Clear host cache”,清空缓存;

关闭活跃连接方法

1、在地址栏输入:chrome://net-internals;

2、在Sockets选项卡下,关闭活跃的连接;

再附赠一个清除MacOS DNS缓存的方法

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

上面三招下来还不行,再来捶我。

Read: 378

Nuxt不停机部署指南

在我们的服务器环境中有不少Nuxt应用,但是项目的配置都有问题,会导致项目部署重启的时候会不可用,提示 502 Bad Gateway。而且启动服务的时候总会有奇怪的错误信息,而真正的错误日志又看不到。

下面直接讲正确部署与重启的姿势是怎样。

配置服务

首先我们需要在工程根目录创建一个PM2环境配置文件 ecosystem.config.js

module.exports = {
apps: [
{
name: '项目名称', // 如 ks.mbachina.com
exec_mode: 'cluster', // 启动模式,cluster为集群,无需修改
instances: 'max', // // 实例数量,max为CPU核心数,无需修改
script: './node_modules/nuxt/bin/nuxt.js', // 无需修改
args: 'start' // 启动参数,通常无需修改
}
]
}

构建工程

这里没什么特别的,本地通过 npm run build 或者通过Jenkins进行构建部署到服务器。

需要注意的点是需要将上面的 ecosystem.config.js 部署到服务器上的项目根目录。

启动服务(创建服务)

cd 工程目录
pm2 start

执行上面的命令之后就会自动创建出pm2服务了。

重启服务(不停机重启)

pm2 reload $项目名称

将上面命令的 $项目名称 替换为在ecosystem.config.js中配置的实际项目名称即可。

注意这里用的是reload命令,不要用restart命令。

再次提示,更新代码后只需要执行reload命令即可,不需要先stop、delete再start。

参考:https://nuxtjs.org/docs/2.x/deployment/deployment-pm2

Read: 143

让KindEditor支持MP4视频(使用ckplayer播放器)

参考文章:https://blog.csdn.net/zhjx922/article/details/7601660

KindEditor本身支持音视频文件的上传,但是对于这些文件的支持是依赖于浏览器控件的,兼容性很差,而且现在比较常见的视频文件MP4也不支持,因此本文提供了对KindEditor进行修改的办法,使其在添加视频后可直接使用CKplayer进行播放。

CKplayer下载地址:http://www.ckplayer.com/down/
我这里使用的是2018-12-20的X1版本

使用简单调用方式:http://www.ckplayer.com/manualX/14.html

KindEditor我为了省事,我这里使用的是kindeditor.all.js直接进行修改,其他文件大同小异。

首先找到K.options,在embed数组中增加下面两项

'flashvars', 'allowfullscreen'

然后修改函数 function _mediaType(src)

// 把
if (/.(swf|flv)(\?|$)/i.test(src)) {
// 改成
if (/.(swf|flv|mp4)(\?|$)/i.test(src)) {

找到函数 function _mediaEmbed(attrs) 为html中的<embed标签添加两个属性

allowscriptaccess="always" allowfullscreen="true"

找到 KindEditor.plugin(‘media’ 修改音视频插件生成HTML的方法

// 将原有的HTML生成代码进行修改

var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
src : url,
type : K.mediaType('.swf'),
width : width,
height : height,
quality : 'high'
});
// 改为

var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
src : '/resource/ckplayer/ckplayer.swf', // 这里替换成你的ckplayer.swf的实际位置
flashvars : 'video=' + url.replace(/^video=/, ''),
type : K.mediaType('.swf'),
width : width,
height : height,
quality : 'high'
});

还需要将media插件代码的后半段中对视频属性修改的部分进行处理

// 找到
urlBox.val(attrs.src);
// 替换为
urlBox.val(attrs.flashvars);

最后只要在创建KindEditor实例时在items中添加’media’就可以了。

Read: 807