没事多喝水

技术笔记&记录生活点滴

  • 首页
  • 读书
  • 观影
  • 笔记
  • 读书笔记
  • Android学习
  • 生活
  • 吹口琴
  • 爱咖啡
  • IT技术-文档
  • 日常桌面
  • 数据库
  • CI/CD运维
  • Android开发
  • 小程序&微网页
  • Web开发
  • 产品
  • 教学
  • 安卓
  • 关于
  • 标签
  • 搜索

SSL安全证书生成&管理

发表于 2022-02-03 | 更新于 2022-02-05

最近SSL又经常面临更新,免费的阿里云,总是那么不方便。况且还不支持泛域名。考虑到SSL目前似乎已经是广泛的方法。查了查let’s还不错,但官方给的工具有点麻烦。考虑了下还是用acme.sh。默认server 支持的是zerossl,据说比let’s更自由。反正都差不多,记录一下设置过程。

安装

  • 直接安装

网络通畅,github访问流畅可以使用,毕竟shell中也是要抓取github的数据

1
curl  https://get.acme.sh | sh -s email=xxxx@xxx.com
  • 下载安装

直接clone代码,也可以找个release版本下了后安装。毕竟github时不时会有抽风的时候。

1
2
3
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m xxx@xxx.com

注册Zero SSL

不一定用这个,也可以用let’s,但较为偷懒,就用默认呗

注册后,在Developer中,生成 EAB Credentials,用生成的kid和hmac-key。

用生成的key进行登陆,完成与Zero SSL的对接

1
2
3
./acme.sh --register-account  --server zerossl \
--eab-kid xxxx \
--eab-hmac-key xxx

与域名供应商API接口对接,生成SSL

域名供应商需要对SSL,生成TXT解析。这个步骤可以通过acme.sh与域名厂商API对接,直接生成。
这就完成了,通过域名厂商生成TXT解析->Zero SSL生成证书的过程。

godaddy的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#设定godaddy的秘钥,秘钥通过godaddy厂商出生成
export GD_Key="xxxxx"
export GD_Secret="xxxxxx"

#指定SSL安全证书生成厂商和域名服务提供商,生成证书
~/.acme.sh/acme.sh --server zerossl --issue --dns dns_gd -d 域名 -d *.域名
#此时证书会在~/.acme.sh/域名/

#安装证书至某个特定位置,并设置重启命令
~/.acme.sh/acme.sh --install-cert -d 域名 -d *.域名 \
--cert-file /home/user/cert/域名/域名.crt \
--key-file /home/user/cert/域名/域名.key \
--fullchain-file /home/user/cert/域名/域名.pem \
--reloadcmd "sudo docker exec -it nginx /etc/init.d/nginx reload"

#生成dhparam
openssl dhparam -out dhparams.pem 2048

配置visudo(用普通用户账户时使用)

1
2
3
4
sudo vimsudo

#添加一行
ubuntu ALL=(ALL) NOPASSWD: /usr/bin/docker exec -it nginx /etc/init.d/nginx reload

配置Web服务

Apache
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<VirtualHost *:443>
ServerName www.域名
ServerAlias 域名
ServerAdmin webmaster@localhost
DocumentRoot "/www/域名"
DirectoryIndex index.php index.html

#SSL部分
SSLEngine on

#这里的cert为--cert-file参数生成的文件
SSLCertificateFile /www/test_fosun_fam/acme/cert.pem
SSLCertificateKeyFile /www/test_fosun_fam/acme/key.pem
SSLCertificateChainFile /www/test_fosun_fam/acme/fullchain.pem

</VirtualHost>
Nginx

SSL检测 网址

ssl检测方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 443 ssl http2;

#支持ssl3
ssl_protocols SSLv3 TLSv1.2 TLSv1.3;
add_header Strict-Transport-Security max-age=31536000;
ssl_session_cache shared:SSL:10m;
ssl_dhparam /etc/ssl/certs/domain.pem;
ssl_prefer_server_ciphers on;
ssl_buffer_size 1400;

ssl_stapling on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
ssl_stapling_verify on;

#这里的cert为--fullchain-file参数生成的文件
ssl_certificate /etc/ssl/certs/domain.pem;
ssl_certificate_key /etc/ssl/certs/domain.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
}

更新

手动更新

1
acme.sh --renew -d 域名

自动更新

默认安装证书时会自动创建定时任务,也可以手工添加定时任务

1
2
3
4
5
6
#手工增加定时任务
acme.sh --cron -f


#用此命令查看
crontab -l

可以通过手工运行该命令进行测试

1
"/用户目录/.acme.sh"/acme.sh --cron --home "/用户目录/ubuntu/.acme.sh"

正常情况内容:

1
2
3
4
5
6
7
8
9
[Sat Feb  5 15:55:34 HKT 2022] ===Starting cron===
[Sat Feb 5 15:55:34 HKT 2022] Already uptodate!
[Sat Feb 5 15:55:34 HKT 2022] Upgrade success!
[Sat Feb 5 15:55:34 HKT 2022] Auto upgraded to: 3.0.2
[Sat Feb 5 15:55:34 HKT 2022] Renew: '域名'
[Sat Feb 5 15:55:34 HKT 2022] Skip, Next renewal time is: Fri Apr 1 16:20:50 UTC 2022
[Sat Feb 5 15:55:34 HKT 2022] Add '--force' to force to renew.
[Sat Feb 5 15:55:34 HKT 2022] Skipped 域名
[Sat Feb 5 15:55:34 HKT 2022] ===End cron===

增加CAA

在域名服务商dns解析中增加CAA解析

其中name为域名前缀,如果是泛解析用@,否则用自定义前缀
Flags 设置0
Tag设置 issue
Value 域名
TTL 时效

“issue”标签可用于非通配符域和通配符域,而“issuewild”标签仅影响通配符域
“issue”标签允许 CA 为非通配符域 (www.example.com) 和通配符域 (*.example.com) 颁发证书。您可以使用“issuewild”标签指示 CA 如何处理通配符域。下面的示例显示了为 *.example.com 请求证书时哪些 CAA 记录生效:

upload successful

官方推荐设置

Example #1:
Allow ZeroSSL certificates for site.com, including any subdomains as well as wildcards.

site.com. 3600 IN CAA 0 issue “sectigo.com”
site.com. 3600 IN CAA 0 issuewild “sectigo.com”

Example #2:
Allow ZeroSSL certificates for example.com, including any subdomains but not including wildcards.

site.com. 3600 IN CAA 0 issue “sectigo.com”
site.com. 3600 IN CAA 0 issuewild “;”
Example #3:
Allow ZeroSSL certificates for page.site.com only, not including the root domain, any subdomains as well as wildcards.

page.site.com. 3600 IN CAA 0 issue “sectigo.com”
site.com. 3600 IN CAA 0 issuewild “;”
site.com. 3600 IN CAA 0 issue “;”

自己一人如何去做一个web项目

发表于 2022-01-19 | 分类于 生活

这篇是许多年前的文章,现在看来也有意义,对个人项目者而言,有很多值得去注意和思考。

转载地址

三思而后行

当你被自己的想法激起心中豪情的时候,一定要按下心情,冷静的思考一下,思考点包括以下几个部分:

这个Web项目所需要的知识和能力是否在自己所掌握的范围内,这个是技术前提,如果项目本身技术复杂度过高,那么你在开发的时候所面对的压力就非常大,而且挫败感也很高,项目很容易夭折。

项目的需求能否清晰描绘,这一点非常重要,因为只有你能细致的把一个项目拆分成一条条需求,你才能对所有的技术实现点有个预估,也才能对项目所需要的时间做个预判。

项目是否值得做,这个是个预防针,实际上很多时候个人项目都是拍脑袋想出来的,由于刚开始没有想好就一腔热血,一上来就开个项目工程文件开始啪啪啪的写代码,很容易做着做着就没有动力了,最后有一天突然觉得这玩意也没啥意思,于是草草的扔了,虎头蛇尾的情况太常见了。

技术选型怎么做,是做一个网站还是做一款app或者是多平台的,后端用什么语言来搭建,需要使用什么框架,这些选型需要在心中有底,我建议做项目的时候选用自己最熟悉、生态最丰富的语言和框架,除非你只想练个手,否则不应当用冷门的。

所以项目未动,思考先行是必须的,通过仔细的思考我们可以判断自己所谓的“灵感”是不是伪灵感,而自己又能否适应开发期的单调枯燥,这些需要慎重对待,不能掉以轻心。

产品需求清单

经过仔细的思考之后,依旧觉得项目可行的话,那么就应该进入“产品经理”的角色,作为一个人的项目,产品需求倒未必只能是一个人思考,也可以找朋友等人探讨,征求一下别人的想法之类的。

产品需求需要确保每一步都能执行,所以理论上越详细越好,在你思索产品的时候,你应该对界面上所需要的具体元素有清晰的认知,而且还对它牵扯到后端的功能如何组织和拆分。

在产品需求阶段,也是你把项目原型丰富的阶段,这个时候其实至关重要,很多时候你会发现你真正想要的和你原本打算要的已经完全不同了,最开始的打算可能根本行不通,同时你也有可能蹦出新的灵感,这些又会对原有的产品需求做或大或小的更改,说不定还会推翻原有的需求。

基本上到这个时候,原本的激情已经逐渐平淡,理智重新归位,但对产品未来的期待感还是很强,这时候你需要考虑的情况实际上是非常多的,也是你容易失眠的阶段,所以应当好好调整心态。

做产品需求的时候,你可能需要几个流程图,依赖图这些对功能的划分,多使用脑图软件来构思自己的产品,也尝试思考流程是否能简化,站在用户的角度下使用是否方便,哪些功能是主要的,哪些是次要的。

如果觉得文字描绘不清晰的话,你也可以自己做几张原型图出来,注意这不是高保真图,只是让你自己弄明白这个产品的某一页或者某一块,不应当把心力花在细节上。

总之在这个阶段,应该有大局感,而且也应当仔细打磨自己的想法,如此三番之后要给自己定下个初稿,因为你之后的时间很有可能会蹦出很多个想法,扰乱原有的安排,所以你需要在前期有个原则坚持住,以防心不定而一事无成。

界面的设计

Web项目的一个重要部分就是界面,它可能指的是浏览器前端,也可能指的是某个手机平台的UI,我们这个时候需要花些心力在设计方面,包括UI的设计和交互设计。

由于大部分开发者很难有良好的设计感,如果有设计师朋友的话也可以请他们帮忙,否则的话可以多去一些设计网站(比如dribbble),多收集一些美观大方、符合自己要求的界面,从而形成对自己项目的认识。

如果有能力做高保真界面的话,那么请一定要做,不要觉得做高保真界面的图片是浪费时间,不要因为你觉得写html/css更省事就直接开敲前端界面了,你在做图的时候所思考的和你敲界面代码所思考的其实并不是一回事,前者会让你更加着重设计感,而后者更偏向于实现。

在这个期间里需要多观察观察别的网站/应用的界面,找出那些自己喜欢的,然后询问自己哪部分是自己喜欢的,如果放在自己的项目是否可行,能完整表达我们之前的需求元素么?

很多人在做单独项目的时候,前期花在界面设计上的时间极少,都是脑子有一个大概,然后边写代码边脑补界面样子,写着写着就走了样,最后弄出来的界面是混杂的,看上去很乱。

程序员角色来几条界面设计建议
  1. 如果自身不是专业设计,就不要采用复杂的界面,那么设计界面的时候请走扁平化,一个web页面/app 页面的颜色请尽量保持两到三个,并维持一个主色调,其他的使用同类色系。

  2. 如果是手机app,那么请和平台推荐的设计方向保持一致,比方说如果是iOS app,那么应当参照ios的原生应用来做设计,而如果是Androidapp,那么请使用material design的规则,不要妄图利用相同的设计做不同平台的app,容易变乱。你使用原生的平台设计,就算设计感不强,也不会显得杂乱无章。

  3. Web界面的设计应该有自己的特点,我知道很多做单独web项目的人喜欢用开源的web前端框架,比如bootstrap、amaze UI这些,虽然节省心力,但是做出来的界面大同小异,容易疲劳,浏览器上的界面和手机app不一样,它屏幕更大,可以表现的也更丰富,如果实在要用开源web框架的话,也要尝试换换色系之类的。

  4. 心态要好,大多数的时候自己设计的界面,是挺难看的,别因为这事挫败了做项目的积极性,也别想一口气做出来个美轮美奂的UI闪瞎大家的眼,毕竟不是职业的设计师,不要和自己怄气。

界面实现

在界面基本定稿的时候,这时候我们可以来正式实现界面了,我们之前技术选型的时候应该考虑到前端需要用到哪些技术,比如说做web界面的时候,是否需要做成one page application,是否需要使用前端库等等。

web前端现在环境变化非常大,已经由原来的做页面转成应用化了,所以配套的工具也变得多、杂、繁了,选型的时候还是需要注意选自己熟悉的,生态圈好的,在这一点上,框架上有vue、React、angular比较知名,我个人比较喜欢vue,它上手还是蛮快的,如果想做应用式的web产品可以选用。

android app的客户端如果你以前使用非android studio来编写的话,那么这个新项目就换用android studio吧,它已经足够好用了,在做界面开发的时候,推荐使用那些大热的开源组件,比如说fresco、rxjava、retrofit、gson这些,可以节省大量心力,组织代码的话使用MVP或者MVVM模式也能让新项目变得容易维护,推荐使用

如果你写的是ios app的话,不要在语言上(OC或者Swift)来犹豫,事实上这两门语言都能很好的完成一个app的构建,而且还可以混合编程,同样的,在开发app的时候请大胆使用开源库,比如masonry、reactivecocoa或rxswift,cocoa touch原本的MVC模式也很清晰明了。

如果自己想实现多平台的Wweb应用,可能会使用React Native这类工具来完成app开发,说实话比起原生语言开发app,它对web开发者来说更友好一些,如果有RN相关经验的可以尽情尝试。

不管web开发还是app开发,都可以把前后端切断,让后端作为数据输出方,不过有时候我们的web项目可能需要对SEO友好,所以可能需要花心力在同构上面,也就是在前端和后端都维护相同的路由和相同的模板渲染,代价也是比较大的,当然也可以像传统开发那样完全由后端render view,具体情况自己考虑。

后端的接入

后端开发牵扯非常广,所以我们不太可能是把前端做完了再做后端,一般情况下,做前端和做后端是交叉并行的,这一点其实是在模拟团队合作的情况,只不过身兼多职。

后端这边我依旧推荐选型的时候选择自己最熟悉的,如果熟悉某款框架的话,那么尽量用框架,后端开发的语言并没有什么限制,可以在下面几种语言里选择:

  • 传统语言:Java 、C# .Net
  • 传统脚本语言:PHP、Python、ruby
  • 新兴语言:Node.js、golang
  • 不合适:C/C++

一般情况下,我推荐脚本语言来开发web应用的后端,前几年ruby on rails框架流行的时候,带来了非常快捷的开发方式,随后其他语言也都相继出现很方便的web框架,其中有大型框架,也有微框架.

一个重点是我们可能要考虑数据库的问题,需要对常见的数据库很熟悉,并且能够合理的抽象出schema,以及合理的建立索引,多表之间如何联合,这些都是和需求紧密相关的,只有深刻理解了自己的需求,才能做好这些事情。

后端开发的时候建议使用ORM,如果框架自带ORM的话那就用框架自带的,如果不自带可以选用社区开源、生态圈丰富的ORM,需要注意有些ORM本身bug比较多,坑也多,只能多踩踩才知道。

我们刚开始可能只是简单的增删查改,不过随着加入用户体系、身份验证、权限划分、内容过滤等等需求之后,就可能需要你合理的规划好控制器的代码,我建议大部分情况下做成一条条service,然后做串联调用。

后端开发要注意网络安全,用户身份的存取,内容数据的插入,文件的上传这些容易出问题的地方都需要格外注意,不要因为自己做的小就图省事,弄个满是安全漏洞的网站,还不如不上线。

缓存机制其实对于并发高的时候效果很明显,在设计后端的架构时候,也应当考虑到哪些部分可以用缓存代替,我们常用的memcached或者Redis都是缓存利器,非常建议配合使用,不要在意你的应用刚起步没什么负载。

有时候需要考虑定时任务或者异步任务队列,这个时候我们可以选一些好用的工具,比如说用redis、开源MQ或者是专门用来做任务的任务调度器之类的,
后端开发注意主次,有的时候增加或者修改一个功能,其实牵扯到不只一块区域,所以尽量保证抽象层次要高一些,代码耦合也要低一些。

有些页面是用来获取数据的,而有些是用来处理数据的,我们对这些部分要分开出来,也可以采用RESTful这种API 设计的架构,把功能抽象成资源,转而对资源进行增加或者修改。

尽可能通过外部方法提升效率,减少精力的分散

一个项目本身已经涵盖了大量的工作量和复杂度。尽可能将精力和时间放在最重要和最需要解决的部分上。最大限度的减少无谓的消耗精力和时间去解决非核心问题。

尽可能使用devops的理念和工具,加速一些build和测试的自动化

尽可能使用外部接口解决非核心功能点的功能

简单的总结

一个人写一个web项目,是很累的,需要你有强大的热爱才能完成它,有些建议可以让你能够顺利的完成独立的web项目

  • 三思而后行,不理智的项目乘早断了想法。

  • 不要上来就敲代码,做些提前工作,需求和设计。

  • 功能是一步一步来的,不要最开始就弄一大堆,容易打退堂鼓。

  • 用开源框架、库、工具能够节省你的心力,前提是你足够熟练。

  • 不要在写代码的时候就想着优化怎么做,说不定你想的优化其实很渣。

  • 定下来的需求如果要变更,请尽量小,如果要推翻重做需求,说明你最开始就不成熟。

  • 你要相信会有版本迭代,所以有新想法的时候别急,先记下来。

  • 保持爱来抵抗做项目的寂寞和焦躁,碰到坑的时候可以散散心。

  • 一个web项目别拖太久,尽可能提高迭代的效率,迭代的时间越长越容易因为信心失去而腰斩。

  • 心态要放松,接收它99%会扑街的事实。

  • 尽可能通过外部方法提升效率,减少精力的分散

node安装&设置

发表于 2022-01-09 | 分类于 学习笔记

一直没怎么弄过node,最近要用到个新UI社区,需要更新node。记录一下node安装使用过程。

  • 下载安装 nvm,通过nvm可以选择安装多个不同的node版本,并做node版本的切换
1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  • 设置国内安装源
1
2
3
4
5
6
7
8
9
10
11
vim ~/.zshrc

# 增加npm源
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

# 增加npm别名,当然也可以用阿里源的直接安装

alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"
  • 选择需要安装的node版本

看看远程有的版本,不过这个不建议太长了,会列出所有的版本

1
nvm ls-remote

这就短些了,只列出长期支持版本

1
nvm ls-remote --lts

安装默认目前的最新的lts版本

1
nvm install stable

先看下目前已经安装的

1
nvm ls

设置默认shell启动后,node的版本

1
2
#设置成目前最终的stable版本
nvm alias default stable
1
2
#指定某个版本作为默认版本
nvm alias default v17.3.0
  • npm 安装模块

-g 参数表示全局,不加则表示只是安装在当前目录下

1
2
#安装开发版,并一并包含所有依赖扩展
npm install --save-dev hexo-cli
1
2
#安装稳定版,并一并包含所有依赖扩展
npm install --save hexo-cli

hexo发布的问题

发表于 2022-01-09 | 分类于 生活

所用的是4.0,node的版本还需切换到12.18.0,才能发布。

估计也就用screen,后台弄个环境。

但树莓派的性能,哈哈哈。弄个hexo,有点费力.

hexo真吃资源

发表于 2022-01-09 | 分类于 生活

机器不行真别弄hexo。

laravel 增加自定义路由

发表于 2021-12-06 | 分类于 技术

增加定义路由

走取巧的方式,在现有路由中增加额外路由文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 订菜程序
*/
Route::group(['prefix' => 'wechat', 'namespace' => 'Wechat'], function () {
require_once (__DIR__ . '/shopRoutes.php');
});


/**
* 人员管理
*/
Route::group(['prefix' => 'mbr', 'namespace' => 'mbr'], function () {
# 通过引入方式增加额外路由文件
require_once (__DIR__ . '/mbrRoutes.php');
});

laravel 查询构造器-闭包

发表于 2021-09-24 | 分类于 技术

在写计算地理位置距离时,用到了数据库闭包扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// gps距离计算
$gpsSQL = "ROUND(ROUND(ST_Distance_Sphere"
. "(point({$gpsData->lng},{$gpsData->lat}),"
. "point(x({$rawTable}.point),y({$rawTable}.point)))) / 1000,2)";
$selSQL = $gpsSQL . " as hosp_rang ,"
. " {$rawTable}.hosp_name, {$rawTable}.id,"
. "{$rawTable}.city_id, {$rawTable}.province_id ";

// 搜索医院名称则是全局搜索不含距离
$rangWhere = " 1 ";
if (empty($gpsData->hosp_name)) {
$rangWhere = $gpsSQL . '<=' . $gpsData->rang;
}
$rangHosp = DB::table($this->table)
->select(DB::raw($selSQL))
->whereRaw($rangWhere)
->orderBy($this->table . '.id')
->toSql();

// 汇总计算,在where条件中用到闭包的方式,匿名函数中用use从外部引入变量
$hospData = DB::table(DB::raw("({$rangHosp}) as ranghosp"))
->where(function ($query) use ($gpsData) {
$rawSql = " hosp_rang IS NOT NULL ";
if (isset($gpsData->hosp_name) &&
!empty($gpsData->hosp_name)
) {
$rawSql .= " && ranghosp.hosp_name like '%{$gpsData->hosp_name}%'";

}
$rawSql .= " && 1 ";
$query->whereRaw($rawSql);
})
->orderBy("hosp_rang")
->limit($limit)
->get();

这里where部分使用了匿名函数,可以多个where的中都使用闭包方式。同时用$query作为参数引入,使得用查询本身又使用了一个子查询。

DB::raw() 使用纯sql语句结构

laravel 自定义配置项

发表于 2021-09-24 | 分类于 技术

config/app.php 中定义配置

1
2
// 自定义类加载
'plug_namespace' => env('PLUGS_NAMESPACE', 'App\\plugs\\core'),

需要使用,artisan重新激活配置
php artisan config:clear

自定义类配置
composer.json的autoload部分,增加自定义类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"autoload": {
"classmap": [
"database/seeds",
"database/factories",

#自定义扩展部分
"plugs/core/cdr",
"plugs/core/msg",
"plugs/core/svc",
"plugs/core/custo"
],
"psr-4": {
"App\\": "app/"
}
},

声明自定义后需要用手工autoload命令,重载一次

1
composer dumpautoload

Nebula搭建

发表于 2021-09-22 | 更新于 2021-09-24 | 分类于 技术

nebula,P2P建VPN内网的工具,含NAT打洞功能。lighthouse需要外网机,符合自己的设想。下载安装一套。

设定的部署场景:

lighthouse->具有公网ip的一台VPS,

node1-> 移动4G网络路由器内网的一台设备

node2-> 联通4G网络路由器内网的一台设备

nebula 特点

  • 可以设置lighthouse和多个普通节点
  • 通过证书验证网络,由lighthouse,签发证书,各节点用私钥验证
  • 内置ssh工具

下载地址

https://github.com/slackhq/nebula/releases/

1
2
3
4
wget https://github.com/slackhq/nebula/releases/download/v1.4.0/nebula-linux-amd64.tar.gz

mkdir -p /opt/nebula && cd /opt/nebula
tar zxvf nebula-linux-amd64.tar.gz

创建lighthouse

建立ca证书

1
./nebula-cert ca -name "xxx. Inc"

几个参数

1
2
3
-ips string #显示ca证书所使用的网络,支持多个网络,不写则表示无限制

例如:nebula-cert ca -name example.org -ips 192.0.2.0/24,10.12.0.0/24

生成lighthouse的key和crt

1
./nebula-cert sign -name "lighthouse" -ip "10.12.0.1/24" -groups work

这里是直接跨过了生成公司要的过程,直接签发一个证书。而在ios和安卓端,会生成pub秘钥。此时就必须用这个pub秘钥和ca的秘钥、证书,生成自有的crt。

1
nebula-cert sign -ca-crt ca.crt -ca-key ca.key -in-pub host.pub -out-crt host.crt -groups "Workstation" -ip 10.12.0.1/24 -name "lighthouse"

编辑配置文件config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
pki:
ca: /opt/nebula/ca.crt #默认ca证书,所有端都是这么写
cert: /opt/nebula/lighthouse.crt #lighthouse的秘钥
key: /opt/nebula/lighthouse.key

static_host_map:
"10.12.0.1": ["lighthouse服务器公网IP:4242"]

lighthouse:
am_lighthouse: true #为true表示是公网服务
interval: 60

listen:
host: 0.0.0.0 #监听所有ip,可以写成某个IP
port: 4242

punchy:
punch: true #使用nat

cipher: chachapoly

tun:
dev: nebula1
drop_local_broadcast: false
drop_multicast: false
tx_queue: 500
mtu: 1300

logging:
level: info
format: text

firewall: #默认为全部禁止,下面的填写的则为开放
conntrack:
tcp_timeout: 12m
udp_timeout: 3m
default_timeout: 10m
max_connections: 100000

outbound: #全部开放
- port: any
proto: any
host: any

inbound:
- port: any
proto: any
host: any

启动

1
/opt/nebula/nebula -config config.yml

知识的边界-读书笔记

发表于 2021-09-19 | 更新于 2021-09-22 | 分类于 读书笔记

知识超载

我们将信息超载视为一种文化环境。而令我们深夜难眠的,并非是担忧如此众多的信息会令我们精神崩溃,而是担心我们无法得到自己需要的足够多的信息。

获取信息不再是不足,而是信息量大且无序,面对如此多的信息,怎么做筛选。而不是被繁杂的信息所扰乱。扰乱了我们的判断,扰乱了我们的情绪

知识的金字塔

面对的最大的是信息,而非知识,更不是智慧

知识和智慧是以信息为塔的基座组成的一个三角形金字塔的中端和顶端

由底座开始

信息->知识->智慧

知识是将“信息变为指令”(information in to instructions)的本事,比如“知道一个系统是如何运行的,或者如何让它以我们希望的方式运行”

大量的信息中,可以付诸行动的部分,成为了“知识”

我们是怎么去理解这个远远超出我们大脑处理能力的世界?

基本的策略就是过滤、筛选,要不就是将复杂的事情降低到较为可以掌控的层面

减少信息中无关的部分,只选中和我们密切相关的部分,且这部分信息是直接可以付诸于行动。

现在获取需要知识的方法的转变

没有网络之前,知识是可付诸行动的部分,然后被过滤记录在纸质上的部分。相当于我们可查询的知识是经过筛选,且允许被纸质所记录。

有网络之后,所有的信息都是存在网络上,且每个信息都被查询,这些信息中的可付诸于行动部分是可被查询,因为没有记录限制,相当于知识是做了加法。

信息和知识的获取变得非常便捷,获取方式的改变,改变了生活、工作、学习的方式。

信息超载已经成为一种生活方式

太多的信息能够损害我们思考的能力

当太多信息进人我们的思维中,就会超过我们的“信息通道容量”,人同时接受信息量是有限的,哪怕这个信息是有用的知识。

当个体面临一种快速变化且异于常规的情境,或面对太多新事物时……他的预测准确度就会大幅下降。他将不再能够作出合理正确的评估,而离开这样的评估,理性行为就不存在

信息的过载,让人的处理能力下降,也就容易丧失判断能力,减少理性行为的可能性。丧失判断能力,又会让人产生挫折感,并由此转变为**焦虑**。而人本身是会自主的排除这种负面情绪,就会采取很多不理性的行为.

信息超载带来的病痛

人脑无法有效处理信息带来焦虑

帮助解决的方法

算法机制和社交机制

算法技术利用计算机强大的记忆能力和处理能力,从浩瀚星云般的数据中寻找出答案

社交工具则将我们朋友们的选择,作为指南,帮助我们寻找到感兴趣的东西。

另一种可能,过滤失效

一些旧式的知识机制,比如报纸、百科全书、教材等,其权威性来自于它们为其他人过滤信息这一事实。而如果我们的社交网络是我们新的过滤器,那这种权威就从遥远的专家那里,转移到了我们所熟悉、所喜欢、所尊重的人所构成的这个网络上。

过滤器,不再是过滤掉什么东西了。它们是向前过滤(filter forward),把它们的过滤结果推到最前面

没有做过滤,而是在优先级上做了排列,被算法计算过优先的内容居前

信息太多,无法估计

好的多,有害的也多

任何立场,在信息过载面前都能找到

导致

  • 任何信息都禁不起推敲,必定有大量相左的证明论调
  • 算法将我们的观点,不断强化,会推送我们需要的观点
<i class="fa fa-angle-left" aria-label="上一页"></i>1…345…13<i class="fa fa-angle-right" aria-label="下一页"></i>
Space Yuan

Space Yuan

126 日志
26 分类
72 标签
RSS
<i class="fa fa-fw fa-github"></i>GitHub <i class="fa fa-fw fa-envelope"></i>E-Mail
© 2018 – 2022 Space Yuan