macOS 作为服务器

2017-12-07 12:16:54来源:http://kvh.io/osx-as-server.html作者:Keep Velocity High人点击

分享

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


取消系统休眠

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


具体表现是:


ssh 登出之后不久,线上就开始报警
登陆进去查看 log,发现程序又是正常的
socket 连接提示传输错误
程序并没有 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 文件的权限


-rw-r--r--1 wheel947 121 14:51 name_of_the_config.plist


也即是:



用户: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.”


基本的构架图如下:



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


使用方式,参考 imququ 的博客 。


基本流程是:


clone 源码
生成证书,拷贝 base.pem 到 assets/client/tls/ngrokroot.crt 下
运行 make release-server release-client
bin 的 ngrokd 和 ngrok 分别是服务器端和客户端
总结

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


本文由kvh 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。




相关文章

    无相关信息

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台