自宅サーバー構築

使用機器
Raspberry Pi 3B

使用OS
Raspberry Pi OS (64bit)

ドメイン取得
ドメイン名取得(独自ドメイン編)※有料—itoyan.com
ドメイン名取得(MyDNS.JP編)※無料—itoyan.mydns.jp
ドメイン名取得(f5,si)※無料—-itochin.f5.si
ドメイン名取得(f5,si)※無料—-video1.f5.si
ドメイン名取得(f5,si)※無料—-music1.f5.si

ホームページ—-wordpress

webサーバー—-apache2

FTPクライアントソフト—–FileZilla
https://filezilla-project.org/download.php?type=client

ターミナルエミュレーター—–Tera Term
https://forest.watch.impress.co.jp/library/software/utf8teraterm/

Tera Termのコーディング(UTF-8)とラズパイの文字セット(日本語にするとEUC-JP)となり合わないと文字化けするので合わせること(ラズパイ側でUTF-8にする)

1 SDカードOS書き込み (SDカード読み取り機能付きのwindows端末からimager使用)
Raspberry Pi os  ダウンロード
https://www.raspberrypi.com/software/

CHOOSE OSは
RaspberyPi os(other)– 選択
RaspberyPi os(64-bit)– 選択
CHOOSE STORAGE—セットしたSDカード

2 Raspberry Piへセット
英語から日本語にする
画面左側下から3つ上Preferencesクリック
Raspberry Pi Configuration から
1–国,言語,時間,名前,パスワード等
2–interfaces SSH–ON
(fcitx-mozc, ssh, perl,はインストール済)
ログアウト(左側一番下)クリック—Rebootクリック

日本語にすると文字セットがEUC-JPとなるためUTF-8にする
Raspberry Piの設定クリック
右端ローカライゼーションのロケールの設定
文字セット—–UTF-8へ

現在のIPアドレスを確認する。(DHCPのアドレス192.168.1.?となってるはず)
(メイン・メニュー(上のバー)の右にある二つの矢印アイコンの上にマウスを持っていき現在のIPアドレスを確認メモし現在のIPアドレス宛にサーバーからping飛ばし通ること)
コマンドライン端末(上左から4つ目LXTerminl)から現在のIPアドレス確認は—–ip a

以上でLinuxパソコンとして使用可能(かなり速度遅い)

3 IPアドレス固定へ
ルーター設定
使用ルーター —-PR-400KI
固定IPアドレス—-192.168.1.120とする
詳細設定—-静的NAT設定—-Webサーバを外部に公開するにチェック—-WebサーバのIPアドレスに192.168.1.120記入—-設定

ラズペリーパイOS設定
GUIで設定の場合
二つの矢印のアイコンをマウスで右クリック。
一番上のWireless & Wired Network Settings を選択。
出てきた設定画面のInterfaceの右にある項目の▼をクリック。
eth0選択。
必要な項目を手動で入力。
IPv4Address—192.168.120
Router—192.168.1.1
DNS Severs—192.168.1.1
入れ終わったら。
Automatically configure empty option のチェックを外し。
Apply、Closeを順に押す。
wlan0はoffにする。
再起動。
現在のIPアドレスを確認する(192.168.1.120)

ルーターからping 192.168.1.120 通ることを確認。

以降サーバー構築
以下ラズパイから,このページを表示させLXTerminlでsudoからコピペして行けば素人でもサーバーとしてうごくはず。
自分のドメイン名で設定のこと。
テキストエディタ作業
LXTerminl使用(上のバー左から4つ目,黒)
$の時sudoから記入
$から#へ su – (sudo省略出来る)
3-1 vimエディター
sudo apt-get -y install vim
(Viエディタはインストール済)
viコマンド
(行番号表示 :set number)
(インサート i )
(escで解除)
(書き込み終了 :wq )
(そのまま終了 :q )
インサートのコピペは編集の貼り付けを使用

上記はwindowsパソコンのTera Termから遠隔操作可能

ルートユーザーの利用
sudo passwd root
パスワード ……入力 (文字表示しない)

更新
sudo apt update
sudo apt upgrade

4 ftpサーバー (FileZilla Client等で使用)
sudo apt-get -y install vsftpd
sudo vi /etc/vsftpd.conf

:set number (行番号表示)
i (インサートモード)

コメント解除(頭の#削除)

(31行目 : コメント解除,書き込み許可)
write_enable=YES
(122, 123行目 : コメント解除して chroot 有効化)
chroot_local_user=YES
chroot_list_enable=YES
(chroot ディレクトリ配下の書き込み許可設定を追記)
allow_writeable_chroot=YES
(125行目 上記追加の場合126行目: コメント解除,chrootリスト指定)
chroot_list_file=/etc/vsftpd.chroot_list
(131行目 上記追加の場合132行目: コメント解除,ディレクトリごと一括での転送有効)
ls_recurse_enable=YES
(最終行へ追記 : chroot のルートディレクトリ指定)
local_root=/var/www/html

ESCを押し

:wq (書き込み終了)

以下Viエディタ操作同じ

(上の階層へ移動を許可するユーザーを 1 行ずつ記載)
sudo vi /etc/vsftpd.chroot_list
ito

(指定しない場合はユーザーのホームディレクトリがルートディレクトリとなる)
(public_html を指定した場合 且つ 当該ディレクトリがないとログインできないので注意)

sudo systemctl restart vsftpd

画面ログアウト–reboot

5 webサーバー
sudo apt-get -y install apache2
sudo systemctl daemon-reload
sudo chmod 777 /var/www/html             (パーミッション)

外部からテスト(http://www.cman.jp/network/support/port.html)—逆引き正引きで自分のグローバルIPアドレスとOK確認

DNSサーバーが未作成のため,使用するwindowsパソコンにはhostsに192.168.1.120  itoyan.com等 追加。
使用するwindowsパソコンのメモ帳を(右クリック)管理者として以下を実行

ローカルディスク(C)—Windows—System32—Drivers—etc—hosts(すべてのファイル選択で表示)—開く

192.168.1.120    itoyan.com
192.168.1.120    itoyan.mydns.jp
192.168.1.120    itochin.f5.si
192.168.1.120    video1.f5.si
192.168.1.120    music1.f5.si
追加保存

http://192.168.1.120
http://グローバルアドレス
hosts編集した端末からhttp://itoyan.com
いずれかでApache2 デフォルトページ確認。

5-1バーチャルホスト用フォルダ作成
sudo mkdir /var/www/html/ito                  (itoyan.comのホームディレクトリ)
sudo chmod 777 /var/www/html/ito         (パーミッション)
sudo mkdir /var/www/html/itoyan           (itoyan.mydns.jpのホームディレクトリ)
sudo chmod 777 /var/www/html/itoyan    (パーミッション)
sudo mkdir /var/www/html/itochin           (itochin.f5.siのホームディレクトリ)
sudo chmod 777 /var/www/html/itochin    (パーミッション)
sudo mkdir /var/www/html/video1           (video1.f5.siのホームディレクトリ)
sudo chmod 777 /var/www/html/video1    (パーミッション)
sudo mkdir /var/www/html/music1           (music1.f5.siのホームディレクトリ)
sudo chmod 777 /var/www/html/music1    (パーミッション)

テスト用ページ作成 (itoyan.comの場合)
————————————–
<html>
<body>
<div style=”width: 100%; font-size: 40px; font-weight: bold; text-align: center;”>
Virtual Host Test Page
itoyan.com
</div>
</body>
</html>
————————————–
上記をTeraPadで作成(ファイル名index.html)しFileZilla FTP Client(ftpサーバー無い場合,プロトコル(T):SFTP-SSH FileTransfea Protocol選択)から/var/www/html/itoへアップロード
上記itoyan.comをitoyan.mydns.jpにし/var/www/html/itoyanへアップロード
上記itoyan.comをitochin.f5.siにし/var/www/html/itochinへアップロード
上記itoyan.comをvideo1.f5.siにし/var/www/html/video1へアップロード
上記itoyan.comをmusic1.f5.siにし/var/www/html/music1へアップロード

5-2 バーチャルホストのドメイン設定(ファイル名virtual.host.confにした)

sudo vi /etc/apache2/sites-available/virtual.host.conf

スクリプト


<VirtualHost *:80>

DocumentRoot /var/www/html/ito
ServerName itoyan.com
ServerAdmin ito@asahinet.jp
ErrorLog /var/log/apache2/itoyan.com.error.log
CustomLog /var/log/apache2/itoyan.com.access.log combined

</VirtualHost>

<VirtualHost *:80>

DocumentRoot /var/www/html/itoyan
ServerName itoyan.mydns.jp
ServerAdmin ito@asahinet.jp
ErrorLog /var/log/apache2/itoyan.mydns.jp.error.log
CustomLog /var/log/apache2/itoyan.mydns.jp.access.log combined

</VirtualHost>

<VirtualHost *:80>

DocumentRoot /var/www/html/itochin
ServerName itochin.f5.si
ServerAdmin ito@asahinet.jp
ErrorLog /var/log/apache2/itochin.f5.si.error.log
CustomLog /var/log/apache2/itochin.f5.si.access.log combined

</VirtualHost>

<VirtualHost *:80>

DocumentRoot /var/www/html/video1
ServerName video1.f5.si
ServerAdmin ito@asahinet.jp
ErrorLog /var/log/apache2/video1.f5.si.error.log
CustomLog /var/log/apache2/video1.f5.si.access.log combined

</VirtualHost>

<VirtualHost *:80>

DocumentRoot /var/www/html/music1
ServerName music1.f5.si
ServerAdmin ito@asahinet.jp
ErrorLog /var/log/apache2/music1.f5.si.error.log
CustomLog /var/log/apache2/music1.f5.si.access.log combined

</VirtualHost>

———————————-
上記ファイル作成

sudo a2dissite 000-default   (000-default.conf停止)
sudo a2ensite virtual.host   (virtual.host.conf開始)
sudo systemctl reload apache2
sudo service apache2 restart
sudo systemctl restart apache2
sudo systemctl status apache2.service   (確認– activ (running) となっていればok)

(virtual.host.conf等新ファイル作成の場合、a2ensite virtual.hostで開始)
(a2dissite virtual.hostで停止  a2en–有効 a2dis–無効)

6 php
sudo apt-get -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring

sudo vi /etc/php/7.4/apache2/php.ini    (962行目コメント解除タイムゾーン設定)
date.timezone = “Asia/Tokyo”

sudo systemctl reload apache2
sudo systemctl restart apache2

テストページ作成

sudo echo ‘<?php phpinfo(); ?>’ > /var/www/html/ito/info.php       (<?php phpinfo()の部分コピペ出来ないのでテキスト形式のコピペか手入力)

http://itoyan.com/info.php
(Web ブラウザーでテストページにアクセスして、正常にページが表示されれば OK。)

7 MariaDB(mysqlの改良版)データベース
sudo apt-get -y install mariadb-server
sudo mysql_secure_installation    (全てyes や パスワード入力)
sudo mysql -u root -p
MariaDB[(none)]> select user,host,plugin from mysql.user;
MariaDB[(none)]> show databases;
MariaDB [(none)]> select version();   (バージョンチェック)
MariaDB[(none)]> exit
sudo mariadb –version (クライアントのバージョン)
(インストールしたバージョンと同じであれば正しくインストールできています)

8 phpMyAdmin インストール

sudo apt -y install phpmyadmin
(スペースで選択, Tabで決定,enterかスペースで実行)
(phpMyAdmin を使用する Webサーバーソフトウェアを選択以下全て[Yes]でOK)
phpmyadmin ユーザー用の MariaDB パスワードを設定)
[Yes]
[はい]
sudo systemctl reload apache2

クライアント端末より操作
http://itoyan.com/phpmyadmin/
(ユーザー名 root パスワード … )
データベースへユーザー登録(ito,itoyan,itochin)
項目全てチェック

9 自動更新

1 Mydns.jp

sudo crontab -e

2vim選択

(以下の1行を追加して保存)
*/10 * * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html
ドメイン名 itoyan.mydns.jp
(mydns.jp のマスターID——–************)
(mydns.jp のパスワード——–************)

2 f5.si
*/10 * * * * wget -O DDNSNow_update.log “https://f5.si/update.php?domain=video1&password=パスワード
*/10 * * * * wget -O DDNSNow_update.log “https://f5.si/update.php?domain=music1&password=パスワード

sudo systemctl start cron
(sudo systemtl restart cron)
動作確認
systemctl status cron

2 value-domain.com

1  (新たに下記shファイルを作成)

sudo vi /usr/local/bin/valuedomain_ddns.sh

スクリプト

——————————————————

#!/bin/bash
#本スクリプトはValueDomainで管理されているドメインのIPを更新するものです
# スクリプトが原因で発生した一切の損害等に対し作成者は責任を負いません
# その為、使用は自己責任でお願いいたします。
# Author: bamboo[BAMBO] bamboo.pool.jp@gmail.com
# ユーザー設定
#=============================
# 更新対象のドメイン名を設定します 例) bammboo-pool.com
DOMAIN_NAME=itoyan.com
# ValueDomain上でDDNS用に設定したパスワードを記載します(※ValueDomainのログインパスワードではありません)
PASSWORD=*****
# 更新対象のホスト名を設定します 例) a test xxx.xxx.xxx.xxx を更新する場合は test
TARGET_HOST=*
#=============================
# ! 警告 ! 以降の行は書き換えないでください
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# ValueDomain CGI URL
URL=https://dyn.value-domain.com/cgi-bin/dyn.fcg
# ValueDomain IP確認CGI URL
URL_IP_GET=${URL}?ip
# 現在のIPアドレスを取得
IP_ADR_NOW=`wget -qO- ${URL_IP_GET}`
if [[ “${IP_ADR_NOW}” =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] ; then
echo “現在のIPアドレスは ${IP_ADR_NOW} です”
else
echo “取得したIPアドレス「${IP_ADR_NOW}」が不正です。”
exit
fi
# 前回のIPアドレスを格納するファイル名
IP_ADR_FILE=”IP_ADDRESS”
# 前回のIPアドレスを格納したファイルへのパス
IP_ADR_FILE_PATH=./${IP_ADR_FILE}
# 前回のIPアドレスを格納したファイルが存在するかチェック
if [ ! -e ${IP_ADR_FILE_PATH} ]; then
# 存在しない場合はdummy IPアドレスで作成する
echo “0.0.0.0” > ${IP_ADR_FILE_PATH}
fi
# 前回のIPアドレスを取得
IP_ADR_BEFORE=`cat ${IP_ADR_FILE_PATH}`
echo “前回のIPアドレスは ${IP_ADR_BEFORE} です”
if [ ${IP_ADR_NOW} != ${IP_ADR_BEFORE} ]; then
echo “IPアドレスの更新を試みます”
URL_IP_PUT=”${URL}?d=${DOMAIN_NAME}&p=${PASSWORD}&h=${TARGET_HOST}&i=${IP_ADR_NOW}”
RESULT=`wget -qO- ${URL_IP_PUT} | sed -n ‘1p’ | sed ‘s/status=//g’`
# ステータスコードは https://www.value-domain.com/ddns.php?action=howto を参照しています
case “${RESULT}” in
# 更新に成功
“0”)
echo “OK DNSの更新が正常に完了しました。”
echo ${IP_ADR_NOW} > ${IP_ADR_FILE_PATH}
;;
# 不正なリクエスト
“1”)
echo “ERROR 不正なリクエスト”
;;
# 不正なドメインとパスワード
“2”)
echo “ERROR ドメイン名かパスワードが間違っています”
;;
# 不正なIPアドレス
“3”)
echo “ERROR 設定しようとしたIPアドレス「${IP_ADR_NOW}」が不正です”
;;
# パスワードが一致しない
“4”)
echo “ERROR パスワードが間違っています”
;;
# データベースサーバーが混雑している
“5”)
echo “ERROR 現在ValueDomainが混雑しています。”
;;
# 更新対象のレコードがない
“8”)
echo “ERROR 更新対象のレコード「${TARGET_HOST}」が見つかりませんでした。”
;;
# その他のエラー
“9”)
echo “ERROR 原因不明のエラーが発生しました。ValueDomainでDDNSが有効に設定されているかを確認してください。”
;;
# 連続アクセス等の過負荷エラー
“503”)
echo “ERROR 只今ValueDomainのサーバーが混雑しています。”
;;
# 既定されていないステータス
*)
echo “ERROR 既定されていないステータスコード「${RESULT}」を検出しました。”
;;
esac
else
echo “前回とIPアドレスは変わっていません。”
fi

——————————————————-

(パーミッション)

sudo chmod 755 /usr/local/bin/valuedomain_ddns.sh

sudo crontab -e

2-57/5 * * * * bash /usr/local/bin/valuedomain_ddns.sh

2  更新用シェルスクリプト

DOMAINNAME= , PASSWORD= , HOSTNAME= を設定します。 以下のスクリプトは過去記事に内容を合わせています。 login.example.com のような特定のホストを更新する場合は、HOSTNAME=login となります。

valuedomain.sh
———————————
#/bin/bash

#VARIABLES
DOMAINNAME="itoyan.com"
PASSWORD="password"
HOSTNAME="*"
MYIP=""

#外部IP取得
MYIP=`wget -q -O - "https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip"`
#cgiがbusyにことがあるのでsleep
sleep 5
#更新処理
wget -q -O - "https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$DOMAINNAME&p=$PASSWORD&h=$HOSTNAME&i=$MYIP"

自動更新設定

前項で作成したスクリプトをcrontab -e から、以下を追記して定期的に更新するようにします。 設定例は 30分ごと です。

crontab -e
*/30 * * * * /root/valuedomain.sh

10 wordpress
(ダウンロードサイト)

ダウンロード


WordPress のインストール – サポートフォーラム
以降wordpress参照

10-2 アップロード上限サイズ変更,100Mへ変更の場合
sudo vi /etc/php/7.4/apache2/php.ini
(694行目 post_max_size = 100M (デフォルト8M))
(846行目 upload_max_filesize = 100M (デフォルト2M)
(849行目 max_file_upload = 100 (デフォルト20ファイル)

11 リセット関係
sudo systemctl daemon reload
sudo systemctl restart apache2
sudo sudosystemctl restart ssh
sudo systemctl restart cron

(Apt-getでインストールしたアプリをファイルごと削除)
sudo apt-get purge インストールしたアプリ

12その他
外部からのポートチェック
http://www.cman.jp/network/support/port.html
ipアドレス確認
https://www.ugtop.com/spill.shtml
Website Test
https://www.websitepulse.com/tools/website-test