Sign inSign up

procube/sftp-server

By procube

Updated over 1 year ago

Image
0

595

procube/sftp-server repository overview

docker-sftp-server

SFTPを用いてMongoDBにファイル転送を行うことができます。

動作確認

要件

dockerが導入されていること。

環境構築

testフォルダに格納されているdocker-compose.ymlを用いてテスト環境を構築することができます。

docker compose -f test/docker-compose.yml up

を実行することで、以下の3つのコンテナが建てられます。

  • mongo MongoDBを用いたファイルサーバー
  • sftpserver ssh2パッケージを用いたSFTPサーバー
  • ubuntu 動作確認を行うためのubuntuコンテナ
テスト方法(手動)
テストユーザ、作業ディレクトリの作成

FTPのユーザ名anonymousでログインする形にあたるものはSFTPでは実装しないため、テスト用ユーザおよび作業ディレクトリを予め MongoDB に作成しておきます。

必要に応じて、テストユーザおよび作業ディレクトリを追加してください。

  1. docker exec コマンド、もしくは docker desktop の Terminal などを用いて mongo のコンソールを開きます。

    docker exec -it {mongoのコンテナID} /bin/bash
    
  2. Mongo Shell を使い、データを作成する

    mongosh -u {username} -p {password}
    

    docker-compose.yml の mongo の環境変数

    • username: MONGO_INITDB_ROOT_USERNAME
    • password: MONGO_INITDB_ROOT_PASSWORD
  3. データベースを files_db に切り替える

    use files_db
    
  4. テストユーザ(例:TEST001)を追加する。whitelist は環境に合わせる

    db.fs.works.insert({
      name: 'TEST001',
      idmIdentifier: 'TEST001',
      password: 'example',
      whitelist: [ '127.0.0.1', '::1', '172.30.0.1' ]
    });
    

    [参考]

    ログインに失敗したときは、whitelist に含まれていない可能性がある。ログ docker logs sftpserverclient info で確認することができる

  5. 作業ディレクトリ(例:TEST001)およびpublicディレクトリを追加する

    db.fs.dirs.insert({
      dirname: 'TEST001',
      uploadDate: new Date,
      parent_id: "root",
      fullpath: ["root","TEST001"],
      unique: "/root/TEST001"
    });
    db.fs.dirs.insert({
      dirname: 'public',
      uploadDate: new Date,
      parent_id: "root",
      fullpath: ["root","public"],
      unique: "/root/public"
    });    
    
sftp コマンドでテストを行う

まず、

docker exec -it {ubuntuのコンテナID} /bin/bash

もしくはdocker desktop のTerminalなどを用いてubuntuのコンソールを開きます。 この状態で MongoDB に作成したユーザを使い、

sftp -oPort="8822" {テストユーザID}@sftpserver

を実行し、パスワードを入力すれば各種コマンドのテストを行うことができます。

テスト方法(自動)
方法1

GitHubにソースをpushすると、GitHub Actions を用いて、テストが自動実行されます。

方法2

GitHub Actions ワークフローを修正したときなどpush前に自動テストを実行したい場合は、actライブラリを使うことで、ソースをpushしたときとほぼ同様の実行確認ができます。無駄な(失敗)プッシュを避けるためにも有効です。

  1. actをインストールする
    例:
    $ cd ${docker-sftp-serverディレクトリ}
    $ curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
    
  2. ワークフロー確認(自動テストのワークフローの存在を確認)
    $ ./bin/act -l
    
  3. ワークフロー実行(現在は自動テストのワークフローのみのため、詳細な指定なし。デフォルトはpushイベントが発生したとして実行される)
    $ ./bin/act
    
方法3

ローカル環境で自動テストを実行することも可能です。

  1. docker-sftp-serverのソースディレクトリに移動して、testを実行する
    $ cd ${docker-sftp-serverディレクトリ}
    $ npm run test
    
  2. コンソールに出力された jest の実行結果を確認する

[参考]

デバッグなど、ローカルソースのサーバを使ったテストをする場合は、 sftpserver コンテナを停止し(docker compose -f test/docker-compose.yml stop sftpserver)、npm run start でサーバを起動して使用する。start の実行コマンドは環境変数など必要に応じて修正するとよい

方法4

ローカル環境で単体テストの自動テストを実行することも可能です。 docker composeによる sftpserver、mongo、ubuntu コンテナの起動は不要です。

  1. .env_template を参考に .env ファイルを作成する
  2. docker-sftp-serverのソースディレクトリに移動して、unittestを実行する
    $ cd ${docker-sftp-serverディレクトリ}
    $ npm run unittest
    
  3. コンソールに出力された jest の実行結果を確認する

[注意]

unittest実行前に、テスト対象ファイル server.ts の server 属性を export した server4unittest.ts をコピー作成し、server4unittest.ts に対してテストを実行している(単体テスト内で server属性を参照する必要があったため)。 既に server4unittest.ts が存在する場合は、次のエラーを表示し再作成しないため、必要に応じて削除してから実行すること(server.ts の更新が server4unittest.ts に反映されていない状態でテストする可能性がある)。 WARNING: The unit test source have not been recreated.(server4unittest.ts)

テストファイル

ubuntuのコンテナにて/test-filesをvolumeに設定しています。 ubuntuからファイル転送のテストを行いたい場合はここにファイルを入れてテストを行なってください。

環境変数

docker-compose.ymlのenvironmentで環境変数を設定することができます。

  • DATABASE_URL: MongoDBへの接続URLです。
  • MONGO_INITDB_ROOT_USERNAME: MongoDBに接続する際のユーザーネームです。(必須)
  • MONGO_INITDB_ROOT_PASSWORD: MongoDBに接続する際のパスワードです。(必須)
  • UPLOAD_SIZE_LIMIT: アップロードできるファイルサイズの上限値です。
  • UPLOAD_TOTAL_SIZE_LIMIT: アップロードできる総ファイルサイズの上限値です。
  • FILESERVER_AV: ClamAV によるスキャンを行うか否かを指定します。デフォルトは false(しない)
  • SCAN_SIZE_LIMIT: ClamAV によるスキャンを行うことができるファイルサイズの上限値です。デフォルトは 4294967296
  • SERVER_PRIVATE_KEY: サーバー認証用の秘密鍵(必須)
  • SERVER_PRIVATE_KEY_PASSPHRASE: サーバー認証用の秘密鍵のパスフレーズ(任意)
  • SFTP_SERVER_PORT: サーバのポート番号です。デフォルトは 22

Tag summary

Content type

Image

Digest

sha256:5910b421e

Size

443 MB

Last updated

over 1 year ago

docker pull procube/sftp-server