diff options
Diffstat (limited to 'doc/Design.md')
| -rw-r--r-- | doc/Design.md | 42 |
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. 仕様との対応 |
