mirror of
https://github.com/misskey-dev/media-proxy.git
synced 2025-04-29 02:47:26 +09:00
138 lines
3.7 KiB
Markdown
138 lines
3.7 KiB
Markdown
# Media Proxy for Misskey
|
||
|
||
[→ メディアプロキシの仕様](./SPECIFICATION.md)
|
||
|
||
Misskeyの/proxyが単体で動作します(Misskeyのコードがほぼそのまま移植されています)。
|
||
|
||
**Fastifyプラグインとして動作する気がします。**
|
||
`pnpm start`は[fastify-cli](https://github.com/fastify/fastify-cli)が動作します。
|
||
|
||
一応AWS Lambdaで動かす実装を用意しましたが、全くおすすめしません。
|
||
https://github.com/tamaina/media-proxy-lambda
|
||
|
||
Sharp.jsを使っているため、メモリアロケータにjemallocを指定することをお勧めします。
|
||
|
||
## 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
|
||
```
|
||
|
||
### jemallocをインストール
|
||
Debian/Ubuntuのaptの場合
|
||
|
||
```
|
||
sudo apt install libjemalloc2
|
||
```
|
||
|
||
### pnpm install
|
||
```
|
||
NODE_ENV=production pnpm install
|
||
```
|
||
|
||
### config.jsを追加
|
||
|
||
次のような内容で、設定ファイルconfig.jsをルートに作成してください。
|
||
|
||
```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
|
||
'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での開始方法を残します。
|
||
(サーバーレスだとsharp.jsが動かない可能性が高いため、そこはなんとかしてください)
|
||
|
||
systemdサービスのファイルを作成…
|
||
|
||
/etc/systemd/system/misskey-proxy.service
|
||
|
||
エディタで開き、以下のコードを貼り付けて保存
|
||
|
||
ユーザーやポートは適宜変更すること。
|
||
また、arm64の場合`Environment="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"`のx86_64をaarch64に変更する必要がある。jemallocのパスはディストリビューションによって変わる可能性がある。
|
||
|
||
```systemd
|
||
[Unit]
|
||
Description=Misskey Media Proxy
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=misskey
|
||
ExecStart=/usr/bin/npm start
|
||
WorkingDirectory=/home/misskey/media-proxy
|
||
Environment="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"
|
||
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を再起動してください。
|
||
|
||
```yml
|
||
mediaProxy: https://mediaproxy.example.com
|
||
```
|
||
|