DockerにMovable Type 7をインストールした開発環境構築

### DockerにMovable Type 7をインストールした開発環境構築

## 本題について
- 本題を達成するために、環境とインストール方法を記載する

## 環境
- MacBook (Retina, 12-inch, Early 2016)
    - 1.3 GHz Dual-Core Intel Core m7
    - 8 GB 1867 MHz LPDDR3
    - Intel HD Graphics 515 1536 MB
    - OS MacOS Catalina(version 10.15.4)
- docker desktop
    - Version 2.2.0.5(43884)
    - Channel stable
- Apache/2.4.29 (Ubuntu)
- MySQL Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using  EditLine wrapper

- Movable Type 7 r.4605

## インストール

### Ubuntuイメージのダウンロード
```
$ docker pull ubuntu
```

### コンテナを起動し、そのコンテナに入る
```
$ docker run -it -p 3002:80 ubuntu
```
※ubuntu上でWebサーバーにアクセスするため、3002番ポートを解放する

### 各種コマンドをインストール
```
# apt-get update
# apt-get install vim wget unzip
```

### Apacheをインストール
```
# apt-get update
# apt-get install apache2
```

### MySQLをインストール

:::note info
2023/06/27 追記
MySQLのバージョンは以下で動作確認済みです
```
# mysql -v
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
```
:::

```
# apt-get update
# apt-get install mysql-server libdbi-perl libdbd-mysql-perl
```
※ mysql-serverインストール中に以下のメッセージが表示されたが、
結果的に問題なかったです

```
Cannot stat file /proc/3391/fd/0: Permission denied
```

## ApacheとMySQLの設定

### Apacheの設定(cgiを動作させる設定)
```
# cd /etc/apache2/conf-available
# touch cgi-enabled.conf
```
cgi-enabled.confは以下の記述

```/etc/apache2/conf-available/cgi-enabled.conf
<Directory "/var/www/html">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>
```

cgi-enabled、CGIモジュールを有効にする。

```
# a2enmod cgi
# a2enconf cgi-enabled
```

Apacheを起動

```
# /etc/init.d/apache2 restart
```

以下にアクセスして表示されていれば問題なし

```
http://localhost:3002/
```

### MySQLの設定

MySQLの起動

```
# service mysql start
# mysql -u root
```

データベースの作成（データベース名は'mt'）

```
mysql> CREATE DATABASE mt DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
```

ユーザーの作成（ユーザー名'mtuser'、パスワード'mtpasswd'）

```
mysql> CREATE USER mtuser@localhost identified by 'mtpasswd';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on mt.* to mtuser@localhost identified by 'mtpasswd';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
```

## MovableType7のインストール

以下にインストールし、フォルダ名をmt7に変更
またパーミッションを変更

```
# cd /var/www/html/mt7
# chown -R www-data:www-data /var/www/html/mt7
```

## MovableType7のセットアップ

以下にアクセス

```
http://localhost:3002/mt7/
```
「システムチェック」で以下のメッセージが表示されればOK

```
必要なPerlモジュールは揃っています。 Movable Typeのインストールを続行する準備が整いました。

オプションのPerlモジュールのうちいくつかが見つかりませんでした。オプションモジュールを表示
```

データベースの設定

```
データベースの種類:MySQLデータベース（推奨）
データベースサーバ:localhost
データベース名:mt
ユーザー名:mtuser
パスワード:mtpasswd
```

メールの設定、アカウントの設定→よしなに

以上で完了！


## 目標達成からの課題
- ~~kinematicがMac上で起動できない 調べたものの分からず。とりあえずコマンドで頑張るしかない。良いツールなんだけども。~~  
  [2020/06/25　追記]Macの設定でできました。
- [2020/05/02　追記]Sequel ProからUbuntu上のMySQLサーバーにアクセスできない・・・。

## マシン移行に伴うイメージの移行 追記（2020/06/06）
MacBook Pro 13(2020)を購入し、MacBook12にあったイメージを移行しました。
実際の手順は以下。

```:Macbook12
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu_mt           v1.3                e438bafbbd73        12 days ago         1.68GB
```

このイメージを保存

```:MacBook12
$ docker save e438bafbbd73 > ubuntu_mt.tar
```

保存したイメージをAirdropでMacBook Pro 13(2020)へ転送

イメージをdockerに読み込む

```:MacBookPro13(2020)
$ docker load < ubuntu_mt.tar
```

するとなぜかREPOSITORY、TAG名が[none]...

```:MacBookPro13(2020)
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[none]              [none]              e438bafbbd73        12 days ago         1.68GB
```

リポジトリ名、タグ名を変更

```:MacBookPro13(2020)
$ docker tag e438bafbbd73 ubuntu_mt:v1.4
```

無事にリポジトリ名、タグ名を変更できた

```:MacBookPro13(2020)
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu_mt           v1.4                e438bafbbd73        12 days ago         1.68GB
```

## イメージをGitHub Container Registryに登録する 追記（2020/10/01）

先日GitHub Container Registry（以下GHCR）が便利そうと思い、
忘備の意味も含め、追記しました。
[こちらのサイトが大変参考になりました。](https://qiita.com/zembutsu/items/1effae6c39ceae3c3d0a)

1. GHCRに対するログイン  
1. ローカルへイメージの保存
1. 保存したイメージの送信

### 1. GHCRへのログイン

[こちら](https://qiita.com/zembutsu/items/1effae6c39ceae3c3d0a#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92-ghcrio%E3%81%AB-push-%E3%81%97%E3%81%A6%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF)を参考にしました。（手抜きですみません・・・）

### 2. ローカルへイメージの保存

稼働中のコンテナからイメージを書出します。

```shell-session

$ docker ps

CONTAINER ID        IMAGE       COMMAND                  CREATED             STATUS              PORTS                                           NAMES
811606b9409f        Mt:latest   "/bin/bash -c 'apt-g…"   9 hours ago         Up 9 hours          0.0.0.0:3002->80/tcp, 0.0.0.0:33006->3306/tcp   mt7

# ここで、docker commit <コンテナ名> ghcr.io/<Githubのユーザー名>/<イメージ名>:<タグ>
# のコマンドで、イメージを書き出します
$ docker commit mt7 ghcr.io/githubusername/mt7:latest
```

### 3. 保存したイメージの送信

```shell
$ docker push ghcr.io/githubusername/mt7:latest
```


## 参考
- Apacheの設定
    - https://www.khstasaba.com/?p=28
- MySQLの設定
    - https://www.movabletype.jp/documentation/mt7/installation/database/mysql/
- Dockerイメージのインポート・エクスポート
    - https://uxmilk.jp/55512
- リポジトリ名、タグ名の変更
    - https://taker.hatenablog.com/entry/2016/05/04/175021
- GitHub Container Registry(ghcr.io)にDockerイメージをpushする手順
    - https://qiita.com/zembutsu/items/1effae6c39ceae3c3d0a