WEBサーバの作り方|こだわりのないブログ

WEBサーバの作り方

2024年09月27日

自宅でサーバの運営をはじめてからすでに10年を過ぎた。

その間に3回、サーバに逝かれてしまった。

毎回、復帰作業で悩むので、メモの意味を込めて記録する。

構成は、つぎのとおり
・Ubuntu(OS)
・Apches2(サーバ)
・vsftpd(FTPサーバ)
・PHP(サーバーサイドのスクリプト言語)
・回線終端装置(ONU)の設定
・Let's Encrypt(SSL証明書)

Ubuntsu(OS)のインストール

Ubuntu_logo

OS(Ubuntu22.04)をクリーンインストールする。

ダウンロードは、こちらから、いずれかのサイトからダウンロードして、 DVDかUSBに保存する。

Apache2のインストール

Apache2_logo

ターミナルからインストールする。
sudo apt-get update
sudo apt-get install apache2

設定をインストラクションに従い、設定が終わったらサーバを再起動する。
sudo systemctl start apache2

ファイアーウオールを調整する。
sudo ufw allow 'Apache'

ファイアーウオールの状態を確認する。
sudo ufw status

下の表示がでたら設定完了。
Apache ALLOW Anywhere
Apache2(v6) ALLOW Anywhere(v6)

バーチャルホスト設定を設定する。
*[your_domain]はドメイン名など
sudo nano /etc/apache2/sites-available/your_domain.conf

nanoが開くので、下を入力する。

<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>

Apache2を再起動し、ブラウザーのアドレスバーに
localhost
と入力して下のように表示されればインストール完了。

Apache2_default_page

英語だが、ここで Apache2の詳しい設定が説明されている。

vshtpdのインストール

ファイルをリモートからアップロードできるようにFTPサーバをインストールする。
sudo apt install

インストール完了後
sudo service vsftpd status ←activeを確認
sudo ufw allow 20/tcp ←ポート開放
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw enable  ←ファイアウォール開始
sudo ufw status  ←ファイアウォール確認

vshtpdの設定
sudo adduser ftpuser ←「ftpuser」名でアカウント作成(パスワード設定)
sudo usermod -d /var ftpuser
sudo shown ftpuser:ftpuser /var/www ←ドキュメントルート(WWWの中にHPを置く)
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak ←設定ファイル作成・バックアップファイル
sudo nano /etc/vsftpd.conf ←設定ファイルに下記ペースト
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd force_dot_files=YES pasv_min_port=40000 pasv_max_port=50000

PHPのインストール

sudo apt install php libapache2-mod-php
インストール中の質問はすべて「Y」を入力して続行

インストール完了後
sudo kill -9 2995 ←waiting for cache lockが表示されたとき番号(2995)を確認
php -v ←.phpバージョン確認
ls -l /etc/apache2/mods-enabled/ ←有効になってるか確認
sudo a2enmod php8.1

PHPの動作確認
sudo nano /var/www/html/info.php
下コードをコピペする。

WebブラウザからPHPの設定に関する情報を確認する。
下記をアドレスバーに入力する。
http://localhost/info.php

下のように表示される。

PHP

sudo systemctl restart vsftpd ←vsftpd再起動

マルチバイト機能のインストール
sudo apt install php-mbstring

phpにメール送信機能を追加
sudo apt install sendmail ←sendmailをインストール
sudo nano /etc/php/8.1/apache2/php.ini
#sendmail_path = ←コメントを外して、編集
sendmail_path = /usr/sbin/sendmail -t -i
sudo service apache2 restart ←Apache2再起動

回線終端装置(ONU)の設定

Webサーバを外部に公開する設定をする。

プライベートIPアドレスの確認
ip addr show

ONUの設定ページ(アドレス:192.168.1.1)に接続して、静的NATマスカレードにプライベートIPアドレスとポート番号(80と443)を設定する。
*ポート80:HTTP/ポート443:HTTPS

Let's Encryptのインストール

Let's Encrypt

SSL証明書をインストールする。
*あらかじめURLを設定しておくこと。
CertbotをApacheと統合するプラグインで、証明書の取得やWebサーバー内のHTTPS設定がコマンド1つで自動化できる。
sudo apt install certbot python3-certbot-apache
sudo systemctl reload apache2 ←Apache2をリロード

ファイアーウォールの設定
sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'
sudo ufw status ←ファイアーウォールの確認 "Apache Full ALLOW Anywhere"と "Apache Full(v6) ALLOW Anywhere"が表示される。

SSL証明書の取得
sudo certbot --apache
メールアドレスの入力
[A]を入力  ←サービス利用規約に同意
[Y]または[N] ←Electronic Frontier Foundationにメルアドを知らせる
"Which names would you like to activate HTTPS for?" → [ENTER]
"Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access."→ [2]
"Congratulations!"  → インストール完了

自動更新の設定
sudo certbot renew --dry-run

くわしいSSL証明書の取得についてはこちらを参照のこと。

説明に抜けや間違いがあるかもしれない。そのようなときはGoogle先生にお尋ねください。