summaryrefslogtreecommitdiff
path: root/doc/Design.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/Design.md')
-rw-r--r--doc/Design.md42
1 files changed, 39 insertions, 3 deletions
diff --git a/doc/Design.md b/doc/Design.md
index a588d39..0b2d443 100644
--- a/doc/Design.md
+++ b/doc/Design.md
@@ -28,18 +28,21 @@
```text
content/*.md ─┐
-templates/* ──┼─> Zola ─> public/ ─> 静的配信
+templates/* ──┼─> Zola ─> public/ ─> deploy.ps1 ─> VPS releases/ ─> current
sass/*.scss ──┤
static/* ─────┘
```
-ZolaがSection、Page、Taxonomyを解決し、TeraでHTMLを生成する。SCSSは`main.css`へコンパイルし、`static/`とPage Bundle内のassetを出力へコピーする。公開環境は`public/`の内容だけで成立する。
+ZolaがSection、Page、Taxonomyを解決し、TeraでHTMLを生成する。SCSSは`main.css`へコンパイルし、`static/`とPage Bundle内のassetを出力へコピーする。公開環境は`public/`の内容だけで成立し、VPSで再ビルドしない。
## 3. リポジトリ構造
```text
.
├── zola.toml
+├── deploy.ps1
+├── deploy.config.example.psd1
+├── deploy.config.psd1 # local only
├── content/
│ ├── _index.md
│ ├── about.md
@@ -83,6 +86,8 @@ ZolaがSection、Page、Taxonomyを解決し、TeraでHTMLを生成する。SCSS
| `themes/` | 外部themeを導入せず空で保持する。 |
| `public/` | ビルド生成物。Git管理対象外とする。 |
+`deploy.config.psd1`は環境固有値を含むためGit管理対象外とし、構造だけを示す`deploy.config.example.psd1`を管理する。
+
## 4. Zola設定
設定の完全な値と各項目の説明は`zola.toml`を正とする。本節では、サイト構造に影響する設定をまとめる。
@@ -467,6 +472,7 @@ Markdownの @/ 内部リンク
| 開発表示 | `zola serve` |
| 構造・link検証 | `zola check` |
| 生成 | `zola build` |
+| 本番deploy | `.\deploy.ps1` |
### 14.2 必須検証
@@ -482,10 +488,40 @@ Markdownの @/ 内部リンク
| Security | inline script、inline event handler、外部CDN参照がない。 |
| Responsive | Header、一覧、Software metadata、Footerが各breakpointで崩れない。 |
| Accessibility | skip link、focus、現在地、見出し順、theme buttonを確認する。 |
+| Deploy script | PowerShell構文、設定欠落・不正値のnon-zero終了、archive直下の`index.html`を確認する。 |
### 14.3 配信境界
-本リポジトリの責務は`public/`の生成までとする。VPS、Caddy、TLS、cache、CSP header、deploy scriptは外部の配信環境で管理し、本設計の対象外とする。
+サイト生成処理の責務は`public/`までとする。`deploy.ps1`は生成物を既設VPSへ転送し、既存のrelease構造へ配置する外部配信操作を自動化するが、VPS上でZolaやGitを実行しない。
+
+| 項目 | 設計 |
+|---|---|
+| 設定読込 | rootの`deploy.config.psd1`を`Import-PowerShellDataFile`で自動読込する。command line引数は使用しない。 |
+| 接続 | 設定内の`DeployHost`と`DeployUser`をWindows OpenSSHの`ssh`/`scp`へ渡す。 |
+| 認証 | `IdentityFile`が空ならOpenSSH標準key探索を使用し、値があれば指定fileを使用する。 |
+| Remote base | 設定内の`RemoteBase`を使用し、誤操作防止のため`/srv/www/`配下だけを許可する。 |
+| 転送単位 | `public/`の中身だけを含む一時`tar.gz`。 |
+| Release ID | ローカル時刻の`yyyyMMdd-HHmmss`。 |
+| Remote release | `<RemoteBase>/releases/<release-id>/` |
+| 公開切替 | `current.new`を作り、`mv -Tf current.new current`でatomicに置換する。 |
+| Cleanup | local/remote archive、失敗時の`current.new`と新規作成releaseを削除する。 |
+| 保持 | 過去releaseを削除せず、手動rollbackに利用できる状態を保つ。 |
+
+設定fileのschemaは次のとおりである。
+
+| Key | 必須 | 内容 |
+|---|---:|---|
+| `DeployHost` | Yes | SSH host名またはSSH config alias |
+| `DeployUser` | Yes | deploy専用Unix user |
+| `RemoteBase` | Yes | `/srv/www/`配下の公開base |
+| `IdentityFile` | Yes | 空文字列またはSSH identity file path |
+| `SiteUrl` | Yes | 成功時に表示するHTTPS URL |
+
+初回だけ`deploy.config.example.psd1`を`deploy.config.psd1`へコピーして実値を設定する。以後は`.\deploy.ps1`だけで実行する。実設定は`.gitignore`によりcommitしない。
+
+切替前にlocalとremote双方の`index.html`を確認する。既存releaseが同名の場合は失敗させ、上書きしない。`zola check`、`zola build`、archive作成、転送、展開のいずれかが失敗した場合はnon-zeroで終了する。
+
+VPS、Caddy、TLS、Unix user、filesystem権限、cache、CSP headerの構築と変更は本リポジトリの対象外である。`deploy.ps1`はsudo、Caddy reload、`git pull`、remote buildを行わない。実VPSへの実行は明示的な運用操作として扱う。
## 15. 仕様との対応