[记录]便捷部署bitwarden_rs/vaultwarden:从docker提取二进制

Bitwarden Server的开源Rust实现(新版本已经改名vaultwarden),编译后的二进制没有外部依赖,社区不提供编译好的二进制,但是提供了docker,本文是建立在提取docker内的二进制的基础上。

我使用的环境是Proxmox VE(PVE),你可以根据自己的情况变通;点击右上角,创建CT,使用Alpine模板,硬盘默认2G就足够,内存512MB即可。

准备工作

使用命令lxc-attach vmid进入容器,下载docker官方提供的镜像下载脚本,并安装依赖:

cd /opt
wget https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh
chmod +x download-frozen-image-v2.sh
apk add jq bash

- 阅读剩余部分 -

[记录]不使用root或sudo运行systemd服务

需求点

systemd是一套系统组件合集,现在要说的是其中的systemctl命令,它是用来控制和查看系统服务的。
通常情况下需要使用root或者有sudo权限的用户进行操作,这在某些场景下不能满足需要或者有不安全隐患。

现在我们来尝试使用常规权限用户启动服务。

创建服务

属于用户的服务要放在 ~/.config/systemd/user 目录下,这是个固定的目录,后面的user不可替换

mkdir ~/.config/systemd/user

- 阅读剩余部分 -

[分享] SSH和Git共享22端口,适用于docker或者frp转发等

先说下我的使用场景:

  1. 我有一台跑在腾讯云上的VPS,就是此博客系统所在的机器,这台机器是有公网IP的
  2. 在我家里的内网,有一台4核16G的小型服务器,没有公网IP,运行Proxmox VE虚拟了各种服务,其中包括Gitea
  3. 我通过frp转发暴露内网的Gitea到公网
  4. 在这之前我一直使用HTTP协议上传或者下载代码,现在觉得太麻烦想用SSH协议

如果你跟我的场景类型,此文很适合你,如果你是同一台机器上docker宿主机之间22端口共享问题,文末官方文档更适合你。

本文也是参考了文末官方文档的实现,但是有部分不太一样。

- 阅读剩余部分 -

[记录]Proxmox VE 通过外部 SMTP 服务器发邮件,同样适用其他调用Postfix的服务

PVE默认发送的邮件会被丢垃圾箱,所以想改为自己的SMTP

安装SASL依赖

SSH登录或在Web控制面板点击>_Shell输入:

apt-get install -y libsasl2-modules

配置Postfix信息

修改 /etc/postfix/main.cf 尾部添加:

relayhost = smtp.exmail.qq.com:465
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sender_dependent_authentication = yes
smtp_generic_maps = hash:/etc/postfix/generic
smtp_use_tls = yes
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

relayhost 需要改为自己的SMTP服务和SSL端口号
注意 /etc/postfix/main.cf 文件应该还有一个内容为空的 relayhost 默认配置请删掉或者注释

- 阅读剩余部分 -

[原创]解决Spring Boot Kafka 分区不均匀问题

现象

我们通常使用多个分区,开多线程来提高Kafka的消费速度,分区不均匀会导致线程闲置,消费速度过慢,进而导致消息积压

问题原因

消息写入哪个分区是由生产者决定的,在调用kafkaTemplate.send()方法时,可以指定分区,否则使用默认分区器DefaultPartitioner计算。因为分区可能会调整,通常我们不会指定固定分区,而是依靠分区计算器。

查看DefaultPartitioner代码可以得知:当指定了key每次都会计算出固定的分区,否则会自动计算出一个可用分区。

Kafka指定key计算出固定分区是为了满足消息有序的需求,如果你需要保证消息的有序性而指定了key,本文描述的方法可能不适用你。

解决方案

那么解决这个问题的方式就是:

  1. 不再指定key
  2. 自定义分区器,每次计算出不同的分区

方法1不可行,因为这需要调整业务,成本太高,且合理的使用key有助于业务更清晰。

- 阅读剩余部分 -

[分享] 开源一个 PHP 框架 Awheel

项目地址: Awheel
当前版本: v1.5.0
PHP要求: >=5.4.0

介绍

基本功能: 路由/中间件/控制器/控制台/组件/配置加载/输入&输出.

框架最初是为了满足公司业务需求一步步造出来的, 但是从一开始就很独立的没有柔任何业务代码进去, 只保留了基本功能, 除此以外的功能全部需要自行扩展, 因为我觉得框架提供的功能越多学习和推广的成本就越高, 出现 Bug 的几率也就越高, 反倒不如都拆分成组件, 而且 Composer 那么好用, 扩展起来分分钟的事.

所以没有自带模板引擎, 需要使用组件功能自行扩展, 只需要继承并实现 Component 接口的 getAccessorregister 方法就可以使用, 目前我提供了 Smarty, Blade, SPA 三种模板扩展.

也没有自带 ORM 组件, 但是这里提供一个扩展 medoo-model 这是一个轻量级的数据库访问封装, 不管是名字还是功能我都非常喜欢?, 也可自行扩展 Eloquent ORMDoctrine ORM 稍后我会给出一个 Eloquent ORM的封装扩展给喜欢的人使用

- 阅读剩余部分 -

[分享] Alpine 真是个好东西

把 VPS 上的 Ngrok 用 Alpine 重新打包了一下, 体积小了很多

root@vultr:/opt/ngrok# docker images 
REPOSITORY          TAG             IMAGE ID        CREATED          SIZE
ngrokd.alpine       latest          d891322d86e4    2 minutes ago    14.03 MB
alpine              3.5             4a415e366388    11 days ago      3.987 MB
root@vultr:/opt/ngrok# du -sh ./bin/ngrokd
9.6M    ./bin/ngrokd
root@vultr:/opt/ngrok# ldd bin/ngrokd
    not a dynamic executable

因为依赖库的问题, ngrok 编译的时候需要增加 CGO_ENABLED=0 来指定静态编译, 所以生成的可执行文件会比较大.

例如: root@vultr:/opt/ngrok# CGO_ENABLED=0 make release-server.

感觉可以把其它东西也都挪到 docker 了

[分享] 关于 React Native 使用 Xcode 图片资源编译错误 Unable to resolve module image!nav from xxx

周末两天在家折腾 React Native 碰到的问题,被坑了很久。。。

问题还原:
首页在 XcodeImages.xcassets 里面明确的有这个图片。
React Native 导航的调用也没问题:

<TabBarIOS.Item
    title="列表"
    icon={require('image!nav')}
    onPress={() => {
    this.setState({
        selectedTab: 'homeTab'
    });
}}
>
</TabBarIOS.Item>

但是编译运行就报错: Unable to resolve module image!nav from xxx, 如果不编译,只是在模拟机里面 reload 也是一样的提示。

最后发现其实只要在 Xcode 里面添加图片资源,然后编译,运行,再在 React Native 代码里面调用,就不会再出错,而且下次编译也不会出错。