[Ubuntu]Vagrantでローカルweb開発環境構築(vagrant + ubuntu20.04 + PHP7.4 + Apache2.4 + MariaDB + phpMyAdmin5.0)

開発環境

以前の記事 [CentOS7]Vagrantでローカルweb開発環境構築(vagrant + CentOS7 + PHP7.2 + Apache2.4 + MySQL5.6 + phpMyAdmin4.9) ではCentOSベースのローカルウェブ開発環境を構築しましたが、今回はDebian系でもっともポピュラーな?Ubuntuでウェブサーバーを構築してみたいと思います。

UbuntuというとデスクトップOSのイメージがあるんですが、とりあえず触ってみます。具合がよくなければDebianに乗り換えるということで。

では、本題。いつもの通り、雑に行きますぜ。

vagrantにボックス追加〜仮想マシン立ち上げ

最近はbox探しは専らここを使ってます。

Discover Vagrant Boxes

ubuntu20.04のボックスを探して、良さそうなのを追加し、続いて初期化する。今回は"rbock44/ubuntu20.04"ってのを使いました。

(プロジェクトフォルダを「ubuntu」とする。)

$ mkdir ubuntu && cd ubuntu

$ vagrant box add "rbock44/ubuntu20.04"
==> box: Loading metadata for box 'rbock44/ubuntu20.04'
    box: URL: https://vagrantcloud.com/rbock44/ubuntu20.04
==> box: Adding box 'rbock44/ubuntu20.04' (v1.0.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/rbock44/boxes/ubuntu20.04/versions/1.0.0/providers/virtualbox.box
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> box: Successfully added box 'rbock44/ubuntu20.04' (v1.0.0) for 'virtualbox'!

$ vagrant init rbock44/ubuntu20.04
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Vagrantfileの編集はとりあえず最小限で。下記の行をアンコメントぐらいでいいでしょう。

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = false

    # Customize the amount of memory on the VM:
    vb.memory = "2048"
end

仮想マシンを立ち上げて(初回は結構時間がかかる)sshログインする。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'rbock44/ubuntu20.04'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'rbock44/ubuntu20.04' version '1.0.0' is up to date...
==> default: Setting the name of the VM: ubuntu_default_1613613417486_91388

・・・中略・・・

==> default: [vagrant-hostsupdater] Checking for host entries
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/hogehoge/vagrant/ubuntu

$ vagrant ssh
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-26-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

まずは、パッケージのアップデート

CentOSではパッケージ管理にyumが使われていたが、Ubuntuではaptというのが使われます。

vagrant@vagrant:~$ sudo apt update
Hit:1 http://us.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://us.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu focal-security InRelease
Reading package lists... Done                         
Building dependency tree       
Reading state information... Done
175 packages can be upgraded. Run 'apt list --upgradable' to see them.

$ sudo apt upgrade

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done

・・・中略・・・

175 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 372 MB of archives.
After this operation, 386 MB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 base-files amd64 11ubuntu5.3 [60.6 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 bash amd64 5.0-6ubuntu1.1 [638 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 bsdutils amd64 1:2.34-0.1ubuntu9.1 [63.1 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 login amd64 1:4.8.1-1ubuntu5.20.04 [221 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libperl5.30 amd64 5.30.0-9ubuntu0.2 [3,952 kB]

・・・中略・・・

Get:179 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 unattended-upgrades all 2.3ubuntu0.1 [48.7 kB]                                                                                      
Get:180 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 wireless-regdb all 2020.11.20-0ubuntu1~20.04.1 [10.3 kB]                                                                            
Fetched 372 MB in 4min 30s (1,379 kB/s)                                                                                                                                                                  
E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/e/efivar/libefiboot1_37-2ubuntu2.2_amd64.deb  Undetermined Error [IP: 91.189.91.39 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

ん?最後にエラー吐いてる。

E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/e/efivar/libefiboot1_37-2ubuntu2.2_amd64.deb  Undetermined Error [IP: 91.189.91.39 80]

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

パッケージリストをいったん削除してからやり直すとうまくいくらしい。

参考:Ubuntu 18.04 sudo apt-get updateコマンド が Failed to fetchエラーになった時の解決法

$ sudo rm -rf /var/lib/apt/lists/*

$ sudo apt-get update

$ sudo apt-get upgrade

とりあえずこれで落ち着いた。


時刻まわりの設定

何はともあれ時刻を合わせておきます。

タイムサーバー(NTPd)入れる

$ sudo apt -y install ntp

# 設定ファイルの編集
$ sudo vim /etc/ntp.conf

21〜24行目をコメントアウトし、時刻を同期するサーバーを追記します。
55行目あたりの範囲追記

 18 # Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
 19 # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
 20 # more information.
 21 #pool 0.ubuntu.pool.ntp.org iburst
 22 #pool 1.ubuntu.pool.ntp.org iburst
 23 #pool 2.ubuntu.pool.ntp.org iburst
 24 #pool 3.ubuntu.pool.ntp.org iburst
# ↑ 21〜24行目をコメントアウト
# ↓ 以下を追記
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst

・・・中略・・・

 54 #restrict 192.168.123.0 mask 255.255.255.0 notrust
# 追記
restrict 192.168.33.10 mask 255.255.255.0 nomodify notrap

再起動して、動作確認。

$ sudo systemctl restart ntp

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp.ubuntu.com  .POOL.          16 p    -   64    0    0.000    0.000   0.000
 ntp1.jst.mfeed. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp2.jst.mfeed. .INIT.          16 u    -   64    0    0.000    0.000   0.000
*ntp3.jst.mfeed. 133.243.236.19   2 u   39   64    1   31.436   -0.211   1.630
 alphyn.canonica 17.253.108.253   2 u   52   64    1  171.433    0.181   0.000
 golem.canonical 145.238.203.14   2 u   60   64    1  230.869   -0.584   0.000
 pugot.canonical 17.253.108.253   2 u   60   64    1  257.704    1.049   0.000
 chilipepper.can 17.253.34.123    2 u   58   64    1  284.667  -24.629   0.000

タイムゾーンの設定

そういえばタイムゾーンを合わせてなかった。

$ date
Thu 18 Feb 2021 02:57:13 AM UTC

#タイムゾーンをAsia/Tokyoに設定
$ sudo timedatectl set-timezone Asia/Tokyo

$ date
Thu 18 Feb 2021 11:58:02 PM JST

OK!!!


ウェブサーバー(Apache2.4)のインストール

$ sudo apt install apache2
$ apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2020-08-12T19:46:17

# インストール直後には立ち上がってる

$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-02-18 12:08:56 JST; 1min 35s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 49817 (apache2)
      Tasks: 55 (limit: 2287)
     Memory: 5.2M
     CGroup: /system.slice/apache2.service
             ├─49817 /usr/sbin/apache2 -k start
             ├─49819 /usr/sbin/apache2 -k start
             └─49820 /usr/sbin/apache2 -k start

Feb 18 12:08:56 vagrant systemd[1]: Starting The Apache HTTP Server...
Feb 18 12:08:56 vagrant systemd[1]: Started The Apache HTTP Server.

ブラウザからhttp://192.168.33.10/にアクセスして"Apache2 Ubuntu Default Page"が立ち上がればOK。


PHP7.4のインストール

PHP本体のインストール

ubuntu20.04のデフォルトはPHP7.4のようなので、そのまま入れます。

$ sudo apt -y install php

# 完了

$ php -v
PHP 7.4.3 (cli) (built: Oct  6 2020 15:47:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

# php.ini の場所を見ておく
$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php/7.4/cli
Loaded Configuration File => /etc/php/7.4/cli/php.ini

関連パッケージのインストール

これぐらいかな?

$ sudo apt -y install php-fpm libapache2-mod-php7.4 php-common php-mbstring php-xmlrpc php-gd php-xml php-mysql php-zip php-curl php-imagick php-cli 

データベース(MariaDB)のインストール

使ったことが無いため、少し興味がある。ということで、あえてMariaDBを入れてみる。

WordPressを運用するぐらいならMySQLと全く違いがないようです。
初期パスワードの設定とか、MySQLよりも楽な印象。

$ sudo apt-get -y install mariadb-server

# hogehogeの部分にrootパスワードにしたい文字列を入れる
$ sudo mysql -u root -e "SET PASSWORD = PASSWORD('hogehoge');FLUSH PRIVILEGES;"

$ mariadb --version
mariadb  Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

# 起動設定もしておく
$ sudo systemctl enable mariadb

# ログインしてみる。使い方はMySQLと同じですね。
$ mysql -u root -p
$ mariadb -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 54
Server version: 10.3.25-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit

phpMyAdminの手動インストール

バージョンは5.0.2
公開ディレクトリに入れて、http://localhost/phpMyAdmin のような形でアクセスできるようにするだけでよかろ。

$ cd /var/www/html/ 

$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz

$ sudo tar xvfz phpMyAdmin-5.0.2-all-languages.tar.gz

#アーカイブを削除して、プログラムフォルダを"phpMyAdmin"にリネーム
$ sudo rm -rf phpMyAdmin-5.0.2-all-languages.tar.gz & sudo mv phpMyAdmin-5.0.2-all-languages phpMyAdmin

これで http://192.168.33.10/phpMyAdmin でアクセスできるようになる。
管理画面にログインすると下記二つのエラーメッセージ。

# *1
[!]設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。

# *2
[!]$cfg['TempDir'] (/var/www/html/phpMyAdmin/tmp/) にアクセスできません。phpMyAdmin はテンプレートをキャッシュすることができないため、低速になります。

エラー *1 の解決

設定ファイル(config.inc.php)中の"blowfish_secret"に値を設定する。

$ cd phpMyAdmin
$ sudo cp config.sample.inc.php config.inc.php
$ sudo vim config.inc.php 

で編集。32文字の任意の文字列を入れる。

  • 32文字「以上」と解説しているところが多いのですが、「Needs to be 32 chars long」を素直に解釈すると「32文字である必要があります」となるので、まあそういうことで。

こことか使います。ランダム文字列ジェネレーター

 14 /**
 15  * This is needed for cookie based authentication to encrypt password in
 16  * cookie. Needs to be 32 chars long.
 17  */
 18 $cfg['blowfish_secret'] = 'ここに32文字の任意の文字列を入れる'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

エラー *2 の解決

*2の方は、webサーバーの実行ユーザーに権限を渡すことで解決できる。

ubuntuのapacheのユーザー・グループは"www-data"。

$ ll
drwxr-xr-x 12 vagrant vagrant  4096 Mar 21  2020 phpMyAdmin/

$ sudo chown www-data:www-data phpMyAdmin -R
$ ll
drwxr-xr-x 13 www-data www-data  4096 Feb 18 13:45 phpMyAdmin/

これにて解決!!!
socketエラーとか出るかなと思ったけど、なんかアッサリ解決です。

では、また別記事でApache2の設定とかsslとかやっていきましょう。