2022年12月

自宅サーバ

VPS を知ってから、ずっと VPS を使ってサーバを建てていたので、何年ぶりだか、とても久しぶりです。
プライベート IP アドレスの「192.168.1.」が懐かしい。w

ネットワーク図を描いてみました。キチンとした描き方を知らないのですが、ま、こんな感じです。


サーバ

サーバといっても、古い普通のノートPCです。
OS は、CentOS 7 です。
CentOS Stream 8 では、エラーが出て「Darwin Streaming Server」のインストールができなかったので。

外部には「Darwin Streaming Server」を使って、音楽配信をしています。ポートは、8000番です。
あとは、内部向けのいわゆるイントラネットってヤツを 22(SSH), 80(HTTP), 443(HTTPS)番ポートで。

サーバ用途で使うノートPCなので、閉じてもスリープさせないために下記設定をしています。

~]# vi /etc/systemd/logind.conf

HandleSuspendKey=ignore HandleHibernateKey=ignore HandleLidSwitch=ignore

反映。

~]# systemctl restart systemd-logind.service

ルータ

WAN 側、Cloudflare からの80番ポートを、ルータのポートフォワーディングを使って、サーバの8000番ポートに転送しています。なので、外部からブラウザでアクセスする場合には、アドレスにポート指定はいりません。ちなみに、ドメインは無料ドメインの .tk です。


Cloudflare

「Darwin Streaming Server」が、IPv6 に対応していないので、DNS には、IPv4 だけ設定しています。
固定 IP アドレスではないので、Cloudflare API を利用して、DNS レコードの IP アドレスを自動更新にしてみようかと思ったのですが、「無料ドメインはダメ!」とかエラーが出ましたわ。
ただ、NURO 光なのですが、IPv4 は全然変わっていないと思います。IPv6 の方はたまに変わっていますけど。


メール

OP25B(Outbound Port 25 Blocking)規制のため、メール送信ができなかったので、Postfix から Gmail 経由でメールを送信するようにしています。※ From アドレスが Gmail になります。

Gmail を経由させるには「アプリパスワード」を使った認証が必要で、Gmail の「アプリパスワード」は、2段階認証を設定していないと作成できません。

アプリを選択で「メール」を選択。デバイスを選択で「その他(名前を入力)」を選択。

生成したアプリパスワードを元に、Gmail の SMTP 認証情報ファイルを作成。

~]# vi /etc/postfix/gmail

[smtp.gmail.com]:587 <Gmailのアドレス>:<Gmailのアプリパスワード>

パーミッションを設定。

~]# chmod 600 /etc/postfix/gmail

Postfix 用の DB ファイルを生成。

~]# postmap /etc/postfix/gmail

Postfix の設定ファイルの最終行に以下の設定を追加。

~]# vi /etc/postfix/main.cf

relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/gmail smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain smtp_use_tls = yes

設定反映。

~]# systemctl reload postfix

PHP

CentOS 7 では、標準でインストールされる PHP のバージョンが「5.4.16」で、あまりに古くて支障がでそうなので、「7.4」をインストールしています。
EPEL と Remi のリポジトリのインストールが必要です。

EPEL のリポジトリをインストール。

~]# yum install epel-release

EPEL 設定ファイルの「enabled=1」を「enabled=0」に変更。

~]# vi /etc/yum.repos.d/epel.repo

Remi のリポジトリをインストール。

~]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

「5.4.16」をインストールしてしまっていたら。

~]# yum remove php*

「7.4」をインストール。
以下のエラーがでるので、予め EPELから「libraqm」をインストールする。

エラー: パッケージ: gd3php-2.3.3-7.el7.remi.x86_64 (remi) 要求: libraqm.so.0()(64bit)

~]# yum install --enablerepo=epel libraqm

「7.4」をインストール。

~]# yum install --enablerepo=remi,remi-php74 php php-mbstring php-gd php-json php-xml php-mysqlnd

バージョン確認。

~]# php -v

Imagick インストール

~]# yum install ImageMagick ImageMagick-devel ~]# yum install --enablerepo=remi,remi-php74,remi-safe php-pear php-devel ~]# pecl install imagick

「You should add "extension=imagick.so" to php.ini」と表示されているので、php.ini に「extension=imagick.so」を追加。

~]# vi /etc/php.ini

Apache の再読み込み。

~]# systemctl reload httpd

確認。

~]# php -i | grep imagick

自己署名証明書で SSL 化

ちょっと意外なところで SSL 化を要求された(※)ので、プライベートアドレスを自己署名証明書で https アクセスできるようにしました。

※ JavaScript でクリップボードへテキストをコピーするのに、「Clipboard API」とやらを使っているのですが、コイツが SSL に対応したページでないと動作しないのですわ。
Uncaught TypeError: Cannot read properties of undefined (reading 'writeText')

mod_ssl インストール。

~]# yum -y install mod_ssl

秘密鍵と自己署名証明書を作成。(入力したのは3ヶ所、あとはエンター。)

~]# openssl req -x509 -sha512 -nodes -days 3650 -newkey rsa:2048 -keyout private.key -out server.crt Generating a 2048 bit RSA private key ‥‥‥‥‥ ‥‥‥‥‥ Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:192.168.1.73 Email Address []:

鍵と証明書を SSL 設定ファイル(/etc/httpd/conf.d/ssl.conf)にデフォルトで書かれているパス,ファイル名で(上書き)保存しちゃう。

~]# mv server.crt /etc/pki/tls/certs/localhost.crt ~]# mv private.key /etc/pki/tls/private/localhost.key

設定反映。

~]# systemctl reload httpd

ポート開放。

~]# firewall-cmd --add-service=https --zone=public --permanent ~]# firewall-cmd --reload

- guitar site WAVE -