7

macOS 作为服务器

 3 years ago
source link: https://kvh.io/cn/osx-as-server.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

macOS 作为服务器

Modified: 2020-04-20

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

取消系统休眠

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

具体表现是:

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

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

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

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

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

97778894.jpg
节能设置

守护进程

作为服务器,大多是需要运行守护进程。这就需要用到 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.”

基本的构架图如下:

55782772.jpg
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 作为服务器的一些注意事项。

相关文章推荐

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK