導入
様々なOSで仕事や学校のためにファイルをセキュアに保存、共有したいが、SFTPをドライブとして使うには標準対応しているOSが少なすぎる。また、Googleドライブなどのクラウドストレージサービスは速度が遅いことがあるため、実用上不満が多い。
解決方法
Filestashと呼ばれるOSSをdockerにインストールして使う。Filestashは、FTP、SFTP、WebDAV、S3、SMB、Git、Dropbox、Google Driveなど、多様なストレージプロトコルに対応したオープンソースのWEB上で操作できるファイルマネージャーである。
環境
今回はwindowsを使っているが、通常のx86 osや変わりなく動作が可能だろう。ARM系で動作させる場合はdocker-composeに工夫が必要である。今回の作業はすべてVSCodeで行うが特別な拡張機能などは使用しないため普通のテキストエディタでも作業可能だ。その際文字コードはUTF-8を推奨する。
version | |
---|---|
OS | windows10 |
Docker Desktop | 4.40.0 (187762) |
仕組み
dockerを用いてfilestashのコンテナとsftpサーバーのatmoz/sftpコンテナを作成する
filestashコンテナは8334番ポートで動作させる。
atmoz/sftpコンテナは2222番ポートで動作させる。
今回はFilestashの使用例としてhttpを使用するが、実際に使うとなったらtailscaleやSSLで暗号化して通信することを推奨する。
tailscale+sftp+filestash on sftp Serverの筆者が実際に使っている構成はまたいつか書き込みたいと思っている。
Dockerコンテナを起動
dockerを使うにあたってdocker-composeというものを使う。dockerコンテナは本来作るたびにイメージやストレージの細かい設定が必要だが、それを自動で行うものである。docker-composeを使うためにはdocker-compose.yamlと呼ばれるファイルに記述する。
dockerでは2つのコンテナを立てるがまとめてdocker-compose.yamlに記述する。
- まず作業用にデスクトップ等自分の好きな場所にfilestashフォルダを作るその中にdocker-compose.yamlというファイルを作成する。
- docker-compose.yamlに以下の内容を書き込む
version: '3.8'
services:
sftp:
image: atmoz/sftp
ports:
- "2222:22"
volumes:
- ./data/alice:/home/userA/upload
- ./data/bob:/home/userB/upload
command: |
userA:abcd:1001
userB:1234:1002
networks:
- filenet
filestash:
image: machines/filestash
container_name: filestash
ports:
- "8334:8334"
volumes:
- ./app:/app/data/state
networks:
- filenet
depends_on:
- sftp
networks:
filenet:
driver: bridge
ユーザー名とパスワードの設定
volumes:
- ./data/alice:/home/userA/upload
- ./data/bob:/home/userB/upload
command: |
userA:abcd:1001
userB:1234:1002
の部分のuserA,userBをユーザー名に置き換えてください。
またabcd,1234をパスワードに置き換えてください。
ファイルの場所について
volumes:
- ./data/alice:/home/userA/upload
- ./data/bob:/home/userB/upload
volumes:
- ./app:/app/data/state
の部分でfilestashの設定ファイルとアップロードされたデータなどを./appと./dataで共有している
起動!
docker-compose.yamlがあるディレクトリでターミナルを開いて
docker compose up -d
を実行すると起動します。
しばらくしたあとに処理が終わってフォルダが以下のように増えていることを確認してください。
増えていれば正常に起動ができています。
接続確認
起動が完了したらlocalhost:8334にアクセスしてください
最初に管理者用パスワードを設定します
ここはお好みで
Backendを押す
今回はSFTP以外使わないので❌を押す
これで設定完了
もう一度localhost:8334にアクセスすると今度は管理ページではなくSFTPログインページに飛ぶ
docker-compose内で設定したユーザー名とパスワードでログインする
これで完了となる
ドラッグ&ドロップなどでアップロードもできる
停止方法
停止するには起動したときと同じディレクトリで
docker compose down
を実行するだけ
設定ファイルやアップロードされたファイルは消えないのでそこを初期化したい場合はfilestashフォルダのappとdataを消す。