0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらのレンタルサーバーでminioのデータを読みたい(misskeyのデータ置き場にしたい)

Posted at

前提

解決案

CGIでminioのデータをキャッシュして使おうぜ!

そもそものきっかけ

前準備

minio-client (mc) 入れなきゃ

  • さくらのレンタルサーバーはLinuxではなくFreeBSD!
  • pkgもってきてバイナリだけ使う方向で(笑)
mkdir src
cd src
wget https://pkg.freebsd.org/FreeBSD:13:amd64/latest/All/minio-client-2024.01.31.08.59.40_1.pkg
tar xvf minio-client-2024.01.31.08.59.40_1.pkg
cd ..
mkdir bin
cp src/usr/local/bin/minio-client bin/mc
  • これでbin/mcできた!

mc初期設定

  • 適当なalias名(今回はmediaを採用)で設定
bin/mc alias set media https://エンドポイント アクセスキー トークン

CGI登録

  • www/ で作業
.htaccess
Options +ExecCGI
<Files "media">
SetHandler cgi-script
</Files>
media
#!/usr/local/bin/ruby

ROOT="/home/アカウント名/キャッシュを置くディレクトリ名"

require 'cgi'

@cgi= CGI.new

path = @cgi.path_info

def error
  puts "Status: 403 Forbidden"
  puts ""
  puts "Forbidden"
  exit 1
end

error if path.nil? or path == ""

path = "/media" + path

if path =~ /^(\/[A-Za-z0-9_-]+)+\.[A-Za-z0-9_-]+$/
  # do nothing
else
  error
end

file = ROOT + path
dir = File.dirname(file)
if not File.file?(file)
  `mkdir -p '#{dir}' > /dev/null 2> /dev/null`
   l=0
   while (l < 3) do
     `/home/アカウント名/bin/mc --quiet cp 'media/#{path}' '#{file}' 2> /dev/null`
     l += 1
     break if File.file?(file) and not File.zero?(file)
     sleep 0.1
   end
end

if File.zero?(file)
  File.delete(file)
end

error if not File.file?(file)

print "Content-Type: "
print `file -i '#{file}' | cut -d ' ' -f 2`
puts ""
print `cat '#{file}'`
  • mediaファイルに拡張子は付けないこと

  • media以外のバケット名を使うときは、.htaccessのファイル名、path = "/media" + pathmedia文字列とファイル名を置き換えること

  • 以下のコマンドでCGI有効化

chmod 700 media
  • これで、https://さくらのレンタルサーバーのアドレス/media/ほげほげが、元のエンドポイントのコピーを指すようになる

定期的に削除

crontab -eに、例えば以下のように書いておく

0 5 * * * find /home/アカウント名/キャッシュを置くディレクトリ名 -type f -atime +30 -exec rm -f {} \;
  • これで、30日間アクセスされていないファイルは削除される(はず)

misskeyに反映

  • コントロールパネル → オブジェクトストレージから、Base URLをhttps://さくらのレンタルサーバーのアドレス/media/に設定

  • これ以降のファイルはさくらのレンタルサーバー経由に

ちなみに

見てわかるとおり、削除・更新やIDのコンフリクトには対応していません

がまぁ、misskeyのオブジェクトストレージとしてなら良いんじゃないかな。

結果

2回目以降のアクセスが早くなったよー!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?