2022年2月のサーバ構築(独自ドメイン移行)

2022-02-27 14:29:40 +09:00 Post Comments

少し前に独自ドメインを取得したので、そこに移行することにしました。 今回は設定変更なので、 OSの設定までは前回2020年末に設定したときに行った 内容のままです。

設定手順

Webサーバ

  • 他のWebサーバが流行ってきている中nginxというのもいい加減どうなんだという感がありますが、 次のハードウェアに移行するときに考えます。

  • インストール

    ubuntu@raspiu:/etc$ sudo apt install nginx
    (略)
    続行しますか? [Y/n] 〈Enter〉
    
  • nginxの設定

    • Debian系では、バーチャルホストを使うことを前提に次のようなディレクトリ構成で nginxの初期設定が作ってある。
      /etc/nginx
        nginx.conf         # メインの設定ファイル
        modules-available/ # nginxのモジュールの設定
                           # パッケージによってここにファイルが置かれる
        sites-available/   # バーチャルホスト設定をこの下に作る
        {sites,modules}-enabled/ # 有効になっている設定ファイルの置き場
                           # -availableの設定を使う場合は、以下のようにしてリンクを張る
                           # ln -s ../sites-available/<ファイル名> \
                           #       /etc/nginx/sites-enabled/
        snippets/          # nginxと連携させて使うパッケージを実際に連携させるための設定
        conf.d/            # その他の設定はここにファイルとして置く(今回は使用しない)
        # 以降nginx標準の付属設定ファイル
        uwsgi_params       # uWSGI(動的Webページの方式)の設定
        # 他いくつか(今回は使わない)
      
      • sites-availableにサイトの設定を書き、sites-enabledからリンクを張って有効化する
      • サーバそのものの設定はconf.dに書く
      • 他のファイルは書き換えない
    • この構造に従わずにnginx.confを直に書き換えても動くが、 アップデートの際に面倒なことになったりするので普通に乗っかっておく。
    • サイトの設定を作成
      ubuntu@raspiu:~ $ sudo vi /etc/nginx/sites-available/〈ドメイン名〉
      
      • 内容
        server {
          listen 80;
          listen [::]:80;
        
          location ~ ^/isso/img {
            return 404;
          }
          location ~ ^/isso/(.*)$ {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8080;
            uwsgi_param SCRIPT_NAME /isso;
            uwsgi_param PATH_INFO /$1;
          }
        
          root	/var/www/〈ドメイン名〉;
          index	index.html index.htm;
          server_name 〈ドメイン名〉;
        }
        
        • Isso(コメント用サーバ)の設定をしておく
        • isso/img以下は必要ないので公開しないように設定。 ※isso というソフトウェアの名前がIch schrei sonstというドイツ語と ポケモンの名前の"Isso"(ソーナノ)のダブルミーニングになっているので、 このソフトのロゴはこのキャラクターを描いている。 img/以下にはその画像が置かれているのだが、日本の著作権法上 こういう使い方であっても公衆送信権の侵害になる恐れがある(訴えられたら負けうる)ので 公開しないようにしている。
    • デフォルトのバーチャルホストを設定
      ubuntu@raspiu:~ $ sudo vi /etc/nginx/sites-available/unknown
      
      • 内容
        server {
          listen 80 default_server;
          listen [::]:80 default_server;
        
          server_name _;
          location / {
            return 400;
          }
        }
        
        • IPアドレス総当たりで攻撃を仕掛けてくるときには、 サーバの名前を指定するHostヘッダをつけないことが多いので、 Hostが指定されていないアクセスは禁止する
        • 古い(HTTP/1.0以下)クライアントはHostをつけないが、 そんなクライアントが現存するとは思えないので気にしない
    • 設定を有効化
      ubuntu@raspiu:~ $ cd /etc/nginx/
      ubuntu@ubuntu:/etc/nginx$ sudo ln -s ../sites-available/〈ドメイン名〉 sites-enabled/
      ubuntu@ubuntu:/etc/nginx$ sudo ln -s ../sites-available/unknown sites-enabled/
      ubuntu@ubuntu:/etc/nginx$ sudo systemctl reload nginx
      

SSL対応

  • 独自ドメインも取得したのでSSLに挑戦してみようと思います

  • インストール

    • snapdをインストール
      ubuntu@raspiu:~$ sudo snap install core; sudo snap refresh core
      core 16-2.54.3 from Canonical✓ installed
      snap "core" has no updates available
      
    • Certbotをインストール
      ubuntu@raspiu:~$ sudo snap install --classic certbot
      certbot 1.23.0 from Certbot Project (certbot-eff✓) installed
      
  • Certbotで証明書を取得

    ubuntu@raspiu:~$ sudo certbot --nginx
    
    • メールアドレスを聞かれるので答える。常に受け取れる必要があるので、自宅サーバではなく 外部のサービスのアドレスを答えておく。
       (Enter 'c' to cancel): 〈メールアドレス〉
      
    • 利用規約に同意するか聞かれる。規約を読んで問題なさそうなら同意する(y)
      (略) Do you agree?
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      (Y)es/(N)o: y
      
    • Certbotの開発元のEFFにメールアドレスを共有するか聞かれる。 メールが一つ増えるくらい気にしないので同意する(y)
      (Y)es/(N)o: y
      Account registered.
      
    • 新旧ドメインを設定してあるためどちらに使うか聞かれる。
      Which names would you like to activate HTTPS for?
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      1: 〈旧ドメイン〉
      2: 〈新ドメイン〉
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Select the appropriate numbers separated by commas and/or spaces, or leave input
      blank to select all options shown (Enter 'c' to cancel): 2
      Requesting a certificate for 〈新ドメイン〉
      
    • 成功したらしい
      Successfully received certificate.
      Certificate is saved at: /etc/letsencrypt/live/〈新ドメイン〉/fullchain.pem
      Key is saved at:         /etc/letsencrypt/live/〈新ドメイン〉/privkey.pem
      This certificate expires on 2022-05-28.
      These files will be updated when the certificate renews.
      Certbot has set up a scheduled task to automatically renew this certificate in the background.
      
      Deploying certificate
      Successfully deployed certificate for 〈新ドメイン〉 to /etc/nginx/sites-enabled/〈新ドメイン〉
      Congratulations! You have successfully enabled HTTPS on https://〈新ドメイン〉
      
    • 設定ファイルが書き換えられていた
      server {
        location ~ ^/isso/img {
          return 404;	
        }
        location ~ ^/isso/(.*)$ {
          include uwsgi_params;
          uwsgi_pass 127.0.0.1:8080;
          uwsgi_param SCRIPT_NAME /isso;
          uwsgi_param PATH_INFO /$1;
        }
      
        root	/var/www/〈新ドメイン〉;
        index	index.html index.htm;
        server_name 〈新ドメイン〉;
      
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/〈新ドメイン〉/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/〈新ドメイン〉/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
      }
      server {
        if ($host = 〈新ドメイン〉) {
          return 301 https://$host$request_uri;
        } # managed by Certbot
      
      
        listen 80;
        listen [::]:80;
        server_name 〈新ドメイン〉;
        return 404; # managed by Certbot
      }
      
      • 80番ポートはhttpsに問答無用で転送
      • 443番ポートはSSL有効

DNSサーバの設定

  • 前回と同じですが、次に自分がこの手順に沿って進めるときに前回と同じです、で済まされると不便なので 再掲しておきます。

systemd-resolvedのスタブリゾルバを無効化

  • Ubuntu 18.04 の systemd-resolved で local DNS stub listener の利用をやめる - Qiita を参考にしました

  • systemd-resolvedはsystemd の拡張で、 参照するDNSサーバを柔軟に設定するためのもの スタブリゾルバ機能は、 設定されたDNSサーバを見に行った結果を返す、プロキシのようなDNSサーバとして動作する機能

  • スタブリゾルバが動いていると、53番ポートが塞がって使えないので止める。

  • 止めるための設定

    ubuntu@raspiu:~$ sudo mkdir /etc/systemd/resolved.conf.d/
    ubuntu@raspiu:~$ sudo vi /etc/systemd/resolved.conf.d/51-disable-stub.conf
    
    • 内容は次の通り
      [Resolve]
        DNSStubListener=no
      
  • スタブリゾルバを使わずにDNSを見に行かせる設定

    ubuntu@raspiu:~$ sudo ln -sf ../run/systemd/resolve/resolv.conf /etc/resolv.conf
    
  • systemd-resolvedに設定を反映

    ubuntu@raspiu:~$ sudo systemctl restart systemd-resolved
    

ホスト名を変更

  • DNSの設定のついでにマシン名を補正する
    • プロンプトに出てくるこれ
      ubuntu@raspiu:~$
             ~~~~~~ ここ
      
  • manのhostname(5)によれば、/etc/hostnameに書くことで設定できる。
    vi /etc/hostname
    
    • 元書いてあるのと同じように、マシン名だけ書いておけばOK
    raspiu
    
  • 再起動すれば反映されるが、再起動しなくてもhostname(1)で設定できる。
    ubuntu@ubuntu:~$ hostname raspiu
    
    • SSHログインをやり直せば反映される。
      ubuntu@ubuntu:~$ exit
      sakai@myPC ~ % ssh raspiu # この辺の設定は略。
      ubuntu@raspiu:~$
      

dnsmasqの設定

  • dnsmasqをインストール
    ubuntu@raspiu:~$ sudo apt install dnsmasq
    
  • dnsmasqを設定
    ubuntu@raspiu:~$ sudo vi /etc/dnsmasq.d/local.conf
    
    • 設定内容は以下の通り
      # Never forward plain names (without a dot or domain part)
      domain-needed
      # Never forward addresses in the non-routed address spaces.
      bogus-priv
      # Set this (and domain: see below) if you want to have a domain
      # automatically added to simple names in a hosts-file.
      expand-hosts
      
      # Do not read resolv.conf
      no-resolv
      # forward unknown names to the router
      server=192.168.0.1
      
  • /etc/hostsに追記
    〈IPアドレス〉     raspiu raspiu.airport
    
  • 反映
    ubuntu@raspiu:~$ sudo systemctl reload dnsmasq
    
  • このDNSサーバを見に行くように設定
    ubuntu@raspiu:~$ sudo vi /etc/netplan/51-wifi.yaml
    
    • nameservers / addresesを更新。
      network:
      	wifis:
      		wlan0:
      			addresses:
      				- 〈IPアドレス〉/24
      			gateway4: 192.168.0.1
      			nameservers:
      				addresses:
      					- 〈IPアドレス〉
      				optional: true
      			access-points:
      				"〈SSID〉":
      					password: 〈パスワード〉
      

メールサーバ

  • Let’s Encryptの証明書はメールサーバにも使えるので使います
  • 注意事項(再掲):パスワード認証なので、全面的にインターネットから接続可能にすることはお勧めできません。 25番ポートのみ開放すれば認証を試行できないので問題ないはずです

Postfixの設定

  • 次のサイトを参考にしております。

  • 前回の記事との差分は次のとおりです

    • 証明書をLet’s Encryptのものに差し替え
  • まずaptを使ってインストール

    ubuntu@raspiu:~$ sudo apt install postfix
    Postfix Configuration: (設定画面が出てくるが特に設定する項目はない)
    
  • 設定ファイルの作成

    • フォルダに移動
      ubuntu@raspiu:~$ cd /etc/postfix
      
    • Ubuntuの(Debianの)デフォルト設定をコピー
      ubuntu@raspiu:/etc/postfix$ sudo cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
      
    • Vimで編集(末尾に追記)
      ubuntu@raspiu:/etc/postfix$ sudo vi main.cf
      
    • 内容
      ### ### Local Configurations ### ###
      # サーバがPostfixとかUbuntuとか名乗るのを止める
      smtpd_banner = $myhostname ESMTP
      # ローカルユーザ向けにメールの新着情報を提供するのを止める(負荷が高いため)
      biff = no
      
      # ホスト名の設定
      myhostname = 〈新ドメイン〉
      mydomain = 〈新ドメイン〉
      mydestination = raspiu.x8x.jp localhost
      
      # 旧ドメイン宛のメールを新ドメインに転送するための設定
      virtual_mailbox_domains = 〈新ドメイン〉,〈旧ドメイン〉
      virtual_alias_maps = hash:/etc/postfix/virtual
      virtual_transport = lmtp:unix:private/dovecot-lmtp
      
      # メールアドレスの構文を厳密にチェックする
      strict_rfc821_envelopes = yes
      # メールアドレスが存在するか調べるVRFYコマンドを無効化(迷惑メール対策)
      disable_vrfy_command = yes
      # HELO/EHLOを必須とする
      smtpd_helo_required = yes
      
      # HELO/EHLOのホスト名がFQDNでない場合拒絶
      smtpd_helo_restrictions = reject_non_fqdn_helo_hostname
      # 送信元のドメインが不正な場合拒絶
      smtpd_sender_restrictions = reject_unknown_sender_domain
      # 宛先が不正な場合と認証なしで他所に送る場合を拒絶
      smtpd_recipient_restrictions =
       reject_unknown_recipient_domain,
       reject_non_fqdn_recipient,
       reject_unverified_recipient,
       reject_unauth_destination
      
      # Let's Encryptの証明書を利用
      smtpd_tls_cert_file=/etc/letsencrypt/live/〈新ドメイン〉/fullchain.pem
      smtpd_tls_key_file=/etc/letsencrypt/live/〈新ドメイン〉/privkey.pem
      
      # 容量制限解除
      message_size_limit = 20480000
      
      # Rspamd
      smtpd_milters = inet:localhost:11332
      milter_protocol = 6
      milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}
      milter_default_action = accept
      
      # Print TLS connection information on the header.
      smtpd_tls_received_header = yes
      
      • Rspamdはネットワークソケット(inet:localhost:11332)を使う
        • Debianのpostfixはデフォルトでchrootが有効。 (smtpdが乗っ取られても悪さできないように、smtpdからアクセスできるファイルを 特定ディレクトリ配下に制限してある。)
        • smtpd_miltersをunixソケットにする場合、その配下にないと動かない
        • そこに置くための設定が面倒なので、ネットワークソケットにしておく
  • master.cfの編集

    ubuntu@raspiu:/etc/postfix$ sudo vi master.cf
    
    • 追記内容は以下の通り
      submission inet n       -       y       -       -       smtpd
            -o syslog_name=postfix/submission
            -o smtpd_tls_security_level=encrypt
            -o smtpd_sasl_auth_enable=yes
            -o smtpd_sasl_type=dovecot
            -o smtpd_sasl_path=private/auth
            -o smtpd_sasl_local_domain=$mydomain
            -o smtpd_tls_auth_only=yes
            -o smtpd_reject_unlisted_recipient=no
            -o smtpd_recipient_restrictions=reject_unknown_recipient_domain,reject_non_fqdn_recipient,permit_sasl_authenticated,reject
            -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
            -o milter_macro_daemon_name=ORIGINATING
      
  • エイリアスの更新

    ubuntu@raspiu:/etc/postfix$ sudo newaliases
    
  • postmasterやinfoを管理者に転送する設定

    ubuntu@raspiu:/etc/postfix$ sudo vi virtual
    
    • virtualの内容
      postmaster	〈転送先メールアドレス〉
      info	〈転送先メールアドレス〉
      root	〈転送先メールアドレス〉
      
    • virtualのハッシュファイルを作成
      ubuntu@raspiu:/etc/postfix$ sudo postmap virtual
      

Dovecotの設定

  • 次のサイトを参考にしております。

  • 前回の記事との差分は次のとおりです

    • 証明書をLet’s Encryptのものに差し替え
  • インストール

    ubuntu@raspiu:/etc/postfix$ sudo apt install dovecot-imapd dovecot-lmtpd dovecot-sieve
    
  • 設定

    ubuntu@raspiu:/etc/postfix$ cd /etc/dovecot/
    ubuntu@raspiu:/etc/dovecot$ sudo vi local.conf
    
    • local.confの内容
      # Authentication
      passdb {
      	driver = passwd-file
      	args = username_format=%u /var/vmail/auth.d/%d/passwd
      }
      userdb {
      	driver = passwd-file
      	args = username_format=%u /var/vmail/auth.d/%d/passwd
      }
      
      # Mail location
      mail_location = maildir:~/maildir
      mail_plugins = acl quota
      
      # Services
      service imap-login {
      	inet_listener imap {
      		address = 0.0.0.0
      		port = 143
      	}
      	inet_listener imaps {
      		address = 0.0.0.0
      		port = 993
      	}
      }
      service lmtp {
      	unix_listener /var/spool/postfix/private/dovecot-lmtp {
      		group = postfix
      		mode = 0600
      		user = postfix
      	}
      }
      service imap {
      }
      service auth {
      	unix_listener /var/spool/postfix/private/auth {
      		group = postfix
      		mode = 0660
      		user = postfix
      	}
      	user = $default_internal_user
      }
      service auth-worker {
       user = $default_internal_user
      }
      
      verbose_proctitle = yes
      
      # Protocols
      protocol lmtp {
      	postmaster_address = postmaster@〈新ドメイン〉   # required
      	mail_plugins = $mail_plugins sieve
      }
      protocol imap {
      	mail_plugins = $mail_plugins imap_acl imap_quota mail_log notify
      }
      
      # Plugins
      plugin {
      	quota = dict:user::file:%h/maildir/dovecot-quota
      	quota_rule = *:storage=1GB
      	quota_rule2 = Trash:storage=+10%%
      	acl = vfile:/var/vmail/conf.d/%d/acls:cache_secs=300
      }
      # for mail filtering
      plugin {
      	sieve = ~/.dovecot.sieve
      	sieve_dir = ~/sieve
      	sieve_global_dir = /var/vmail/conf.d/%d/sieve
      	sieve_before = /etc/dovecot/sieve/rspam_deliver.sieve
      }
      
      # TLS
      ssl_cert = </etc/letsencrypt/live/〈新ドメイン〉/fullchain.pem
      ssl_key = </etc/letsencrypt/live/〈新ドメイン〉/privkey.pem
      
  • 上記で使ったrspam_deliver.sieveを作る

    ubuntu@raspiu:/etc/dovecot$ sudo mkdir sieve
    ubuntu@raspiu:/etc/dovecot$ sudo vi sieve/rspam_deliver.sieve
    
    • rspam_deliver.sieveの内容は以下の通り
      require "fileinto";
      require "imap4flags";
      if header :is "X-Spam" "Yes" {
        fileinto "Junk";
        setflag "\\seen";
        stop;
      }
      
    • コンパイルしておく
      ubuntu@raspiu:/etc/dovecot$ sudo sievec /etc/dovecot/rspam_deliver.sieve
      

Rspamdの設定

  • 次のサイトを参考にしております。

  • 前回の記事と同様です。

  • インストール

    ubuntu@raspiu:/etc/dovecot$ sudo apt install rspamd redis clamav-daemon clamav-freshclam
    ubuntu@raspiu:/etc/dovecot$ cd /etc/rspamd/
    
  • DKIMキーを生成(kyymmdd:セレクタ名。更新するときに変えやすいように日付をつけておく。)

    ubuntu@raspiu:/etc/rspamd$ sudo rspamadm dkim_keygen -s 'kyymmdd' \
      -d xxxx.xx -k local.d/dkim_priv_yymmdd.key \
      | sudo tee local.d/dkim_pub_yymmdd.key
    
    • 秘密鍵のパーミッション設定
      # 所有者をユーザ_rspamdに変更
      ubuntu@raspiu:/etc/rspamd$ sudo chown _rspamd:_rspamd local.d/dkim_priv_yymmdd.key
      # 所有者以外(グループ・他)の読み書き実行全てを除去
      ubuntu@raspiu:/etc/rspamd$ sudo chmod go-rwx local.d/dkim_priv_yymmdd.key
      
  • DNSサーバにdkim_pub.keyの公開鍵を設定する。

    • まず公開鍵を読み出す。
      ubuntu@raspiu:/etc/rspamd$ cat local.d/dkim_pub_yymmdd.key
      
    • 内容は以下のようになっている
      kyymmdd._domainkey IN TXT ( "v=DKIM1; k=rsa; "
              "p=MIG(略)" ) ;
      
    • dnsmasqの設定ファイルを開く
      ubuntu@raspiu:/etc/rspamd$ sudo vi /etc/dnsmasq.d/local.conf
      
    • 次のように追記する。(改行とダブルクオート"を抜く)
      txt-record=kyymmdd._domainkey.xxxx.xx,"v=DKIM1; k=rsa; p=MIG(略)"
      
  • Rspamdの設定。(ファイル数が多いので/etc/rspamd/以下のパスで示す)

    • local.d/antivirus.conf
      clamav {
        attachments_only = false;
        servers = "/run/clamav/clamd.ctl";
      }
      
    • local.d/arc.conf
      path = "/etc/rspamd/local.d/dkim_priv_yymmdd.key";
      selector = "kyymmdd";
      use_esld = false;
      
    • local.d/dkim_signing.conf
      path = "/etc/rspamd/local.d/dkim_priv.key";
      selector = "kyymmdd";
      use_esld = false;
      
    • local.d/milter_headers.conf
      extended_spam_headers = true;
      authenticated_headers = ["authentication-results","x-virus"];
      extended_headers_rcpt = ["@xxxx.xx"]
      use = ["authentication-results","x-spam-level","x-virus"];
      
    • local.d/redis.conf
      servers = "127.0.0.1";
      
    • local.d/statistic.conf
      autolearn = [-5, 10]
      
    • local.d/worker-controller.inc
      bind_socket = "*v4:11334";
      password = "$2$xxx$xxxxxxxxx";
      enable_password = "$2$xxx$xxxxxxxxx";
      
      • passwordの値は次のコマンドで生成する
        ubuntu@raspiu:/etc/rspamd$ rspamadm pw
        Enter passphrase: 
        $2$xxx$xxxxxxxxx
        
    • local.d/worker-normal.inc
      enabled = false;
      
    • local.d/worker-proxy.inc
      milter = yes;
      timeout = 120s;
      bind_socket = localhost:11332;
      upstream "local" {
      	default = yes;
      	self_scan = yes;
      }
      

メールアカウントの作成

  • 前回とほぼ同様ですが、独自ドメインに移行します。

  • ディレクトリを作成

    ubuntu@raspiu:/etc/rspamd$ sudo mkdir /var/vmail
    ubuntu@raspiu:/etc/rspamd$ cd /var/vmail
    ubuntu@raspiu:/var/vmail$ sudo mkdir -p auth.d/xxxx.xx
    ubuntu@raspiu:/var/vmail$ sudo mkdir -p xxxx.xx/xxx/maildir
    ubuntu@raspiu:/var/vmail$ sudo mkdir -p xxxx.xx/isso/maildir
    ubuntu@raspiu:/var/vmail$ sudo chown 5000 xxxx.xx/xxx/maildir
    ubuntu@raspiu:/var/vmail$ sudo chown 5000 xxxx.xx/isso/maildir
    
  • パスワードハッシュを作成

  • パスワードファイルを作成

    sudo vi auth.d/xxxx.xx/passwd
    
    • 内容は以下のようにする
      xxxx@xxxx.xx:$6$xxxx$xxxxxxxx:5000:5000::/var/vmail/xxxx.xx/xxx::userdb_quota_rule=*:storage=1G
      isso@xxxx.xx:$6$xxxx$xxxxxxxx:5000:5000::/var/vmail/xxxx.xx/xxx::userdb_quota_rule=*:storage=1G
      mail address:password hash   :*1  :*2:*3:home directory       :*4:*5
      *1: Used ID. 
      *2: Group ID. 
      *3: Comment/Full Name. 書くことがないので空欄
      *4: Login Shell. システムにログインできるユーザのリストを書くためのpasswd(5)の
            形式を使っているため枠が存在するが、書くことがないので空欄
      *5: passwd(5)には無い枠。Dovecotのプラグイン設定。
      

Webサーバの設定(コメント欄編:Isso)

  • Issoの公式の説明を参考にしております。

  • 前回とほぼ同様ですが、 以下の点を変更しています。

    • pip版がメンテナンスされるようになったので、pip版に戻した
  • 必要ツールをインストールする。

    ubuntu@raspiu:/var/isso$ sudo apt install python3-virtualenv python3-dev \
        uwsgi uwsgi-plugin-python3
    
  • virtualenvを準備する。

    ubuntu@raspiu:~$ sudo mkdir /var/isso
    ubuntu@raspiu:~$ cd /var/isso
    ubuntu@raspiu:/var/isso$ sudo chown ubuntu:ubuntu ./
    
    • virtualenvを作成して有効化
      ubuntu@raspiu:/var/isso$ virtualenv env
      ubuntu@raspiu:/var/isso$ . env/bin/activate
      
  • virtualenvにIssoをインストールする

    (env) ubuntu@raspiu:/var/isso$ pip install isso
    
  • Issoの設定

    (env) ubuntu@raspiu:/var/isso$ vi isso.conf
    
    • 設定内容は以下の通り
      [general]
      dbpath = /var/isso/data/comments.db
      host = http://xxxx.xx/
      max-age = 15m
      notify = smtp
      
      [moderation]
      enabled = true
      
      [smtp]
      username = isso@xxxx.xx
      password = xxxx
      host = raspiu.airport
      port = 587
      security = starttls
      to = xxx@xxxx.xx
      from = isso@xxxx.xx
      timeout = 10
      
  • uWSGIの設定(この場所に置くことで自動起動設定も兼ねる)

    (env) ubuntu@raspiu:/var/isso$ sudo vi /etc/uwsgi/apps-available/isso.ini
    
    • 設定内容は以下の通り
      [uwsgi]
      socket = 127.0.0.1:8080
      master = true
      ; `nproc` = 4 on raspberry pi 4 
      processes = 4
      cache2 = name=hash,items=1024,blocksize=32
      ;
      spooler = /var/isso/mail
      plugin = python3
      module = isso.run
      virtualenv = /var/isso/env
      env = ISSO_SETTINGS=/var/isso/isso.conf
      
    • 有効化
      (env) ubuntu@raspiu:/var/isso$ sudo ln -s ../apps-available/isso.ini /etc/uwsgi/apps-enabled/
      
  • 環境の準備

    • パーミッション設定
      (env) ubuntu@raspiu:/var/isso$ mkdir mail data
      (env) ubuntu@raspiu:/var/isso$ touch data/comments.db
      (env) ubuntu@raspiu:/var/isso$ sudo chown www-data:www-data data data/comments.db mail
      
      • comments.dbが置かれているディレクトリが書き込み可能でないと、 書き込みの際にエラーになる(一時ファイルを作るため?)。 そこで間にdataディレクトリを挟んでいる。
  • Issoの起動

    (env) ubuntu@raspiu:/var/isso$ sudo systemctl restart uwsgi
    

有線LANを使用

  • 有線LAN用の設定を無効化
    ubuntu@raspiu:~$ sudo mv /etc/netplan/51-wifi.yaml /etc/netplan/51-wifi.yaml.disabled
    
  • 新しい設定ファイルを作成
    ubuntu@raspiu:~$ sudo vi /etc/netplan/51-ethernet.yaml
    
  • 内容
    network:
    	version: 2
    	ethernets:
    		eth0:
    			addresses:
    				- 〈IPアドレス〉/24
    			gateway4: 192.168.0.1
    			nameservers:
    				addresses:
    					- 〈IPアドレス〉
    			optional: true
    

hostsファイルの補正

  • /etc/hostsを修正
    〈IPアドレス〉	〈マシン名〉 〈マシン名〉.〈新ドメイン〉
    
    • なんかhostsに3つの名前を書くとrspamdが起動しないので2つにしておく。
  • 反映
    ubuntu@raspiu:~$ sudo systemctl reload dnsmasq