资讯详情

资讯详情

Upspin 服务器 Ubuntu 部署实战:从创建系统用户到用 systemd 托管 upspinserver

后端密码学【免费下载链接】upspinUpspin: A framework for naming everyones everything.项目地址https://gitcode.com/gh_mirrors/up/upspin点击查看免费下载导读本文是 Upspin 服务器部署指南 的 Ubuntu 分支实战教程完整讲解如何在 Debian/Ubuntu Linux 服务器上创建运行upspinserver的专用系统账户、拷贝服务端二进制、配置 Lets Encrypt 证书缓存目录并通过 systemd 将upspinserver注册为开机自启的常驻服务。读完本文你将掌握一套可复现的部署流程包括如何用setcap让非 root 进程绑定 80/443 端口、如何用systemctl启停服务、以及如何用journalctl排查服务器日志文章同时结合仓库源码解释每一步背后的实现原理便于你排查部署过程中可能遇到的端口、权限与证书问题。前置阅读本文是 Setting up upspinserver 的组成部分请先阅读该文档完成注册账号、域名配置与二进制构建等前置步骤再继续本文的服务器端操作。部署前提与环境说明本文的部署步骤面向以下环境开始之前请逐项确认你拥有一台可访问的 Debian 或 Ubuntu Linux 服务器且服务器可以通过你选择的upspin.example.com主机名被公网访问你已经在工作站上按照 server_setup.md 的指引完成了 Upspin 账号注册、域名 DNS 配置并针对所选存储后端构建好了upspinserver二进制服务器已部署 systemd 作为 init 系统Ubuntu 16.04 及绝大多数现代 Debian/Ubuntu 发行版均满足。文档作者明确提示这些步骤已在 Ubuntu 16.04 上验证通过不同系统上的具体命令可能有所差异例如包管理器、用户创建工具的语法或 systemd 单元文件的行为可能随发行版演进而变化。实际部署时请以当前系统的man手册与发行版文档为准。本文沿用原文档的提示符约定local$表示在工作站上执行的命令server%表示以普通用户身份在服务器上执行server#表示以 root 身份在服务器上执行。二进制名称说明根据 server_setup.md针对不同存储后端构建出的二进制可能叫upspinserver也可能带有云服务后缀如upspinserver-gcp。无论原始名称是什么拷贝到服务器时统一安装为upspinserver这样后续所有指令对所有配置变体保持一致。从源码结构看upspinserver是一个合并的 DirServer 与 StoreServer在 cmd/upspinserver/main.go 中upspin.io/cloud/storage/disk被以匿名导入方式注册本地磁盘存储后端随后调用upspinserver.Main()启动服务并交给cloud/https包监听 HTTPS而 serverutil/upspinserver/main.go 中同时创建了store/server与dir/server两个生产实现实例并挂载到/api/Store/与/api/Dir/两个 HTTP 路径。第一步在服务器上创建专用运行账户upspinserver不应以 root 身份运行。作为系统服务它为自身创建了一个专用 Unix 账户upspin所有后续文件二进制、Lets Encrypt 缓存、服务器数据都围绕这个账户组织。以下命令必须以超级用户root在服务器上执行可通过sudo su进入 root shell。创建 Unix 账户server# useradd -m upspin-m选项同时创建用户主目录通常为/home/upspin该目录后续会用于存放二进制与缓存。在较新的 Ubuntu 上你也可以用adduser upspin交互式达到类似效果但非交互的useradd更适合脚本化部署。配置 SSH 访问可选但推荐为方便后续运维为upspin账户配置 SSH 公钥登录。先切换到该账户并准备~/.sshserver# su upspin server% cd $HOME server% mkdir .ssh server% chmod 0700 .ssh server% cat .ssh/authorized_keys (Paste your SSH public key here and type Control-D and Enter) server% chmod 0600 .ssh/authorized_keys注意两个权限位是关键.ssh目录必须是0700authorized_keys文件必须是0600否则 OpenSSH 出于安全考虑会拒绝使用该公钥。此后你就能从工作站以ssh upspinupspin.example.com登录服务器执行运维操作。创建 Lets Encrypt 缓存目录server% mkdir -p upspin/letsencrypt即在/home/upspin/upspin/letsencrypt创建证书缓存目录。这个路径与源码中的默认值相呼应在 flags/flags.go 中Lets Encrypt 缓存目录的默认值为upspinDir(letsencrypt)即$HOME/upspin/letsencrypt注释同时要求该目录仅属主可访问chmod 0700因为其中保存着可能敏感的证书与账户私钥材料。在 cloud/https/https.go 中ListenAndServe检测到-letscache非空时会以os.MkdirAll(dir, 0700)确保目录存在并将该目录交给autocert.DirCache作为 Lets Encrypt 证书缓存。第二步将 upspinserver 二进制拷贝到服务器前置的构建步骤见 server_setup.md 的 Set up storage and build the upspinserver binary 小节已在工作站上产出二进制。本文以 64 位 Linux 为例local$ GOOSlinux GOARCHamd64 go build upspin.io/cmd/upspinserver注意cmd/upspinserver默认使用本地磁盘存储数据存放在$HOME/upspin/storage源码实现在 serverutil/upspinserver/main.go 中未提供云存储配置时使用backendDisk, basePath storagePath初始化 StoreServer。若选择云端存储GCP、Drive、AWS、Dropbox、B2请改按 server_setup.md 中列出的对应分支指南构建带后缀的二进制。另外请知悉把数据存在服务器本地磁盘意味着一旦磁盘损坏所有 Upspin 数据将全部丢失。在服务器上完成upspin账户与目录准备后回到工作站用scp将二进制推送到服务器并直接命名为upspinserver把upspinserver-foo替换为你实际构建的二进制名local$ scp upspinserver-foo upspinupspin.example.com:upspinserver拷贝完成后二进制位于/home/upspin/upspinserver与下一步 systemd 单元文件中的ExecStart路径一一对应。第三步用 systemd 将 upspinserver 注册为系统服务以下命令同样需以 root 身份在服务器上执行并假定服务器运行 systemd。创建 service 单元文件创建文件/etc/systemd/system/upspinserver.service内容如下[Unit] DescriptionUpspin server [Service] ExecStart/home/upspin/upspinserver Userupspin Groupupspin Restarton-failure [Install] WantedBymulti-user.target对单元文件关键字段的说明ExecStart启动命令指向第二步拷贝到/home/upspin/upspinserver的二进制省略参数即可使用全部默认值User/Group指定进程以upspin账户运行避免以 root 运行服务带来的安全风险Restarton-failure进程异常退出时由 systemd 自动重启提升可用性WantedBymulti-user.target将服务挂到多用户运行目标下配合systemctl enable实现开机自启。补充一个默认值细节upspinserver不带任何参数启动时flags/flags.go 中定义的默认监听地址为-https:443HTTPS、-http:80HTTPLets Encrypt 缓存目录默认$HOME/upspin/letsencrypt日志级别默认info。这意味着只要二进制与账户就绪单元文件无需写任何参数即可正常工作。允许非 root 进程监听 80 与 443 端口upspinserver需要同时监听 80 和 443 端口才能通过 HTTP-01 挑战从 Lets Encrypt 获取 TLS 证书——cloud/https/https.go 中当启用 Lets Encrypt 时会额外在:80上启动一个 HTTP 服务器用于应答证书挑战并把其余请求重定向到 HTTPS。Linux 默认只允许 root 绑定 1024 以下端口而我们希望进程以upspin用户运行。解决办法不是改用 root而是用setcap为二进制单独授予绑定网络端口的 capability以 root 执行server# setcap cap_net_bind_serviceep /home/upspin/upspinserver其中ep表示给二进制添加 effective 与 permitted 两个标志位使该文件在执行时拥有绑定特权端口的权限。重要提醒每当upspinserver二进制被更新重新拷贝替换文件后必须重新执行一次这条setcap命令因为setcap附加在文件 inode 上的 capability 标记在文件被覆盖时会丢失。启用并启动服务server# systemctl enable --now /etc/systemd/system/upspinserver.serviceenable建立开机自启的符号链接--now立即启动服务等价于enablestart两步。日常运维命令server# systemctl stop upspinserver server# systemctl restart upspinserver分别用于停止与重启服务。查看服务日志server# journalctl -f -u upspinserver-f让journalctl持续跟随输出-u upspinserver过滤出该服务单元的日志。这对部署调试极为重要例如你可以在日志中看到本文稍后提到的启动模式提示信息或排查证书申请失败、端口被占用等问题。启动模式理解 setup mode 与后续配置部署完成后upspinserver会进入所谓的setup mode配置模式等待工作站执行upspin setupserver完成正式配置。这一行为有明确的源码依据在 serverutil/upspinserver/main.go 的Main()中若服务器配置目录下不存在配置文件会打印Configuration file not found. Running in setup mode.并把根路径/挂载为setupHandlercmd/upspin/setupserver.go 中的upspin setupserver命令会向https://host/setupserver发起 POST把Writers、public.upspinkey、secret.upspinkey、serverconfig.json这四类配置见 subcmd/server.go 的SetupServerFiles列表推送给服务器服务端在 serverutil/upspinserver/main.go 的setupHandler中校验并写入这些文件后重新初始化服务并切换到正常服务模式。因此完整的部署节奏是按本文完成账户、二进制与 systemd 服务注册回到 server_setup.md 继续执行其中的Test connectivity与Configure upspinserver小节即在浏览器访问https://upspin.example.com/应看到Unconfigured Upspin Server字样在工作站运行upspin setupserver -domainexample.com -hostupspin.example.com完成服务器用户注册、配置推送与用户根目录创建最后用echo Hello, Upspin | upspin put yougmail.com/hello与upspin get yougmail.com/hello验证读写链路。若配置出错需要重来可删除服务器上的$HOME/upspin/server目录并重新执行upspin setupserver。注意该目录包含目录服务器数据以及使用本地磁盘存储时的全部对象数据删除即等于清空所有已写入的 Upspin 数据务必谨慎。部署检查清单部署完成后可用下表快速自查检查项期望状态验证手段upspin账户已创建主目录含.ssh与upspin/letsencryptserver# id upspinserver% ls -la $HOME二进制就位/home/upspin/upspinserver存在且可执行server# ls -l /home/upspin/upspinserver特权端口授权二进制带cap_net_bind_serviceserver# getcap /home/upspin/upspinserver服务注册unit 文件存在且已 enableserver# systemctl is-enabled upspinserver服务运行activerunning无异常重启server# systemctl status upspinserverserver# journalctl -u upspinserverHTTPS 可达浏览器访问显示Unconfigured Upspin Server工作站浏览器访问https://upspin.example.com/如果页面无法加载优先查看journalctl日志常见原因包括 Lets Encrypt 缓存目录权限不正确、setcap未在二进制更新后重跑、服务器防火墙未放行 80/443以及 DNS A 记录尚未指向服务器 IPDNS 解析是 Lets Encrypt 域名验证的前提之一。小结本文完整覆盖了在 Ubuntu/Debian 服务器上运行upspinserver的全部服务器端步骤创建专用upspin系统账户、配置 SSH 公钥与 Lets Encrypt 缓存目录、统一以upspinserver名称部署二进制、编写 systemd 单元文件实现开机自启与崩溃自动重启、用setcap安全地授予 80/443 端口绑定能力以及用systemctl/journalctl完成日常管理与日志排查。文中同时对照 cmd/upspinserver/main.go、serverutil/upspinserver/main.go、cloud/https/https.go 与 flags/flags.go 等源码说明了默认监听端口、Lets Encrypt 证书缓存机制与 setup mode 的底层实现帮助你理解每一步部署操作的实际效果。服务启动并进入 setup mode 后请继续回到 server_setup.md 完成upspin setupserver配置与端到端读写验证。赞分享后端密码学【免费下载链接】upspinUpspin: A framework for naming everyones everything.项目地址https://gitcode.com/gh_mirrors/up/upspin点击查看免费下载相关推荐circleImageView4cj 圆形图片组件从 cjpm.toml 到 hvigor 构建工程结构与打包发布全解析circleImageView4cj 圆形图片组件从 cjpm.toml 到 hvigor 构建工程结构与打包发布全解析 circleImageView4c后端密码学UnreleasedUnreleased 1.1.2 Initial release. 注意这个 changelog 是 手工维护 的This changelog is wr后端密码学Gradio 应用自托管部署实战用 Disco 一键把应用部署到自己的 Ubuntu 服务器Gradio 应用自托管部署实战用 Disco 一键把应用部署到自己的 Ubuntu 服务器 导读 Gradio 是一个开源的 Python 库只需几行代前端后端AI 应用上一篇FVim vs Neovide vs Goneovim三大Neovim GUI前端深度对比与选择指南 下一篇Lightbox图片预加载机制深度解析提升用户体验的关键技术点创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →