1
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?

docker-compose の力を借りて爆速で開発マシン上にFTPサーバーを立てた話

Last updated at Posted at 2024-08-17

はじめに

FTP サーバーと通信するようなアプリを書かなければいけなくなったけど、都合よく使える FTP サーバーが自分の管理下になかったので、どうにかモノグサして FTP サーバーを開発環境に用意しようとした結果です。

前提条件

開発マシンに入っているソフトウェアについて

  • Windows 11
  • Visual Studio 2022
  • Docker Desktop

今回は docker-Compose を使うので、Docker が使える環境は必須です。
docker-compose さえ使えればいいはずなので、Windows 環境以外でもいけるはず。

FTP サーバーについて

Pure FTPd をコンテナ化したものを提供している方がいらっしゃったので、ありがたく拝借します。

(オマケ)クライアントアプリに組み込んだライブラリ

FluentFTP を今回は使いました。
.NET Core 8 で書いたアプリに Nuget で組み込んでサクッと FTP クライアントとして使えるので結構良かった。

作業手順

docker-compose.yml 作成

普通に Docker コマンドを叩いても立ち上げられるのですが、パスワードとかを yml ファイルで保持したかったので docker-compose.yml をサクッと書きます。

docker-compose.yml
version: '3'

services:
  ftpd_server:
    #イメージの指定とコンテナ名指定
    image: stilliard/pure-ftpd
    container_name: pure-ftpd
    
    #PASV用に30000-30009を開く必要があるらしい
    ports:
      - "21:21"
      - "30000-30009:30000-30009"
    
    #docker-compose.yml の下に出来る data フォルダが
    #FTP サーバーのログインユーザーのホームディレクトリとしてマウントされる設定
    #あとパスワードの保存先もローカルフォルダにマッピング
    volumes: 
      - "./data:/home/${FTPUSER}/"
      - "./passwd:/etc/pure-ftpd/passwd"

    #ホスト名、ユーザー名、パスワード、ホームディレクトリの設定
    #ユーザー名とパスワードは環境設定ファイルに持つようにする。
    environment:
      PUBLICHOST: "localhost"
      FTP_USER_NAME: ${FTPUSER}
      FTP_USER_PASS: ${FTPPASS}
      FTP_USER_HOME: /home/${FTPUSER}

    restart: always

環境変数の設定

docker-Compose では .env という名前のファイルに入っている値を環境変数のデフォルト値として自動で読み込む設定になっているようなのでこれを使います。→ 参考ドキュメント

.env に書いた内容は以下のような感じ

.env
FTPUSER=ここにFTPユーザー名を指定
FTPPASS=ここにFTPパスワードを指定

FTP サーバーを立ち上げる

あとは docker-compose にお任せ。

docker-compose up

もしくはバックグラウンドで起動させたかったら -d オプションをつけると良い感じ。

成果物

ここまでの手順を完了させると、以下の設定でアクセス可能な FTP サーバーが立ち上がります。

  • ホスト名 : localhost
  • ポート : 21
  • ユーザー名 : .env で指定したユーザー名
  • パスワード : .env で指定したパスワード

あとは煮るなり焼くなりご自由に。

注意点

今回の設定だけだと、FTP over TLS ではなく平文でやり取りされるフツーの FTP サーバーになります。

Pure FTPd の設定で FTP over TLS も設定できるっぽいのですけど、構成したらなぜかクライアントからコネクションを張れなくなり、そこのデバッグに時間を割くのがもったいなかったので、開発環境として localhost からアクセスするだけならこれでいいかなと思いつつ、FTP over TLS の採用は一旦断念しました。

Public Internet に面した環境に置く際には、そこらへん気を付けないと危なそうなので、ご注意ください。(そして、FTP over TLS うまくいった人がいたら、うまくいった手順教えてほしい…)

まとめ

docker-compose 一発で開発環境としての FTP サーバーを作れるのは割と便利かも?

なお、今回動けばいいやの最低限でモノグサしましたので、細かいデバッグ的なことはやってません。何か間違ってるとことかあったらこっそり教えていただけたら有難いです。

1
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
1
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?