CT(Ubuntu 20.04 LTS)のインストールとサーバー構築

Server をコンテナに変更したことにともなって、ついでにフロントエンド用のコンテナに Nginx で Reverse Proxy を、バックエンド用コンテナに Apache を、クライアントからバックエンドまで SNI で HTTP/2 運用するためのメモを書いておく。とりあえず今はこの構成で落ち着いている。

目次

Ubuntu(CT) のインストール

テンプレートのダウンロード

CT テンプレートを保存できる適当なストレージに保存する。Turnkey Linux は使ったことがないけど、いろいろお試し可能。

テンプレート

LXC コンテナのインストール

管理画面右上の青いボタン「CT 作成」をクリックしてコンテナを作る。
自分の環境だと Nginx、Apache、Nextcloud の3つ。1つ作って初期設定だけ終えたらテンプレート化してしまい、クローンを作るのが手っ取り早いけど、大して時間はかからない。
当たり前だけど仮想マシンに比べて設定項目が少なくお手軽に使える。

CT ID、ホスト名、root のパスワードを入力して次へ。

LXC コンテナ作成

ダウンロードしたストレージからテンプレートを選択して次へ。

テンプレート

ディスクサイズを入力して次へ。後からリサイズ(増加)することも可能。
ここでドライブを追加したい場合は左下の「追加」からマウントポイントなどを入力する。

ディスク

CPU のコア数を入力して次へ。これも CPU 利用率を見ながら後から増やすことが可能。

CPU

メモリとスワップを入力して次へ。これも後から変更可能。

メモリ

IPv4 やゲートウェイを入力して次へ。こちらも後から管理画面で変更可能。
Proxmox(LXC)が作成するためコンテナのコンソールからは変更できない。

ネットワーク

DNS の設定。特別な理由がなければ「ホスト設定を使用する」で OK 。

DNS

最終確認。問題なければ「完了」をクリック。

確認

最後が「Task 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 のインストール環境は整うと思う。ダメならググれば何とかなるでしょう。

コメント

コメントする

目次