InSnh-Gd

InSnh-Gd 的小空间

Shiro 本地部署ノート

前言#

始める前に、なぜ Kami から Shiro に移行することにしたのかをお話しします。--> 無駄話をスキップする

まず、kami は長い間メンテナンスされておらず、その後 Mix Space の一部の更新が Kami の機能を壊しました。もし私が「kami の固定ユーザー」であり続けるなら、古い Mix Space バージョンを使い続けなければなりません。

  • なぜ Kami のメンテナンスが終了するのを待たずに今 Shiro を使うことにしたのか?

    一つは、初期の Shiro にメモリリークのバグがあったため(正確には next.js に)、ローカルデプロイではメモリがいっぱいになってクラッシュすることが多かったからです。Vercel にデプロイするよりも、自分のサーバーに個人ブログをデプロイする方が好みです。
    二つ目は、Kami の「さわやかさ」が好きだったからです。Shiro も素晴らしいですが、Kami に比べて多くの面で大きな進歩がありますが、デザインの一部があまり好きではありません(逃)。

  • なぜ自分で Kami をメンテナンスしないのか?

    その能力があれば、自分でフロントエンドを開発しているでしょう -_- もしかしたら、1 年、2 年、何年後かに、十分な能力を持ったら Kami に戻るか、あるいは自分のブログのフロントエンドを開発しているかもしれません。

簡単に話したので、本文に入るべきです。


正文#

Shiro の開発者(Innei)が提案したように、Shiro は Vercel でデプロイするのが最適です。ローカルデプロイでは自力でやるしかありません。今日(2024 年 1 月 18 日)時点で、ローカルデプロイの Shiro が他の問題を引き起こさないかは不明です。

事前準備#

ローカルデプロイですが、ログイン用に Clerk を設定する必要があります。

Clerk の設定については Shiro のドキュメントを参照するのが良いです:https://mx-space.js.org/themes/shiro#%E6%89%93%E5%BC%80-clerk-%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE

以下では、NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYpk_test_aaaaaaaaaaaaaaaaaxxxxxx と仮定します。

裸機デプロイ#

ここでは簡単に記録します。以前に Mix Space をデプロイしており、最終的にはメモリリークを防ぐために Docker で Shiro をデプロイすることにしました。

私のサーバー環境:Arch Linux

image.png

理論的には、Linux カーネルバージョン >= 4.19 のサーバーで Mix Space と Shiro をデプロイできます。

必要な依存関係:Node.js, MongoDB, Redis, pnpm, pm2


プロジェクトのクローン#

git clone https://github.com/Innei/Shiro

依存関係の取得とコンパイル#

依存関係をインストールします。

cd Shiro
pnpm install

ENV の設定を忘れないでください。

.env ファイルを編集します。以下のように:

NEXT_PUBLIC_API_URL=http://127.0.0.1:2333/api/v2
NEXT_PUBLIC_GATEWAY_URL=http://127.0.0.1:2333/
NEXT_PUBLIC_API_URL=https://blog.insnhgd.com/api/v2
NEXT_PUBLIC_GATEWAY_URL=https://blog.insnhgd.com

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_aaaaaaaaaaaaaaaaaxxxxxx

## Clerk
CLERK_SECRET_KEY=sk_test_***************

NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/

OPENAI_API_KEY=

TMDB_API_KEY=

NEXT_PUBLIC_API_URLNEXT_PUBLIC_GATEWAY_URLNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY を実際に使用しているものに置き換えます。

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY は Clerk から取得します。


ビルド

pnpm build

テーマ設定#

完了したら、Mix Space でテーマ設定を行う必要があります。

Mix Space に入り、「設定とクラウド関数」ページで設定を追加します。

image.png

名前:shiro

引用:theme

データタイプ:JSON

データ(私が実際に使用しているもの):

{
  "footer": {
    "otherInfo": {
      "date": "2023-{{now}}"
    },
    "linkSections": [
      {
        "name": "について",
        "links": [
          {
            "name": "このサイトについて",
            "href": "/about-site"
          },
          {
            "name": "私について",
            "href": "/about-me"
          },
          {
            "name": "このプロジェクトについて",
            "href": "https://github.com/innei/Shiro",
            "external": true
          }
        ]
      },
      {
        "name": "もっと",
        "links": [
          {
            "name": "タイムライン",
            "href": "/timeline"
          },
          {
            "name": "友達リンク",
            "href": "/friends"
          }
        ]
      },
      {
        "name": "連絡",
        "links": [
          {
            "name": "メッセージを書く",
            "href": "/message"
          },
          {
            "name": "メールを送る",
            "href": "mailto:insnh-gd@qq.com",
            "external": true
          },
          {
            "name": "GitHub",
            "href": "https://github.com/insnh-gd",
            "external": true
          }
        ]
      }
    ]
  },
  "config": {
    "site": {
      "favicon": "https://pic.insnhgd.com/images/2023/06/28/favicon.svg"
    },
    "custom": {
      "scripts": null,
      "styles": null
    },
    "hero": {
      "title": {
        "template": [
          {
            "type": "h1",
            "text": "こんにちは、私は ",
            "class": "font-light text-4xl"
          },
          {
            "type": "h1",
            "text": "嘤特尔",
            "class": "font-medium mx-2 text-4xl"
          },
          {
            "type": "h1",
            "text": "👋。",
            "class": "font-light text-4xl"
          },
          {
            "type": "br"
          },
          {
            "type": "h1",
            "text": "一人前の初心者運営者",
            "class": "font-light text-4xl"
          },
          {
            "type": "code",
            "text": "<Dev & Ops/>",
            "class": "font-medium mx-2 text-3xl rounded p-1 bg-gray-200 dark:bg-gray-800/0 hover:dark:bg-gray-800/100 bg-opacity-0 hover:bg-opacity-100 transition-background duration-200"
          },
          {
            "type": "span",
            "class": "inline-block w-[1px] h-8 -bottom-2 relative bg-gray-800/80 dark:bg-gray-200/80 opacity-0 group-hover:opacity-100 transition-opacity duration-200 group-hover:animation-blink"
          }
        ]
      },
      "description": "Web 開発を学んでいる人"
    },
    "module": {
      "bilibili": {
        "liveId": 689348740
      },
      "activity": {
        "enable": true,
        "endpoint": "/fn/ps/update"
      }
    }
  }
}

起動!#

pm2 ツールを使って Shiro プロセスを実行および管理します。

pm2 start

問題がなければ、https:///2323 で Shiro を確認できるはずです。

image7e5b28bdaaec1f9a.png

Docker デプロイ#

Docker デプロイはさらに便利ですが、イメージを構築する際には Shiro を構築する必要があります。

::: info
ここでは docker-compose を使用して Docker イメージを構築します。
:::

プロジェクトのクローン#

git clone https://github.com/Innei/Shiro

ENV の設定#

Docker デプロイなので、docker-compose.yml または Dockerfile を変更します。

docker-compose.yml の例:

version: "3"

services:
  shiro:
    container_name: shiro
    build:
      context: .
      args:
        - BASE_URL=https://blog.insnhgd.com
        - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_aaaaaaaaaaaaaaaaaxxxxxx
        - CLERK_SECRET_KEY=sk_test_***************
    restart: always
    ports:
      - 2323:2323

BASE_URLNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY を実際に使用しているものに置き換えます。

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY は Clerk から取得します。


イメージの構築#

docker-compose build

起動!#

構築が成功すると、「shiro」という名前の Docker コンテナが自動的に作成されます。

docker-compose up -d

問題がなければ、https:///2323 で Shiro を確認でき、"shiro" コンテナは自動的に起動します(Docker サービスを enable している場合)。


これでこの程度の内容を書いておきます。フロントエンドのリバースプロキシなどの設定については、Mix Space のドキュメントを参照してください:https://mx-space.js.org/docs/extra で大丈夫です。お読みいただきありがとうございます。

この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://blog.insnhgd.com/posts/build/4

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。