Google Photoの代替を探す2

Piwigoがぼちぼちいい感じだなと思っていたが、結局サーバハードが弱すぎるため別を考えることにする(良いソフトだったけど)

ryzen 7 2700xとメモリ16GBを備えるマシンにubuntuサーバを最小構成でインストールしてNextCloud + PhotoPrismを入れてみることにした。ある程度動いたときの使用感は非常に良かったので基本これベースで進めることにしてみたい。

やったことメモ

  • PCにHyper-VでUbuntuを最小構成でインストール
  • SnapコマンドでNextCloudをインストール、めっちゃ簡単。動作確認
  • PhotoPrismもdocker-composeで入れる。動作を確認。
  • NextCloudのクライアントを操作用PCに導入し同期機能で写真をアップロード開始。デフォルトでNextCloudのフォルダ全体を同期しようとするのだが、その設定をいったん外してほしいところだけにするよう工夫。
  • PhotoPrismがWebDAV経由でNextCloudの写真を取り込むところもやんわり成功。
  • この辺で、ディスクパーティションの切り方をミスっていることに気づく。ホストマシンのSSD上にOS用の60GB、SATA HDDにデータ用に600GBと、それぞれ仮想ディスクをこしらえていたのだが、後者を程よいところにマウントしようと思ってて完全に後手に。
  • 一度Ubuntuのインストールディスクで起動して、途中で右上の「Help」ってところからShellに入れたので、そこでfdiskとかmkfsを使ってパーティションを作った後、マウントしてファイルコピーしてfstabいじるなどして無事終えた。uuidをlsblk -f /dev/sdxというコマンドで調べてもViエディタにコピーしに行けないので、コマンドから>>で/etc/fstabに書き込ませてから中で編集するという荒業も。
  • WANからも使いたいのでリバースプロキシを設定しようとして超苦戦。以下試したがなかなかうまくいかなかった。
    • 素直にリバプロ設定 → CSS、JSなどが動作せず真っ白な画面に。
    • NextCloudの動作をhttp://xxx.xxx.xxx.xxx/から、http://xxx.xxx.xxx.xxx/ncみたいに動作が変えられないか試し、一瞬うまくいきかけたけどどうしても不調。Webに事例もなし。
    • VirtualHostでうまくいった。けど、Lets Encryptの証明書の更改が必要だったのでACMEチャレンジみたいなのをやったりこれも時間がかかった。
    • LAN内からもサブドメインでアクセスできるようになり上々の出来だったけど、Syncクライアントだけはなぜか変な動きになってダメだったのでIP直指定でLAN内だけで運用することにした。
  • 翌朝、Photoprismが領域/homeをガンガンに食っていることで止まっていることを発見。/homeフォルダ用の仮想ディスクもhyper-vでHDD上に追加して積みなおし。
  • NextCloudのアプリのインストールがsnapバージョンではできないことを発見。きつい。NextCloud Appstoreからtar.gzを落としてきて食わせる方法がないかも探したけどネットにノウハウなし。あきらめて、SNAPはやめてもう一回NextCloudを自前で構築するか・・・それは夕方にやろう。

Google Photoの代替を探す

Google Photoが有料化されて以降、何か違う手段はないものかと考えている。

15GBって少ないし、スマホで撮った写真やちょっとした動画ですぐ埋まってしまう。画質をオリジナルで保存できないのもなんか残念だ。かといって容量追加をGoogle Oneで申請すると微妙に出費になってしまう。払えなくもないものの、それでも100GBを気にしないといけないし、そもそも自宅には1TBとか2TBのハードディスクが空いている。

せっかくUbuntuの自宅サーバを運営しているのだから、何かできることがあるはずと思い、調べたり実験したりしてみた。

要件を考え直してみる

どういう生活が幸せかを整理。

必須

  • スマホ、デジカメなどで撮影した写真やビデオを永続的に保存。オリジナル画質。
  • スマホでどこからでもブラウズができる。
  • 容量を気にしたくない (この点でGoogle Photoがノックアウト)。
  • 今ある資源で。サーバ買い足すなどの投資はしたくない。

できれば外したくない

  • スマホからWi-Fi経由で自動アップロード ⇒ できればいいけど、時々手動でPCから上げるでもいい
  • アルバム機能で友達に共有、友達からもアップロードを受け付ける ⇒ できればいいけど、最悪このシチュエーションだけGoogle Photoを使えばいい
  • 上記同様で、公開Linkの発行
  • スマホでの動画のストリーミング再生 ⇒ できてほしい・・・けど写真ほど優先しない

あきらめられる機能

  • 顔認識 ⇒ 便利だけどなくても死なない
  • 画像認識とキーワード検索 ⇒ Googleだと「ハイキング」とか検索するとそういうのが出るけど、めちゃくちゃお世話になるわけではない。
  • 軽快なパフォーマンス ⇒ Google Photoのサクサク動作は多分無理なので、最低限使えればいい。サムネはさらさらーっと流せて見えたらうれしいけど。

手元にある資源

自宅サーバ

昔使ってたノートPCにUbuntuをGUIなしで入れてサーバにしているもの。Thinkpad Z61t、Core 2 Duo T5500、メモリ1GB、PHP7.4をFPMで設定してあり、MySQLなんかも動いていてブログも動作中。家庭内のSMBサーバとしても。CPUは普段はがら空き。HDDは600GB積んでて500GBくらい空いている。

どんなに軽いLinuxを入れてもノートPCとしては全く使い物にならなかったので、天寿を全うするまでの最後の仕事は自宅サーバということになっていただいた。これでもamazonのEC2でmicroかなにか最小のインスタンスタイプで借りていた時に比べるとパフォーマンスはよいのである。月の電気代は以前測ったら200~300円くらいだった。

ここにSelf-Hosted型の何かをいれて要件が満たせればいいのではと考える。

自宅の作業用PC

普段から、家族が仕事や趣味で使用するPCが約3台。Windows 10。ここからスマホやデジカメの写真をSMBやWeb経由でアップできれば良い。今までのデジカメなどの写真データがかき集めると200GBほどあり、Google Photoの無料枠からはみ出たものはHDDの中においてあって参照などは特にできない。

スマートフォン(家族4人分)、デジカメ

すでに一家で一人一台ですべてAndroid。デジカメはSDカード経由でのアップロードとなる。

NextCloudを試した

インストールは成功。
PHP7.4のFPMにいくつか追加パッケージをインストールしたが、あとはもうWordpress入れるのと似たような手順でMySQLにDBとユーザ切って設定したら動き出した。写真管理というよりはクラウドグループウェアのオープンソース版という感じでチャットとかも付属。

スマホにアプリも導入でき、スマホ内のCameraフォルダを同期させることもできてしばらく待ってみるも、飛んでもなく時間がかかり一晩たってもエラーでまくりで止まっていた。サーバマシンのCPUは常にphp-fpmのプロセスがCPU100%で、こりゃ多分サムネ生成でGDとかが働いてるんだろうけどさっぱりダメだな・・・。ものすごいマシン持ってこないとまともに使えない気がする。

画面遷移も遅い、スマホアプリも応答待ちが長いためか不安定、写真データもぽろぽろアップロードしているけどエラーも出るし何が行ってて何が行ってないか不安満点。

さすがにこんなに重いのもおかしいのではと、opcache、acpとかmemcached入れたりPHPのメモリ制限開放したりチューニングにも励んでみたけどダメなのであった。NextCloudはこれはこれで何かに使える気もしなくはないけど、求めていた写真管理の件に関してはあきらめる。こんな非力なマシンで動くものではないんだろうな、きっと。

ここまで来てGoogle Photoに対する見方も少し変わった。そうか、あれは単にディスク容量を買うだけだと無駄に高い感じしかしないけど、アップロード機能、ブラウズ機能、いろいろなコンピューティングリソースもソフトウェアも全部コミコミなんやから、そらそうよね。ごめんなさい。でもまだあきらめませんが。

次の一手

ちょっと寄り道して、Slackの代替もセルフホストできるようなのあるのかしら?とか調べてたらMattermostなどいろいろあるよう。へー。でもこれもSlackで別にいいよな。Slackも無料版は5GBという容量制限があるが。

LibrePhotosか、Photoprismというのが使えそうな気がしたけど、もう一つPiwigoというのがよさそうに見える。

https://qiita.com/fujiisoup/items/52a69fdd60b6155f1420

スマホから自動で写真同期は、NextCloudであの不安定感だったからもうあきらめて、定期的にスマホをPCにつないでアップロードするくらいの手間は取ってやるとして、SMB経由でサーバにファイルおいてあげれば、ブラウズ機能だけはフロントで提供するみたいな考え方なんだろうか。MySQLとPHP7.4で動くらしいので手っ取り早そう。
ここをザーッとみる限りアップロードの手間以外はほしいやつっぽい。

パフォーマンスがどうかやな・・・CPU空いてるときにちまちまサムネイルとか生成して、サクサク見せてくれる仕組みならよいのだけども、とりあえず今からこれ入れてみる。

Piwigo導入

Apacheのドキュメントルートにダウンロードして展開。

$ cd /var/www/html/
$ wget https://piwigo.org/download/dlcounter.php?code=latest
$ mv dlcounter.php\?code\=latest ./piwigo.zip
$ unzip ./piwigo.zip

おー、わかりやすい・・・昔ながらのWebアプリのインストールだ。

SMBでgalleriesというフォルダに大量の写真を転送したらそれを見せてくれるところまでの動きは非常に良い感じ。ただUIがちょっと微妙かな・・・写真がなんかスマホの画面だと画面中央に大人しめにしか表示されない。そしてサムネイル生成に途方もない時間がかかるのはNextCloudのときと同じだった。夜中にバッチでやらせるにしてもサーバにしているノートPCが火を噴きそうだし毎回これもやってられんかもなあ。

Piwigoのスマホアプリも試してみたけど、そもそもサーバ側が重いので今のところ実用には耐えられないものの、サムネ生成が済んでいるアルバムを参照するのにはそれほど困らないので使い勝手自体は悪くない。

旅は続く・・・

結局今回は完全に落ち着く先は決まらなかった。

そもそもセルフホストするハードウェアがこれだとどの選択肢もどん詰まり。こうなったら、息子があまり使わなくなっているデスクトップPC(ryzen 7 2700x)をサーバ化してしまうか。それとも写真を眺めたり管理するのもいつもってわけじゃないからAWSのオンデマンドインスタンスでも借りて、使うときだけ起動する形式にしようかな。でもそれだと、スマホとかデジカメの写真をアップロードするのに待ち時間長くなりそうだな。

ここを見てるとPhotoPrism+NextCloudが用途も広くてよさそうだし、前述のうちで一番性能がいいPCを常時起動にして、Hyper-Vでサーバ立ててみようか、それともSSD買い足していったんネイティブLinuxマシンにしてしまおうか。でもデュアルブートにしないとWindows 10のライセンスどっか行っちゃったら面倒だな・・。

Python Djangoの認証機能(Auth User)でパスワードのルール外したい

Djangoデフォルトのユーザテーブルで認証機能を実装できて便利なのだが、練習とかテスト用に開発しているアプリで、パスワードのルールは8文字以上で数字だけは許さないとかそういうのはめんどくさい

ここコメントアウトして瞬殺でした。

[settings.py]
# Password validation
# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    # {
    #     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    # },
    # {
    #     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    # },
    # {
    #     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    # },
    # {
    #     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    # },
]

子供のフォートナイトを自動的に落とすpythonスクリプト(PC)

子供がPCでフォートナイトの時間を守らなかったり、やめなさいと言ってもなかなか聞かなかったりして、妻のイライラ、子供もイライラ、あまり良くない状態だったので、もう親子であれこれ言い合わなくていいように一定の条件を満たしたらフォートナイトが強制的にシャットダウンされるようにして見た。

方法は色々あると思うけど、pythonを選んだ。

Windows上でpythonのスクリプトをサービスとして実行し、Fortniteを起動した瞬間にプロセス監視で開始したことを検知したり、自分でゲームをやめたことも検知する。かつ、一定の条件を満たしているかどうかを1分に1回判定して、場合によってはFortniteを強制終了させる。自分でも試してみたけど、ほんとに一瞬でアプリがシャットダウンされてデスクトップに戻される。

作るスクリプトは以下。適当な名前.pyで保存

import sys
import time
import wmi
import win32serviceutil
import logging
import psutil
from plyer import notification

logging.basicConfig(
    filename = 'C:\\Users\\xxxxxxxxx\\xxxxxx\\gamemonitorscript.log',
    level = logging.DEBUG, 
    format="%(asctime)s:LINE[%(lineno)s] %(levelname)s %(message)s"
)

class GameMonitorService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'FNMoniter'
    _svc_display_name_ = 'Monitor Game'
    _svc_description_ = 'Saving over playing'

    def SvcDoRun(self):
        self.run = True
        
        loopcount = 0
        c=wmi.WMI()
        cre_process_watcher=c.Win32_Process.watch_for("creation")
        del_process_watcher=c.Win32_Process.watch_for("deletion")

       
        while self.run:
            new_cre_process=cre_process_watcher()
            new_del_process=del_process_watcher()
            
            if("FortniteClient" in new_cre_process.Caption):
                # ここで、お、ゲームやり始めたなというときの処理

            if("FortniteClient" in new_del_process.Caption):
                # ここで、ゲームをやめたとときの処理
                    
            time.sleep(1)
            loopcount += 1
            
            if loopcount == 60:
                
                # いい加減にしなさい、ゲーム強制終了ですよ、という判定をする
                if <<<何かしらのやりすぎ判定>>>:
                    logging.debug('強制終了')
                    for proc in psutil.process_iter():
                        n = proc.name()
                        if "FortniteClient" in n:
                            p = psutil.Process(proc.pid)
                            proc.kill()

                loopcount = 0
                
    def SvcStop(self):
        self.run = False

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(SampleService)

これを管理者ユーザでコマンドプロンプトからサービスとしてインストールして実行されていることを確認する。当然、pythonは事前にインストールして、pipでpywin32というパッケージもインストールしておく必要があるけど、その辺は以下の記事を見て参考にさせていただいた。

https://qiita.com/Bashi50/items/1d98f80ccaa8746bff38

正直、WMIとかなんとか、使い方があんまり良くわかってなくて、適当にやっててこれで動いたから、まあいいか、という感じ。

ゼロからLinux(Fedora)でpython djangoの実行・開発環境を作る(1 of 2)

この記事の目的は以下。

  • hyper-vを利用し、まっさらなFedora 35の仮想環境を作成する
  • その上にデスクトップ環境を作り、python djangoの実行環境、Visual Studio CodeのLinux版をインストールして開発環境も作る
  • 家のどこのPCからでも接続して作業ができるようにする
  • djangoで作るアプリのコードはgithubで管理できるようにする

Fedoraをインストール

https://getfedora.org/ja/server/download/

netinstallのISOイメージを落としてくる。そのあとhyper-vでクイック作成で新規マシンを作成

メモリのサイズを4096MBに調整して起動。しばらく待つとインストール画面に来る。構成を選ぶことができるけど、おそらくGNOMEが入ってくるFedora Workstationを選んでLibre Officeだけは追加しておく。ほかのを選んでもあとでいまいちなー、ってなりそうですし。

「インストール開始」を押したら、他のことをしながらしばらく放置。やがてデスクトップ環境にログインできました。

ルートボリューム(ディスク)サイズの調整

デフォルトのインストーラがあまり賢くないのか、ちゃんとやらなかったから悪いのか、なぜかルートにマウントされているパーティションが125Gのうち15Gしか使ってない。とりあえず30GBくらいは割り当ててる状態にしたいところ。ネットで調べて、以下のコマンドで拡張できた。結果の記載は省略。

$ df -h
$ pvscan --cache
$ sudo vgdisplay
$ sudo lvdisplay
$ sudo lvextend -L +20G /dev/fedora/root
$ sudo xfs_growfs /dev/fedora/root
$ df -h

SELinux無効化

特に不要なので無効化。以下の設定ファイル変更後に再起動。

$ sudo vim /etc/selinux/

SElinux=disabled

リモートデスクトップ接続

TigerVNCとXRDPを使って、Windows PCからリモートデスクトップ接続を可能にする。

$ sudo dnf insatll xrdp tigervnc-server
$ sudo systemctl start xrdp.services
$ sudo systemctl enabled xrdp.services
$ sudo firewall-cmd --permanent --add-port=3389/tcp
$ sudo firewall-cmd --reload

Visual Studio Code のインストール

$ sudo vim /etc/yum.repos.d/vscode.repo

[vscode]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc

$ sudo dnf update
$ sudo dnf install code

MySQLサーバーのインストール

dnf でインストールしたあとにデフォルトでできているデータベースを確認して、新規にユーザを作成して、新規にテストアプリ用のデータベースも作成して権限も付与する。DB名、ユーザ名、パスワードなどは適宜書き換えて使う。

$ sudo dnf install community-mysql-server community-mysql-libs community-mysql-devel

$ mysql --version
mysql  Ver 8.0.27 for Linux on x86_64 (Source distribution)

$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld

$ sudo mysql

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

> CREATE DATABASE testapp;
> CREATE USER '<user>'@'localhost' IDENTIFIED BY '<password>';
> GRANT ALL PRIVILEGES ON testapp.* TO '<user>'@'localhost';
> quit



Python djangoのインストール

pipでpython djangoをインストールする最短手順。最初にgccとpython3-develをインストールするのはpipでmysqlクライアントをインストールするときになぜか必要になるため。

$ sudo dnf install gcc python3-devel
$ cd ~
$ sudo dnf install python3-pip python3-mysqlclient
$ mkdir py
$ cd py

#venvする
$ python -m venv testappenv
$ source testappenv/bin/activate

#pipを最新バージョンにする
$ pip install -U pip

$ pip install mysqlclient

$ django-admin startproject testapp

$ cd testapp
$ vim ./testapp/settings.py
DATABASES = {
    'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'testapp',
       'USER': '<USER>',
       'PASSWORD': '<PASSWORD>',
       'HOST': 'localhost',
       'PORT': '3306',
    }
}

$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py runserver 0.0.0.0:8001

ここまで来たら、一旦Djangoが動いていることを確認できる。

何やかや使うのがDjangoの標準のAdmin画面。これを使えるようにする。runserverはいったんCtrl+Cで閉じる。

$ python manage.py createsuperuser
Username (leave blank to use xxxxx: admin
Email address:  
Password: 
Password (again): 
Superuser created successfully.

もう一度 runserver したらここに来れる。

いったんここまで。

Linux(CentOS)上でJava Swing系プログラムが中身真っ白になる Weblogic インストーラが使えない

Hyper-Vで作ったCent OSサーバにJava 8u321とWeblogic 12.2.1.4をインストールしようとしたけど、インストーラがこんなことになってなにもできないという問題に遭遇した。

[xxx@localhost Downloads]$ java -jar ./fmw_12.2.1.4.0_wls_lite_generic.jar 

さんざんWebで調べたけどわからないし、StackOverflowに質問投稿したけど、閲覧数すら2桁ぐらいだし回答も大してつかないし困った。しかしこれ、CentOSにXRDPをyumでインストールしてWindowsのリモートデスクトップでアクセスするとどうしても発生するのに、hyper-vのコンソールからアクセスするとなぜか動くし、試しにVNCでデスクトップアクセスしても動く。以下はVNCでデスクトップつないでまったく同じことをやった画面。

切り分けのために、超簡単なJava Swingプログラムを動かしてみる。以下はテストした内容。

$ vim ./test.java

import javax.swing.*;    
class LabelExample      
    {  
    public static void main(String args[])  
        {  
        JFrame f= new JFrame("Label Example");  
        JLabel l1,l2;  
        l1=new JLabel("First Label.");  
        l1.setBounds(50,50, 100,30);  
        l2=new JLabel("Second Label.");  
        l2.setBounds(50,100, 100,30);  
        f.add(l1); f.add(l2);  
        f.setSize(300,300);  
        f.setLayout(null);  
        f.setVisible(true);  
    }      
}          

$ javac ./test.java
$ java -classpath ./ LabelExample

テスト結果:VNC接続の場合

テスト結果:Windowsのリモートデスクトップからの場合

同じだ。Swing自体のアプリがちゃんと動いてないんだ。というのはわかったけど、ログが出てくるわけでもなし次の調べ方もわからないので断念するかな。次に何を見ればいいのかな。そういえば、最初にCentOSに入ってたopenjdkはアンインストールしたうえでOracle Javaの1.8をインストールして使ってるので今の挙動になっているけど、openjdkだとこの挙動ってどうなるだろう。

$ sudo yum install java-1.8.0-openjdk
$ java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)

まあ予想通り変わらない。深遠な世界っぽいのでここで諦める。

Cent OS 7でVNCサーバを立ててリモートデスクトップしようと思っても”failed because a timeout was exceeded.”が出てつまづく

どうやっても治らなくて大変な思いをした・・・

やろうとしていることは、Cent OS 7でGNOMEとかが入ったので https://trios.pro/centos7-vncserver/ このあたりの手順を参考にvncserverを起動してリモートデスクトップさせようとするのだが以下の動きになって全然直し方がわからない。

$ sudo systemctl start vncserver@:2.service
 [1分ぐらいうんともすんとも言わない、この時VNC接続してみるとなぜかできちゃう]

Job for vncserver@:2.service failed because a timeout was exceeded. See "systemctl status vncserver@:2.service" and "journalctl -xe" for details.
 [これが出た瞬間に、VNC接続も落ちる]

/etc/systemd/system/vncserver@:2.service というファイルを必死にいろいろいじってみたり、/tmp/.X11-unixだとか ~/.vnc/ だとか、いろいろなところを見に行って試してみるも全くわからない。SELinuxもオフにしたけど無駄。

最後の最後、”vncserver@:3.service” を試しにもう一回作ってみたら、なぜか急に普通に動いた。
2のときはローカルユーザでsudoで作業してたけど、あえてsu でrootになって作業したくらいが違いなのだけど、それで変わる??

わからない。

Hyper-V で Linux(Fedora 35)

特に難しいことはなくインストールして起動できた。

困ったのは、PCにはCドライブ(SSD 64GB)とEドライブ(HDD 2TB)があって、CドライブはWindows10とアプリケーション系でほぼ満タンなのでEドライブの方にインストールしたのだけど、どういうわけか仮想マシンを起動した瞬間Cドライブの空き容量が、見た目上4GBくらい突然減ってしまうし、ドライブに空き容量がありません見たいになる。

4GBくらい減るのは仮想マシンへのメモリの割り当て量のよう。仮想マシンのFedora上でいろいろアプリを開いてメモリを消費するごとにさらにCドライブを圧迫していく。

ネットを調べてもあまりよくわからず、結局下の図のあたりの設定を全部Eドライブを狙うようにして、仮想マシンを一度エクスポートしてインポートしなおすみたいなことをごちゃごちゃやって解決した。Eドライブ側が、マシン起動した瞬間に4GBくらい急に使われるけどそれは問題ないので。

WordPressのセットアップ

Ubuntuのサーバに入れてセットアップ。なれたもので一瞬だった。

$ wget https://wordpress.org/latest.zip

$ unzip latest.zip

$ mv ./wordpress/ ./blog/

$ chmod 777 -R ./blog/wp-content/

データベース側の設定はPhpMyAdminでやり、wp-config.phpを作成。これで動く。あとはなんでもいいのでテーマを入れて画像をunsplashから持ってきて突っ込んで見る。テーマエディタで。

なぜだかWordpressはかたくなにFTPでプラグイン追加とかテーマ追加とか動きたがって、シェル側からの操作だけではあまりに不便だったので、しかたなくVSFTPDをインストールして有効化。普段は止めとくようにしている時だけ動かそうかな。

$ sudo apt install vsftpd
$ sudo vim /etc/vsftpd.conf
[適当にいじる・・LISTENとかそのあたり]
$ sudo /etc/init.d/vsftpd start
$ ftp localhost ← このコマンドでそれっぽく動いたかテスト

なんでかわからんけど、以下だとVSFTP起動できなかった。

$ sudo systemctl start vsftpd.service

WordPressをいじる作業が終わったら、以下でちゃんと止める。プレーンなFTPとか怖い。

$ sudo /etc/init.d/vsftpd stop