使用Str::orderedUuid()时报错

laravel5.6 直接使用Str::orderedUuid()时报错

1
Cannot call Ramsey\Uuid\Converter\Number\DegradedNumberConverter::toHex without support for large integers, since integer is an unsigned 128-bit integer; Moontoast\Math\BigNumber is required.

解决办法安装Moontoast\Math

1
composer require "moontoast/math"

hosts 文件位置

window 位置:C:\Windows\System32\drivers\etc

Mac OS 位置:/Private/etc

以上

分离 or 一起

后台前后端分离好处是可以多平台管理。

前端的到代码量会大量增加。伴随着大量的重复逻辑。

不分离,需要以网站的形势运行,需要浏览器。

代码部件将减少。

心急……

真是服了

找个问题中文搜半天,一堆垃圾加复制。

换英文3分钟解决……

laravel 服务器容器的绑定 可以用来在不进入classInterface的情况下

直接在全局使用……

中文上一次又一次的引入为个啥 ? 最后说什么反正结果对了……

WTF…… 都自动注入了能不对吗……

以上

US线路丢包越发严重了…… 心塞……

自家web访问缓慢…… 于是使用cloudflare转发

需要注意 更改域名解析,更改后速度提高了好多~~

不过iTerm2使用SSH依然缓慢。

解决方案让SSH可以使用Socks5

SSH使用Socks5

1
ssh -o ProxyCommand='nc -x 127.0.0.1:8083 %h %p' -p 22 <user>@<000.000.000.000>

绕一圈的速度都比直连快……我也是……醉了……

参考地址

iTerm2使用proxy 的方法

.zshrc中添加

1
2
alias goproxy='export http_proxy="http://127.0.0.1:8003"; export HTTP_PROXY="http://127.0.0.1:8003"; export https_proxy="http://127.0.0.1:8003"; export HTTPS_PROXY="http://127.0.0.1:8003"'
alias disproxy='unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY'

开启时使用goproxy

关闭时使用disproxy

从此brewcomposernpm,可以免去漫长的等待了。

验证是否有效curl ifconfig.me返回的就是当前IP。

以上

关闭 windows ink 后要做事儿

系统重装后,cintiq pro 13 的画笔有点奇怪。

主要是PS下笔上的右键异常,影响拾取颜色,调整硬度等等。

所以关闭 windows ink 之后……

压力感应消失了!!!

WTF!!

最后发现这个问题,已经有了好几年了…… 解决方式写在下面备用

1
C:\Users\Yourname\AppData\Roaming\Adobe\Adobe Photoshop CC 2018\Adobe Photoshop CC 2018 Settings

下建立PSUserConfig.txt文件,写入下面两行。

1
2
Use WinTab
UseSystemStylus 0

之后完美了~~

唠叨

果然发生了,对应的事件,恐怕是知识产权方面吧……

后果吗,按照供应与储备来说,6个月之内没什么,保守点的3个月。

3到5年内,网络行业崩溃。生活水平会到90年代初期吧

科学水平会止步吧…… 人才外流会加速。

之前觉得高丽惨,现在看会比高丽更惨。

内忧外患,加速自主研发比画个经济区重要的多的多。

前言

查找文章时没找到, 在本地发现了, 重新编辑一下, 供后来者参考。

使用Dcoker 部署邮件服务

DNS records 设置与 PTR records

注意把bar.foo换成需要的域名

Type Homename Value TTL
A bar.foo 000.000.000.000 3600
A *.bar.foo 000.000.000.000 3600
AAAA bar.foo 000.000.000.000 3600
AAAA *.bar.foo 000.000.000.000 3600
NS bar.foo ns1.bar.foo 1800
NS bar.foo ns2.bar.foo 1800
NS bar.foo ns3.bar.foo 1800
MX bar.foo mail.bar.foo. 【10】 14400
TXT bar.foo v=spf1 mx ~all 3600
TXT _dmarc.bar.foo v=DMARC1; p=none 3600
TXT mail._domainkey.bar.foo v=DKIM1; k=rsa; p=**** 3600

说明:

  • NS 为域名解析服务器
  • A 为IPv4 域名绑定
  • AAAA 为IPv6 域名绑定
  • MX 为 收信服务器
  • TXT 为 E-Mail验证与设置
  • 将主机名改为mail.bar.foo后,可以设置PTR records

IPv6使用letsencrypt自动延期证书是会出错要注意下。

p==***********DKIM key这里隐去了

docker-mailserver

  • 注意使用ENABLE_CLAMAV=1时需要RAM≥1G

当网站与邮件服务在同一服务器时,要使用nginx-proxy

新建用户

mailserver目录下,可以使用docker命令添加多个用户

1
2
3
4
5
6
touch config/postfix-accounts.cf
docker run --rm \
-e [email protected] \
-e MAIL_PASS=password \
-ti tvial/docker-mailserver:latest \
/bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' >> config/postfix-accounts.cf

创建 DKIM key

1
2
3
docker run --rm \
-v "/root/mailserver/config":/tmp/docker-mailserver \
-ti tvial/docker-mailserver:latest generate-dkim-config bar.foo

查看

1
cat /root/mailserver/config/opendkim/keys/bar.foo/mail.txt

将DKIM1 调整后添加到域名解析mail._domainkey记录下。

1
v=DKIM1; k=rsa; p=***********

p==***********DKIM key这里隐去了

docker-mailserver 启动

启动 docker-proxy 【反向代理】

1
2
3
4
5
6
7
8
docker run -d -p 80:80 -p 443:443 \
--name nginx-proxy \
-v /path/to/certs:/etc/nginx/certs:ro \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \
jwilder/nginx-proxy

启动 letsencrypt-nginx-proxy-companion 【挂载TLS证书】

1
2
3
4
5
docker run -d \
-v /path/to/certs:/etc/nginx/certs:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--volumes-from nginx-proxy \
jrcs/letsencrypt-nginx-proxy-companion

启动 library/nginx 【用于获取TLS证书, 验证时,需要port:80
也可以使用下方docker-compose.yml

  • 注意:要将nginx桥接到nginx-proxy的网络,使其可以正常解析,LETSENCRYPT_TEST=true在测试时使用,防止证书频繁申请。
    Email 必须为有效地址。
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
version: '2'

services:
webmail:
image: nginx:latest
restart: always
environment:
- VIRTUAL_HOST=mail.bar.foo
- LETSENCRYPT_HOST=mail.bar.foo
- [email protected]
# - LETSENCRYPT_TEST=true
network_mode: "bridge"
mailserver:
image: tvial/docker-mailserver:latest
hostname: mail
domainname: bar.foo
container_name: mail
restart: always
ports:
- "25:25"
- "143:143"
- "587:587"
- "993:993"
volumes:
- /root/mailserver/mail:/var/mail
- /root/mailserver/mail-state:/var/mail-state
- /root/mailserver/config/:/tmp/docker-mailserver/
# - /etc/letsencrypt:/etc/letsencrypt
- /path/to/certs/mail.bar.foo:/etc/letsencrypt/live/mail.bar.foo
environment:
- SSL_TYPE=letsencrypt
- ENABLE_SPAMASSASSIN=0
- ENABLE_CLAMAV=0
- ENABLE_FAIL2BAN=0
- ENABLE_POSTGREY=0
- ONE_DIR=1
- DMS_DEBUG=0
- TLS_LEVEL=intermediate

补充

也可以将nginx-proxyletsencrypt-nginx-proxy-companion写在一起,这样还可以运行其他服务

具体可以查看这篇

letsencrypt-nginx-proxy-companion可以手动更新

1
2
3
4
5
6
手动更新 或 申请证书
docker exec letsencrypt-nginx-proxy-companion /app/force_renew


证书状态
docker exec letsencrypt-nginx-proxy-companion /app/cert_status

测试SSL

1
2
docker exec mailserver openssl s_client -connect 0.0.0.0:587 -starttls smtp -CApath /etc/letsencrypt/
docker exec mailserver openssl s_client -connect 0.0.0.0:993 -starttls imap -CApath /etc/letsencrypt/

其他

使用nginx-proxy

一般挂载

1
2
3
4
5
docker run -d \
--name webblog \
--expose 80 \
-e "VIRTUAL_HOST=bar.foo" \
library/nginx

获取证书

1
2
3
4
5
6
7
docker run -d \
--name web \
--expose 80 \
-e "VIRTUAL_HOST=mail.bar.foo" \
-e "LETSENCRYPT_HOST=mail.bar.foo" \
-e "[email protected]" \
library/nginx

查看 域名映射

1
curl -H "Host:bar.foo" localhost

查看 nginx 代理设置

1
docker exec nginx-proxy  cat /etc/nginx/conf.d/default.conf

包管理

1
docker run --rm --expose 9000 -e VIRTUAL_HOST=test.bar.foo -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

脑子混乱停一下

前后端分离与游戏部分

admin 与 user 需要不同的入口

数据部分有一些是通用的,分离 admin 域 与 user 域 是有必要的

admin verify 将 config 提取出来有一定优势

quasar还是要加强的

码力 图力 不足…… 但是没什么用……

laravel Upgrading To 5.6.0 From 5.5

1
2
3
4
5
"darkaonline/l5-swagger": "5.6.*",
"fideloper/proxy": "~4.0",
"laravel/framework": "5.6.*",
"laravel/passport": "^5.0",
"phpunit/phpunit": "~7.0"

之后会出现错误

1
Type error: Argument 2 passed to Symfony\Component\HttpFoundation\Request::setTrustedProxies() must be of the type integer, array given, called in /Users/k11/laravel/web/vendor/fideloper/proxy/src/TrustProxies.php on line 5

对应upgrade Trusted Proxies

App\Http\Middleware\TrustProxies

1
2
3
4
5
6
7
protected $headers = [
Request::HEADER_FORWARDED => 'FORWARDED',
Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
];

1
protected $headers = Request::HEADER_X_FORWARDED_ALL; 

Bootstrap 4

1
2
npm uninstall --save-dev bootstrap-sass
npm install bootstrap popper.js

resources/assets/js/bootstrap.js

1
2
3
4
5
try {
window.$ = window.jQuery = require('jquery');

require('bootstrap-sass');
} catch (e) {}

改为

1
2
3
4
5
try {
window.$ = window.jQuery = require('jquery');

require('bootstrap');
} catch (e) {}

添加

1
window.Popper = require('popper.js').default;

resources/assets/sass/app.scss

1
@import “~bootstrap-sass/assets/stylesheets/bootstrap”

改为

1
2
3
4
5
6
@import “~bootstrap/scss/bootstrap.scss”

.navbar-laravel {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
}

resources/assets/sass/_variables.scss

删除全部内容后写入

1
2
3
4
5
6
7
8
9
10
11
12
13
// Fonts
@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");

// Variables
@import "variables";

// Bootstrap
@import '~bootstrap/scss/bootstrap';

.navbar-laravel {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
}

方法二

直接复制laravel 5.6 版本的 resources package.jsonlaravel 5.5下覆盖。

swagger

config/l5-swagger中设置好passport后使用下方代码引入每个请求

l5-swagger中使用的是password方式,所以不必限制请求地址

1
2
3
*     security={
* {"passport": {}}
* },

mailserver 修复

起因 mac os 上不能登录邮箱了,手机却可以。查看logs发现是错误如下

1
TLS handshaking: SSL_accept() failed 

查找issues得知tomav/docker-mailserver更新

增加一个新变量

TLS_LEVEL 要想兼容老 Mac OS 要设置为intermediate

以上

……

小弟走了只能自己上了,对手是说着相同语言的同胞,脑子不好吧。

虚妄的野心只会带来毁灭……

游戏是让人可以忘记悲伤的良药

无论是一个人还是一群人,都可以享受的游戏。

无法看清未来的人,只能拥有一时的幸运,极限很快就会来。

但愿60岁时,依然能享受创造所带来的快乐。

创意的重叠

与现在最火Fortnite在许多方面有重叠,也就是说在类似的外部影响下,创意有一定的一致性。

再者是人员与财力的问题,至少今天的时间点上,迷茫消失了,看来之前改变设定是有必要。

一个能做的是有限的……

好像快点有组建团队的能力啊!!

而可以有效运作的团队一定是金字塔结构的…… 这与社会构成有关…… 50年内不会有什么变化吧……

过多的平等带来的只有混乱…… 在我朝就是例子,考虑到近2000年文明构成,某主义是不可实现的。

政客这个职业,将在某系统下完全消失吧。

但愿联通的那一天早日来临。

稳定之后,应该能在诸多方面带来变化。

好想快点,基础部分完成后要提高趣味性才行。

加油!梦想中的日子不远了!

之前满脑子都是一起的未来,某天却变成了一个…… 只是自作多情……

也许会有下一个,也许不会,也许在一定的时间点上就不在需要了,多久?理论上7到10年。

10年IPv6 应该可以普及了吧~~ 说不定新的通讯方式会诞生哦~~

可以预想是2023年,前后将带来巨大的变化吧!

其他

最好的自我评价也许是 我很快乐 无论过去、现在还是未来!

当生命走到尽头,我希望能说去这句话。至少现在说不出口。

也是会变成从某一天起,我很快乐。

面对面时的话语,远比其他时候有意义。

心情

游戏用于寻求快乐,虽然都是不认识的人,还是能看出情商高低……

也许最理想的方式是不需要交流,一个人也可以玩的游戏。

第二阶段PVE任务也是有必要的。

小结

swagger 学习用时2天,天宫一号预计在2018年03月31日到2018年04月01日坠落地球,碎片坠落地点未知。

天宫一号的坠落,可以说我朝近年的航天成果全灭。

报道断章取义…… 陨落只是时间问题。小额外汇貌似限制了,实际未测试。

使用DarkaOnLine/L5-Swagger可以在代码中以注释形势直接编写API文档非常方便。

注释中的语法要使用Swagger-php样式,SWAGGER VERSION 3.0

DarkaOnLine/L5-Swagger安装

项目使用的是laravel 5.5 对应 darkaonline/l5-swagger:5.5.*

1
composer require "darkaonline/l5-swagger:5.5.*"

复制设置与视图文件

1
php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"

SWAGGER VERSION 3.0支持

1
composer require "zircote/swagger-php:3.x-dev"

设置.env文件

L5_SWAGGER_GENERATE_ALWAYS=true为每次打开页面是都进行重新渲染,设计阶段非常好用。

1
2
SWAGGER_VERSION=3.0
L5_SWAGGER_GENERATE_ALWAYS=true

基础文件设置

基本用法

swagger-v3.php

用于设置一些基本API信息,在页面最上方显示。

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
/**
* @OAS\OpenApi(
* @OAS\Info(
* version="1.0.0",
* title="Test Api",
* description="描述",
* termsOfService="https://Test.dev/terms/",
* @OAS\contact(
* email="test@test.dev",
* name="test",
* url="https://test.dev"
* ),
* @OAS\License(
* name="Apache 2.0",
* url="http://www.apache.org/licenses/LICENSE-2.0.html"
* )
* ),
* @OAS\Server(
* description="OpenApi host",
* url="https://test.dev/api"
* ),
* @OAS\Server(
* description="OpenApi host",
* url="https://test.dev/api/v2"
* ),
* @OAS\ExternalDocumentation(
* description="OpenApi host",
* url="https://test.dev/api/Doc"
* )
* )
*/

@OAS 为使用前缀,用于读取swagger的设置

名头 解释 是否必要 其他说明
OpenApi swagger 初始化 必要 唯一并位于全部设置最顶端
Info Api说明 必要 设置中的titleversion为必要项
Server Api 前置路径 非必要 多连接时,可以并行设置
ExternalDocumentation 扩展文档 非必要 只能设置descriptionurl
paths 连接地址 必要 可以在控制器位置设置
tags 主标签 必要 laravel一起使用时,独立设置方便管理。可以设置namedescriptionExternalDocumentation

tags.php

用于设置用户标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @OAS\Tag(
* name="2fa",
* description="Google 2FA",
* @OAS\ExternalDocumentation(
* description="more",
* url="https://test.test/docs"
* )
* )
* @OAS\Tag(
* name="store",
* description="Access to Petstore orders"
* )
* @OAS\Tag(
* name="user",
* description="Operations about user"
* )
*/

path 部分

直接使用注释形势写入控制器

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* @OAS\Get(
* path="/test", // API 路由地址
* tags={"test"}, // 对应Tag
* sumary="get test doc", // API概要
* description="get test doc more ........", // API描述
* operationId="test", // API请求时ID
* deprecated=false, // API是否有效
* @OAS\Server( // 独立API连接设置 可以覆盖全局
* description="Server host", // 连接描述
* url="https://test.dev/api" // 连接地址
* ),
* @OAS\Parameter( // API参数, 非必要
* name=”id“, // 参数名
* in="query", // 参数位置 可以设置`query`、`header`、`path`、`cookie`
* description="adout this id ......", // 描述
* required=true, // 是否必须填写,当in设置为path时,需要设置为true。
* style="from", // 设置参数序列化类型,非必要,自动根据in值设置。
* @OAS\Schema(
* type="string", // 参数类型
* example="test example", // 参数例子
* )
* ),
* @OAS\RequestBody( // 请求主体 content-type 下使用 适合传递多个参数
* description="adout this id ......", // 描述
* required=false, // 是否必须填写,默认为false
* @OAS\MediaType( // 请求数据结构
* mediaType="application/json", // application/json 结构
* @OAS\Schema(
* type="string"
* ref="#/components/schemas/User" // 可以载入设置完成的参数,区分大小写
* ),
* @OAS\Schema(
* @OAS\Property( // 多参数设置
* property="otp", // 参数名称
* description="yubikey otp", // 参数描述
* type="string", // 参数类型
* example="cccccccccccccccccccccccccccccccccccccccccccc"
* // 参数例子
* )
* )
* ),
* @OAS\MediaType( // 请求数据结构
* mediaType="application/xml", // application/xml 结构
* @OAS\Schema(
* type="string"
* ref="#/components/schemas/User" // 可以载入设置完成的参数,区分大小写
* ),
* @OAS\Schema(
* @OAS\Property( // 多参数设置
* property="otp", // 参数名称
* description="yubikey otp", // 参数描述
* type="string", // 参数类型
* example="cccccccccccccccccccccccccccccccccccccccccccc"
* // 参数例子
* )
* )
* )
* ),
* @OAS\Response( // 响应,必须设置
* response=200, // 响应编号
* description="successful operation", // 响应描述
* @OAS\Header(
* header="X-Rate-Limit", // 响应头
* description="calls per hour allowed by the user",
* // 响应头描述
* @OAS\Schema(
* type="integer",
* format="int32",
* default="64", // 默认
* example="12" // 例子
* )
* ),
* @OAS\MediaType( // 响应数据结构
* mediaType="application/json",
* @OAS\Schema(
* @OAS\Property(
* property="message", // 响应参数头
* description="Response message",
* type="string", // 响应参数数据类型
* example="true" // 响应参数例子
* )
* ),
* )
* )
* )
*/

Model 数据参数

可以直接设置在class之上,使用ref="#/components/schemas/ClassName"可以直接引用。

swagger默认载入位置#/components/schemas/

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
/**
* @OAS\Schema(
* title="yubikey model",
* description="yubikey model",
* type="object",
* @OAS\Property(
* property="message",
* description="Response message",
* type="string",
* default="true",
* example="true"
* ),
* @OAS\Property(
* property="status",
* description="Updated status",
* type="string",
* example="true"
* ),
* @OAS\Property(
* property="age",
* description="Updated status of the pet",
* type="integer",
* minimum="0"
* ),
* )
*/

bitbeans/yubikey 的坑

控制器中不能正常获取Exception。所以不能使用下方代码

1
2
3
4
5
6
7
8
9
use YubiKey;

try {
$yubikey_auth = Yubikey::verify(Input::get('otp'));
$yubikey_params = Yubikey::getParameters();
$yubikey_identity = Yubikey::getParameter('identity');
} catch (\Exception $exception) {
$error = $exception->getMessage();
}

改写到App\Exceptions\Handlerrender方法判断,使用Exception判断的packages不多。

1
2
3
4
5
6
switch($exception->getMessage()) {
case 'REPLAYED_OTP':
return response()->json(['message' => $exception->getMessage()]);
case 'Could not parse Yubikey OTP':
return response()->json(['message' => $exception->getMessage()]);
}

以上

0%