手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:Linux

踩坑微信云托管

最近也一直在尝试云托管等类似的功能,看到微信云托管,所以就想试一下。虽然这产品出来好久了,但一直想着有独立的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一下就完了。

 

linux非www用户如果写文件

之前确实有一篇,引用的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 => 对指定目录设置可写.

利用树莓搭建NFS遇到的一些问题及解决

为什么用树莓来搭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代码
  1. 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出来的目录.

ssh跳板机配置

 很多时候我们都不能直接访问内网机器,一般情况下,我们都是先登录跳板机,然后从跳板机上再进行操作。但这样,很容易在跳板机的history里留下记录。而且,如果有时候临时传文件,就相当于要处理两次:上传到跳板机=》传到目标机。

其实如果利用sshconfig进行一下配置,就可以直接操作这种行为:

https://github.com/meolu/walle-web/issues/265
  1. Host bg-a  
  2.     HostName 1.2.3.4  
  3.     Port 22  
  4.     User ubuntu  
  5.     IdentityFile ~/.ssh/prod-ubuntu  
  6.   
  7. Host web-a  
  8.     HostName 192.168.200.2  
  9.     Port 22  
  10.     User ubuntu  
  11.     IdentityFile ~/.ssh/prod-ubuntu  
  12.     ProxyCommand ssh -q -W %h:%p bg-a  

然后你就可以使用 ssh web-a 直接连接到内网的服务器(透过 bg-a),或者 scp /xxx/xxx/x.tar.gz web-a:/tmp/ 这样的操作也支持。【上述内容,其实我本地的sshconfig也有类似操作,只是说我要COPY出来还要修改内容,所以就直接复制线上的】

至于ssh config文件怎么配置,网上有很多教程文章,比如:https://www.toutiao.com/i6700025110645965324/,

其他参考文章:

1、https://github.com/zxdvd/blog/blob/master/content/shell/%E7%94%9F%E4%BA%A7%E5%8A%9B%3A%20ssh%E8%B7%B3%E6%9D%BF%E6%9C%BA%E9%85%8D%E7%BD%AE.md

2、https://github.com/meolu/walle-web/issues/265

3、https://zhuanlan.zhihu.com/p/74193910 (https://mp.weixin.qq.com/s/jUYMulyl0xoPp-Vi3QJ3-Q)

4、https://blog.csdn.net/CityzenOldwang/article/details/77097703 ,这一篇里对.sshconfig的一些配置说明:

XML/HTML代码
  1. # man 5 ssh_config  
  2. # vim .ssh/config  
  3. Host *  
  4.   ForwardAgent yes    # 默认转发密钥  
  5.   PasswordAuthentication yes   # 允许密码登陆  
  6.   StrictHostKeyChecking no   # 不自动接收公钥,如果设置为 yes,ssh 就不会自动把计算机的密钥加入到 .ssh/known_hosts 文件,并且一旦计算机的密钥发生了变化,就拒绝连接。  
  7.   HashKnownHosts yes  # 将访问过的 hosts 以 hash 的形式存放,降低被入侵后信息暴露的风险  
  8.   Compression yes   # 压缩传输,取值on/off/force。在 scp 等传输文件的情况下提高传输速度  
  9.   ServerAliveInterval 60   
  10.   ServerAliveCountMAx 5  

 

 

有颜色的git log

 git log是有可以带颜色的。但需要自定义,默认只有hash有颜色 。如果只是为了看简单的log,那么git log --pretty=online就行了,这个也有颜色

但要更多的自定义就。。。。复杂了一点,参考 :https://jasonhzy.github.io/2016/05/05/git-log/,我复制了这个脚本:
XML/HTML代码
  1. git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"  
如果不需要有graph显示合并,那就直接将graph去掉就行了。如果要更多的配色,那还是需要再定义。
实际用起来就是:git lg -5,lg就是刚才定义的alias.lg。
 
Records:28412345678910»