感觉每到年末都要自己写一下总结来回顾一下这一年的收获和其他,然而今年也算是疫情第二年,真要谈收获感觉是没有什么特别的。
写之前本来想看看以前都写了啥,结果翻了一下,2020没写,2019没写,就没有继续往前翻了。
2021年里在程序方面没有什么建树,当然以前也没有啥建树,无非就是在熟练工的基础上继续往前走了一点,这一点在2022年要有所改变。值得一小提的是,2021年居然看了一个多月的java代码,实话实说,在前几年就几乎没有碰过java代码,也就偶尔用kotlin写了点测试代码。所以2021年的事情就不多废话再提了。
2022年,还是要有一些小展望和自己的想法:
1、出一点小产品,否则永远处于代工(外包)的最底层,没有属于自己的东西
2、可能会往java/go上去偏靠一点,减少PHP的代码量了
3、flutter,至少要出1~2个小APP。
其他就真是随缘了。看起来好象不是什么大目标,什么赚上500万之类的也不想,按部就班吧
----
写完之后,发现一个事儿,那就是一直提的,要将博客用laravel重写一遍都没有动手,嗯。明年2月底前一定出来!!I promise。
写这个标题的时候,我已经构建包大约有40多次。构建成功的只有10来次。以下就是记录的踩坑内容,有一部分是云托管自身的,还有一部分是我自己瞎搞导致的
在写之前,先提一下,目前session无法处理,即重新构建后,session会丢失,所以如果要开放,请尽量使用无状态的方式,否则session没了很烦人,可以尝试用jwt或者类似token的方式先处理吧。
开始踩坑
1、官方的demo里面不含mysql,所以要编译带有mysql的php版本。php官方有现成的:php:fpm-alpine3.15,然而,这个也是不带pdo_mysql的,只有mysqlnd,所以自己在写Dockerfile的时候需要加上docker-php-ext-install pdo_mysql && docker-php-ext-enable php_mysql,
问题就在这里。3.15/3.14,这两个命令都失败,会报没有权限,然而我明明是root,后来网上查了一下,好象就是alpine包的问题,降到3.13,可以编译,但随之而来的问题是,编译需要100多s,看了下,基本上在2分钟左右。
然后参考网上的教程,在本地先构建好,然后将pdo_mysql导出来,复制到指定位置。于是我踩的大坑就来了。。。。。我按照教程step by step的完成了,结果上线后发现无法load,感觉很奇怪。折腾了将近1小时,才想起来,我默认构建的m1版本的,而线上是amd64,最后指定版本:FROM --platform=linux/amd64 php:fpm-alpine3.15,进行本地构建。
再将so文件拷过去,发现还是有点小问题,比如,我在php.ini里加入了extension=pdo_mysql,但进系统一看,还是没有加载。用php -i|grep ini发现,这个fpm镜像,只能建一个ini文件,扔在/usr/local/etc/php/conf.d才OK
于是照做。OK了
2、云托管里有一个MYSQL ,上一篇有提到,这个数据库怎么都无法删除,显示我不是管理员,于是我一想,我不是买了云数据库么,于是想着利用【对等网络】的功能,将这两个账号打通成内网,这样不就可以从内网直接连数据库了么?经过一翻折腾,发现还是不通。发了工单后,他们建议我不要PING(之前我是直接PING的),而是用telnet xxxx 3306进行测试。 经过测试,OK,能够打通,但也费了不少时间
最开始的时候,是一直无法将数据库和VPC绑定在一个vpc网络里,后来发现,原来我的数据库从几年前创建好到现在一直是基础网络,也就是说是独立的,后面改成vpc网络才OK。这里一开始没注意,至少浪费半小时以上时间
3、既然这样能够打通,那我的轻量服务器和云数据库能打通吗?测试了好久,发现腾讯云有提供:云联网 功能,利用这个功能,将轻量服务器和云数据库采用VPC的方式打通了。
4、最后的问题就这样来了。。云托管能不能和轻量级打通呢???我不是走了云联网了么?也搞了【对等网络】,结果看了一下文档,只有出口的那个网络(即主VPC)和对等网络的对方才能直接互联,与VPC创建云联网的机器不能直接互联。。。这个就好纠结了。。。
创建对等网络的VPC,我早就删除了。。。也就是说我已经无法让轻量服务器和云托管互通了。。。
对等网络有两种:同账号对等、不同账号对等,在同地区是免费的。跨区要收费
----
经过一个周末的折腾,总算是解决了不少问题,虽然没有全部搞定,但还是比较成功。。。比较满足,周末没有虚度
最近也一直在尝试云托管等类似的功能,看到微信云托管,所以就想试一下。虽然这产品出来好久了,但一直想着有独立的VPS了。就没想过一定要用,但看到上面有写可以忽略微信接口调用的access_token,那自然是想试一下的。而且openid都是从header头过来了那不是很OK?
因为最近写的代码都是基于laravel框架,正好官方有例子有demo,就试用了一下。发现官方的demo就纯粹只是跑起来,其他没啥用。比如他跑的是php-fpm,但命令行也没有(可能我忽略了),如果没有命令行,意味着无法跑schedule和command命令。
于是自己重新修改了Dockerfile的内容,基于alpine进行了PHP和nginx的安装,终于跑起来了!
但还是有不小坑
1、每次重构,相当于全部重来一次,带来的问题是session/log等的丢失。
2、提供的mysql数据库一旦开启就无法关闭。。。我其实已经有买其他的,但这个数据库开了就关不了了。删除的时候显示我不是管理员,没权限删除。。。然后进cloud.tencent.com的后台。也找到了这个数据库。但上面显示【已过期】。所有其他的操作都是灰的
3、没有卷的概念(也可能是我没找到相关文档,也不知道如何配置),所以我现在Dockerfile是将git的文件COPY到项目里的。为了提高效率,我都是本地先composer update以及yarn prod的。这个有一点点麻烦。GIT包变大了。当然也就是更快的部署了
----
暂时想到的优化方案,本地先建Dockerfile,将想要的东西都整合进去。比如composer / pm2 / node 包可能大一点,放到hub.docker.com形成软件包。但不要在线上再次编译,代码就到线上再拉吧。这样构建速度可能会快上不少。。。。
----
还没有试微信接口,然后我还要再测试一下费用。我看不少人在社区说费用很高,有的普通博客,一天要3~6元。如果这样就变成180/月左右,那就真没有任何意义了。毕竟初始的server,只有0.25CPU,和0.5的内存。
总之,测试起来再说了。如果不行就不用呗。反正现在都是用自动化部署的,那种部署更快。。。其实只是git pull一下就完了。