コンテンツへスキップ

メール送信サーバー(Postfix)

以前は、自由に構築できたメールサーバー。確かに、個人サーバーが踏み台にされるケースも多く、現在、多くの人は、プロバイダーのSMTPサーバーを利用したメールサーバーを運用していると思います。

今回は、自宅LAN内の、プログラムや各種ツールからのメールを、普段利用しているメールアドアレスで受信できるように、メールの中継を行います。中継した先は、GoogleのSMTPサーバーを利用します。

(LAN内の環境)→(今回のメール送信サーバー、Postfix)→GoogleのSMTPサーバー

また、Docker内のコンテナは、通常のプライベートLANとは異なるネットワークで動いているので、Docker環境のコンテナからのメールも中継出来るように設定します。

Pstfixのインストール

sudo apt install postfix sasl2-bin bsd-mailx

postfixのインストールを行います。インストール時にメールサーバの構成方法を設定するダイアログが表示されます。

スマートホスト付きインターネットを選択します。
リレー先となるGmailのSMTPサーバーは、 [smtp.gmail.com]:587 となります。

Postfixインストール後の設定 Gmailへの転送設定(ユーザー、パスワード)

新規でsasl_passwdファイルを作成します。
この際の、Gmailアカウントのパスワードは、Goolgeのアカウント設定画面から、Google へのログインのアプリ向けのアプリパスワードを取得します。
https://myaccount.google.com/security分からない方は、「Google アプリ パスワード」で検索すると関連する情報が沢山出てくると思います。

sasl_passwdファイルに、メールの送信経路となる情報を設定します。

vi /etc/postfix/sasl_passwd
#ファイルに記載する内容
[smtp.gmail.com]:587 user@gmail.com:≪取得したGoogle アプリ パスワード≫

作成したファイルのアクセス権を変更。

chmod 0600 /etc/postfix/sasl_passwd

postmapで、メールの送信経路を有効化します。

postmap /etc/postfix/sasl_passwd

Postfix main.cfファイル更新

/etc/postfix/main.cf を用いて、環境に合わせた設定を行います。

  1. smtp_tls_security_level = may を encryptに変更します
  2. relayhost に gmailのsmtpサーバーを設定します
  3. ファイルの最後に、smtp_sasl関係の設定を追加します。
  4. 必要に応じて、mynetworksにローカルLANのIPを追加します
    例:192.168.0.0./24 など
smtp_tls_security_level = encrypt

relayhost = [smtp.gmail.com]:587

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous

main.cf変更後は、postfixを再起動します。

systemctl restart postfix

postfix main.cfにdockerコンテナのIPを追加

main.cfのmynetworksにdockerコンテナのIPを追加します。
mynetworksに、172.18.0.Xを追加しました。172.18.0.0/16などでも動作しました。

docker psでコンテナID(CONTAINER ID)を取得し、docker exec -it {コンテナID} /bin/bashで、コンテナの中に入ります。コンテナ内で、hostname -iを実行しコンテナの利用するIPアドレスが確認出来ます。

ifconfig -aでもdockerが利用しているネットワークを確認できると思います。

main.cf変更後は、postfixを再起動します。

systemctl restart postfix

relay access deniedへの対応

docker環境からのメール送信に苦戦しました。メールが送れない際は、/var/log/mail.logを確認して、エラー内容を見ると原因が分かり、対応方法が見つかります。
私は、Dockerコンテナの利用するIP(自動的に割り振られる)の記載があり、メールのリレーが拒否されていました。

NVIDIA Jetson Nanoのセキュリティ対策

Ubuntuの自動アップデートを設定します。
再起動が必要な際は、指定した時間で再起動するように設定します。
自動アップデートの結果をメール送信するように設定します。

「unattended-upgrades」をインストールと有効化

「unattended-upgrades」をインストールします。

sudo apt install -y unattended-upgrades

インストールした「unattended-upgrades」を有効化します。
以下のコマンドを実行し、表示される画面で<Yes>を選択します。

sudo dpkg-reconfigure -p low unattended-upgrades

<Yes>を選択します。

 

「unattended-upgrades」設定

利用する設定ファイルは、以下の2つのファイルとなります。

  • /etc/apt/apt.conf.d/20auto-upgrades  : 自動アップデートとアップグレードを設定。
  • /etc/apt/apt.conf.d/50unattended-upgrades :詳細設定

「20auto-upgrades」設定

  • APT::Periodic::Update-Package-Lists "1";
    アップグレードの確認間隔
    Daily=1 / Every two days = 2 / Weekly = 7 / Every two weeks = 14 / Never = 0
  • APT::Periodic::Download-Upgradeable-Packages "1"
    セキュリティーアップデートがある場合の動作
    Download and install automatically = 1 / Download automatically = 1 / Display immediately = 0
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

「50unattended-upgrades」設定

以下の設定変更を加えました。

  • Unattended-Upgrade::Mail "aaa@bbbl.com";
    メール通知先の設定
  • Unattended-Upgrade::MailOnlyOnError "true";
    メール通知のタイミングをエラー発生時のみに変更
  • Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
    未使用となったカーネル関連パッケージの自動削除
  • Unattended-Upgrade::Remove-Unused-Dependencies "true";
    未使用となったパッケージの自動削除(apt-get autoremove)
  • Unattended-Upgrade::Automatic-Reboot "true";
    自動再起動が実施されるように設定(自動再起動ON)
  • Unattended-Upgrade::Automatic-Reboot-Time "02:00";
    再起動時の時間を指定
// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

// List of packages to not update (regexp are supported)
Unattended-Upgrade::Package-Blacklist {
//      "vim";
//      "libc6";
//      "libc6-dev";
//      "libc6-i686";
};

// This option will controls whether the development release of Ubuntu will be
// upgraded automatically.
Unattended-Upgrade::DevRelease "false";

// This option allows you to control if on a unclean dpkg exit
// unattended-upgrades will automatically run
//   dpkg --force-confold --configure -a
// The default is true, to ensure updates keep getting installed
//Unattended-Upgrade::AutoFixInterruptedDpkg "false";

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGTERM. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "false";

// Install all unattended-upgrades when the machine is shutting down
// instead of doing it in the background while the machine is running
// This will (obviously) make shutdown slower
//Unattended-Upgrade::InstallOnShutdown "true";

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "user@example.com"
//Unattended-Upgrade::Mail "root";
Unattended-Upgrade::Mail "aaa@bbb.com";

// Set this value to "true" to get emails only on errors. Default
// is to always send a mail if Unattended-Upgrade::Mail is set
//Unattended-Upgrade::MailOnlyOnError "true";
Unattended-Upgrade::MailOnlyOnError "true";

// Remove unused automatically installed kernel-related packages
// (kernel images, kernel headers and kernel version locked tools).
//Unattended-Upgrade::Remove-Unused-Kernel-Packages "false";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

// Automatically reboot *WITHOUT CONFIRMATION*
//  if the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Automatic-Reboot "true";

// If automatic reboot is enabled and needed, reboot at the specific
// time instead of immediately
//  Default: "now"
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";

// Enable logging to syslog. Default is False
// Unattended-Upgrade::SyslogEnable "false";

// Specify syslog facility. Default is daemon
// Unattended-Upgrade::SyslogFacility "daemon";

// Download and install upgrades only on AC power
// (i.e. skip or gracefully stop updates on battery)
// Unattended-Upgrade::OnlyOnACPower "true";

// Download and install upgrades only on non-metered connection
// (i.e. skip or gracefully stop updates on a metered connection)
// Unattended-Upgrade::Skip-Updates-On-Metered-Connections "true";

動作確認

以下のコマンドで、動作確認を実施しておきます。

$ sudo unattended-upgrade --dry-run --debug
created by Rinker
NVIDIA
¥19,000 (2021/08/19 16:46:56時点 Amazon調べ-詳細)

Samba導入

簡単な内容ですが、UbuntuにSambaを導入する方法です。
sambaをインストールし、ユーザー・初期設定を行うと利用可能になります。

Sambaインストール

$ sudo apt-get install -y samba

Samba用のユーザーを登録する

Sambaでは、独自の認証情報を利用するので、Samba用のユーザーを作成します。

$ sudo pdbedit -a "username"

パスワードの設定を要求されるのでパスワードを設定します。

new password:
retype new password:

設定ファイルsmb.confの設定

/etc/samba/smb.confの設定を行います。
最低限の設定として、文字コードの設定と、利用したい共有フォルダーを設定します。

vi /etc/samba/smb.conf
[global]
#"追加"
   dos charset = CP932 
   unix charset = UTF-8
[share]
   path = /mnt/share
   writable = yes
   guest ok = yes
   guest only = yes
   create mode = 0777
   directory mode = 0777

設定変更後の再起動

設定変更後に、サービスを再起動して、導入作業は終了です。
また、サーバー起動時に、Sambaが自動起動するように設定しておきます。

systemctl restart smbd nmbd

systemctl enable smbd nmbd

Docker および Docker Compressを導入

参考記事(Docker導入):

参考記事(Docker導入):

Docker WordPress 導入

Docker Composeを用いて、Wordpressを導入します。Compseファイルを作成し、コンテナをビルド、起動すれば、Wordpressの利用が可能です。
すぐにWordpress環境の利用が可能です。

Docker Composeファイルの作成

プロジェクト用のフォルダーを作成します。

$ mkdir ~/project01
$ cd ~/project01

作成したプロジェクトフォルダーに、Composeファイル(docker-compose.yml) と 環境ファイル(.env) を作成します。

docker-compose.yml サンプル

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    env_file: .env

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - ./wordpress:/var/www/html
    ports: 
      - "8080:80"
    restart: always
    env_file: .env

volumes:
  db_data:

.env サンプル

MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=wordpress_db
MYSQL_USER=wordpress_user
MYSQL_PASSWORD=wordpress_pass

WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_NAME=wordpress_db
WORDPRESS_DB_USER=wordpress_user
WORDPRESS_DB_PASSWORD=wordpress_pass

解説

利用するDBファイルとWordpressファイルの、永続化(保存しておきたいデータ)をCompseファイルで明示的に指定し、コンテナ停止時もデータが保持されるような設定を行います。

/var/lib/mysql に配置されるWordPressのデータベースを、db_dataという名前の永続化領域に指定。

db:
  volumes:
    - db_data:/var/lib/mysql
volumes:
  db_data:

/var/www/html に配置されるWordPress の各種ファイル (wp-config.phpなど) を、ホスト側の ./wordpress フォルダに配置する指定。

wordpress:
  volumes:
    - ./wordpress:/var/www/html

Docker Composeの起動

docker-composeコマンドを用いてコンテナの起動を行います。初回起動時には、コンテナのビルドが行われます。

$ docker-compose up

永続化データの確認

コンテナを停止し、永続化指定したデータが保存されていることを確認します。

control + c で停止してから、
$ docker-compose down

永続化したはずのデータが残っているか確認してみます。

$ docker volume ls
...
local               project01_db_data

以上となります。
実際の運用時には、SQLパラメータ変更やサイトのSSL化を実施しているので、少し異なる設定で運用を行っております。

Docker Compose導入

事前に、Dockerを導入している必要があります。
参考URL:

完全に新しい分野と横目で見ていたコンテナなりDockerという世界。
絶対導入をおすすめですね。
導入時間の短縮、環境自体のモビリティ(移動性)、災害対応向けシステムの構築の用意性、たくさんの観点で導入をおすすめします。
場合によっては、パブリッククラウドへの移行やパブリッククラウド間の移動も簡単になります。(実質、依存パッケージの個別のインストール作業なりが不要となります)

今後、性能、セキュリティなどを見ていこうと思いますが、ドキュメントなりで調べている範囲では、アプリケーションやサービスを提供する上で、必要なもののみを独自環境(コンテナ)に導入する方法は、非常に理にかなっていると思います。

Docker Compose 導入

Docker Compressのインストール方法をWEBなどで調べているとPipやaptでインストールなど、環境などにより各種導入方法が準備されています。
気にする必要があるのは、Cocker Composeのバージョンとなります。
利用したいコンテナのビルドが失敗する場合などは、バージョンを確認して下さい。

Docker Compressインストール参考URL: Install Docker Compose

Ubuntu に Docker Composeを aptで導入

Ubuntu環境で、docker-composeコマンドを実行すると、aptコマンドでのインストール方法がガイドされましたので、aptコマンドを利用してdocker composeを導入しました。結論ですが、バージョンが古く、次に紹介する公式レポジトリから直接導入する方法で、再度上書きインストールしております。

@Intel-NUC:~$ docker-compose
プログラム 'docker-compose' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install docker-compose

さっそく、aptコマンドでインストールしてみると、無事にインストールすることができました。

root@Intel-NUC:~# apt install docker-compose
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
apt-clone archdetect-deb cifs-utils dmeventd dmraid gir1.2-clutter-1.0
gir1.2-clutter-gst-3.0 gir1.2-cogl-1.0 gir1.2-coglpango-1.0
gir1.2-gtkclutter-1.0 gir1.2-networkmanager-1.0 gir1.2-nma-1.0
gir1.2-timezonemap-1.0 gir1.2-xkl-1.0 kpartx kpartx-boot libdbusmenu-gtk4
libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16 libllvm5.0
liblvm2app2.2 liblvm2cmd2.02 libparted-fs-resize0 libqpdf17 libreadline5
linux-headers-oem linux-signed-image-generic-hwe-16.04
linux-signed-image-oem localechooser-data lvm2 python3-icu python3-pam rdate
snapd-login-service user-setup
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
python-backports.ssl-match-hostname python-cached-property
python-cffi-backend python-chardet python-cryptography python-docker
python-dockerpty python-docopt python-enum34 python-funcsigs
python-functools32 python-idna python-ipaddress python-jsonschema
python-mock python-ndg-httpsclient python-openssl python-pbr
python-pkg-resources python-pyasn1 python-requests python-six
python-texttable python-urllib3 python-websocket python-yaml
提案パッケージ:
python-cryptography-doc python-cryptography-vectors python-enum34-doc
python-funcsigs-doc python-mock-doc python-openssl-doc python-openssl-dbg
python-setuptools python-ntlm
推奨パッケージ:
docker.io
以下のパッケージが新たにインストールされます:
docker-compose python-backports.ssl-match-hostname python-cached-property
python-cffi-backend python-chardet python-cryptography python-docker
python-dockerpty python-docopt python-enum34 python-funcsigs
python-functools32 python-idna python-ipaddress python-jsonschema
python-mock python-ndg-httpsclient python-openssl python-pbr
python-pkg-resources python-pyasn1 python-requests python-six
python-texttable python-urllib3 python-websocket python-yaml
アップグレード: 0 個、新規インストール: 27 個、削除: 0 個、保留: 0 個。
1,441 kB のアーカイブを取得する必要があります。
この操作後に追加で 7,393 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-pkg-resources all 20.7.0-1 [108 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 python-cached-property all 1.3.0-1 [6,976 B]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-six all 1.10.0-3 [10.9 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-urllib3 all 1.13.1-2ubuntu0.16.04.3 [58.4 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-chardet all 2.3.0-2 [96.3 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-requests all 2.9.1-3ubuntu0.1 [55.9 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 python-backports.ssl-match-hostname all 3.4.0.2-1 [6,258 B]
取得:8 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 python-websocket all 0.18.0-2 [165 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-ipaddress all 1.0.16-1 [18.0 kB]
取得:10 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 python-docker all 1.9.0-1~16.04.1 [29.9 kB]
取得:11 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 python-dockerpty all 0.4.1-1~16.04.1 [10.9 kB]
取得:12 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 python-docopt all 0.6.2-1build1 [25.6 kB]
取得:13 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-enum34 all 1.1.2-1 [35.8 kB]
取得:14 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-functools32 all 3.2.3.2-2 [10.7 kB]
取得:15 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-funcsigs all 0.4-2 [12.6 kB]
取得:16 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 python-pbr all 1.8.0-4ubuntu1 [46.6 kB]
python-docker (1.9.0-1~16.04.1) を設定しています ...
python-dockerpty (0.4.1-1~16.04.1) を設定しています ...
python-docopt (0.6.2-1build1) を設定しています ...
python-enum34 (1.1.2-1) を設定しています ...
python-functools32 (3.2.3.2-2) を設定しています ...
python-funcsigs (0.4-2) を設定しています ...
python-pbr (1.8.0-4ubuntu1) を設定しています ...
update-alternatives: /usr/bin/pbr (pbr) を提供するために自動モードで /usr/bin/python2-pbr を使います
python-mock (1.3.0-2.1ubuntu1) を設定しています ...
python-jsonschema (2.5.1-4) を設定しています ...
update-alternatives: /usr/bin/jsonschema (jsonschema) を提供するために自動モードで /usr/bin/python2-jsonschema を使います
python-texttable (0.8.1-1) を設定しています ...
python-yaml (3.11-3build1) を設定しています ...
docker-compose (1.8.0-2~16.04.1) を設定しています ...
python-cffi-backend (1.5.2-1ubuntu1) を設定しています ...
python-idna (2.0-3) を設定しています ...
python-pyasn1 (0.1.9-1) を設定しています ...
python-cryptography (1.2.3-1ubuntu0.2) を設定しています ...
python-openssl (0.15.1-2ubuntu0.2) を設定しています ...
python-ndg-httpsclient (0.4.0-3) を設定しています ...
root@Intel-NUC:~# docker-compose -v
docker-compose version 1.8.0, build unknown

curlコマンドを用いたDocker Compse導入

Docker Compressインストール参考URL: Install Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

アクセス権の変更

sudo chmod +x /usr/local/bin/docker-compose
miki@Intel-NUC:~/webserver$ docker-compose --version
docker-compose version 1.24.1, build 4667896b

 

これで、Docker Composeが利用可能になります。
次の記事で、Docker Compseを用いたWordpressの導入方法を紹介します。

Docker 導入

完全に新しい分野と横目で見ていたコンテナなりDockerという世界。
絶対導入をおすすめですね。
導入時間の短縮、環境自体のモビリティ(移動性)、災害対応向けシステムの構築の用意性、たくさんの観点で導入をおすすめします。
場合によっては、パブリッククラウドへの移行やパブリッククラウド間の移動も簡単になります。(実質、依存パッケージの個別のインストール作業なりが不要となります)

今後、性能、セキュリティなどを見ていこうと思いますが、ドキュメントなりで調べている範囲では、アプリケーションやサービスを提供する上で、必要なもののみを独自環境(コンテナ)に導入する方法は、非常に理にかなっていると思います。
そりゃ、世界で広がる理由が分かります。

前提ソフトウェアのインストール

前提ソフトウェアをインストールします。

  • apt-transport-https
  •  ca-certificates
  • curl
  • software-properties-common
root@Intel-NUC:~# apt update -y

root@Intel-NUC:~# apt install -y apt-transport-https ca-certificates curl software-properties-common

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
apt-transport-https はすでに最新バージョン (1.2.32) です。
ca-certificates はすでに最新バージョン (20170717~16.04.2) です。
software-properties-common はすでに最新バージョン (0.96.20.9) です。
software-properties-common は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
apt-clone archdetect-deb cifs-utils dmeventd dmraid gir1.2-clutter-1.0 gir1.2-clutter-gst-3.0 gir1.2-cogl-1.0
gir1.2-coglpango-1.0 gir1.2-gtkclutter-1.0 gir1.2-networkmanager-1.0 gir1.2-nma-1.0 gir1.2-timezonemap-1.0
gir1.2-xkl-1.0 kpartx kpartx-boot libdbusmenu-gtk4 libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16
libllvm5.0 liblvm2app2.2 liblvm2cmd2.02 libparted-fs-resize0 libqpdf17 libreadline5 linux-headers-oem
linux-signed-image-generic-hwe-16.04 linux-signed-image-oem localechooser-data lvm2 python3-icu python3-pam rdate
snapd-login-service user-setup
これを削除するには 'apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
curl
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
139 kB のアーカイブを取得する必要があります。
この操作後に追加で 340 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 curl amd64 7.47.0-1ubuntu2.14 [139 kB]
139 kB を 0秒 で取得しました (1,227 kB/s)
以前に未選択のパッケージ curl を選択しています。
(データベースを読み込んでいます ... 現在 222284 個のファイルとディレクトリがインストールされています。)
.../curl_7.47.0-1ubuntu2.14_amd64.deb を展開する準備をしています ...
curl (7.47.0-1ubuntu2.14) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
curl (7.47.0-1ubuntu2.14) を設定しています ...
root@Intel-NUC:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
OK

Dockerレポジトリを追加

Dockerレポジトリを追加し、パッケージリストの更新を行います。

root@Intel-NUC:~# sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
root@Intel-NUC:~#
root@Intel-NUC:~# apt update -y
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
ー・牴蜑・ http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease
取得:4 https://download.docker.com/linux/ubuntu xenial InRelease [66.2 kB]
取得:5 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages [11.6 kB]
取得:6 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
無視:7 http://oem.archive.canonical.com/updates xenial-dawson InRelease
無視:8 http://oem.archive.canonical.com/updates xenial-oem InRelease
ヒット:9 http://oem.archive.canonical.com/updates xenial-dawson Release
ヒット:11 http://oem.archive.canonical.com/updates xenial-oem Release
187 kB を 1秒 で取得しました (133 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージはすべて最新です。

Docker-ceのインストール

root@Intel-NUC:~# apt install -y docker-ce

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
apt-clone archdetect-deb cifs-utils dmeventd dmraid gir1.2-clutter-1.0 gir1.2-clutter-gst-3.0 gir1.2-cogl-1.0
gir1.2-coglpango-1.0 gir1.2-gtkclutter-1.0 gir1.2-networkmanager-1.0 gir1.2-nma-1.0 gir1.2-timezonemap-1.0
gir1.2-xkl-1.0 kpartx kpartx-boot libdbusmenu-gtk4 libdebian-installer4 libdevmapper-event1.02.1 libdmraid1.0.0.rc16
libllvm5.0 liblvm2app2.2 liblvm2cmd2.02 libparted-fs-resize0 libqpdf17 libreadline5 linux-headers-oem
linux-signed-image-generic-hwe-16.04 linux-signed-image-oem localechooser-data lvm2 python3-icu python3-pam rdate
snapd-login-service user-setup
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
aufs-tools cgroupfs-mount containerd.io docker-ce-cli git git-man liberror-perl pigz
提案パッケージ:
git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki
git-svn
以下のパッケージが新たにインストールされます:
aufs-tools cgroupfs-mount containerd.io docker-ce docker-ce-cli git git-man liberror-perl pigz
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
89.2 MB のアーカイブを取得する必要があります。
この操作後に追加で 409 MB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 pigz amd64 2.3.1-2 [61.1 kB]
取得:2 https://download.docker.com/linux/ubuntu xenial/stable amd64 containerd.io amd64 1.2.10-3 [19.9 MB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 aufs-tools amd64 1:3.2+20130722-1.1ubuntu1 [92.9 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial/universe amd64 cgroupfs-mount all 1.2 [4,970 B]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 liberror-perl all 0.17-1.2 [19.6 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 git-man all 1:2.7.4-0ubuntu1.6 [736 kB]
取得:7 https://download.docker.com/linux/ubuntu xenial/stable amd64 docker-ce-cli amd64 5:19.03.4~3-0~ubuntu-xenial [42.4 MB]
取得:8 https://download.docker.com/linux/ubuntu xenial/stable amd64 docker-ce amd64 5:19.03.4~3-0~ubuntu-xenial [22.8 MB]
取得:9 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 git amd64 1:2.7.4-0ubuntu1.6 [3,176 kB]
89.2 MB を 3秒 で取得しました (23.0 MB/s)
以前に未選択のパッケージ pigz を選択しています。
(データベースを読み込んでいます ... 現在 222291 個のファイルとディレクトリがインストールされています。)
.../pigz_2.3.1-2_amd64.deb を展開する準備をしています ...
pigz (2.3.1-2) を展開しています...
以前に未選択のパッケージ aufs-tools を選択しています。
.../aufs-tools_1%3a3.2+20130722-1.1ubuntu1_amd64.deb を展開する準備をしています ...
aufs-tools (1:3.2+20130722-1.1ubuntu1) を展開しています...
以前に未選択のパッケージ cgroupfs-mount を選択しています。
.../cgroupfs-mount_1.2_all.deb を展開する準備をしています ...
cgroupfs-mount (1.2) を展開しています...
以前に未選択のパッケージ containerd.io を選択しています。
.../containerd.io_1.2.10-3_amd64.deb を展開する準備をしています ...
containerd.io (1.2.10-3) を展開しています...
以前に未選択のパッケージ docker-ce-cli を選択しています。
.../docker-ce-cli_5%3a19.03.4~3-0~ubuntu-xenial_amd64.deb を展開する準備をしています ...
docker-ce-cli (5:19.03.4~3-0~ubuntu-xenial) を展開しています...
以前に未選択のパッケージ docker-ce を選択しています。
.../docker-ce_5%3a19.03.4~3-0~ubuntu-xenial_amd64.deb を展開する準備をしています ...
docker-ce (5:19.03.4~3-0~ubuntu-xenial) を展開しています...
以前に未選択のパッケージ liberror-perl を選択しています。
.../liberror-perl_0.17-1.2_all.deb を展開する準備をしています ...
liberror-perl (0.17-1.2) を展開しています...
以前に未選択のパッケージ git-man を選択しています。
.../git-man_1%3a2.7.4-0ubuntu1.6_all.deb を展開する準備をしています ...
git-man (1:2.7.4-0ubuntu1.6) を展開しています...
以前に未選択のパッケージ git を選択しています。
.../git_1%3a2.7.4-0ubuntu1.6_amd64.deb を展開する準備をしています ...
git (1:2.7.4-0ubuntu1.6) を展開しています...
man-db (2.7.5-1) のトリガを処理しています ...
libc-bin (2.23-0ubuntu11) のトリガを処理しています ...
ureadahead (0.100.0-19.1) のトリガを処理しています ...
systemd (229-4ubuntu21.22) のトリガを処理しています ...
pigz (2.3.1-2) を設定しています ...
aufs-tools (1:3.2+20130722-1.1ubuntu1) を設定しています ...
cgroupfs-mount (1.2) を設定しています ...
containerd.io (1.2.10-3) を設定しています ...
docker-ce-cli (5:19.03.4~3-0~ubuntu-xenial) を設定しています ...
docker-ce (5:19.03.4~3-0~ubuntu-xenial) を設定しています ...
liberror-perl (0.17-1.2) を設定しています ...
git-man (1:2.7.4-0ubuntu1.6) を設定しています ...
git (1:2.7.4-0ubuntu1.6) を設定しています ...
libc-bin (2.23-0ubuntu11) のトリガを処理しています ...
ureadahead (0.100.0-19.1) のトリガを処理しています ...
systemd (229-4ubuntu21.22) のトリガを処理しています ...

aptコマンド用のレポジトリを設定

ここで aptコマンド用のリポジトリを設定しますが、dockerではstableedgetestが公開されています。

stableとして、以下のように設定しています。

x86_64

$ sudo add-apt-repository \

"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 
$(lsb_release -cs) \

stable"

 

これで、Dockerが利用可能になります。
Docker導入にあたり、管理の便利なDocker Composeを導入したので、
明日の記事で、Docker Compseの導入方法を紹介します。

 

 

PHP関連モジュールのインストール

Ubuntu環境を数回続けて、インストールした際に、PHP関連モジュールをインストールしたので、必要なコマンドのメモをのことしておきます。

sudo apt install php7.2 php7.2-common php7.2-cli php7.2-fpm php7.2-mysql php7.2-dev php7.2-mbstring php7.2-zip
sudo apt-get install php-curl

Ubuntuをインストール

公式サイトの関係するURLを参考に、準備されているIntel NUC向けのOSイメージを用いて、初期インストールを実施しました。

インストール要件(公式サイトより)

  • Intel NUCに最新のBIOSを導入 (update instructions)
  • USB2.0か3.0のUSBドライブ、SDカード+カードリーダーやUSBメモリスティックなど (最低4GB:Dawson Canyon NUCs、最低2GB:older generations)
  • USBキーボード、マウス
  • HDMI接続のモニター
  • ネットワーク接続

ISOファイルのダウンロード

Install Ubuntu Desktop on the Intel® NUCよりOSイメージをダウンロードします。Ubuntu 16.04 LTSをダウンロードします。

USBにインストールイメージを作成

WEBでは、「Rufus」を利用する方法が記載されていました。Raspberry Piのインストールなどでも用いた、Etcherを利用しました。

作成したUSBドライブでOS(Ubuntu)インストール

作成したUSBドライブを用いて、Intel NUCをブートして、Ubuntuのインストールを進めます。

  1. USBドライブを接続し、Intel NUCを起動します
  2. 起動時にF10を押下し、ブートメニューに入ります
    (BIOSのバージョンなどで、設定変更なしで、USBドライブからブートするかもしれません)
  3. ブートメニューにおいて、USBドライブからのブートを選択します
  4. システムリカバリーのセットアップ画面となるので、画面の指示に従い、システムの設定を実施します
  5. 言語設定、ネットワーク設定、ロケーション(タイムゾーン)、キーボードレイアウトの設定を行います
  6. ホスト名、ユーザー作成を実施します
  7. ネットワーク接続が出来ている場合は、ネットワークよりパッケージのアップデートが行われます

SSHをインストール

sshが導入されていないので、最初にsshをインストールします。

sudo apt install ssh

お礼

たくさんのアクセス、誠にありがとうおございます。Synology WEBサーバーの障害からIntel NUCベアボーンを利用したWEBサーバーへの変更し、細々したプログラムやシステム環境関係の修正を行いました。

めざましじゃんけん関係のシステムは、この2週間手動操作が入ることなく、結果取得を正確に行われております。

パソコン、プログラム関係のコンテンツが多い中、めざましテレビ放送中にアクセスが集中していることを考えると、アクセスユーザーのプロファイルが全く見えておりません。
色々考えましたが、人工知能などのプログラム関係のコンテンツを引き続き追加していく予定です。
じゃんけん広場関係も、もう少しシステムを安定稼働するように変更し、利用方法などのチュートリアルを増やし、機械学習や人工知能の小さなコミュニティーが出来ればなと考えております。

アクセス履歴

アクセスユーザー数の履歴です。アクセス数は、順調に増加しております。
しかし、今回アクセスユーザー数の推移を示したのは、最適なWEBサーバーの利用のすすめです。
検索エンジンでのヒット率や表示順位も、WEBサーバーからのレスポンスに大きく影響しているように見えました。

SynologyとIntel NUCの比較

Synologyのサポートからも見解を頂きましたが、メモリ容量の限界によりWEBサーバーのフリーズが頻発しました。

CPUメモリ
SynologyMarvell Armada 385 88F6820 32bit
デュアルコア 1.3 GHz
512 MB DDR3
Intel NUC
NUC8i3BEH
Core™ i3-8109U
2コア/4スレッド3.00 GHz
(ターボ3.60 GHz)
32GB

各種メンテナンス時間の短縮なども勧化、Intel NUCには、NVMe SSDを導入しました。(Intel NUC導入後に、構成変更をしました。Dockerコンテナ環境なので、別PCにコンテナを一時的に移行し、システム起動ディスクの変更を行いました)

Intel NUCの設定ですが、発熱が気になったので、CPUを適正スペックと思われるi3-8109Uを選択し、M.2 SATA SSDは、規格最大のPCI Express 3.0 x4でなく、PCI Express 3.0 x2(最大2レーン)を導入しました。
導入したNVMe SSDの最大転送速度は、シーケンシャルリードが1700MB/s、シーケンシャルライトが1450MB/sがカタログスペックとなっております。
2.5インチドライブは、主にバックアップ領域に設定し、NAS向けHDDを導入しシステムの信頼性を担保しております。