2023-02-28 05:57:34 +00:00
✌️
2023-02-03 13:45:43 +00:00
✌️
2023-02-03 13:45:43 +00:00
✌️
2023-02-03 13:45:43 +00:00
✌️
2023-02-03 13:45:43 +00:00
2023-02-28 05:57:34 +00:00
2023-02-05 12:34:04 +00:00

Media Proxy for Misskey

Misskeyの/proxyが単体で動作しますMisskeyのコードがほぼそのまま移植されています

/proxyは画像ではないと403を返しますが、Media Proxyではそのまま内容を送信します。

Fastifyプラグインとして動作する気がします。
pnpm startfastify-cliが動作します。

一応AWS Lambdaで動かす実装を用意しましたが、全くおすすめしません。 https://github.com/tamaina/media-proxy-lambda

Fastifyプラグインとして動作させる

npm install

npm install git+https://github.com/misskey-dev/media-proxy.git

Fastifyプラグインを書く

import MediaProxy from 'misskey-media-proxy';

// ......

fastify.register(MediaProxy);

オプションを指定できます。オプションの内容はindex.tsのMediaProxyOptionsに指定してあります。

サーバーのセットアップ方法

まずはgit cloneしてcdしてください。

git clone https://github.com/misskey-dev/media-proxy.git
cd media-proxy

pnpm install

NODE_ENV=production pnpm install

config.jsを追加

次のような内容で、設定ファイルconfig.jsをルートに作成してください。

import { readFileSync } from 'node:fs';

const repo = JSON.parse(readFileSync('./package.json', 'utf8'));

export default {
    // UA
    userAgent: `MisskeyMediaProxy/${repo.version}`,

    // プライベートネットワークでも許可するIP CIDRdefault.ymlと同じ
    allowedPrivateNetworks: [],

    // ダウンロードするファイルの最大サイズ (bytes)
    maxSize: 262144000,

    // CORS
    // WARN:
    //    'Access-Control-Allow-Origin'を'*'に設定した場合、要求のOriginヘッダーを応答します。
    //    Misskeyのアバタークロップに必要なため
    //    Varyヘッダーが付加されるため、同じURLでもOriginごとに画像が生成されてしまうはずです。
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Headers': '*',

    // CSP
    'Content-Security-Policy': `default-src 'none'; img-src 'self'; media-src 'self'; style-src 'unsafe-inline'`,

    // フォワードプロキシ
    // proxy: 'http://127.0.0.1:3128'
}

サーバーを立てる

適当にサーバーを公開してください。
ここではmediaproxy.example.comで公開するものとします。

メモ書き程度にsystemdでの開始方法を残しますが、もしかしたらAWS Lambdaとかで動かしたほうが楽かもしれません。
サーバーレスだとsharp.jsが動かない可能性が高いため、そこはなんとかしてください

systemdサービスのファイルを作成…

/etc/systemd/system/misskey-proxy.service

エディタで開き、以下のコードを貼り付けて保存(ユーザーやポートは適宜変更すること):

[Unit]
Description=Misskey Media Proxy

[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/media-proxy
Environment="NODE_ENV=production"
Environment="PORT=3000"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=media-proxy
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable misskey-proxy
sudo systemctl start misskey-proxy

3000ポートまでnginxなどでルーティングしてやります。

Misskeyのdefault.ymlに追記

mediaProxyの指定をdefault.ymlに追記し、Misskeyを再起動してください。

mediaProxy: https://mediaproxy.example.com
Description
Media Proxy for Misskey
Readme AGPL-3.0 245 KiB
Languages
TypeScript 52.8%
JavaScript 47.2%