macOS 作为服务器

因为业务需要,我司有若干台服务器 Mac 作为服务器。下面总结一下注意事项,作为记录。

取消系统休眠

曾经在这个问题上困扰很长时间。在升级了 macOS High Sierra 之后,发现之前能够正常运行的程序出现问题。

具体表现是:

  1. ssh 登出之后不久,线上就开始报警
  2. 登陆进去查看 log,发现程序又是正常的
  3. socket 连接提示传输错误
  4. 程序并没有 exit

一开始怀疑是后台程序的权限问题,于是更新了后台程序的 launchd 配置,确保了使用 root 用户运行,没有效果。

后来灵机一动,去具体分析程序的 log,发现只要用户登出,输出就会停止,看起来是程序被挂起了。

分析可能被挂起的原因,只可能是系统休眠了。

直接登陆 GUI 系统,在系统设置中将节能设置改成:

节能设置

生效了!

守护进程

作为服务器,大多是需要运行守护进程。这就需要用到 launchd,它能确保这是确保设备重启之后,守护能够自动运行。

launchd 是一个开源框架,用于控制守护进程、程序、或者脚本,在 Mac OS X Tiger 中引入。

使用 launchd,主要需要注意下面几点:

  • 正确区分系统全局的守护和用户相关的守护进程
类型 路径 运行用户
全局的守护进程 /Library/LaunchDaemons root 用户或者使用 UserName key 对应的用户
系统的守护进程 /System/Library/LaunchDaemons root 用户或者使用

一般而言,把 plist 文件放到 /Library/LaunchDaemons 即可。

  • 正确设置 plist 文件的权限
1
-rw-r--r--  1 wheel  947 12  1 14:51 name_of_the_config.plist

也即是:

1
2
3
用户:root
组:wheel
权限: 0644

  • 被运行的程序,需要是处于前台运行,否则 launchd 会认为程序已经退出
  • 如果需要全局性的守护进程,需要使用 sudo 运行

参考文档

http://www.launchd.info/

launchd.plist

launchctl

内网穿透

很多时候,macOS 服务器并不是托管在机房,而是在某个比较方便管理的地方——例如办公室。

办公室的网络环境又千奇百怪,往往没有固定的外网 ip,往往是处于 NAT 的网络环境或者是防火墙内,如果服务出现了问题,总不能直接跑去办公室吧。

尝试过各种 VPN 方案,动静太大,不稳定,放弃。下面介绍一下 Ngrok

官网简介:

Secure tunnels to localhost ”I want to expose a local server behind a NAT or firewall to the internet.”

基本的构架图如下:

Ngrok

这款软件是 C/S 结构,使用服务器作为中转,只需要设置好服务器和客户端,不需要在路由器做任何处理。软件的2.x 不开源,github 上只有 1.x 版本,已经足够。

使用方式,参考imququ 的博客

基本流程是: 1. clone 源码 2. 生成证书,拷贝 base.pemassets/client/tls/ngrokroot.crt 下 3. 运行 make release-server release-client 4. bin 的 ngrokd 和 ngrok 分别是服务器端和客户端

总结

以上是对于 macOS 作为服务器的一些注意事项。

相关文章推荐