Server をコンテナに変更したことにともなって、ついでにフロントエンド用のコンテナに Nginx で Reverse Proxy を、バックエンド用コンテナに Apache を、クライアントからバックエンドまで SNI で HTTP/2 運用するためのメモを書いておく。とりあえず今はこの構成で落ち着いている。
Ubuntu(CT) のインストール
テンプレートのダウンロード
CT テンプレートを保存できる適当なストレージに保存する。Turnkey Linux は使ったことがないけど、いろいろお試し可能。
LXC コンテナのインストール
管理画面右上の青いボタン「CT 作成」をクリックしてコンテナを作る。
自分の環境だと Nginx、Apache、Nextcloud の3つ。1つ作って初期設定だけ終えたらテンプレート化してしまい、クローンを作るのが手っ取り早いけど、大して時間はかからない。
当たり前だけど仮想マシンに比べて設定項目が少なくお手軽に使える。
CT ID、ホスト名、root のパスワードを入力して次へ。
ダウンロードしたストレージからテンプレートを選択して次へ。
ディスクサイズを入力して次へ。後からリサイズ(増加)することも可能。
ここでドライブを追加したい場合は左下の「追加」からマウントポイントなどを入力する。
CPU のコア数を入力して次へ。これも CPU 利用率を見ながら後から増やすことが可能。
メモリとスワップを入力して次へ。これも後から変更可能。
IPv4 やゲートウェイを入力して次へ。こちらも後から管理画面で変更可能。
Proxmox(LXC)が作成するためコンテナのコンソールからは変更できない。
DNS の設定。特別な理由がなければ「ホスト設定を使用する」で OK 。
最終確認。問題なければ「完了」をクリック。
最後が「Task OK」なら無事終了。
コンテナを起動してコンソールから root でログインする。パスワードは途中設定したもので。
Ubuntu の設定
update , upgrade
お約束。
root@Test:~# apt update
root@Test:~# apt -y upgrade
日本語ロケール、日本語マニュアルの追加
基本的にサーバー PC にローカルでログインすることはなく、ssh でリモートログインしている。
もちろん Proxmox 仮想マシンのコンソールでもOK。
root@Test:~# apt install -y language-pack-ja
root@Test:~# localectl set-locale 'LANG=ja_JP.utf8'
root@Test:~# apt install -y manpages-ja manpages-ja-dev
root@Test:~# timedatectl set-timezone Asia/Tokyo
ログインし直して確認。
root@Test:~# locale
LANG=ja_JP.utf8
LANGUAGE=
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
sudo できる user の追加
常に root で運用するなら不要だけど、気持ち悪いから user(例は hoge)を追加する。
root@Test:~# adduser hoge
ユーザー `hoge' を追加しています...
新しいグループ `hoge' (1000) を追加しています...
新しいユーザー `hoge' (1000) をグループ `hoge' に追加しています...
ホームディレクトリ `/home/hoge' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
hoge のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム []:
部屋番号 []:
職場電話番号 []:
自宅電話番号 []:
その他 []:
以上で正しいですか? [Y/n] y
root@Test:~# gpasswd -a hoge sudo
ユーザ hoge をグループ sudo に追加
update , upgrade の自動化
ログインしなおして以下、基本的にユーザー hoge で作業する。
パッケージ unattended-upgrades をインストールする。
hoge@Test:~$ sudo apt install unattended-upgrades
パッケージリストの更新とアップグレードの設定ファイル確認、修正。
hoge@Test:~$ cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
hoge@Test:~$ sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
〜〜〜
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
〜〜〜
このあたりでテンプレート化しておくと良いかも。
Reverse Proxy(Nginx)の設定
Nginx のインストール
インストール。
hoge@Test:~$ sudo apt -y install nginx
SSL はバックエンドの Apache で終端させるため、SNI(Server Name Indication)を設定する。
詳細は次の記事を参照。
バックエンドサーバ−(Apache)の設定
とりあえずダラダラと必要なソフトをインストールして、個別の設定は後回し。
Web Server , FTP Server のインストール
Apache と ProFTPD をインストール。ついでにドキュメントもインストール。
hoge@Test:~$ sudo apt install -y apache2 apache2-doc proftpd-basic proftpd-doc
MariaDB 10.3 のインストール
MySQL から乗り換えた。とりあえずスタートしておく。
hoge@Test:~$ sudo apt install -y mariadb-server
hoge@Test:~$ sudo service mysql start
PHP 関係のインストール
hoge@Test:~$ sudo apt install -y php7.4 php7.4-fpm php7.4-mysql
phpMyAdmin のインストール
何かと便利。サーバーの種類は「apache2」、「dbconfig-commonで設定しますか?」は「yes」 、ユーザー「phpmyadmin」のパスワードを聞かれるので2回入力する。
hoge@Test:~$ sudo apt install -y phpmyadmin
念の為、次のコマンドを実行して MariaDB との通信が TCP/IP になるよう再構築する。
hoge@Test:~$ sudo dpkg-reconfigure phpmyadmin
root のパスワードを設定する(上記コマンド実行中に設定されなかった場合)。
hoge@Test:~$ sudo mysql -u root
mysql> update mysql.user set password=password('root用のパスワード') where user = 'root';
mysql> flush privileges;
mysql> exit;
またはこちら。
hoge@Test:~$ sudo mysqladmin -u root password 'root用の任意パスワード'
ユーザー phpmyadmin への権限付与
権限付与以外の全ての権限を付与する場合。
hoge@Test:~$ sudo mysql
まだユーザー phpmyadmin を追加していない場合はここから。
mysql> create user 'phpmyadmin'@'localhost' identified by 'パスワード';
既にユーザー phpmyadmin を追加している場合はここから。
mysql> grant all on *.* to 'phpmyadmin'@'localhost' with grant option;
mysql> flush privileges;
phpmyadmin.conf の編集
phpmyadmin.conf に2行追加する。
併せてインストール直後は phpMyAdmin のログイン画面が丸見えなので、/usr/share/phpmyadmin/ に .htaccess を設置して、Basic認証によるアクセス制限をかけておく。
hoge@Test:~$ sudo vi /etc/apache2/conf-enabled/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
# 以下の2行を追加
AllowOverride All
Require all granted
$ sudo service apache2 restart
Apache VirtualHost の設定
HTTP2 の有効化準備。
hoge@Test:~$ sudo a2enmod http2
RewriteEngine の有効化。
hoge@Test:~$ sudo a2enmod rewrite
mod_ssl の有効化。
hoge@Test:~$ sudo a2enmod ssl
mod_headers の有効化。Nextcloud でセキュリティ警告(HSTS)を消すときに必要。
hoge@Test:~$ sudo a2enmod headers
設定ファイルの編集。/etc/apache2/sites-available の 000-default.conf をコピーして編集してもいい。あらかじめ DocumentoRoot で指定するディレクトリを作成しておくこと。でないと Apache は起動しない。
# 編集する
hoge@Test:~$ sudo vi /etc/apache2/sites-available/ex1.mydns.jp.conf
<VirtualHost *:80>
ServerName ex1.mydns.jp
DocumentRoot /home/hoge/public_html/ex1.mydns.jp
ErrorLog /var/log/apache2/virtual.host.error.log
CustomLog /var/log/apache2/virtual.host.access.log combined
LogLevel warn
<Directory /home/hoge/public_html/ex1.mydns.jp>
Options FollowSymlinks Includes
AllowOverride All
AddType text/html .html
Require all granted
</Directory>
</VirtualHost>
Apache の設定ファイルの有効化と確認と起動
# VirtualHost の有効化
hoge@Test:~$ sudo a2ensite ex1.mydns.jp.conf
# 設定ファイルの確認
hoge@Test:~$ sudo apache2ctl -t
Syntax OK
# Apacheを再起動する
hoge@Test:~$ sudo service apache2 restart
サーバー証明書
certbot をインストールする。
hoge@Test:~$ sudo apt install certbot python3-certbot-apache
certbot を実行して証明書を取得する。リダイレクトはこのときに設定すること。
hoge@Test:~$ sudo certbot
certbot を実行してできた設定ファイルに Protocols h2 http/1.1 を追加する。
hoge@Test:~$ sudo vi /etc/apache2/sites-enabled/ex1.mydns.jp-le-ssl.conf
〜
Protocols h2 http/1.1
〜
〜
Apache Manual の有効化
hoge@Test:~$ sudo a2enconf apache2-doc
hoge@Test:~$ sudo service apache2 restart
FPM/FastCGI の設定
www.conf を編集する。
hoge@Test:~$ cd /etc/php/7.4/fpm/pool.d
hoge@Test:~$ sudo vi www.conf
# ここだけ編集
user = hoge
group = hoge
php.ini を編集する。
FastCGI を使用する場合は、~/public_html/ex1.mydns.jp/ に .user.ini を設置することができる。
hoge@Test:~$ cd /etc/php/7.4/fpm/
hoge@Test:~$ sudo vi ./php.ini
# アップロードファイルサイズやメモリ上限などなど適宜編集
# .user.ini の場合は次を記述して適宜変更する。
;メモリ使用量の上限
memory_limit = 1000M
;POSTデータの最大サイズ ※合計サイズ
post_max_size = 1000M
;1ファイルあたりの最大アップロードサイズ
upload_max_filesize = 1000M
CGI版PHPの有効化(モジュール版PHPはインストールしてない)
hoge@Test:~$ sudo a2enconf php7.4-fpm
hoge@Test:~$ sudo a2enmod proxy_fcgi
再起動
hoge@Test:~$ sudo service php7.4-fpm restart
hoge@Test:~$ sudo service apache2 restart
phpMyAdmin のエラーメッセージを消す
下の画像のようにエラーメッセージが出ているから対策する。
FastCGIを有効化したことでパーミッションの設定を変更する必要がある。
出ているメッセージは2つ。
- 設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。
- $cfg['TempDir'] (/var/lib/phpmyadmin/tmp/) にアクセスできません。phpMyAdmin はテンプレートをキャッシュすることができないため、低速になります。
対策は、 /var/lib/ で phpmyadmin のパーミッションを変更すればよい。
hoge@Test:~$ sudo chown -R hoge:hoge ./phpmyadmin
ProFTPD
DefaultRoot はレンタルサーバーと同じようにユーザーのホームディレクトリにした。この中の public_html に公開ドキュメントを置く。
hoge@Test:~$ sudo vi /etc/proftpd/proftpd.conf
※変更したのはこれくらい
ServerName "HTTP Server"
IdentLookups off
UseReverseDNS off
DefaultRoot ~/public_html
PassivePorts 49152 65534
Umask 072 072
hoge@Test:~$ sudo service proftpd restart
おわりに
あちこちに書き残していたものをまとめてみた。とりあえず WordPress と Nextcloud のインストール環境は整うと思う。ダメならググれば何とかなるでしょう。
コメント