把你的实例放到一台常开的服务器上,一台在数据中心 7×24 全天候运行的电脑,这样远程队友就能从任何地方访问它,并拥有你自己的网址和免费的 HTTPS(那把加密连接的小锁)。本指南使用 Oracle Cloud 的永久免费套餐,它能让 Map Blueprint 零月费运行,不过同样的步骤适用于任何 Ubuntu 云服务器。
https://maps.yourdomain.com 的网址访问,由你的团队密码保护,并在重启后自动恢复运行。预计约需 20–30 分钟。下文凡是出现 YOUR_… 的地方,都请替换成你自己的值。
更想直接在自己的笔记本上运行它?请看本地托管指南。
yourdomain.com);DNS 是互联网的通讯录,负责把域名指向某台服务器;HTTPS 是网址的加密、带锁版本;反向代理和隧道是给应用加上 HTTPS 的两种方式。别担心,下面每一步都会准确告诉你该怎么做。
VM.Standard.E2.1.Micro,或者内存更大的 Ampere Arm 规格。保持默认的 Ubuntu 镜像,Ubuntu 就是本指南所用的 Linux 版本。YOUR_SERVER_IP。防火墙会拦截意料之外的网络连接。Oracle 默认拦截入站的网页流量,所以你需要在两个标准的网页端口上放行它,80(普通网页)和 443(安全网页):
0.0.0.0/0(意为「来自任何地方」)的 TCP 流量到达端口 80 和 443。sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
如果你在第 5 步采用 Cloudflare Tunnel 方案,就完全可以跳过打开 80/443 端口这一步。
现在你将用 SSH 从自己的电脑登录服务器并在上面输入命令。打开一个终端(在 Windows 上用 PowerShell,它已经自带 ssh),运行下面这条命令,把 -i 指向你下载的私钥文件:
ssh -i /path/to/YOUR_PRIVATE_KEY ubuntu@YOUR_SERVER_IP
在 Mac 或 Linux 上,如果你遇到关于密钥「权限过于开放」的错误,先运行 chmod 600 /path/to/YOUR_PRIVATE_KEY,它会收紧文件,使其只有你能读取,这正是 SSH 所要求的。
连接成功后(命令提示符现在显示的是服务器),安装最新的系统更新:
sudo apt update && sudo apt upgrade -y
sudo 的意思是「以管理员身份运行这条命令」;apt 是 Ubuntu 内置的应用安装器。
服务器上没有什么需要安装,不用 Docker,不用 Node,也不用 .env。它就是一个自包含的单一程序。从你自己的电脑(一个新的终端窗口,而不是 SSH 会话)里,在你解压下载文件的那个文件夹中运行下面命令,把 Linux 程序上传到服务器。scp 是「安全复制」,它通过同一条安全的 SSH 连接发送文件:
scp -i /path/to/YOUR_PRIVATE_KEY ./map-blueprint-linux ubuntu@YOUR_SERVER_IP:~/
回到 SSH 会话,把程序设为可运行并启动它。HOST=0.0.0.0 告诉它接受来自外部的连接,这样下一步的 HTTPS 才能访问到它:
chmod +x ~/map-blueprint-linux
HOST=0.0.0.0 ~/map-blueprint-linux
现在它正在端口 8080 上监听。等到 HTTPS 就位后(下一步),你会从浏览器里设置团队密码。眼下先按 Ctrl-C 停止它,第 6 步会把它变成一个 7×24 全天候运行的服务。
config.json 和你的 data/ 地图会被创建在你主文件夹(~/)里的程序旁边。所有设置都在应用内的设置页面里,没有任何文件需要编辑。
这款应用使用普通的 HTTP,并被设计为放在某个能为它加上 HTTPS(加密小锁)的东西后面。在下面这两种方案中选一个,方案 A 最容易保证安全。
隧道会让你的服务器主动连出到 Cloudflare,这样访问者就能通过 Cloudflare 访问应用,而你的服务器上无需开放任何端口。
cloudflared(Cloudflare 的隧道工具)并登录:
curl -fsSL https://pkg.cloudflare.com/install.sh | sudo bash
sudo apt install -y cloudflared
cloudflared tunnel login
cloudflared tunnel create mapblueprint
cloudflared tunnel route dns mapblueprint maps.YOURDOMAIN.com
http://localhost:8080,然后把它安装为后台服务,使其始终运行:
sudo cloudflared service install
Cloudflare 会自动为你创建并续期 HTTPS 证书,而且你服务器上没有任何东西被直接暴露,你可以让 80/443 端口保持关闭。
Caddy 是一个小巧的网页服务器,它位于应用前面,为其加上 HTTPS,并把访问者转发给它,这正是反向代理所做的事。
maps.YOURDOMAIN.com 设置一条 DNS A 记录,指向 YOUR_SERVER_IP。(「A 记录」就是把一个名称映射到服务器 IP 的 DNS 条目,在你的域名注册商或 DNS 提供商处设置。)/etc/caddy/Caddyfile(它告诉 Caddy:为这个网址提供服务,并把访问者转发给端口 8080 上的应用):
maps.YOURDOMAIN.com {
reverse_proxy localhost:8080
}
sudo systemctl reload caddy
Caddy 会自动为你获取并续期一份免费的 Let's Encrypt 证书。此方案需要打开 80 和 443 端口(第 2 步)。
X-Forwarded-Proto 头),因此登录无需额外设置即受保护。
访问 https://maps.YOURDOMAIN.com,你应该会看到登录页面。登录后把这个链接分享给你的团队。
想要第二道、更强的锁?Cloudflare Zero Trust 的「Access」会把一个登录界面放在你的应用前面,这样陌生人根本接触不到 Map Blueprint,Cloudflare 会先核实你的身份。它与上面的方案 A(Cloudflare Tunnel)配合得最好,并且能让你按邮箱逐人授予访问权限,而不必共享同一个密码。对小团队来说它是免费的。
maps.YOURDOMAIN.com)。@yourstudio.com),然后保存。这与 Map Blueprint 的开发者在自己内部地图上所用的身份门禁是同一类。即使有人知道了你的网址,没有通过身份核验也无法加载应用,非常适合一张私密的工作室地图。
最后,把应用变成一个服务,让它开机自启,并在它万一停止时自我重启。(「服务」是 Linux 在后台照看的一个程序。)把下面的文本保存为文件 /etc/systemd/system/map-blueprint.service:
[Unit]
Description=Map Blueprint
After=network.target
[Service]
WorkingDirectory=/home/ubuntu
Environment=HOST=0.0.0.0
ExecStart=/home/ubuntu/map-blueprint-linux
Restart=always
User=ubuntu
[Install]
WantedBy=multi-user.target
然后把它打开,重新加载服务列表,启用并启动它,再检查它是否在运行:
sudo systemctl daemon-reload
sudo systemctl enable --now map-blueprint.service
sudo systemctl status map-blueprint.service
WorkingDirectory=/home/ubuntu 会把 config.json 和你的 data/ 地图保留在主文件夹里,就在程序旁边。现在打开 https://maps.YOURDOMAIN.com,完成首次运行的设置界面,并立刻设置你的团队密码。(更想提前设好?那就在服务文件里加上 Environment=APP_PASSWORD=YOUR_PASSWORD。)
http://YOUR_SERVER_IP:8080。sudo apt update && sudo apt upgrade -y。data/ 文件夹(以及 config.json),你的地图和设置都存在那里。当你拿到更新后的程序时,停止服务,替换程序文件,再重新启动它,你的 config.json 和 data/ 地图会原封不动。从你的电脑上传新的 map-blueprint-linux(用 scp,如第 4 步),然后在服务器上运行:
sudo systemctl stop map-blueprint.service
chmod +x ~/map-blueprint-linux
sudo systemctl start map-blueprint.service