監視カメラで取得した画像をChatGPT APIに投げて画像を解析する際に、監視カメラ自体にFTPで画像アップロードできる機能があったりするので、クラウドのUbuntuサーバーにFTP機能を追加して対応できるようにする方法を検証しました。
FTP(vsftpd)のインストール
FTPでファイルをアップロードするには、まずサーバーにFTPサーバーをインストールする必要があります。Ubuntuでは、vsftpd
が一般的に使用されるとのことで次のコマンドでインストール。
sudo apt update
sudo apt install vsftpd -y
vsftpdの設定
インストール後、設定ファイルを編集します。
sudo nano /etc/vsftpd.conf
#ファイル書き込みを許可
write_enable=YES
#デフォルトのディレクトリをchroot
chroot_local_user=YES
変更後、vsftpd
を再起動します。
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
ユーザーを作成し、アップロード先ディレクトリを設定する
FTP用に専用のユーザーを作成します。
sudo adduser ftpuser
パスワードを設定し、必要な情報を入力します。
ディレクトリの作成と権限設定
FTPユーザーのアップロード先ディレクトリを作成します。
sudo mkdir -p /home/ftpuser/ftp/upload
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
sudo chmod -R 750 /home/ftpuser/ftp
以上でサーバー側の設定が終了です。
FileZillaから接続
FileZilla をインストールしてFTP接続を行います。
ここで、うまく接続できない場合は
sudo netstat -tuln | grep :21
と入力しましたが、
sudo: netstat: command not found
とでたので、
sudo apt install net-tools -y
でnet-toolsをインストール。
再度
sudo netstat -tuln | grep :21 すると
IPv6でリッスンされていますが、IPv4はサポートされていない状態用です。
再度、設定ファイルを開きます。
sudo nano /etc/vsftpd.conf
下記の様に修正
listen=YES
listen_ipv6=NO
FTPサーバーを再起動
sudo systemctl restart vsftpd
再度、FileZillaで接続
状態: *********:21 に接続中…
状態: 接続を確立しました。ウェルカム メッセージを待っています…
状態: FTP over TLS がサポートされていないセキュアでないサーバーです
コマンド: USER ftpuser
レスポンス: 331 Please specify the password.
コマンド: PASS
レスポンス: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
とのエラーメッセージ。
解決方法
ホームディレクトリの書き込み権限を削除します
sudo chmod a-w /home/ftpuser
これで、私は接続できるようになりました。
VIGI 540Sの設定
VIGI 540SのFTP設定はこちら。
この設定でFTPで画像のアップロードができました。
ただし、VPSが1GBであることが理由なのか、FileZillaでFTP接続するとリストの取得に時間がかかりました。