Happy Growth Engineer

成長と幸せな働き方の両立をするために役に立つ

FTP サーバ構築(冗長化にも対応)[vsftp, goofys, s3fs, ec2, s3, elb]

概要

  • ファイルの受け取りをする時、FTP 通信でサーバ利用
  • サーバが潰れても良いよう、S3 にファイル保存する

構築方法

事前準備

  • EC2サーバ準備
  • ELB準備
  • セキュリティグループのポート開放(TCP:21, 60001-60010)
  • S3 のバケット
  • AWS ユーザ作成(SecretKey, SecretAccessKey を利用)

構築手順

$ sudo yum install -y vsftpd
$ sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
$ sudo vi /etc/vsftpd/vsftpd.conf
----- 下記に書き換える -----
anonymous_enable=NO
dirmessage_enable=NO
connect_from_port_20=NO
xferlog_std_format=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
tcp_wrappers=NO

pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=[ホスト名]
pasv_min_port=60001
pasv_max_port=60010
use_localtime=YES
force_dot_files=YES
user_config_dir=/etc/vsftpd/user_conf
--------------------------

$ sudo touch /etc/vsftpd/chroot_list
$ sudo adduser [ユーザ名]
$ sudo passwd [ユーザ名]
→ ここでパスワードを設定します

$ sudo chkconfig vsftpd on
$ sudo /sbin/service vsftpd start

$ sudo mkdir /home/[ユーザ名]/data
$ sudo chown [ユーザ名]:[ユーザグループ] /home/[ユーザ名]/data

$ sudo yum install -y golang fuse
$ sudo wget https://github.com/kahing/goofys/releases/download/v0.0.5/goofys -P /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/goofys

$ aws configure
AWS Access Key ID [None]: [SecretKey]
AWS Secret Access Key [None]: [SecretAccessKey]
Default region name [None]: [region]
Default output format [None]: text

$ sudo /usr/local/bin/goofys -o allow_other --dir-mode 0700 --file-mode 0600 --region ap-northeast-1 --uid 502 --gid 502 [ユーザ名] /home/[ユーザ名]/data
$ sudo /usr/local/bin/goofys -o allow_other --dir-mode 0700 --file-mode 0600 --region ap-northeast-1 --uid 502 --gid 502 [ユーザ名] /home/[ユーザ名]/data
$ sudo mkdir /etc/vsftpd/user_conf
$ sudo vi /etc/vsftpd/user_conf/[ユーザ名]
-----
local_root=/home/[ユーザ名]/data

$ sudo vim /etc/vsftpd/user_list
----- 追記 -----
ec2-user

$ sudo /sbin/service vsftpd restart

$ sudo vim /etc/fstab
----- 追記 -----
# goofyn
/usr/local/bin/goofys#[ユーザ名] /home/[ユーザ名]/data fuse allow_other,--dir-mode=0700,--file-mode=0600,--uid=502,--gid=502    0       0
----------------

接続確認

$ ftp [ユーザ名]@ホスト名
ftp> put test
→ 「226 Transfer complete.」と出るようにする

Windows で接続できない場合の対処法

再構築

上書き保存ができない

  • vsftpgoofys の相性がどうも悪いようです
状態
ftp> put test
local: test remote: test
229 Entering Extended Passive Mode (|||60007|).
150 Ok to send data.
100% |*********************************************|     5        1.58 KiB/s    00:00 ETA
226 Transfer complete.
5 bytes sent in 00:00 (0.19 KiB/s)
ftp> put test
local: test remote: test
229 Entering Extended Passive Mode (|||60005|).
150 Ok to send data.
100% |*********************************************|     5       19.68 KiB/s    00:00 ETA
451 Failure writing to local file.
5 bytes sent in 00:00 (0.34 KiB/s)

goofys から s3fs に変更してみる

$ sudo su
$ yum -y install git automake gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel
$ wget https://github.com/s3fs-fuse/s3fs-fuse/archive/v1.80.tar.gz
$ tar xzvf v1.80.tar.gz
$ rm -f v1.80.tar.gz
$ cd s3fs-fuse-1.80/
$ ./autogen.sh
$ ./configure prefix=/usr
$ make
$ make install
$ echo '[SecretKey]:[SecretAccessKey]' >> /etc/passwd-s3fs
$ chmod 640 /etc/passwd-s3fs
$ umount /home/[ユーザ名]/data/
$ s3fs [ユーザ名] /home/[ユーザ名]/data -o allow_other,use_cache=/tmp,uid=502,gid=502,passwd_file=/etc/passwd-s3fs
$ vim /etc/fstab
   # もし goofys の追記箇所があれば削除してください
----- 追記 -----
# s3fs
/usr/bin/s3fs#[ユーザ名] /home/[ユーザ名]/data fuse rw,allow_other,uid=502,gid=502    0       0
----------------