Submitted by gouki on 2022, February 27, 4:04 PM
Zerotier和tailscale一样都是类似创建虚拟网络的一个软件,Tailscale有个不太好的地方就是只能用google账号登录(记不清是我当时这么选的,还是只能用这个登录了。也就导致了我在IOS上无法登录。毕竟登录google账号需要VPN,然后Tailscale如果active,就又要自己创建vpn,结果 就导致关闭了梯子的VPN,真是一个悖论。)
在电脑上使用的时候,两者差不太多,如果使用Tailscale的话,需要每个月登录一次(mac下,否则可能会token过期)。zerotier好象目前还没有遇到。
同时,zerotier可以使用moon节点加速,tailscale好象暂不行,只能通过国外中转。zerotier原来有100个免费的leaf,现在降为50个了,但对普通人说,别说50个,就是10个也足够了。所以,我其实是两个混用的。以防万一哪一个挂掉。
zerotier如果不使用moon节点,速度其实和tailscale差不太多,创建moon节点并连接上后,会发现快了很多。(然而,手机版的zerotier-one不知道怎么启用moon节点)
----如何创建moon节点?网上有很多例子,我是参考的这一篇:zerotier自建moon教程 - 方舟基地 (wnark.com)。如果要看详细的,请直接移步链接。
我取了其中的几个简化的步骤:
XML/HTML代码
- 找个好一点的机器 :
- cd /var/lib/zerotier-one
- 生成moon.json模板
- zerotier-idtool initmoon identity.public > moon.json
-
- 修改moon.json模板
- 要记住id之后加入moon服务器全靠他。检查 "id"是否为你vps的10为字符id,可在zerotier网页管理端查看,如果不是说明上一步配置有误。
- vi 编辑 moon.json,修改 “stableEndpoints” 为 VPS 的公网的 IP,以 IPv4 为例,记得带引号:
-
- "stableEndpoints": [ "8.8.8.8/9993" ]
- 生成签名文件
- 用到上一步中的 moon.json, 执行
-
- zerotier-idtool genmoon moon.json
- 执行之后生成 000000xxxx.moon 文件。
-
- 将 moon 节点加入网络
- 在 VPS 的 Zerotier 安装目录下(/var/lib/zerotier-one)建立文件夹 moons.d,将生成的 .moon文件拷贝进去。
- 重启 zerotier,重启电脑。至此,VPS 上(moon 服务器)配置完成。
-
- 客户机连接moon节点
- 其他虚拟局域网中的机器想要连接到 moon 节点的话有两种方法。
-
- 第一种方法就是使用 zerotier-cli orbit 命令。
- 使用之前步骤中 moon.json 文件中的 id 值 (10 位的字符串)分别在客户端机器里执行:
-
- zerotier-cli orbit <id> <id>
- 完成(一般来说这两个id都是相同的)
-
- [root@idv-36f9d5 ~]# zerotier-cli orbit 3ed7c***** 3ed7c*****
- 200 orbit OK
- 第二种方法是需要在 /var/lib/zerotier-one 目录下新建 moons.d 文件夹和 moon 节点一样,将 000000xxxx.moon 文件放到其中,并重启 zerotier。
直接使用Zerotier-cli orbit id id 会更方便一点。
苹果相关 | 评论:0
| 阅读:8505
Submitted by gouki on 2021, December 27, 5:06 PM
写这个标题的时候,我已经构建包大约有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,我早就删除了。。。也就是说我已经无法让轻量服务器和云托管互通了。。。
对等网络有两种:同账号对等、不同账号对等,在同地区是免费的。跨区要收费
----
经过一个周末的折腾,总算是解决了不少问题,虽然没有全部搞定,但还是比较成功。。。比较满足,周末没有虚度
苹果相关 | 评论:0
| 阅读:10462
Submitted by gouki on 2021, December 25, 10:15 AM
最近也一直在尝试云托管等类似的功能,看到微信云托管,所以就想试一下。虽然这产品出来好久了,但一直想着有独立的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一下就完了。
苹果相关 | 评论:0
| 阅读:6854
Submitted by gouki on 2021, July 5, 2:00 PM
之前确实有一篇,引用的overtrue的文章,但其实还是不太正常:https://neatstudio.com/show-2912-1.shtml
当时参考的时候,其实比较简单:(基于非ROOT用户)
1、sudo adduser deployer
2、sudo usermod -aG www-data deployer
3、sudo chfn -o umask=022 deployer
4、sudo chown deployer:www-data /var/www/html
5、sudo chmod g+s /var/www/html => 这一步,需要调整为:sudo chmod -Rf g+s /var/www/html
chmod -Rf g+s sorgo/ #SGID,新生成文件或文件夹保持与父目录同一权限组
SGID属性对于像laravel框架这种有tinker让开发者在交互式命令行界面调试代码的特别有用。比如你使用tinker新建了一个日志文件,如果没有SGID那这个新日志文件的所有者和所有组会是uu:uu,这时www用户执行下的程序要写入东西到这个新日志的话就会因权限受阻而报错;而父目录有SGID属性的则会是uu:www,同时保证了两个相关的用户都能正常读写。
参考:https://segmentfault.com/a/1190000018373387
--
以下为新增,在这种情况下,部分目录可能还会存在写不进的问题。
6、sudo chmod -R 760 /var/www/html/storage => 对指定目录设置可写.
苹果相关 | 评论:0
| 阅读:7849
Submitted by gouki on 2021, May 18, 4:37 PM
为什么用树莓来搭NFS也是有一些原因的,其中有一个比较小烦的原因就是M1没法用虚拟机,因此有部分开发只能继续在以前的MBP2018上处理了。然后我又不想背着代码到处跑和到处拷来拷去的,不用说什么GIT之类的,用GIT是肯定需要的,但一些配置和环境,还是意味着我得经常同步,之前是用synceverything(好象是这个)。但也还是麻烦,于是就想着是不是直接用NFS来解决?
1、如何搭建nfs(ubuntu\debian)
2、权限如何设置
3、MAC访问no permission怎么处理
现在我们一个个的来
1、在ubuntu\debian系上搭建NFS其实也算是比较容易的,直接运行:sudo apt install nfs-kernel-server,几乎就没问题了。如果有,根据提示走就OK,然后在/etc目录下创建exports文件,并设置共享目录,格式很简单:“/要共享的目录 IP(权限)”,每行一条记录。比如我要共享/home/wwwroot目录,只允许局域网的机器 进行访问,那就是:/home/wwwroot 192.168.0.0/24(rw,sync,insecure,no_root_squash)。
2、是不是很简单?如果单个IP,就不需要子网掩码,括号里的内容其实也比较好懂,rw,可读写。sync,同步,no_root_squash,nobody权限,insecure,则是允许通过finder等工具直接进行访问。
参数no_root_squash的其作用是:NFS客户端使用共享目录的用户,如果是root 的话,所有的操作均在服务器端映射为root用户,拥有共享目录的root权限!
默认情况使用的是相反参数root_squash:在登入 NFS 主机export目录的使用者如果当root时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份。
3、客户端访问,mac有两种访问方式,1种是直接通过finder,另一种是命令行,finder,就是菜单中的:查找服务器;命令行的话更简单:sudo mount -o rw -t nfs 192.168.0.100:/home/wwwroot /Users/gouki/xxx。如果发现不能挂载,则可能是mac的权限问题,mac默认低于1024的端口不开放,则需要用到:sudo mount_nfs -o resvport 192.168.0.100:/home/wwwroot /Users/gouki/xxx
挂载成功后,也可以更新到/etc/fstab中,变成一个永久的挂载盘符。
问题出在哪里呢?出现在finder中的内容,你会发现无法更新无法删除,只能用sudo权限,否则都会出现no permission。这其实是因为两台电脑的用户默认不一样,可以在客户端运行id,看一下自己的用户组,类似这样:
XML/HTML代码
- uid=501(gouki) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),33(_appstore)
要解决这个问题,就得到服务器上新建这个用户,并指定UID为501,运行:useradd -u 501 gouki进行添加。然后为指定的目录设置权限:chfacl -m gouki:rwx -R /home/wwwroot,如果直接运行,你会发现提示:command not found,命令不存在?但网上的各种教程,都是让运行chfacl。事实上在debian下面,应该是用:setfacl,参数完全一样。
至此,全部设置完毕,也可以正常访问了。
参考 :
1、https://blog.csdn.net/weixin_33367083/article/details/114323657
2、https://blog.csdn.net/zyqblog/article/details/79226826#23-%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6-acl
3、https://linuxconfig.org/how-to-set-up-a-nfs-server-on-debian-10-buster#h5-conclusion
4、https://blog.csdn.net/qq_29663071/article/details/80668157
5、https://thornelabs.net/posts/operation-not-permitted-mounting-nfs-share-on-os-x-mountain-lion.html
---
要查看当前所有mount的数据,可以用showmount。
showmout命令对于NFS的操作和查错有很大的帮助.
-a:这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器.
-e:显示指定的NFS SERVER上export出来的目录.
苹果相关 | 评论:0
| 阅读:8622