mirror of
https://github.com/misskey-dev/media-proxy.git
synced 2025-04-29 02:47:26 +09:00
Media Proxy for Misskey
Misskeyの/proxyが単体で動作します(Misskeyのコードがほぼそのまま移植されています)。
/proxyは画像ではないと403を返しますが、Media Proxyではそのまま内容を送信します。
Fastifyプラグインとして動作する気がします。
pnpm start
はfastify-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 CIDR(default.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
Languages
TypeScript
52.8%
JavaScript
47.2%