最近搜狗输入法老是卡死,o(╯□╰)o。整了个脚本,丢到/usr/local/bin
下面,一卡重启,干净利落。
1 | !/bin/sh |
沉舟侧畔千帆过
error.log 内容为:
2017/02/25 20:20:58 [crit] 10745#10745: *1 connect() to unix:/var/run/php/php7.0-fpm.sock failed (13: Permission denied) while connecting to upstream
这个是因为 nginx 和 php-fpm 分别使用了不同的用户权限。我的习惯是都统一成 www-data 用户。
nginx 的默认配置文件位于/etc/nginx/nginx.conf
,将其中的user
的值修改为目标的用户组。
php-fpm 的配置文件位于/etc/php/7.0/fpm/pool.d/www.conf
,将其中的user
的值修改为目标的用户组。
无论修改哪个,改好之后重启对应的服务应该就能解决这个问题。
2017年来了,新年新气象,公司网站也迎来了全站HTTPS。HTTPS的好处有很多,安全是第一位的(远离运营商劫持)。各个大厂商推广HTTPS也是不遗余力,Google优先收录此类链接,苹果和微信小程序接口都走HTTPS。
上一家公司因为前端CDN的问题,部署HTTPS一拖再拖。新公司网站还不大,现在部署成本低。感觉再拖延下去等以后复杂了,更加没人想干了,赶在新年前部署了。:-D
简单的Checklist:
按照以上的列表,一个一个来。
公司有个业务需要使用Apple Wallet
,当时在RapidSSL
申请了公司二级域名的通配符证书。这个我向以前的同事咨询,获取到了相关的数据。
公司网站运行在AWS的云服务上,AWS的负载均衡器很方便的就可以部署证书,将证书上传到IAM(Identity and Access Management)
之后,直接启用。配置好之后是HTTP和HTTPS都可以正常调用接口,过一阵子等移动端的客户端都更新之后,再强制全部跳转HTTPS。
公司CDN使用的网宿的,部署HTTPS需要上传私钥,我不太想把通配符证书上传到一个第三方的网站,好在现在腾讯云、阿里云、七牛等都联合赛门铁克,免费提供了明细域名一年时间的DV证书。免费申请了static
和media
这两个静态资源二级域名的证书,专门用于CDN。这个问题也顺利解决。
macOS和iPhone上都没有问题,但是安卓手机上会出现证书不受信任的错误。看到了v2ex t183715这个帖子,判断是一样的问题,证书链不完整。通过SSL LABS检测网站,直接获得了网站带完整证书链的证书,重新部署完整证书链的证书,问题解决。
总共试了两次,第一次因为遇到上面的问题,回滚了。第二天仔细了解了一下证书链,完善之后再部署,这次成功,浏览器、微信、Android端调用都没有问题。这让我想到了以前搭建的一个内部系统出现的问题:A是使用Docker搭建的Jenkins,用于自动测试和部署;B是Gitlab仓库,用于代码管理。A、B网址均开启HSTS
,A通过OAuth插件使用B的权限管理。刚开始A访问B,证书不受信。我是手动进到A的Container里面,在JVM导入了B的证书,临时解决了问题。因为内部系统,没多想,能用了之后就没关注。现在想来应该是一样的问题。一开始的通配符证书不带完整的证书链,中级证书不会自动下载,所以不受信。
启动了电脑上另一块SSD上的Ubuntu,又注意到了时间差问题。Windows默认会将BIOS上的时间认为是本地时间(我们这里表现就是CST,东八区时间),Ubuntu默认是UTC标准时间,会在此基础上增加8小时,作为显示的时间。如果在Win系统下将时间调整对,在Ubuntu下则会快了8个小时,反之也是。为了让两者都能正确的显示时间,得让两个系统使用相同的计算方式。
调整时间一致,要么改Win设置,要么改Ubuntu。Windows要改注册表,还是Ubuntu改配置文件比较简单。现在网上搜出来的,很多都是那个以前的老方法:在/etc/default/rcS
里面增加UTC=no
,这个我在Ubuntu 16.04 LTS上尝试过,已经失效了。
ArchWiki给出过现在的解决方法,现在需要设置如下命令:
timedatectl set-local-rtc 1
如果要改回来,将 1 改回 0 即可。
timedatectl set-local-rtc 0
设置成功之后,在Win和Ubuntu上都可以正确显示时间。使用timedatectl
命令显示的结果如下:
1 | ➜ ✗ timedatectl |
以下是最近的三则新闻:
沃通作的死,自己得慢慢还。苹果、Chrome、Firefox都封杀之后,那些用了沃通证书的人(比如我),就得考虑更换了。Let’s Encrypt项目刚出来的时候我就有关注,但是当时这个项目还不稳定。
这次乘着这次机会,使用了一下。
Let's Encrypt
官网还是很大气的,看着非常舒服。首页就直接有Get Started
,利用Certbot
工具很快就申请到了新的证书,再去Nginx更新配置就可以正常使用。
DigitalOcean
上对于配置还有一篇很详细的介绍,可以点击这里。
我有Shell权限,整个过程就三步:
apt install letsencrypt
安装 Certbot
。letsencrypt certonly --webroot -w /var/www/path/to/your/website -d yourdomian.com
。执行完成之后会有以下输出:1 | IMPORTANT NOTES: |
ssl_certificate
是fullchain.pem
,ssl_certificate_key
是privkey.pem
。更新好配置重启/重载生效。Let's Encrypt
的证书有效期是三个月,可以在服务器上配置自动更新证书。这个我现在还没用,下次折腾了再记。
另外,Let's Encrypt
正在众筹资金,有意向的可以支持一下。** 捐赠 Let’s Encrypt,共建安全的互联网 **
项目之前使用的是Sentry官方提供的付费服务,但是因为我们在国内,访问比较慢,体验很糟糕。Sentry本身就是开源的,打算自己动手搭建一个,老板就把这个光荣的任务交给我,Fight~~~
配置环境一直是一个比较繁琐的事情,还好现在容器盛行,我计划就是直接使用 Docker 来启动 Sentry 的服务。
不得不说现在 Docker 的生态链比2014年我刚了解这个工具的时候好太多了,现在安装 Docker 也很简单。
系统源里面可能有 Docker,但是我喜欢使用最新版软件,于是打算从官网下载安装。但是现在已经有了Get Docker,打开这个网页,复制一行命令,再终端执行,OK,Docker 安装完成。
如果服务器的用户权限不是 root 的话,每次调用 docker 的命令需要加 sudo,有些人可能觉得这个很烦。
可以添加一个 docker 组来解决这个问题。参见:https://docs.docker.com/engine/installation/linux/ubuntulinux/#/create-a-docker-group
Sentry 在 DockerHub 上有官方的镜像,这个就大大方便了我们。
Sentry Official https://hub.docker.com/_/sentry/
启动Sentry需要的Redis实例
docker run -d --name sentry-redis redis
启动Sentry需要的PostgreSQL实例
docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres
生成 SENTRY_SECRET_KEY
docker run --rm sentry config generate-secret-key
这个生成的 SENTRY_SECRET_KEY 需要记住,后面都要用到
初始化数据库
docker run -it --rm -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade
这里需要使用刚才生成的 SENTRY_SECRET_KEY。这个操作会在PostgresQL里面初始化表信息。
启动Sentry的Web服务
docker run -d -p 80:9000 --name my-sentry -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-redis:redis --link sentry-postgres:postgres sentry
-p 参数设置实例暴露的端口号,我这台机器只跑这个就直接占了80端口。
启动Sentry的Worker
docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run cron
docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker
worker 和 celery beat 根据实际情况添加,我这里就只加1个。
邮件设置
上面的步骤跑完,Sentry 就已经搭建好并且可以使用了,还有问题,你会发现没有邮件提醒,我们需要配置邮件服务。
官方的介绍了两种方法,一个是再 link 一个 SMTP 的 instance,一个是添加SMTP服务的配置。我两个都试了,前者发出的邮件很容易被当做垃圾邮件拦截,我现在采用的是后者。现在国内的免费邮件服务都提供了SMTP功能,一开始我直接使用了免费的QQ邮箱和163邮箱,一部分邮件可以发送成功,一部分会连接超时,这个让我很无语,这种不稳定不能用。Gmail估计不会有问题,但是可能被墙,就没试(其实是拿老板手机注册的时候没成功,没成功的原因的老板手机欠费停机,没收到验证短信。o(╯□╰)o)
考虑邮件推送服务。服务器在AWS中国上,AWS有邮件推送服务,但是这个AWS中国貌似还没开发这个功能;搜狐家有SendCloud,注册之后发现要获取免费的额度需要填太多东西,作罢;因为有阿里云的账号,阿里云家配置比较简单,暂时用的阿里云的邮件推送服务,地址:https://www.aliyun.com/product/directmail。实际使用中还是有发送失败的情况,没有说的那么好。
配好之后,我们需要将这些配置加到我们的Sentry实例中。我没有作为 instance 的启动参数,而是直接修改了 sentry.conf.py 文件,直接将配置文件 mount 到 instance 内。相关的部分如下
1 | # email = env('SENTRY_EMAIL_HOST') or (env('SMTP_PORT_25_TCP_ADDR') and 'smtp') |
启动命令如下:
docker run -d -p 80:9000 -v /path/to/sentry.conf.py:/etc/sentry/sentry.conf.py --link sentry-postgres:postgres --link sentry-redis:redis sentry
docker run -d -v /path/to/sentry.conf.py:/etc/sentry/sentry.conf.py --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker
注意:如果只启动 Web,在 Sentry 内的测试发送邮件会成功,但是通知邮件依旧会失败。因为通知邮件是 Worker instance 发送的,不是 Web instance 发送的,邮件配置必须也传到 Worker instance 里面。
关闭注册功能
内部用的系统,不希望开放公开的注册。需要把这个功能 disable 掉。还是改sentry.conf.py
文件,添加一行 SENTRY_FEATURES['auth:register'] = False
更多的参数写到 sentry.conf.py
很多参数都是可以直接写到 sentry.conf.py 内的。我把system.secret-key
这个也写到文件内,这样 docker run 需要带的参数就大大减少。
这个就不多说了。用管理员账号登录之后,自己添加 Project 和 Member,再把 Sentry 的 Track 加到需要监测的项目里面就好。我们项目用的 Django,里面的 raven 配置加上新的链接就可用,非常方便。
天道勤酬,恭喜Wings获得TI6冠军!
1 | 一支曾因没有LOL分部而被DACE拒之门外的战队, |
昨晚看小说三点多才睡,但是早上七点钟依旧爬了起来。展会是九点整入场,提前出发是希望入场的时候不要排那么长的队伍,结果到了才发现已经有很多人在排队……
排队的时候和小伙伴们聊天,慢慢的把人凑齐。我其实主要就是想看水濑祈,毕竟就是因为她会来才决定出门看这个展会的,腹黑的上神大人还是很萌的。Harmony Ribbon 绝赞发售中!
门票有两种,很早买的是邮寄的纸质票。近期买的是电子票。电子票得多排一个队兑换纸质票。
进入之后领了本小册子,仔细看了下,其实有三个馆(EXPO,MAX和电竞),主要参观的应该是EXPO。
川原今天有签售,貌似买满200可以抽奖,中了去要签名。要排队这么麻烦的事情我是不会去的,主要还是看看手办。
万代的高达馆,一些模型挺好玩
FATE的痛车
11:30有心欲呐喊主创见面会,水濑祈来了。不让牌照,我很老实的遵守了。正面太多人,我们站在侧面,感觉距离反而进了。真人好可爱,(๑•ᴗ•๑)。
穹妹这个数量限定的手办,一开始没排队,后面想买的时候已经没了。(┬_┬)
买了两本画册,走之前5个小伙伴买了小圆的5个人,凑成了五色战队。我的小圆明明很可爱,盒子也最大,为什么价格最便宜,不解。
这个貌似是同人馆,但是没啥好东西买。主要就是等水濑祈一点半的歌,听完就走。此时腿已经很疼了,果然家里最舒服。
这个馆COS挺多的,有个COS成Nico的在拍雷姆,感觉很好玩。话说这个Nico脸有点像空丸啊。
G联赛Dota2的决赛,同福打IG,没其他好玩的东西,拍了张图就走了。今年Ti6中国队加油!
临走拍了一张,发现这个位置过一条街就是上次看Dota2春季特锦标赛的梅赛德斯-奔驰文化中心。
小圆的浴衣做的很精致啊,为什么这么便宜。(/ □ \)
很久很久以前,注册一家公司会有公司营业执照,上面会有营业执照注册号。公司赚钱了,要依法纳税,去税务局又会办理一个税务登记证,上面又有一个编号。
一个人只需要一个公民身份证号码就可以确定了,公司在不同的场合却需要多个证件编号。对企业而言,麻烦,办各种手续都不方便。对管理者而言,监管不便,管理成本高。
我们都知道,统一的标准可以减少成本,提高效率。GOV
作为某种意义上的特大企业,也明白这个道理,于是有了三证合一,统一多个编号,使用唯一一个编号。
企业编号决定统一使用一个标准,个人编号已经是一个标准,于是GOV
再加了一把劲。怀着为了更好的服务大众,构建信用社会
的目标,在现在的基础上,GOV
倒腾出了统一社会信用代码制度。
这个企业的身份证号码就是统一社会信用代码
,用于替换之前企业各个证件上的编号。和公民身份证号码一样,统一社会信用代码
也是18位。
公司名称
或者营业执照注册号
,这些都不稳定。名称可以变,注册编号长度不确定。统一社会信用代码
标识,这个在稳定性和权威性上都好于以前。工商总局在官网上发布了标准文件:法人和其他组织统一社会信用代码编码规则。和身份证编号类似,根据编码规则可以进行一下判断并获取有用的一些信息。我们在审核的时候,可以通过检测编号来判断公司的真假。
下面是我用PHP实现的简单检测函数,管理部门
、机构类别
、登记地区
这些信息还没有充分利用起来,只根据校验码检测。
1 | // 法人和其他组织统一社会信用代码 |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i
hexo-generator-json-content
--save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true
一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。
很惭愧,就做了一点微小的工作,谢谢大家。