[{"data":1,"prerenderedAt":940},["ShallowReactive",2],{"/blog/misskey-docker/":3,"related-map":550,"/blog/misskey-docker-surround":935},{"id":4,"title":5,"body":6,"category":534,"coverImage":535,"date":536,"description":537,"draft":538,"extension":539,"meta":540,"navigation":541,"path":542,"rawbody":543,"seo":544,"stem":545,"tags":546,"__hash__":549},"blog/blog/misskey-docker/index.md","Cloudflare tunnelで作るMisskey自鯖",{"type":7,"value":8,"toc":511},"minimark",[9,16,20,31,34,37,58,61,64,87,90,97,105,108,116,123,126,129,132,137,147,150,156,159,163,166,172,175,181,184,190,193,199,202,208,211,217,220,226,230,238,241,246,252,255,258,263,266,271,282,285,288,291,297,300,303,309,323,330,341,347,354,357,370,376,379,388,394,397,403,409,415,420,423,425,428,431,434,439,446,449,452,458,461,466,469,478,481,485,488,495,498,501,504],[10,11,12],"alert",{},[13,14,15],"p",{},"この記事は一部内容が古い可能性があります。（特にCloudflare tunnel周りは常にドキュメントを読んで最新の情報を元に構築してください。）",[17,18,19],"h2",{"id":19},"概要",[13,21,22,23,30],{},"タイトル通りです。言っちゃえばMisskey公式ドキュメントの",[24,25,29],"a",{"href":26,"rel":27},"https://misskey-hub.net/ja/docs/for-admin/install/guides/docker/",[28],"nofollow","「Docker Composeを使ったMisskey構築」のページ","をなぞりつつ、僕が詰まった箇所を少し解説するだけなので、公式ドキュメントを読める人はこの記事を読む必要はないと思います。自鯖を動かすうえで絶対に必要な部分だけを解説します。",[13,32,33],{},"外部公開にはCloudflare tunnelを使います。公式ドキュメントではNginxを使っているはずだからそこだけ異なってるかも。",[17,35,36],{"id":36},"前提",[38,39,40,44,52,55],"ul",{},[41,42,43],"li",{},"筆者は非エンジニア",[41,45,46,47,51],{},"サーバーのOSは",[48,49,50],"code",{},"Ubuntu Server 22.04 LTS","を使った",[41,53,54],{},"Cloudflareでドメインを取得している",[41,56,57],{},"コピペができる",[17,59,60],{"id":60},"やってみよう",[13,62,63],{},"ステップを大まかに分けると、",[38,65,66,69,72,75,78,81,84],{},[41,67,68],{},"Misskeyを動かすサーバーの用意",[41,70,71],{},"Git, Docker, Cloudflaredとかのインストール",[41,73,74],{},"Cloudflare tunnelの作成",[41,76,77],{},"Misskeyのリポジトリ取得",[41,79,80],{},"Configいじり",[41,82,83],{},"Dockerコンテナの準備",[41,85,86],{},"初期設定",[13,88,89],{},"という感じです。下3つは解説通りにやればいいだけなので、一番難易度が高いのはMisskeyを動かすサーバーの用意な気はします。とはいっても、Xserverさんとかがサーバーを安価で提供してくれるので、そういったものを使えば解決するかな？",[13,91,92],{},[93,94],"img",{"alt":95,"src":96},"料金","https://images.bokukoha.dev/blog/misskey-docker/1.jpg",[13,98,99,100],{},"参考 :　",[24,101,104],{"href":102,"rel":103},"https://sns.xserver.ne.jp/misskey.php",[28],"XserverのMisskey料金ページ",[13,106,107],{},"サーバーについてはXserverや自宅サーバーを組んで解決したものとして次のステップから解説を続けます。",[13,109,110,111],{},"参考 : 　",[24,112,115],{"href":113,"rel":114},"https://blog.bokukoha.dev/p/3%E4%B8%87%E5%86%86%E3%81%8F%E3%82%89%E3%81%84%E3%81%A7%E4%BD%9C%E3%82%8B%E8%87%AA%E5%AE%85%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/",[28],"3万円で作る自宅サーバー",[13,117,118,119,122],{},"ドメインは",[48,120,121],{},".dev","で年間2000円くらいです。別に持ってて損するわけでもないし、せっかく外部公開するならドメインは合った方が良いという話。",[17,124,71],{"id":125},"git-docker-cloudflaredとかのインストール",[13,127,128],{},"何をどう頑張っても必要になるのでインストールします。尚、インストールコマンドなどは前提にあるようにUbuntu基準で記述するので、各自の環境に合わせてください。",[13,130,131],{},"GitもDockerもCloudflaredも、全部WindowsからLinuxまで広く対応しているので、導入はできるはずです。",[133,134,136],"h3",{"id":135},"gitのインストール","Gitのインストール",[138,139,144],"pre",{"className":140,"code":142,"language":143},[141],"language-text","sudo apt update\nsudo apt -y install git\n","text",[48,145,142],{"__ignoreMap":146},"",[13,148,149],{},"を実行してgitをインストールします。",[138,151,154],{"className":152,"code":153,"language":143},[141],"git --version\n",[48,155,153],{"__ignoreMap":146},[13,157,158],{},"で、バージョンが出力されることを一応確認してください。",[133,160,162],{"id":161},"dockerのインストール","Dockerのインストール",[13,164,165],{},"Dockerのインストールに必要なパッケージをインストールします。",[138,167,170],{"className":168,"code":169,"language":143},[141],"sudo apt update\nsudo apt install -y ca-certificates curl gnupg lsb-release\n",[48,171,169],{"__ignoreMap":146},[13,173,174],{},"Docker公式のリポジトリを追加します。",[138,176,179],{"className":177,"code":178,"language":143},[141],"curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\necho \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n",[48,180,178],{"__ignoreMap":146},[13,182,183],{},"Docker EngineとDocker CLIをインストールします。",[138,185,188],{"className":186,"code":187,"language":143},[141],"sudo apt update\nsudo apt install -y docker-ce docker-ce-cli containerd.io\n",[48,189,187],{"__ignoreMap":146},[13,191,192],{},"Dockerがインストールされているか確認します。出力が得られればOK。",[138,194,197],{"className":195,"code":196,"language":143},[141],"sudo docker --version\n",[48,198,196],{"__ignoreMap":146},[13,200,201],{},"Docker Composeをインストールします。",[138,203,206],{"className":204,"code":205,"language":143},[141],"DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d '\"' -f 4)\nsudo curl -L \"https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose\n",[48,207,205],{"__ignoreMap":146},[13,209,210],{},"スクリプトの実行権限を付与します。",[138,212,215],{"className":213,"code":214,"language":143},[141],"sudo chmod +x /usr/local/bin/docker-compose\n",[48,216,214],{"__ignoreMap":146},[13,218,219],{},"Docker composeのインストールを確認します。こちらも出力が得られればOK。",[138,221,224],{"className":222,"code":223,"language":143},[141],"docker-compose --version\n",[48,225,223],{"__ignoreMap":146},[133,227,229],{"id":228},"cloudflaredのインストール","Cloudflaredのインストール",[13,231,232,237],{},[24,233,236],{"href":234,"rel":235},"https://one.dash.cloudflare.com/",[28],"Cloudflareのダッシュボード","にアクセスし、ネットワーク>Tunnelsから、トンネルを作成します。",[13,239,240],{},"環境の選択から、今回の場合はUbuntuなのでDebianの64bitを選択し、下に表示されたコマンドをコピペして実行します。",[13,242,243],{},[93,244],{"alt":146,"src":245},"https://images.bokukoha.dev/blog/misskey-docker/3.jpg",[13,247,248],{},[93,249],{"alt":250,"src":251},"これをコピペすればOK。黒塗りの部分はトークンなので各自異なっているはず。","https://images.bokukoha.dev/blog/misskey-docker/8.jpg",[17,253,74],{"id":254},"cloudflare-tunnelの作成",[13,256,257],{},"パブリックホスト名タブから、「追加する」をクリックします。",[13,259,260],{},[93,261],{"alt":146,"src":262},"https://images.bokukoha.dev/blog/misskey-docker/4.jpg",[13,264,265],{},"サブドメイン、ドメインに自分が決めたドメインを入力します。サービスのタイプはHTTP、URLはdockerを実行しているサーバーのローカルIPアドレス（例: 192.168.1.100など）にmisskeyのポートを指定したものを入力します。",[13,267,268],{},[93,269],{"alt":146,"src":270},"https://images.bokukoha.dev/blog/misskey-docker/5.jpg",[13,272,273,274,277,278,281],{},"デフォルトだとmisskeyのポートは3000なので、ローカルIPが",[48,275,276],{},"192.168.1.100","なら、URLには",[48,279,280],{},"192.168.1.100:3000","と入力すればOK。",[17,283,77],{"id":284},"misskeyのリポジトリ取得",[13,286,287],{},"いよいよMisskey本体のインストール作業です。rootディレクトリなど、misskeyのフォルダを置いておきたいディレクトリ内で実行してください。デフォルトだとログインしているユーザーのフォルダ内のはず。",[13,289,290],{},"以下コマンドでgithubからリポジトリを取得し、中身が間違っていないか確認します。",[138,292,295],{"className":293,"code":294,"language":143},[141],"git clone -b master https://github.com/misskey-dev/misskey.git\ncd misskey\ngit checkout master\n",[48,296,294],{"__ignoreMap":146},[17,298,80],{"id":299},"configいじり",[13,301,302],{},"これらを実行し、各種初期設定ファイルのサンプルを本番用としてコピーします。",[138,304,307],{"className":305,"code":306,"language":143},[141],"cp .config/docker_example.yml .config/default.yml\ncp .config/docker_example.env .config/docker.env\ncp ./compose_example.yml ./compose.yml\n",[48,308,306],{"__ignoreMap":146},[13,310,311,314,315,318,319,322],{},[48,312,313],{},"./misskey/.config","内で",[48,316,317],{},"default.yml","と必要に応じて",[48,320,321],{},"docker.env","を編集します。",[38,324,325],{},[41,326,327,329],{},[48,328,317],{},"内で絶対に変更する箇所",[13,331,332,333,336,337,340],{},"恐らく一番上にあるであろう",[48,334,335],{},"url:","の部分。ここは、自分が建てるmisskeyサーバーのURLを入力してください。最終的に公開するURLを",[48,338,339],{},"misskey.example.com","にするなら、以下のようになるはず。",[138,342,345],{"className":343,"code":344,"language":143},[141],"# Final accessible URL seen by a user.\n# You can set url from an environment variable instead.\nurl: https://misskey.example.com/\n",[48,346,344],{"__ignoreMap":146},[38,348,349],{},[41,350,351,353],{},[48,352,321],{},"の編集",[13,355,356],{},"基本的にここでいじる可能性があるのは、データベースの名前、ユーザー名とパスワードだと思います。",[13,358,359,360,362,363,366,367,369],{},"Misskeyを動かすだけなら編集は必須ではありませんが、いずれかを変更した場合は",[48,361,317],{},"内、以下例の",[48,364,365],{},"Database","から始まる三要素を",[48,368,321],{},"の内容に合わせることを忘れないでください。",[138,371,374],{"className":372,"code":373,"language":143},[141],"  # Database name\n  # You can set db from an environment variable instead.\n  db: DatabaseName\n\n  # Auth\n  # You can set user and pass from environment variables instead.\n  user: DatabaseUser\n  pass: DatabasePassword\n",[48,375,373],{"__ignoreMap":146},[17,377,83],{"id":378},"dockerコンテナの準備",[13,380,381,382,384,385,387],{},"下記コマンドを実行してMisskeyのビルドとデータベースの初期化をします。5分くらいかかるので、お手洗いにでも行きましょう。筆者は",[48,383,321],{},"と",[48,386,317],{},"の内容を合わせるのを忘れて、ここでエラーが起きました。",[138,389,392],{"className":390,"code":391,"language":143},[141],"sudo docker compose build\nsudo docker compose run --rm web pnpm run init\n",[48,393,391],{"__ignoreMap":146},[13,395,396],{},"上記作業が終わったことが確認出来たら、次のコマンドでMisskeyを実行できます。",[138,398,401],{"className":399,"code":400,"language":143},[141],"sudo docker compose up -d\n",[48,402,400],{"__ignoreMap":146},[13,404,405,406,408],{},"configで設定したアドレス、もといCloudflare tunnelで設定したアドレス（例 : ",[48,407,339],{},"）に接続して初期設定画面が表示されることを確認しましょう。",[13,410,411],{},[93,412],{"alt":413,"src":414},"こんな感じの画面が出たらOK","https://images.bokukoha.dev/blog/misskey-docker/2.jpg",[10,416,417],{},[13,418,419],{},"管理者アカウント作成前にこの画面をSNS等に投稿しないでください。初期設定用パスワードを設定していない状態では、他人に管理者アカウントを勝手に作成されるリスクがあります。",[13,421,422],{},"今回は初期設定開始用パスワードは特に設定していないので、空白のまま管理用アカウントのユーザー名とパスワードを新規作成してあげればOKです。",[17,424,86],{"id":86},[13,426,427],{},"管理者用アカウントやロール設定については調べて解決してくれとしかいうことがないので置いておきます。ここでは、Docker環境でMisskeyを実行することによって起きるエラーの解決方法を備忘録として載せておきます。",[13,429,430],{},"それと、その他の初期設定について役立ちそうなことも載せておきます。",[133,432,433],{"id":433},"エラー内容",[13,435,436],{},[93,437],{"alt":146,"src":438},"https://images.bokukoha.dev/blog/misskey-docker/6.jpg",[13,440,441,442,445],{},"こんな感じで、アイコンやバナー、通常ノートで画像をMisskeyにアップロードしようとすると",[48,443,444],{},"INTERNAL_ERROR","が起きてしまう問題を解決します。",[13,447,448],{},"このエラーの原因はDockerのコンテナが、コンテナ外の./misskey/filesにアクセスする権限がないせいで起きるものなので、フォルダへのアクセス権限を与えてやれば解決します。",[13,450,451],{},"misskeyディレクトリ内、Dockerコンテナ外で以下コマンドを実行するだけでOKです。",[138,453,456],{"className":454,"code":455,"language":143},[141],"chown -hR 991.991 ./files\n",[48,457,455],{"__ignoreMap":146},[133,459,460],{"id":460},"サーバーのアイコンとか",[13,462,463],{},[93,464],{"alt":146,"src":465},"https://images.bokukoha.dev/blog/misskey-docker/7.jpg",[13,467,468],{},"基本的にコントロールパネル>ブランディングから変更できます。ローカルの画像からパス指定ではなく、URLで画像を指定しなくてはいけないので、画像の直リンクが必要になります。",[13,470,471,472,477],{},"僕は、Google Photoにアップロードした画像をシェアリンクから直リンクに",[24,473,476],{"href":474,"rel":475},"https://www.labnol.org/embed/google/photos",[28],"変えてくれるサイト","を使ってURLを作成し、それをブランディング欄では使いました。",[13,479,480],{},"サイズみたいな注意事項はMisskey側で書いてくれているので、それに従っておけば間違いないです。",[133,482,484],{"id":483},"オブジェクトストレージバックアップの設定20260118追記","オブジェクトストレージ/バックアップの設定（2026/01/18追記）",[13,486,487],{},"オブジェクトストレージの設定方法（Cloudflare R2使用）と、misskeyのデータベースのバックアップ方法をまとめた記事を投稿しました。合わせて設定しておくことを強くおすすめします。",[13,489,490],{},[24,491,494],{"href":492,"rel":493},"https://www.bokukoha.dev/blog/misskey-setting/",[28],"記事: MisskeyのDBバックアップとオブジェクトストレージの設定方法",[17,496,497],{"id":497},"おわりに",[13,499,500],{},"あとやることと言えば照会からフォローしたい人の@ユーザー名@ホストサーバー名を入れてフォローするだけなので、特に解説することはないと思います。とにかくDockerで作るのがあまりにも簡単すぎるので、そのうち全部ローカルで構築してみたいなあとは思ったりしています。",[13,502,503],{},"できるだけわかりやすく書いたつもりですが、結局のところ自分用の文章なのでわかり辛いところがあると思います。もしこの記事を読んでMisskeyの自インスタンスの作成にチャレンジする方がいれば、わからないことは是非質問してください。わかる範囲で頑張って答えます。では、またいつか👋",[13,505,506],{},[24,507,510],{"href":508,"rel":509},"https://www.bokukoha.dev/",[28],"連絡先など",{"title":146,"searchDepth":512,"depth":512,"links":513},4,[514,516,517,518,524,525,526,527,528,533],{"id":19,"depth":515,"text":19},2,{"id":36,"depth":515,"text":36},{"id":60,"depth":515,"text":60},{"id":125,"depth":515,"text":71,"children":519},[520,522,523],{"id":135,"depth":521,"text":136},3,{"id":161,"depth":521,"text":162},{"id":228,"depth":521,"text":229},{"id":254,"depth":515,"text":74},{"id":284,"depth":515,"text":77},{"id":299,"depth":515,"text":80},{"id":378,"depth":515,"text":83},{"id":86,"depth":515,"text":86,"children":529},[530,531,532],{"id":433,"depth":521,"text":433},{"id":460,"depth":521,"text":460},{"id":483,"depth":521,"text":484},{"id":497,"depth":515,"text":497},"技術系","https://images.bokukoha.dev/blog/misskey-docker/main.jpg","2025-04-06","タイトル通りです。言っちゃえばMisskey公式ドキュメントの「Docker Composeを使ったMisskey構築」のページをなぞりつつ、僕が詰まった箇所を少し解説するだけなので、公式ドキュメントを読める人はこの記事を読む必要はないと思います。自鯖を動かすうえで絶対に必要な部分だけを解説します。",false,"md",{},true,"/blog/misskey-docker","---\ntitle: \"Cloudflare tunnelで作るMisskey自鯖\"\ndate: \"2025-04-06\"\ncategory: \"技術系\"\ntags:\n  - \"Misskey\"\n  - \"Docker\"\ncoverImage: \"https://images.bokukoha.dev/blog/misskey-docker/main.jpg\"\ndraft: false\ndescription: \"タイトル通りです。言っちゃえばMisskey公式ドキュメントの「Docker Composeを使ったMisskey構築」のページをなぞりつつ、僕が詰まった箇所を少し解説するだけなので、公式ドキュメントを読める人はこの記事を読む必要はないと思います。自鯖を動かすうえで絶対に必要な部分だけを解説します。\"\n---\n\n\n::Alert\nこの記事は一部内容が古い可能性があります。（特にCloudflare tunnel周りは常にドキュメントを読んで最新の情報を元に構築してください。）\n::\n\n\n## 概要\n\nタイトル通りです。言っちゃえばMisskey公式ドキュメントの[「Docker Composeを使ったMisskey構築」のページ](https://misskey-hub.net/ja/docs/for-admin/install/guides/docker/)をなぞりつつ、僕が詰まった箇所を少し解説するだけなので、公式ドキュメントを読める人はこの記事を読む必要はないと思います。自鯖を動かすうえで絶対に必要な部分だけを解説します。\n\n外部公開にはCloudflare tunnelを使います。公式ドキュメントではNginxを使っているはずだからそこだけ異なってるかも。\n\n## 前提\n\n- 筆者は非エンジニア\n- サーバーのOSは`Ubuntu Server 22.04 LTS`を使った\n- Cloudflareでドメインを取得している\n- コピペができる\n\n## やってみよう\n\nステップを大まかに分けると、\n\n- Misskeyを動かすサーバーの用意\n- Git, Docker, Cloudflaredとかのインストール\n- Cloudflare tunnelの作成\n- Misskeyのリポジトリ取得\n- Configいじり\n- Dockerコンテナの準備\n- 初期設定\n\nという感じです。下3つは解説通りにやればいいだけなので、一番難易度が高いのはMisskeyを動かすサーバーの用意な気はします。とはいっても、Xserverさんとかがサーバーを安価で提供してくれるので、そういったものを使えば解決するかな？\n\n![料金](https://images.bokukoha.dev/blog/misskey-docker/1.jpg)\n\n参考 :　[XserverのMisskey料金ページ](https://sns.xserver.ne.jp/misskey.php)\n\nサーバーについてはXserverや自宅サーバーを組んで解決したものとして次のステップから解説を続けます。\n\n参考 : 　[3万円で作る自宅サーバー](https://blog.bokukoha.dev/p/3%E4%B8%87%E5%86%86%E3%81%8F%E3%82%89%E3%81%84%E3%81%A7%E4%BD%9C%E3%82%8B%E8%87%AA%E5%AE%85%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC/)\n\nドメインは`.dev`で年間2000円くらいです。別に持ってて損するわけでもないし、せっかく外部公開するならドメインは合った方が良いという話。\n\n## Git, Docker, Cloudflaredとかのインストール\n\n何をどう頑張っても必要になるのでインストールします。尚、インストールコマンドなどは前提にあるようにUbuntu基準で記述するので、各自の環境に合わせてください。\n\nGitもDockerもCloudflaredも、全部WindowsからLinuxまで広く対応しているので、導入はできるはずです。\n\n### Gitのインストール\n\n```\nsudo apt update\nsudo apt -y install git\n```\n\nを実行してgitをインストールします。\n\n```\ngit --version\n```\n\nで、バージョンが出力されることを一応確認してください。\n\n### Dockerのインストール\n\nDockerのインストールに必要なパッケージをインストールします。\n\n```\nsudo apt update\nsudo apt install -y ca-certificates curl gnupg lsb-release\n```\n\nDocker公式のリポジトリを追加します。\n\n```\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\necho \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n```\n\nDocker EngineとDocker CLIをインストールします。\n\n```\nsudo apt update\nsudo apt install -y docker-ce docker-ce-cli containerd.io\n```\n\nDockerがインストールされているか確認します。出力が得られればOK。\n\n```\nsudo docker --version\n```\n\nDocker Composeをインストールします。\n\n```\nDOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d '\"' -f 4)\nsudo curl -L \"https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose\n```\n\nスクリプトの実行権限を付与します。\n\n```\nsudo chmod +x /usr/local/bin/docker-compose\n```\n\nDocker composeのインストールを確認します。こちらも出力が得られればOK。\n\n```\ndocker-compose --version\n```\n### Cloudflaredのインストール\n\n[Cloudflareのダッシュボード](https://one.dash.cloudflare.com/)にアクセスし、ネットワーク>Tunnelsから、トンネルを作成します。\n\n環境の選択から、今回の場合はUbuntuなのでDebianの64bitを選択し、下に表示されたコマンドをコピペして実行します。\n\n![](https://images.bokukoha.dev/blog/misskey-docker/3.jpg)\n\n![これをコピペすればOK。黒塗りの部分はトークンなので各自異なっているはず。](https://images.bokukoha.dev/blog/misskey-docker/8.jpg)\n\n## Cloudflare tunnelの作成\n\nパブリックホスト名タブから、「追加する」をクリックします。\n\n![](https://images.bokukoha.dev/blog/misskey-docker/4.jpg)\n\nサブドメイン、ドメインに自分が決めたドメインを入力します。サービスのタイプはHTTP、URLはdockerを実行しているサーバーのローカルIPアドレス（例: 192.168.1.100など）にmisskeyのポートを指定したものを入力します。\n\n![](https://images.bokukoha.dev/blog/misskey-docker/5.jpg)\n\nデフォルトだとmisskeyのポートは3000なので、ローカルIPが`192.168.1.100`なら、URLには`192.168.1.100:3000`と入力すればOK。\n\n## Misskeyのリポジトリ取得\n\nいよいよMisskey本体のインストール作業です。rootディレクトリなど、misskeyのフォルダを置いておきたいディレクトリ内で実行してください。デフォルトだとログインしているユーザーのフォルダ内のはず。\n\n以下コマンドでgithubからリポジトリを取得し、中身が間違っていないか確認します。\n\n```\ngit clone -b master https://github.com/misskey-dev/misskey.git\ncd misskey\ngit checkout master\n```\n\n## Configいじり\n\nこれらを実行し、各種初期設定ファイルのサンプルを本番用としてコピーします。\n\n```\ncp .config/docker_example.yml .config/default.yml\ncp .config/docker_example.env .config/docker.env\ncp ./compose_example.yml ./compose.yml\n```\n\n`./misskey/.config`内で`default.yml`と必要に応じて`docker.env`を編集します。\n\n- `default.yml`内で絶対に変更する箇所\n\n恐らく一番上にあるであろう`url:`の部分。ここは、自分が建てるmisskeyサーバーのURLを入力してください。最終的に公開するURLを`misskey.example.com`にするなら、以下のようになるはず。\n\n```\n# Final accessible URL seen by a user.\n# You can set url from an environment variable instead.\nurl: https://misskey.example.com/\n```\n\n- `docker.env`の編集\n\n基本的にここでいじる可能性があるのは、データベースの名前、ユーザー名とパスワードだと思います。\n\nMisskeyを動かすだけなら編集は必須ではありませんが、いずれかを変更した場合は`default.yml`内、以下例の`Database`から始まる三要素を`docker.env`の内容に合わせることを忘れないでください。\n\n```\n  # Database name\n  # You can set db from an environment variable instead.\n  db: DatabaseName\n\n  # Auth\n  # You can set user and pass from environment variables instead.\n  user: DatabaseUser\n  pass: DatabasePassword\n```\n\n## Dockerコンテナの準備\n\n下記コマンドを実行してMisskeyのビルドとデータベースの初期化をします。5分くらいかかるので、お手洗いにでも行きましょう。筆者は`docker.env`と`default.yml`の内容を合わせるのを忘れて、ここでエラーが起きました。\n\n```\nsudo docker compose build\nsudo docker compose run --rm web pnpm run init\n```\n\n上記作業が終わったことが確認出来たら、次のコマンドでMisskeyを実行できます。\n\n```\nsudo docker compose up -d\n```\n\nconfigで設定したアドレス、もといCloudflare tunnelで設定したアドレス（例 : `misskey.example.com`）に接続して初期設定画面が表示されることを確認しましょう。\n\n![こんな感じの画面が出たらOK](https://images.bokukoha.dev/blog/misskey-docker/2.jpg)\n\n::Alert\n管理者アカウント作成前にこの画面をSNS等に投稿しないでください。初期設定用パスワードを設定していない状態では、他人に管理者アカウントを勝手に作成されるリスクがあります。\n::\n\n今回は初期設定開始用パスワードは特に設定していないので、空白のまま管理用アカウントのユーザー名とパスワードを新規作成してあげればOKです。\n\n## 初期設定\n\n管理者用アカウントやロール設定については調べて解決してくれとしかいうことがないので置いておきます。ここでは、Docker環境でMisskeyを実行することによって起きるエラーの解決方法を備忘録として載せておきます。\n\nそれと、その他の初期設定について役立ちそうなことも載せておきます。\n\n### エラー内容\n\n![](https://images.bokukoha.dev/blog/misskey-docker/6.jpg)\n\nこんな感じで、アイコンやバナー、通常ノートで画像をMisskeyにアップロードしようとすると`INTERNAL_ERROR`が起きてしまう問題を解決します。\n\nこのエラーの原因はDockerのコンテナが、コンテナ外の./misskey/filesにアクセスする権限がないせいで起きるものなので、フォルダへのアクセス権限を与えてやれば解決します。\n\nmisskeyディレクトリ内、Dockerコンテナ外で以下コマンドを実行するだけでOKです。\n\n```\nchown -hR 991.991 ./files\n```\n\n### サーバーのアイコンとか\n\n![](https://images.bokukoha.dev/blog/misskey-docker/7.jpg)\n\n基本的にコントロールパネル>ブランディングから変更できます。ローカルの画像からパス指定ではなく、URLで画像を指定しなくてはいけないので、画像の直リンクが必要になります。\n\n僕は、Google Photoにアップロードした画像をシェアリンクから直リンクに[変えてくれるサイト](https://www.labnol.org/embed/google/photos)を使ってURLを作成し、それをブランディング欄では使いました。\n\nサイズみたいな注意事項はMisskey側で書いてくれているので、それに従っておけば間違いないです。\n\n### オブジェクトストレージ/バックアップの設定（2026/01/18追記）\n\nオブジェクトストレージの設定方法（Cloudflare R2使用）と、misskeyのデータベースのバックアップ方法をまとめた記事を投稿しました。合わせて設定しておくことを強くおすすめします。\n\n[記事: MisskeyのDBバックアップとオブジェクトストレージの設定方法](https://www.bokukoha.dev/blog/misskey-setting/)\n\n## おわりに\n\nあとやることと言えば照会からフォローしたい人の@ユーザー名@ホストサーバー名を入れてフォローするだけなので、特に解説することはないと思います。とにかくDockerで作るのがあまりにも簡単すぎるので、そのうち全部ローカルで構築してみたいなあとは思ったりしています。\n\nできるだけわかりやすく書いたつもりですが、結局のところ自分用の文章なのでわかり辛いところがあると思います。もしこの記事を読んでMisskeyの自インスタンスの作成にチャレンジする方がいれば、わからないことは是非質問してください。わかる範囲で頑張って答えます。では、またいつか👋\n\n[連絡先など](https://www.bokukoha.dev/)",{"title":5,"description":537},"blog/misskey-docker/index",[547,548],"Misskey","Docker","NSbBkl3hirmML-Zrg-pc0H5yn60VMDyKkQiZSfDYkD0",{"/blog/music-history":551,"/blog/chichibu":579,"/blog/comment-feat":605,"/blog/stop-drunk":631,"/blog/build-pc":641,"/blog/cms-dev":655,"/blog/kansai_day3to4":669,"/blog/kansai_ryokou":695,"/blog/hiroshima":705,"/blog/chokaguya":711,"/blog/yamaokaya":721,"/blog/tonalite":727,"/blog/new_year_2026":737,"/blog/year_2025":743,"/blog/pixel10":753,"/blog/gpt-to-gemini":759,"/blog/za_log":765,"/blog/misskey-setting":771,"/blog/docker-on-lxc":781,"/blog/md_components":791,"/blog/nuxt_new_site":801,"/blog/simokita_moon":807,"/blog/mc_server":817,"/blog/aws_like_button":827,"/blog/sendai":833,"/blog/taityo":839,"/blog/add-share-button":845,"/blog/aws_summit":851,"/blog/drive_nikki":857,"/blog/2025-06-12":863,"/blog/cf_build":869,"/blog/ota_sanpo":879,"/blog/nuxt_content":885,"/blog/sushi":891,"/blog/misskey-docker":897,"/blog/server-make":903,"/blog/sanpo-log":913,"/blog/hugo-blog":923,"/blog/1":929},[552,558,563,569,574],{"title":553,"path":554,"date":555,"category":556,"coverImage":557},"秩父にレズアニメの看板探しに行ったぞ！","/blog/chichibu","2026-05-30","おでかけログ","https://images.bokukoha.dev/blog/chichibu/PXL_20260529_044435415.webp",{"title":559,"path":560,"date":561,"category":534,"coverImage":562},"Hugo + Stackテーマで楽に作る個人ブログ","/blog/hugo-blog","2025-02-20","https://images.bokukoha.dev/blog/hugo-blog/main.jpg",{"title":564,"path":565,"date":566,"category":567,"coverImage":568},"超かぐや姫！を見たぞ！～オタクの感想編～","/blog/chokaguya","2026-02-26","雑記","https://images.bokukoha.dev/blog/chokaguya/main.png",{"title":570,"path":571,"date":572,"category":567,"coverImage":573},"2025年楽しかったことまとめ","/blog/year_2025","2025-12-30","https://images.bokukoha.dev/blog/year_2025/main.jpg",{"title":575,"path":576,"date":577,"category":534,"coverImage":578},"ブログにコメント機能つけたぞ！（いらない）","/blog/comment-feat","2026-05-17","https://images.bokukoha.dev/blog/test/2026051117085800_s.webp",[580,585,590,595,600],{"title":581,"path":582,"date":583,"category":556,"coverImage":584},"ムーンアートナイト下北沢に行った日記","/blog/simokita_moon","2025-10-03","https://images.bokukoha.dev/blog/simokita_moon/main.jpg",{"title":586,"path":587,"date":588,"category":534,"coverImage":589},"ClaudePro契約してCMS作ったぞ！！！","/blog/cms-dev","2026-04-09","https://images.bokukoha.dev/blog/cms-dev/PXL_20260327_034729621.jpg",{"title":591,"path":592,"date":593,"category":567,"coverImage":594},"超久しぶりにPC自作したぞ！！の雑ログ","/blog/build-pc","2026-04-10","https://images.bokukoha.dev/blog/build-pc/1716.jpg",{"title":596,"path":597,"date":598,"category":556,"coverImage":599},"スタレのスシローコラボ行ってきた","/blog/sushi","2025-04-27","https://images.bokukoha.dev/blog/sushi/main.jpg",{"title":601,"path":602,"date":603,"category":556,"coverImage":604},"海ほたるにドライブ行ってきた","/blog/drive_nikki","2025-06-16","https://images.bokukoha.dev/blog/drive_nikki/main.jpg",[606,611,616,621,626],{"title":607,"path":608,"date":609,"category":534,"coverImage":610},"Hugo + StackのブログにAWSでいいねボタン実装した","/blog/aws_like_button","2025-09-21","https://images.bokukoha.dev/blog/aws_like_button/main.jpg",{"title":612,"path":613,"date":614,"category":534,"coverImage":615},"Nuxt Content3のコンポーネント呼び出し機能で遊んでみよう","/blog/md_components","2025-11-17","https://images.bokukoha.dev/blog/md_components/6.jpg",{"title":617,"path":618,"date":619,"category":567,"coverImage":620},"ワイヤレスイヤホンを買い替えたぞ！（Final TONALITE）","/blog/tonalite","2026-02-12","https://images.bokukoha.dev/blog/tonalite/main.jpg",{"title":622,"path":623,"date":624,"category":567,"coverImage":625},"おい、1カ月禁酒したのに何も効果ない件","/blog/stop-drunk","2026-04-19","https://images.bokukoha.dev/blog/stop-drunk/PXL_20260222_113942551.MACRO_FOCUS.MP.jpg",{"title":627,"path":628,"date":629,"category":567,"coverImage":630},"ブログ作った","/blog/1","2025-02-19","https://images.bokukoha.dev/blog/1/main.jpg",[632,633,634,635,636],{"title":575,"path":576,"date":577,"category":534,"coverImage":578},{"title":607,"path":608,"date":609,"category":534,"coverImage":610},{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":553,"path":554,"date":555,"category":556,"coverImage":557},{"title":637,"path":638,"date":639,"category":534,"coverImage":640},"Hugo + Stackのブログにシェアボタン実装した","/blog/add-share-button","2025-06-30","https://images.bokukoha.dev/blog/add-share-button/main.jpg",[642,643,648,649,654],{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":644,"path":645,"date":646,"category":567,"coverImage":647},"ポケモンZAクリアしたぞ！の感想","/blog/za_log","2025-12-01","https://images.bokukoha.dev/blog/za_log/main.jpg",{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":650,"path":651,"date":652,"category":567,"coverImage":653},"滑り込み1月まとめ！！","/blog/new_year_2026","2026-01-30","https://images.bokukoha.dev/blog/new_year_2026/main.jpg",{"title":564,"path":565,"date":566,"category":567,"coverImage":568},[656,657,658,663,664],{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},"個人サイトを0から作ったぞ！","/blog/nuxt_new_site","2025-11-13","https://images.bokukoha.dev/blog/nuxt_new_site/2.png",{"title":650,"path":651,"date":652,"category":567,"coverImage":653},{"title":665,"path":666,"date":667,"category":556,"coverImage":668},"突発で仙台旅行してきたぞ！日記","/blog/sendai","2025-09-17","https://images.bokukoha.dev/blog/sendai/main.jpg",[670,675,680,685,690],{"title":671,"path":672,"date":673,"category":556,"coverImage":674},"春休みラストの京都旅行してきたぞ！～関西1,2日目～","/blog/kansai_ryokou","2026-03-30","https://images.bokukoha.dev/blog/kansai_ryokou/main.jpg",{"title":676,"path":677,"date":678,"category":556,"coverImage":679},"ウルトラバカ散歩～山岡家を目指すぞ！編～","/blog/yamaokaya","2026-02-23","https://images.bokukoha.dev/blog/yamaokaya/main.jpg",{"title":681,"path":682,"date":683,"category":556,"coverImage":684},"初スカイメイト＆広島バカ散歩してきたぞ！","/blog/hiroshima","2026-03-15","https://images.bokukoha.dev/blog/hiroshima/main.jpg",{"title":686,"path":687,"date":688,"category":567,"coverImage":689},"オタクはバカ散歩をしろ！","/blog/ota_sanpo","2025-05-10","https://images.bokukoha.dev/blog/ota_sanpo/main.jpg",{"title":691,"path":692,"date":693,"category":556,"coverImage":694},"池袋から飯田橋まで散歩した","/blog/sanpo-log","2025-02-21","https://images.bokukoha.dev/blog/sanpo-log/main.jpg",[696,701,702,703,704],{"title":697,"path":698,"date":699,"category":556,"coverImage":700},"京都お花見バカ散歩＆名古屋メシ部～関西3,4日目～","/blog/kansai_day3to4","2026-03-31","https://images.bokukoha.dev/blog/kansai_day3to4/main.jpg",{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":601,"path":602,"date":603,"category":556,"coverImage":604},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":596,"path":597,"date":598,"category":556,"coverImage":599},[706,707,708,709,710],{"title":686,"path":687,"date":688,"category":567,"coverImage":689},{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":671,"path":672,"date":673,"category":556,"coverImage":674},{"title":676,"path":677,"date":678,"category":556,"coverImage":679},{"title":697,"path":698,"date":699,"category":556,"coverImage":700},[712,713,714,715,716],{"title":644,"path":645,"date":646,"category":567,"coverImage":647},{"title":686,"path":687,"date":688,"category":567,"coverImage":689},{"title":676,"path":677,"date":678,"category":556,"coverImage":679},{"title":671,"path":672,"date":673,"category":556,"coverImage":674},{"title":717,"path":718,"date":719,"category":556,"coverImage":720},"無知オタク、AWS Summitに行く","/blog/aws_summit","2025-06-26","https://images.bokukoha.dev/blog/AWS_summit/main.jpg",[722,723,724,725,726],{"title":697,"path":698,"date":699,"category":556,"coverImage":700},{"title":686,"path":687,"date":688,"category":567,"coverImage":689},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":564,"path":565,"date":566,"category":567,"coverImage":568},{"title":671,"path":672,"date":673,"category":556,"coverImage":674},[728,733,734,735,736],{"title":729,"path":730,"date":731,"category":567,"coverImage":732},"メインスマホをPixel10に乗り換えたぞ！","/blog/pixel10","2025-12-24","https://images.bokukoha.dev/blog/pixel10/main.jpg",{"title":575,"path":576,"date":577,"category":534,"coverImage":578},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":596,"path":597,"date":598,"category":556,"coverImage":599},[738,739,740,741,742],{"title":570,"path":571,"date":572,"category":567,"coverImage":573},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":729,"path":730,"date":731,"category":567,"coverImage":732},{"title":691,"path":692,"date":693,"category":556,"coverImage":694},[744,745,746,747,748],{"title":650,"path":651,"date":652,"category":567,"coverImage":653},{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":691,"path":692,"date":693,"category":556,"coverImage":694},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":749,"path":750,"date":751,"category":534,"coverImage":752},"Proxmoxでコンテナ on コンテナして自鯖落とした話","/blog/docker-on-lxc","2025-11-21","https://images.bokukoha.dev/blog/docker-on-lxc/main.png",[754,755,756,757,758],{"title":617,"path":618,"date":619,"category":567,"coverImage":620},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":575,"path":576,"date":577,"category":534,"coverImage":578},[760,761,762,763,764],{"title":691,"path":692,"date":693,"category":556,"coverImage":694},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":671,"path":672,"date":673,"category":556,"coverImage":674},[766,767,768,769,770],{"title":564,"path":565,"date":566,"category":567,"coverImage":568},{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":637,"path":638,"date":639,"category":534,"coverImage":640},{"title":553,"path":554,"date":555,"category":556,"coverImage":557},[772,777,778,779,780],{"title":773,"path":774,"date":775,"category":534,"coverImage":776},"HugoでのCloudflare Pagesのビルド失敗を回避する方法","/blog/cf_build","2025-05-11","https://images.bokukoha.dev/blog/cf_build/main.jpg",{"title":5,"path":542,"date":536,"category":534,"coverImage":535},{"title":596,"path":597,"date":598,"category":556,"coverImage":599},{"title":686,"path":687,"date":688,"category":567,"coverImage":689},{"title":637,"path":638,"date":639,"category":534,"coverImage":640},[782,783,784,789,790],{"title":5,"path":542,"date":536,"category":534,"coverImage":535},{"title":612,"path":613,"date":614,"category":534,"coverImage":615},{"title":785,"path":786,"date":787,"category":567,"coverImage":788},"労働体験して体調崩してた日記","/blog/taityo","2025-07-13","https://images.bokukoha.dev/blog/taityo/main.jpg",{"title":581,"path":582,"date":583,"category":556,"coverImage":584},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},[792,793,794,799,800],{"title":575,"path":576,"date":577,"category":534,"coverImage":578},{"title":749,"path":750,"date":751,"category":534,"coverImage":752},{"title":795,"path":796,"date":797,"category":534,"coverImage":798},"Nuxt Contentでブログもどきを作ってみた","/blog/nuxt_content","2025-05-09","https://images.bokukoha.dev/blog/nuxt_content/main.jpg",{"title":644,"path":645,"date":646,"category":567,"coverImage":647},{"title":581,"path":582,"date":583,"category":556,"coverImage":584},[802,803,804,805,806],{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":581,"path":582,"date":583,"category":556,"coverImage":584},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},[808,809,810,811,816],{"title":553,"path":554,"date":555,"category":556,"coverImage":557},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":812,"path":813,"date":814,"category":556,"coverImage":815},"先週は色々あったよ日記","/blog/2025-06-12","2025-06-12","https://images.bokukoha.dev/blog/2025-06-12/main.jpg",{"title":601,"path":602,"date":603,"category":556,"coverImage":604},[818,823,824,825,826],{"title":819,"path":820,"date":821,"category":534,"coverImage":822},"3万円くらいで作る自宅サーバー","/blog/server-make","2025-02-22","https://images.bokukoha.dev/blog/server-make/main.jpg",{"title":5,"path":542,"date":536,"category":534,"coverImage":535},{"title":581,"path":582,"date":583,"category":556,"coverImage":584},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":676,"path":677,"date":678,"category":556,"coverImage":679},[828,829,830,831,832],{"title":637,"path":638,"date":639,"category":534,"coverImage":640},{"title":575,"path":576,"date":577,"category":534,"coverImage":578},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":622,"path":623,"date":624,"category":567,"coverImage":625},[834,835,836,837,838],{"title":671,"path":672,"date":673,"category":556,"coverImage":674},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":601,"path":602,"date":603,"category":556,"coverImage":604},{"title":785,"path":786,"date":787,"category":567,"coverImage":788},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},[840,841,842,843,844],{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":581,"path":582,"date":583,"category":556,"coverImage":584},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":749,"path":750,"date":751,"category":534,"coverImage":752},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},[846,847,848,849,850],{"title":607,"path":608,"date":609,"category":534,"coverImage":610},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":575,"path":576,"date":577,"category":534,"coverImage":578},{"title":596,"path":597,"date":598,"category":556,"coverImage":599},[852,853,854,855,856],{"title":686,"path":687,"date":688,"category":567,"coverImage":689},{"title":564,"path":565,"date":566,"category":567,"coverImage":568},{"title":607,"path":608,"date":609,"category":534,"coverImage":610},{"title":581,"path":582,"date":583,"category":556,"coverImage":584},{"title":553,"path":554,"date":555,"category":556,"coverImage":557},[858,859,860,861,862],{"title":596,"path":597,"date":598,"category":556,"coverImage":599},{"title":671,"path":672,"date":673,"category":556,"coverImage":674},{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":812,"path":813,"date":814,"category":556,"coverImage":815},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},[864,865,866,867,868],{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":601,"path":602,"date":603,"category":556,"coverImage":604},{"title":581,"path":582,"date":583,"category":556,"coverImage":584},{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},[870,875,876,877,878],{"title":871,"path":872,"date":873,"category":534,"coverImage":874},"MisskeyのDBバックアップとオブジェクトストレージの設定方法","/blog/misskey-setting","2025-11-23","https://images.bokukoha.dev/blog/misskey-setting/main.jpg",{"title":5,"path":542,"date":536,"category":534,"coverImage":535},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":637,"path":638,"date":639,"category":534,"coverImage":640},{"title":607,"path":608,"date":609,"category":534,"coverImage":610},[880,881,882,883,884],{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":676,"path":677,"date":678,"category":556,"coverImage":679},{"title":717,"path":718,"date":719,"category":556,"coverImage":720},{"title":564,"path":565,"date":566,"category":567,"coverImage":568},{"title":697,"path":698,"date":699,"category":556,"coverImage":700},[886,887,888,889,890],{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":601,"path":602,"date":603,"category":556,"coverImage":604},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":612,"path":613,"date":614,"category":534,"coverImage":615},[892,893,894,895,896],{"title":601,"path":602,"date":603,"category":556,"coverImage":604},{"title":671,"path":672,"date":673,"category":556,"coverImage":674},{"title":665,"path":666,"date":667,"category":556,"coverImage":668},{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":637,"path":638,"date":639,"category":534,"coverImage":640},[898,899,900,901,902],{"title":819,"path":820,"date":821,"category":534,"coverImage":822},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":749,"path":750,"date":751,"category":534,"coverImage":752},{"title":871,"path":872,"date":873,"category":534,"coverImage":874},{"title":773,"path":774,"date":775,"category":534,"coverImage":776},[904,909,910,911,912],{"title":905,"path":906,"date":907,"category":534,"coverImage":908},"自宅で動かすMinecraftサーバー","/blog/mc_server","2025-09-30","https://images.bokukoha.dev/blog/mc_server/main.jpg",{"title":5,"path":542,"date":536,"category":534,"coverImage":535},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":591,"path":592,"date":593,"category":567,"coverImage":594},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},[914,915,920,921,922],{"title":681,"path":682,"date":683,"category":556,"coverImage":684},{"title":916,"path":917,"date":918,"category":567,"coverImage":919},"chatGPTからGeminiに完全移行した","/blog/gpt-to-gemini","2025-12-03","https://images.bokukoha.dev/blog/gpt-to-gemini/main.png",{"title":686,"path":687,"date":688,"category":567,"coverImage":689},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":697,"path":698,"date":699,"category":556,"coverImage":700},[924,925,926,927,928],{"title":637,"path":638,"date":639,"category":534,"coverImage":640},{"title":607,"path":608,"date":609,"category":534,"coverImage":610},{"title":627,"path":628,"date":629,"category":567,"coverImage":630},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":5,"path":542,"date":536,"category":534,"coverImage":535},[930,931,932,933,934],{"title":795,"path":796,"date":797,"category":534,"coverImage":798},{"title":659,"path":660,"date":661,"category":567,"coverImage":662},{"title":586,"path":587,"date":588,"category":534,"coverImage":589},{"title":559,"path":560,"date":561,"category":534,"coverImage":562},{"title":812,"path":813,"date":814,"category":556,"coverImage":815},[936,938],{"title":596,"path":597,"stem":937,"children":-1},"blog/sushi/index",{"title":819,"path":820,"stem":939,"children":-1},"blog/server-make/index",1782435686352]