Skip to content

nekonoverse/media-proxy-rs

 
 

Repository files navigation

media-proxy-rs

misskey/cherrypick用メディアプロキシのrust実装

機能的には互換性を維持しつつ、様々な画像形式のデコードに対応
ほとんどの画像読み書きにimage crate v0.25を使用しています

実行(Docker)

docker run -itd -p 12766:12766 ghcr.io/yojo-art/media-proxy-rs:main

Unix Domain Socket(UDS)で利用する場合

config.jsonbind_addr/で始まるパスまたは.sockで終わるパスに設定するとUDSモードで起動します nginxなどのリバースプロキシと同じボリュームを共有してソケットファイル経由で通信できます

config.json:

{
  "bind_addr": "/run/media-proxy-rs/media-proxy.sock"
}

docker-compose.yml:

services:
  media-proxy:
    image: ghcr.io/yojo-art/media-proxy-rs:main
    volumes:
      - media-proxy-sock:/run/media-proxy-rs
      - ./config.json:/media-proxy-rs/config.json:ro

  nginx:
    image: nginx:stable-alpine
    ports:
      - "80:80"
    volumes:
      - media-proxy-sock:/run/media-proxy-rs
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

volumes:
  media-proxy-sock:

nginx.conf:

upstream media-proxy {
    server unix:/run/media-proxy-rs/media-proxy.sock;
}
server {
    listen 80;
    location / {
        proxy_pass http://media-proxy;
    }
}

コンテナ内のユーザーはUID=852(proxy)で動作するため、ソケットディレクトリの権限に注意してください

実行(Linux)

例(x86_64/amd64)

curl -L https://github.com/yojo-art/media-proxy-rs/releases/download/nightly/media-proxy-rs_linux-amd64.gz | gzip -d > ./media-proxy-rs
chmod u+x ./media-proxy-rs
./media-proxy-rs

利用するプラットフォームに応じて適切なバイナリを選択してください。ファイル名のリストを示します

media-proxy-rs_linux-386.gz (i686+sse2)
media-proxy-rs_linux-amd64.gz (x86-64-v3)
media-proxy-rs_linux-arm-v6.gz
media-proxy-rs_linux-arm-v7.gz
media-proxy-rs_linux-arm64.gz
media-proxy-rs_linux-riscv64.gz

設定ファイル

環境変数MEDIA_PROXY_CONFIG_PATHを設定する事でファイルの場所を指定できます
デフォルト値は$(pwd)/config.jsonです
十分に強力なマシンではencode_aviftrueに変更することでAVIFエンコードを利用する事ができます

target support

  • x86_64-unknown-linux-musl
  • aarch64-unknown-linux-musl
  • armv7-unknown-linux-musleabihf
  • arm-unknown-linux-musleabihf
  • i686-unknown-linux-musl
  • riscv64gc-unknown-linux-musl

ビルド(x64 Docker)

Dockerを使用する場合はbuildxとqemuによるクロスコンパイルが利用できます
ビルド対象プラットフォームはtarget supportの項目を参照してください

  1. git clone https://github.com/yojo-art/media-proxy-rs && cd media-proxy-rs
  2. docker build -t media-proxy-rs .

ビルド(Docker aarch64等その他)

./crosstiles/arm64.shのMUSL_NAMEと./crossfiles/deps.shのmuslをダウンロードする処理を調整する必要があります

プラットフォーム最適化

amd64ではデフォルトでx86-64-v3向けにビルドしますが、x86-64-v3未満の環境やx86-64-v4向け最適化利用したい場合./crosstiles/amd64.shのRUSTFLAGSを編集してください 他プラットフォームであればarm64.shやriscv64.shの編集でRUSTFLAGSを変更してください 最も簡単なのはtarget-cpu=nativeを指定し、実行環境と同じCPUでビルドする方法です

ビルド(x64 Debian系)

この方法ではx86_64-unknown-linux-gnu向けにビルドします
すべてを静的に組み込むmusl系とは異なる共有ライブラリを必要とする場合があります

  1. https://www.rust-lang.org/ja/tools/install に従ってrustをインストール
  2. apt-get install -y meson ninja-build pkg-config nasm git
  3. git clone https://github.com/yojo-art/media-proxy-rs && cd media-proxy-rs
  4. cargo build --release

対応する画像形式

  • AVIF(dav1d)
  • BMP
  • DDS
  • Farbfeld
  • GIF
  • HDR
  • ICO(png+rgba not support)
  • JPEG
  • EXR
  • PNG
  • PNM
  • QOI
  • TGA
  • TIFF
  • WebP
  • JPEG XL(jxl-oxide)
  • JPEG 2000(openjp2)
  • JPEG XR(jxrlib)

About

高速で多機能なmisskey用media-proxy

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Rust 92.2%
  • Shell 5.0%
  • Dockerfile 2.8%