media-proxy/README.md
2023-09-20 09:09:51 +00:00

138 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 CIDRdefault.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
```