双十一期间,少数派会员正在限时特惠中,你可以通过下方二维码以「交个朋友」的优惠价订阅少数派Prime会员。
我们在近期完成了少数派会员第二季实体周边的制作,现在加入年付会员,即可获得专属福利礼包。
针对这个问题,很多教程会推荐使用Docker来绕过繁琐的部署流程。这固然不失为一种捷径,但也有一些不可忽视的缺陷,例如占用资源和空间较多、自主修改配置较麻烦等。从学习的角度来说,尽管表面上省事了,但也因此错过了实践软件包管理、服务器维护等基础知识的机会;一旦日后出现问题,「欠下的课总是要补回来的」。
本质上,YunoHost是基于Debian的发行版,但专门面向自托管开源服务的场景设计,不仅提供了美观、易用的网页端前后台界面,而且有一个社区维护的「应用商店」,把繁琐多变的服务部署流程简化为几次鼠标点击。
接下来,本文就将结合使用经验,依次介绍YunoHost的安装和配置,并就服务安装、日常使用等方面提出建议。
YunoHost主要有两种安装方式:既可以下载完整的ISO镜像,直接在一台x86或ARM架构的裸机(包括树莓派等开发板)上全新安装;也可以先准备一个干净的Debian11系统,然后运行安装脚本当作补丁安装。
考虑到公网访问的便利,本文重点演示第二种方式,在一台新创建的VPS(云主机)实例上通过安装脚本安装。其实,对于局域网环境、实体硬件上安装的情况,大多数步骤和描述也可以套用,只是需要额外考虑公网转发的问题。
首先,前往VPS服务提供商的面板,新建一个VPS实例。实例的配置参考如下:
安装过程中,会询问是否允许安装程序覆盖现有的一些配置文件,使用方向键和回车选择Yes或Installthepackagemaintainer’sversion等选项,即接受YunoHost安装程序的更改。
安装完成后,打开浏览器,直接访问VPS实例的IP地址(如果在局域网环境安装,可以使用保留域名yunohost.local)。
此时,大多浏览器会提示证书错误,这是因为目前尚未安装SSL证书,YunoHost临时安装了一个自签名的证书,点击「继续访问」或类似按钮,忽略错误继续访问即可。
接下来需要为YunoHost配置域名(下称「默认域名」)。这里,你既可以注册一个YunoHost免费分配的子域名,也可以使用自己持有的域名,下面分别介绍。
如果你没有(或者不想占用)自己的域名,YunoHost也非常贴心地提供了三种简洁好记的免费子域名:yourname.noho.st、yourname.ynh.fr或yourname.nohost.me,其中yourname是可以自主选择的部分。
如果你想自托管多种服务,或许会顾虑一个子域名不够用。其实,只要你申请了一个免费子域名,它的所有下级子域名也都是属于你的,并且可以在YunoHost中直接使用。例如,你申请了yourname.noho.st,就可以用blog.yourname.noho.st来做博客,用forum.yourname.noho.st来做论坛。
如果你已经有一个域名,并且希望将其用于YunoHost,则选择Ialreadyhaveadomainname,填写要分配给YunoHost的域名即可。
这里,你可以把整个域名都作为默认域名(如yourname.tld),也可以把它的一个子域名作为默认域名(如ynh.yourname.tld)。
显然,如果用自有域名作为默认域名,需要为其配置DNS解析。具体界面和步骤取决于你的DNS服务提供商,这里只介绍通用原则。注意,DNS解析设置不一定要在添加域名之前就完成,也可以先添加域名再设置解析,只是在设置完成前无法用该域名访问YunoHost。
为安装YunoHost目的,主要涉及的DNS记录包括:
此外需要注意:
下图演示的是用Cloudflare的DNS服务添加一条默认域名的A记录:
添加完默认域名后,安装向导会提示设置一个管理员密码,完成后,会自动跳转到后台页面。到这里,安装后的初始配置就告一段落了。
目前,我们还有一个遗留的域名问题没解决——默认域名的证书目前仍然是自行签署的,浏览器并不承认。为了解决这个问题,我们需要安装一个免费的Let’sEncrypt证书。
首先,在后台页面依次点击Domains>[默认域名]>Certificate。
注意到此时InstallaLet’sEncryptcertificate按钮是灰色无法点击的状态。这其实是YunoHost的一个流程设定:新添加的域名必须先诊断DNS配置是否完整,然后才能申请证书。
为此,点击按钮上方提示语中的diagnosispage链接(实际上就是跳转到后台页面首页的Diagnosis功能模块),耐心等待诊断完成。
对此,根据提示信息补全相应的记录即可。当然,如果你确认用不上依赖这些缺失记录的服务,那么也可以直接忽略。
现在再回到Certificate页面,就会发现安装证书按钮可以点击了。安装完证书以后,再用浏览器访问默认域名就不会报错。(Let’sEncrypt证书的有效期为90天,但YunoHost会在届满前自动续期,一般不用人工干预。)
为此,在后台首页点击Users>NewUser,然后输入用户名、密码等完成创建。
至此,我们就完成了全部的准备工作,可以正式开始安装软件了。这里,我们以自托管最常见的需求——搭建博客为例,演示如何安装WordPress。
首先,你需要考虑用什么地址来托管服务。大多数软件都同时支持安装在(a)子域名(例如blog.yourname.tld)、(b)子路径(例如yourname.tld/blog)或(c)子域名与子路径的组合(例如www.yourname.tld/blog)上,如何选择主要是一个偏好问题;但也有部分软件只支持用单独的子域名安装。
这里,我们假设你准备用子域名blog.yourname.tld来安装WordPress。为此,需要将这个子域名添加到YunoHost中(使用子路径则没有这个步骤)。
方法是,在后台页面点击Domains>Adddomain,然后输入准备使用的完整子域名,点击Add即可。
接着,在Domains页面点击刚刚添加的子域名,按之前配置默认域名时相同的流程,完成诊断和添加证书。
准备好了子域名,现在就可以安装WordPress了。在后台页面点击Applications>Install,进入YunoHost的软件目录。
这里,我们直接通过搜索找到WordPress,然后点击Install按钮进入安装设置。
不同软件的设置内容大同小异,比较重要的几项是:
(这些设置之后都可以在后台的Applications模块再次调整。)
完成设置后,点击下方的Install按钮,等待安装完成,就可以通过blog.yourname.tld来访问自己的WordPress博客了。
另外,如果你想安装的软件未被官方收录,仍然可以通过目录中两个特殊的软件,借用YunoHost的框架来统一管理:
自托管过程中,经常遇到的两大难题就是怎样更新软件包以及备份或还原服务器配置。这两项任务能否及时、高效地完成,很大程度上决定了自托管的体验和数据的安全性。
对此,YunoHost都提供了较为完善的解决方案:
系统和软件更新在后台首页点击Systemupdate,即可同时检查系统软件包(即通过apt软件仓库安装的各项依赖和库)和应用程序(即通过YunoHost安装的各项服务)的更新,如果有更新可安装,点击相应位置的Update按钮即可。
备份和恢复在后台首页点击Backup,即可浏览或者创建服务器备份。其中,YunoHost会在系统或软件升级时自动备份对应的文件;你也可以点击Newbackup按钮,选择特定的配置或软件创建手动备份。
点击某一个备份记录后,可以选择下载、恢复等操作。这些备份位于服务器上的/home/yunohost.backup/archives/路径下;如果需要跨服务器进行迁移和恢复操作,将备份文件上传到待恢复服务器的这个路径即可。
admin用户的权限足以运行YunoHost体系下的各项管理和维护功能,但不能直接修改系统文件,例如/etc下的各项配置文件、/var/www下各已安装应用的源文件。如果需要修改这些文件,可以临时使用sudosu命令切换到root身份(但此时需要留意所创建和修改文件的权限)。
前台用户和访客的权限都可以通过Users>Managegroupsandpermissions页面进行细粒度的调节。例如:
尽管YunoHost的主要卖点就在于用简明的网页前端代替了手工操作,但那毕竟不是万能的。出于配置和维护等目的,我们仍然需要不时通过SSH连接到服务器,直接在命令行环境下进行操作。
#安装WordPressyunohostappinstallwordpress#允许用户jonedoe访问SSHyunohostuserpermissionaddsshjohndoe#为your.domain.tld域名安装证书yunohostdomaincert-installyour.domain.tld更具体的用法可以用manyunohost或在特定子命令之后附加--help参数查阅。
尽管优点鲜明,YunoHost也不是没有缺点。
首先,作为一个自托管服务的框架,YunoHost的友好和易用是有边界的——仅限于它自成一体的「方法论」之内。尽管并没有明确不兼容的软件,但由于YunoHost会对系统的权限管理和配置方式作大量「自行其是」的调整(其中有些调整是否合理还是可以商榷的),想要跳脱出它的框架安装别的软件,往往就要费一番周折。
此外,YunoHost底层的Debian是一个以稳定为第一要务的系统,软件的更新往往大幅滞后于上游,这决定了它不太适合处理服务器功能以外的日常桌面工作。
由于上述因素,如果使用YunoHost,就要做好将一台机器完全「奉献」给它的准备;这也是YunoHost相比于Docker这类容器方案的劣势所在。
最后,尽管自托管和开源总体而言是值得提倡的,但也不应该一股脑地把惯用的工具都换成自托管版本。