コミュニティ

IPFSの本番環境設定

この記事は最終更新日から1年以上が経過しています。

IPFSを本番環境で使う機会があり、いろいろ調べたのでナレッジを共有します。

1. 環境変数設定

まずIPFS_PATHを指定します。ここにIPFSのリポジトリが作られます。
指定なしだと$HOME/.ipfsに作られます。バックアップ&リストアを見越して適切な場所を設定します。

次にIPFS_FD_MAXを指定します。これはファイルディスクリプタの最大値を指定するもので、go-ipfsのデフォルト設定に合わせて8192を設定します。

export IPFS_PATH=/data/ipfsrep
export IPFS_FD_MAX=8192

2. IPFSの初期化

IPFSを初期化するときは必ず-- profile serverオプションをつけます。これによりプライベートネットワーク内で他のノードを探すような通信が発生しません。

ipfs init —- profile server

参考: Getting Started > Initialize the repository

3. 設定ファイルの編集

configコマンドで設定するのが正攻法ですが、設定ファイルを直接編集する方が楽です。

vi $IPFS_PATH/config

まずAddresses.APIAddresses.Gatewayを編集します。Gatewayの方が読み込み専用で、APIの方が書き込み可能です。
アクセス制限を設けたい場合は、許可するIPアドレスを個別に指定します。設けたくない場合は0.0.0.0を指定します。

"Addresses": {
 "API": [
  "/ip4/127.0.0.1/tcp/5001",
  "/ip4/169.254.20.75/tcp/5001"
  ],
  "Gateway": "/ip4/0.0.0.0/tcp/8080",

次にDatastore.StorageMaxでIPFSのストレージサイズを設定します。

"StorageMax": "100GB"

続いて、GatewayのCROSを設定します。デフォルトで有効化されており、必要に応じて設定を変更します。

"Gateway": {
  "APICommands": [],
  "HTTPHeaders": {
    "Access-Control-Allow-Headers": [
      "X-Requested-With",
      "Range",
      "User-Agent"
    ],
    "Access-Control-Allow-Methods": [
      "GET"
    ],
    "Access-Control-Allow-Origin": [
      "*"
    ]
  },

最後にIPFS Cluster本番設定を参考に、必要な設定を追加します。

"Datastore": {
    "BloomFilterSize": 1048576,
...
Swarm: {
    "ConnMgr": {
        "HighWater": 1000,
        "LowWater": 250,

4. バックグラウンドで起動

開発目的で、とにかく簡単に起動したい場合は、以下のコマンドで起動します。

# Start
ipfs daemon > $IPFS_PATH/ipfs-`date +%Y%m%d%H%M%S`.log &

# Stop
ps ax | grep ipfs | head -n 1 | awk ‘{print $1}’ | xargs kill

一方、本番運用ではデーモン化します。
まずシステムユーザを作成し、設定ファイルを新規作成します。

adduser — system — group ipfs
chown -R ipfs:ipfs $IPFS_PATH
vi /lib/systemd/system/ipfs.service

そして、このGithub Issueを参考に設定を記載します。

[Unit]
Description=IPFS daemon
After=network.target
Requires=network.target

[Service]
Type=simple
User=ipfs
RestartSec=1
Restart=always
Environment=IPFS_PATH=/data/ipfsrep
Environment=IPFS_FD_MAX=8192
ExecStart=/usr/local/bin/ipfs daemon

[Install]
WantedBy=multiuser.target

5. HTTPS対応

IPFSノードはHTTPSをサポートしていません。
なので、ロードバランサーやプロキシサーバでSSLオフロードします。

参考:
NGINXのリバースプロキシ設定
Azureのロードバランサー設定

6. Swarmの停止

IPFSは起動時にbootstrap peer listに載っているノードと接続を試みます。

ipfs bootstrap list

接続したノードから別ノードの情報を取得し、繰り返すことで、多くのノードと接続します。
もし、IPFSノードを読み込み専用なGatewayとして使うなら、この通信を遮断するのが良いです。通信費を削減できます。

方法としては4001 portInboudOutboundを閉じるだけです。

7. バックアップ&リストア

$IPFS_PATH配下全てがバックアップ対象です。
リストアは、バックアップを展開し$IPFS_PATHに展開先を指定するだけでできます。

8. クラスター構成

必要ならば設定します。

参考:
IPFS Cluster
Using IPFS Cluster Service for Global IPFS Data Persistence

tak1827
SEとしてWeb及びスマートフォン用アプリケーションの開発に従事。コンサルとして銀行システム構成管理業務及び次期インフラ構築においてOffice365導入。ブリッジSEとしてベトナムでシステム開発。フリーランスで、インドの会社とBlockchainを利用したシェアリングエコノミーのサービス開発。
https://medium.com/@t.tak
financie
個人の価値を可視化して支援するブロックチェーンベースのSNSサービス『FiNANCiE』の企画・運営
https://www.corp.financie.jp/
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした