内容管理是一个非常有意见的话题,每个人都有自己喜欢的平台。Statamic是一个非常棒的内容管理包,你可以添加到你的Laravel应用程序中。
在本教程中, 我将向你展示如何从一个新的Statamic网站开始,并把它从一个博客的想法,作为一个静态网站部署到数字海洋使用基础设施作为代码。因此,你可以坐下来,放松,并轻松地进行部署。
我将介绍如何创建一个新的Statamic网站,但你可以将其添加到任何Laravel应用程序,你可能已经有。
安装Statamic网站的最好方法是使用他们的CLI工具,所以运行下面的命令来安装这个全球CLI工具。
composer global require statamic/cli
一旦安装,你可以运行statamic ,以确保它正常工作。我们将使用其中的一个启动包建立一个基本的博客,因为它可以加快整个过程的速度。要开始,打开你的终端,并导航到你希望这个项目所在的目录。运行下面的控制台命令来创建你的新statamic博客。
statamic new blog
在这一点上,你会被问到,你是否想从一个空白的网站开始,或者你是否想使用一个启动套件。我强烈建议你在这里考虑使用启动工具包--因为statamic社区已经创建了一些很棒的资源,你可以使用。我将在本教程中使用Starter's Creek,一个使用tailwindcss的博客启动器。
一旦安装,你会被要求创建一个管理用户。这将是一个你希望能够访问控制面板和管理网站本身的用户。这些凭证以YAML形式存储在你的项目中的磁盘上,但密码本身将被散列。
取决于你在本地使用什么来运行你的PHP应用程序,你现在可以运行网站并浏览启动包中的示例内容了。
如果我们看一下目录结构,我们可以看到我们有几个不熟悉的目录。在我们项目的根部,我们将看到一个名为content 的目录,那里将存放我们网站的配置选项和实际内容。Statamic是一个平面优先的CMS,使用平面文件来存储你的内容。有一些选项可以将其转移到数据库驱动的内容管理系统上--而且文档很好地告诉你需要采取哪些步骤。
然而,我们不会这样做,因为我们想专注于部署一个静态网站到Digital Oceans App Platform。
在content ,我们有collections ,这就是我们的内容。在Statamic中,我们有按类型组织的内容集合--页面和博客是我的入门套件。如果你打开你的入门套件中的任何例子条目,你会看到markdown内容,但不是你习惯看到的那样。Statamic使用它的编辑器来创建和保存你的数据,变成你一开始可能难以理解的东西。然而,如果你检查这些内容,你会发现它分解了每个创建的dom元素,并设置了类型和内容。这样,当它被渲染时,可以很容易地更新和改变类型,例如,将一个段落更新为一个标题。
如果我们看一下resource/views 目录里面,我们会看到文件的扩展名与我们在Laravel中习惯的不同。Statamic有它的模板引擎,叫做antlers,相对来说比较容易学习--但是从第三版开始,就支持在Statamic中使用Blade了。你可以通过阅读文档来了解如何实现这一点,或者Spatie已经创建了一个Blade入门套件,你可以使用。
你可以在这里编辑几乎所有的视图,但要注意,在你了解它们的用途之前,不要删除这些东西。要适应鹿角的模板设计需要一点时间,但一旦你习惯了它--你会学会喜欢它的简单性。
为了有效地工作,我们还需要安装一个包,把我们的Statamic网站变成一个静态网站。运行下面的命令来安装这个包。
composer require statamic/ssg
这将安装该包并发布配置文件。你可以在这个配置文件中对静态网站的构建进行一些定制。然而,默认的配置对这个项目是有效的。我们的网站现在将能够作为一个静态网站来构建,这意味着我们可以研究部署。
既然我们有了要部署的 "网站",我们就可以开始考虑如何把它放到Digital Ocean上。在Digital Ocean上托管这样一个静态网站的最佳选择是使用他们的应用平台。它将允许你连接一个 repo,提供你可能需要的任何环境变量,并描述创建静态网站所需的构建步骤。
将此视为自动化CI/CD管道的一种有用方式。我们将有自动部署,因为我们使用的是App Platform。但与此同时,我们也将使用代码构建我们的基础设施。因此,如果我们有一天想为我们的内容切换到数据库驱动,我们可以改变配置--重新运行设置过程,然后再次部署。我们不需要登录到我们的云供应商。我们所要做的就是重新配置和运行。
让我们先来看看在基础设施即代码方面有哪些选择。Terraform可能是最著名的,对大多数云供应商都有很好的支持。最大的问题是学习如何编写terraform脚本。接下来是Ansible,传统上它更像是一个IT自动化工具,并具有管理基础设施的能力。现在有很多这样的工具,每一个都有其优点和缺点。本教程的重点是Pulumi,它允许我们与大多数云供应商合作,并以我们可能更熟悉的语言编写我们的基础设施。
到目前为止,我们有一个相对标准的Laravel应用结构,在Statamic中增加了一些管理内容的部分。我们将在我们项目的根目录下创建一个新的目录,名为devops ,我们所有的Pulumi代码都在这里。
在你的终端上打开这个新的devops 目录,因为这是我们现在要花很多时间的地方。在这一点上,你需要安装Pulumi,如果你是在Mac上,这只是一个简单的brew命令。
brew install pulumi
然而,如果你不是mac用户,文档中有关于在你的机器上安装它的出色说明。
一旦你安装了Pulumi,并且在你的devops 目录中,我们就可以把这个项目初始化为一个Pulumi项目。为此,我们将使用TypeScript作为配置基础设施的语言--因为目前还不支持PHP。运行下面的控制台命令来启动这个项目。
pulumi new typescript
该命令将要求你输入Pulumi的API令牌,因为你需要一个账户来使用它。他们有一个很好的免费层,对于大多数这样的网站,你不太可能用完免费的部署。
然后,该命令将要求你输入你的项目名称和描述,并命名这个堆栈。堆栈是一种设计基础设施的一致方式,所以如果你在许多项目中使用类似的设置,你可以使用一个预定义的堆栈来部署。
一旦运行,它将安装所需的依赖项,你就可以开始了。
让我们打开Pulumi为我们创建的index.ts 。
import * as pulumi from "@pulumi/pulumi";
这是一个很好的起点,让我们开始设计我们的基础设施,所以让我们开始吧。
我们首先需要安装一个节点模块,使我们能够在数字海洋中使用pulumi。你可以用这个来安装。
npm install @pulumi/digitalocean
现在我们可以回去看一下我们的基础设施。
import * as pulumi from "@pulumi/pulumi";
import * as digitalocean from "@pulumi/digitalocean";
const statamic = new digitalocean.App("statamic-website", {
spec: {
name: "statamic-website",
region: "lon1",
staticSites: [{
buildCommand: "composer install --prefer-dist --optimize-autoloader && php please cach:clear && npm ci && npm run production && php please ssg:generate",
git: {
branch: "main",
repoCloneUrl: "https://github.com/juststeveking/website.git",
},
name: "statamic-website",
outputDir: "storage/app/static",
}],
}
});
我们正在创建一个新的Digital Ocean应用程序,并告诉它我们要如何在他们的平台上建立和存储这个的规格。包括构建命令和输出目录。我们还让他们知道回购的URL,这样如果我们通过GitHub推送更新,它就可以很容易地被克隆和重新部署了。
让我们看看如果我们部署这个,可能会是什么样子,因为Pulumi有一个很好的命令来预览我们即将构建和使用的基础设施。
pulumi preview
这应该会给你一个像下面这样的输出。
Previewing update (do-static)
View Live: https://app.pulumi.com/JustSteveKing/devops/do-static/previews/5a4fc21d-ac2c-484a-9e35-bbaf527a9975
Type Name Plan
+ pulumi:pulumi:Stack devops-do-static create
+ └─ digitalocean:index:App statamic-website create
Resources:
+ 2 to create
从这个输出中我们知道,我们将创建两个资源,一个是Oulumi上的堆栈,一个是数字海洋上的静态网站。为了使我们能够做到这一点,我们将需要进入我们的数字海洋账户,并生成一个API令牌,以便Pulumi能够创建和设置我们的基础设施。
用Pulumi CLI来设置这个。
pulumi config set digitalocean:token api-token-here --secret
下一步是确保Digital Ocean可以访问我们的GitHub仓库。你可以从Digital Ocean应用平台控制台内完成这项工作。
最后,一旦所有的服务都连接好了,你就可以运行一个命令,你的基础设施--有了git连接,就可以启动和运行了。
pulumi up
这将检查有哪些变化需要应用,然后你可以确认是否要创建新资源。然后,一旦批准,你的资源将被创建--你的网站将被激活
这就是你如何在不离开IDE的情况下从想法到博客再到上线的过程。