PukiwikiをHeroku上で動かしてみる

# 1.はじめに
こんにちは。
仕事ではMatlabでGUIアプリや信号処理の実装などをしていますが、
所属会社にて、社内Wikiがあれば面白いかもね、というお話が出てきましたので、
まずは手軽にWikiを立ち上げて、使用感を確認してみようと思います。
また、今後長きにわたって運用していくかは未定ですので、OSSのWikiを使用します。

今回は、Pukiwikiを選択しました。
実行環境はHerokuです。

# 2.環境
* OS: Windows 10 Home
* Text Editor: Atom
* Pukiwiki: 1.5.3
* Heroku CLI: heroku 7.47.4 win32-x64 node-v12.16.2
* Git: 2.25.0

# 3.準備
前準備として、以下を行います。

* HerokuCLIのインストールと動作確認、ログインとアプリケーションの作成
* Pukiwikiのダウンロードと初期設定

## 3-1.HerokuCLI 

詳細な情報は以下から確認することができます。

[Heroku Dev Center / The Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)

### 1.インストール
HerokuCLIのインストーラは以下からダウンロードすることができます。
弊ローカル環境はWindows10の64bitですので、`64-bit installer`を選択しました。

[Heroku Dev Center / The Heroku CLI / Download and install](https://devcenter.heroku.com/articles/heroku-cli#download-and-install)

インストーラを実行し、インストールを完了させます。
HerokuCLIは、プロンプトがインストールされるわけではありませんので、
Windows標準のコマンドプロンプトから実行を行います。

### 2.動作確認

コマンドプロンプトを起動し以下を入力して、インストールが完了したかの確認を行います。

```
heroku --version
```

インストールが完了していれば、以下のようにバージョン情報が表示されます。

```
heroku/7.47.4 win32-x64 node-v12.16.2
```

以上で、HerokuCLIのインストールと動作確認が終了です。

### 3.ログイン

コマンドプロンプトで以下を入力し、ログインを行います。

```
heroku login
```

以下が表示されますので、`q`以外のなにかしらのキーを押下します。

```
heroku: Press any key to open up the browser to login or q to exit:
```

ブラウザが立ち上がりログイン画面が表示されますのでログインします。

ログインが完了すると以下が表示されます。

```
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/******
Logging in... done
Logged in as your.mailaddress@****.com
```

### 4.アプリケーションの作成

コマンドプロンプトで以下を入力し、アプリケーションを作成します。

```
heroku create [your application name]
```

以下が表示され、アプリケーションが作成されます。

```
Creating ⬢ test-pukiwiki... done
https://test-pukiwiki.herokuapp.com/ | https://git.heroku.com/test-pukiwiki.git
```

また、以下のみでアプリケーションの作成を行うと、
ランダムな名称でアプリケーションが作成されます。

```
heroku create
```

ミステリアスなアプリケーションが作成されました。
これは、HerokuCLIもしくはブラウザから、名称の変更を行うことができます。

```
Creating app... done, ⬢ mysterious-beyond-38222
https://mysterious-beyond-38222.herokuapp.com/ | https://git.heroku.com/mysterious-beyond-38222.git
```

ブラウザからアクセスしダッシュボードを確認すると
アプリケーションが作成されていることがわかります。

![スクリーンショット 2020-12-05 12.59.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488997/ef9e8689-bd2b-3f68-f184-c3687b11e65a.png)

以上で、アプリケーションの作成は完了です。
今回は、プラットフォームとして`test-pukiwiki`を使用します。


## 3-2.Pukiwiki

### 1.ダウンロード
Pukiwikiは以下からダウンロードすることができます。
今回は、最新の`Pukiwiki1.5.3`、`UTF-8版`を選択しました。

[PukiWiki / Download / 1.5.3](https://pukiwiki.osdn.jp/?PukiWiki/Download/1.5.3)

ダウンロードしたZipファイルを解凍し、初期設定を行います。

### 2.初期設定

詳細な情報は以下から確認することができます。

[PukiWiki / Install / インストール方法](https://pukiwiki.osdn.jp/?PukiWiki/Install/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95)

初期設定では、上記の公式Wikiを参考に、`pukiwiki.ini.php`を変更します。
特に、以下の3つを変更します。

* 管理者の名前
* 管理者のサイト
* 管理者パスワード

```
// Site admin's name (CHANGE THIS)
$modifier = 'anonymous';

// Site admin's Web page (CHANGE THIS)
$modifierlink = 'http://pukiwiki.example.com/';

// Admin password for this Wikisite
// Default: always fail
$adminpass = '{x-php-md5}!';
```

上記を下記に変更します。

```
// Site admin's name (CHANGE THIS)
$modifier = 'Your Name';

// Site admin's Web page (CHANGE THIS)
$modifierlink = 'https://test-pukiwiki.herokuapp.com/';

// Admin password for this Wikisite
// Default: always fail
$adminpass = '{x-php-md5}' . md5('YourPassword');
```

以上でPukiwikiの初期設定は完了です。

# 4.Herokuへのデプロイ

今回は、Gitを使用したデプロイ方法を試します。
詳細な情報は以下から確認することができます。

[Heroku Dev Center / Deployment / Deploying with Git](https://devcenter.heroku.com/articles/git)

### 1.ローカルリポジトリのinit、add、commit

アプリケーションが保存されているディレクトリへ移動し、
ローカルリポジトリの初期化と、リポジトリへのadd、commitを行います。

```shell:command
cd test-pukiwiki
git init
git add .
git commit -m "my first commit"
```

`git commit`した際に、お前は誰だと言われましたので、gitに従い設定をします。

```text:OUTPUT
*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'USERNAME@PCNAME.(none)')
```

```shell:command
git config --global user.email "your.mailaddress@****.com"
git config --global user.name "Your Name"
```

再度`commit`します。


```shell:command
git commit -m "my first commit"
```

これで、commit完了です。

### 2.git pushを使用したHerokuへのデプロイ

次に以下を実行します。

```text:command
heroku git:remote [Application Name]
```

```text:OUTPUT
set git remote heroku to https://git.heroku.com/test-pukiwiki.git
```

次に以下を実行してHerokuへデプロイします。

```shell:command
git push heroku master
```

```text:OUTPUT
Enumerating objects: 232, done.
Counting objects: 100% (232/232), done.
Delta compression using up to 8 threads
Compressing objects: 100% (217/217), done.
Writing objects: 100% (232/232), 375.53 KiB | 5.36 MiB/s, done.
Total 232 (delta 13), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote:
remote:  !     WARNING: No 'composer.json' found!
remote:  !
remote:  !     Your project only contains an 'index.php', no 'composer.json'.
remote:  !
remote:  !     Using 'index.php' to declare app type as PHP is deprecated and
remote:  !     may lead to unexpected behavior.
remote:  !
remote:  !     Please consider updating your codebase to utilize Composer and
remote:  !     modern dependency management in order to benefit from the latest
remote:  !     PHP runtimes and improved application performance, as well as
remote:  !     control over the PHP versions and extensions available.
remote:  !
remote:  !     For an introduction to dependency management with Composer and
remote:  !     how to get the most out of PHP on Heroku, refer to the docs at
remote:  !     https://getcomposer.org/doc/00-intro.md and
remote:  !     https://devcenter.heroku.com/articles/getting-started-with-php
remote:
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote:        NOTICE: No runtime required in composer.lock; using PHP ^7.0.0
remote:        - composer (1.10.17)
remote:        - php (7.4.12)
remote:        - apache (2.4.46)
remote:        - nginx (1.18.0)
remote: -----> Installing dependencies...
remote:        Composer version 1.10.17 2020-10-30 22:31:58
remote: -----> Preparing runtime environment...
remote:        NOTICE: No Procfile, using 'web: heroku-php-apache2'.
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 14.4M
remote: -----> Launching...
remote:        Released v3
remote:        https://test-pukiwiki.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/test-pukiwiki.git
 * [new branch]      master -> master
```

何かWaningが出ていますが、とりあえずOKです。

### 3.動作確認

以下のコマンドで、アプリケーションを起動します。
※ブラウザが立ち上がります。

```shell:command
heroku open
```

以下のようにPukiwikiのFrontPageが表示され、
無事HerokuにPukiwikiがデプロイされていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488997/e2ce98d0-8491-4c36-2e37-afb39e8c52bc.png)

また、新規でのページ作成も問題なく行えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488997/2583f2bd-355f-bb9e-8d6a-742f67d3773d.png)

# 5.まとめ

試行錯誤してみましたが、以下の手順でPukiwikiをHerokuへデプロイすることができました。

1.HerokuCLIのインストール
　インストール済みであれば飛ばしてOKです。

2.Pukiwikiのダウンロード、初期設定
　Pukiwiki公式を参照し、最低限`pukiwiki.ini.php`を修正しましょう。

3.gitを使用したリポジトリの作成とcommit
　自分自身、普段Gitを使用できていないため、
　今回は魔法の言葉としてほとんど実行していました。

4.git pushを使用してHerokuへデプロイ
　以外に簡単でした。

# 6.さいごに

以前、Heroku上にGO言語で作成したHTTPサーバをデプロイしたりしましたが、
試しにサービスを立ち上げてみるために、Herokuを使用するのはかなり便利だと思います。

また、社内Wikiとして採用するものを、現状CrowiとPukiwikiで迷っているので、
CrowiもHerokuにデプロイして、改めてみんなで使用感を確かめたいなと思います。
(Crowiは公式から直でHerokuにデプロイできるのでとてもeasy.)

以前書いた、GO言語 + Herokuのお話。
[Go言語とginで作ったHTTPサーバをHeroku上で動かしてみる](https://qiita.com/soichiloYoda/items/5b3edf1e063daa764bce#comment-b1cfdbe570ff34ae24de)

以上です。