ConoHa VPSでのUbuntuサーバ構築からWordpress公開まで

# はじめに
ConoHa VPS でWordpress ブログをデプロイしたので、その手順を記録する。
[テーマのGitHubリポジトリ](https://github.com/TanakaLatias/wordpress-theme)　← 使ったテーマのGitHubリポジトリです。

# ０．サーバ作成

**SSHキーで登録済みキーを利用の場合**
1. ConoHaの［セキュリティ］＞［SSHキー］に公開鍵を追加しておく（以下鍵A）
2. 秘密鍵Aが１回だけダウンロードできるのでする
3. 秘密鍵AをローカルPCの C:\Users\ユーザー名\.ssh に置く
4. サーバ作成時に登録済みキーで公開鍵Aを選択

**SSHキーで新規キー登録の場合**
1. 作成時に新規キー登録を選択
2. 秘密鍵が１回だけダウンロードできるのでする（以下鍵A）
3. ConoHaの［セキュリティ］＞［SSHキー］に公開鍵Aが自動で追加される
4. 秘密鍵AをローカルPCの C:\Users\ユーザー名\.ssh に置く

今回はサーバ作成時にSSHKey利用しているので、パスワードでのSSH接続ができない仕様になっているはずである。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3047950/7c6f70ed-d988-d795-3d8e-8d4b1560c33c.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3047950/3e22188b-5c86-dc2a-a3c2-06cd27ac80b2.png)

# １．ドメイン取得

ムームードメインで初めてドメイン取得をする場合は認証の作業があるが、メールで送られてくる認証方法に従う。認証完了まで１～２日かかる可能性があるので、先にやっておくと楽である。

以下の画像のようにドメイン名登録をする。
AとBはあらかじめ設定されていて、Cは自分のIPアドレス（XXX.XXX.XXX.XXX）を入力して保存する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3047950/91fc684c-025a-db77-6ec4-d68691bc5281.png)

ムームードメインの［ドメイン管理］＞［ドメイン操作］＞［ネームサーバ設定変更］に上記画像のAとBを入力して保存。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3047950/bf92d846-f3f5-1ce0-26a6-e56085bcdb8e.png)

しばらくするとドメイン名とIPアドレスが紐づく。

# ２．SSH接続

今回はコマンドプロンプトからSSH接続をする。
秘密鍵が C:\Users\ユーザー名\.ssh にあることを確認する。以下の画像のように .ssh に config というファイルを作り編集。
※ 一般ユーザは以降の工程で作る。
※ Host のところは任意の単語を設定。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3047950/76c6fc7b-b0c0-79f2-f838-1c70365d9912.png)

```terminal:コマンドプロンプト
ssh c_root
```
rootでSSH接続できる（コマンドプロンプトのどのディレクトリでやってもよい）。
接続の際yes/noの質問が出てくるのでyesとする。

:::note info
エラーの可能性
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! が出ることがあるが、自分の場合は .ssh に known_hosts と known_hosts.old というファイルがあったのでファイル内の記述を全て削除すると解決した。
:::

# ３．一般ユーザーでSSH接続する

root でSSH接続した状態で一般ユーザを作る。

```terminal:rootでSSH接続中
adduser 一般ユーザ名
# 任意のパスワードを入力、Full Name ～ Other までEnter、最後にyで作成
gpasswd -a 一般ユーザ名 sudo
# 一般ユーザにsudo権限を与える
```

次に /home/一般ユーザ名/.ssh/authorized_keys に公開鍵Aを貼りに行く。
※ 公開鍵Aは **０．サーバ作成** の公開鍵Aのこと

```terminal:rootでSSH接続中
cd /home/一般ユーザ名
mkdir .ssh
cd .ssh
touch authorized_keys
vim authorized_keys
# 公開鍵A（ssh-rsaで始まる）を全部コピーして貼る。
```

:::note info
vimコマンド
iで編集（インサートモード）、ESCで編集完了、:wqとEnterで戻る。
:qとEnterで編集せずに戻る。
:::

次に一般ユーザに権限を与える。
知識不足で難しかったが、参考記事（[conoha vpsの一般ユーザのssh接続でつまづいた話](https://qiita.com/erukku/items/9d2de6011c83ddfb2cc1 "conoha vpsの一般ユーザのssh接続でつまづいた話")）を真似させていただき切り抜けた。

```terminal:rootでSSH接続中
cd /home/一般ユーザ名
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown 一般ユーザ名:一般ユーザ名 .ssh
chown 一般ユーザ名:一般ユーザ名 .ssh/authorized_keys
logout
ssh c_一般ユーザ名
# c_一般ユーザ名 は、config の Host に書いた任意の単語
```

一般ユーザでSSH接続完了。

# ４．Ubuntuの準備

一般ユーザSSH接続状態で続ける。

ここからは参考動画（[How to install and Configure WordPress in Ubuntu 22.04 | 20.04](https://www.youtube.com/watch?v=pOESHd1G-HI "How to install and Configure WordPress in Ubuntu 22.04 | 20.04")）を参考に進めたが、一部自己判断で実行しなかったコマンドもある。
Apache をインストールする。

```terminal:一般ユーザでSSH接続中
sudo apt update
# sudo apt upgrade
sudo apt install apache2
sudo systemctl status apache2 # 緑文字の active running が表示
sudo systemctl is-enabled apache2 # enabled が表示
# sudo systemctl enable apache2 # 上のコマンドでenabled でなかった場合に入力
ip addr | grep inet # 自分のIPアドレスが表示
```

「#」の部分は実行しなかった。

この時、自分のIPアドレスを検索するとApache のデフォルトページが確認できる。Ubuntu の場所で言うと /var/www/html/index.html になる。後で index.html は消す。

以下のコードは動画ではなく参考記事（[ConoHa VPSのUbuntu 20.04にWordPress公開環境を構築する方法を解説](https://tomoshi-wonder.com/conoha-vps-ubuntu-20-04-wordpress/ "ConoHa VPSのUbuntu 20.04にWordPress公開環境を構築する方法を解説")）を参照させていただいた。
ファイアウォールの設定をする。

```terminal:一般ユーザでSSH接続中
sudo ufw status # 状況確認
sudo ufw default deny # すべての通信を拒否
sudo ufw allow 22/tcp # 許可
sudo ufw allow 80/tcp # 許可
sudo ufw allow 443/tcp # 許可
sudo ufw enable
sudo ufw status
```

最終的には３つのポートが v4 と v6 で２個ずつ空いている状態になるようである。

動画に戻ってMariaDBをインストールする。

```terminal:一般ユーザでSSH接続中
sudo apt install mariadb-server mariadb-client
sudo systemctl status mariadb.service
sudo systemctl is-enabled mariadb.service
sudo mysql_secure_installation
sudo mysql -u root
```
２行目でMariaDB の動作状況が表示される。q でコンソールに戻れる。
４行目でパスワードを聞かれたら Enter を押す。６つほど質問されるので nnyyyy とする。
５行目でMariaDB に入れる。exit で抜けられる。

phpをインストールする。

```terminal:一般ユーザでSSH接続中
sudo apt install php libapache2-mod-php php-mysql
sudo systemctl restart apache2
sudo vim /var/www/html/info.php
# vim で info.php に <?php phpinfo(); ?> を書き込む。
```

XXX.XXX.XXX.XXX/info.phpで検索すると /var/www/html/info.php の内容が表示される。

phpMyAdmin をインストールする。

```terminal:一般ユーザでSSH接続中
sudo apt install phpmyadmin
sudo systemctl reload apache2.service
```

インストールの設問は、Apache、yes、任意のパスワードを２回とする。
動画によると XXX.XXX.XXX.XXX/phpmyadmin で接続できるはずであったが、自分の場合はできなかった。一応 DB はコンソールからも見られる。

ファイアウォールの設定。

```terminal:一般ユーザでSSH接続中
sudo ufw allow 'Apache Full'
sudo ufw status
```

# ５．WordPressをインストールする

インストール、解凍、/var/www/html 配下に移動させる。

```terminal:一般ユーザでSSH接続中
cd /var/www/html
sudo wget -c http://wordpress.org/latest.tar.gz
sudo tar -xzvf latest.tar.gz
sudo mv wordpress/* /var/www/html
```

権限関係の設定をする。

```terminal:一般ユーザでSSH接続中
sudo chown -R www-data:www-data /var/www/html
ls -l /var/www/html
# sudo chown -R 775 /var/www/html
```

１行目でwww-dataというApacheのユーザに、/var/www/html以下のファイル全ての編集権限を与えている。これをしないとWordPressが使えないそうである。
２行目で確認。
３行目のコードは動画で実行されていたが、今回の場合はそうするとテーマがアップロードできなくなった。間違って実行してしまったときは再度１行目を実行する。

# ６．DB作成

```sql:一般ユーザでSSH接続中
sudo mysql -u root -p
# パスワードを聞かれたらEnter
SHOW DATABASES;
CREATE DATABASE データベース名;
CREATE USER 'ユーザ名'@'%' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```

データベース名、ユーザ名、パスワードは任意。

**※ その他、動画で実行していたが自分はしなかったコード**
- nautilus…のインストール
Ubuntuのファイルを、vim を使わずUIで視覚的に操作できるもののようである。
- wp-config-sample.php を wp-config.php に名前変更
今回の場合変更したところ WordPress の設定中に「wp-config-sample.php がない」とエラーが出たので戻した。
- /etc/apache2 配下に conf を自作、000- のものを disable する
よくわからなかったので未実行。

# ８．WordPressの設定

```terminal:一般ユーザでSSH接続中
sudo rm /var/www/html/index.html
```

index.html を削除すると、XXX.XXX.XXX.XXX で WordPress 開始ページを確認できる。
もし WordPress の設定途中で wp-config-sample.php を自作してコードを書き込むよう指示されたら、以下のように vim で書き込む。

```terminal:一般ユーザでSSH接続中
sudo vim wp-config-sample.php
```

データベースの情報は、さきほど **６．DB作成** で入力したデータベース名、ユーザ名、パスワードである。localhost と wp_ の部分はそのままにする。

# ９．権限関係で試したこと

作業の途中で、しばらく WordPress の自作テーマをアップロードできないことがあった。
おそらく原因は **５．WordPressをインストールする** の sudo chown -R 775 /var/www/html を実行していたことであるが、わからない間に以下のようなことを試した。本来不必要な編集であると考えられるので、次回以降は行わない。

```terminal:一般ユーザでSSH接続中
sudo vim apache2.conf
# <Directory /var/www/> 部分を以下のように編集
# <Directory /var/www/>
#     Options Indexes FollowSymLinks
#     AllowOverride All
#     Require all granted
# </Directory>

sudo systemctl restart apache2

# sudo chmod 755 .htaccess
# .htaccessがどこにあるかわからず諦めた

sudo a2enmod rewrite
sudo systemctl restart apache2

sudo find /var/www/html -type f -exec chmod 664 {} \;
sudo find /var/www/html -type d -exec chmod 775 {} \;
```

# １０．SSL化

こちらの記事（[certbotでSSL証明書を発行するまで](https://qiita.com/erukku/items/b9c20f3163ad4abb2904#:~:text=7%20certbot%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%202%E9%80%9A%E3%82%8A%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%99%207.1%20%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%92%E4%B8%A1%E6%96%B9%E8%A1%8C%E3%81%86%20%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%ABHTTPS%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82,%28Apache%29%20%23%20sudo%20certbot%20--apache%207.2%20%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E3%81%BF%E5%8F%96%E5%BE%97 "certbotでSSL証明書を発行するまで")）を参考にさせていただいた。

```terminal:一般ユーザでSSH接続中
sudo apt update
sudo apt install snapd
sudo snap install hello-world
hello-world
sudo snap install core; sudo snap refresh core
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache
# 最後にSSL化したいドメイン名を入力
```

こののち SSL を自動化するスクリプトを書く予定である。

# おわりに
ローカルの開発ばかり行っていたので、サーバを使ってみてとても勉強になった。
WordPress をオススメしてくださった先輩 I さん、デプロイをサポートしてくださったインターン先の上司 K さん、アドバイス・サポートいただき本当にありがとうございました。




> 参考にさせていただいた記事
> - [VPSスタートアップガイド](https://support.conoha.jp/vps/guide/vpsstartup/ "VPSスタートアップガイド")
> ※ VPSスタートアップガイドではCentOSを利用しているので、Ubuntuコマンドと差異があります。
> - [Ubuntuでユーザを作成する方法(adduser)](https://vpslife.server-memo.net/ubuntu_adduser/ "Ubuntuでユーザを作成する方法(adduser)")
> - [conoha vpsの一般ユーザのssh接続でつまづいた話](https://qiita.com/erukku/items/9d2de6011c83ddfb2cc1 "conoha vpsの一般ユーザのssh接続でつまづいた話")
> - [How to install and Configure WordPress in Ubuntu 22.04 | 20.04](https://www.youtube.com/watch?v=pOESHd1G-HI "How to install and Configure WordPress in Ubuntu 22.04 | 20.04")
> - [ConoHa VPSのUbuntu 20.04にWordPress公開環境を構築する方法を解説](https://tomoshi-wonder.com/conoha-vps-ubuntu-20-04-wordpress/ "ConoHa VPSのUbuntu 20.04にWordPress公開環境を構築する方法を解説")
> - [ConoHa VPS で WordPress環境を構築してみる](https://tency.co.jp/news/start-conoha-vps-wordpress/ "ConoHa VPS で WordPress環境を構築してみる")
※ これもCentOS
> - [certbotでSSL証明書を発行するまで](https://qiita.com/erukku/items/b9c20f3163ad4abb2904#:~:text=7%20certbot%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%202%E9%80%9A%E3%82%8A%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%99%207.1%20%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%92%E4%B8%A1%E6%96%B9%E8%A1%8C%E3%81%86%20%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%ABHTTPS%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82,%28Apache%29%20%23%20sudo%20certbot%20--apache%207.2%20%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E3%81%BF%E5%8F%96%E5%BE%97 "certbotでSSL証明書を発行するまで")

https://support.conoha.jp/vps/guide/vpsstartup/

https://vpslife.server-memo.net/ubuntu_adduser/

https://qiita.com/erukku/items/9d2de6011c83ddfb2cc1

https://www.youtube.com/watch?v=pOESHd1G-HI

https://tomoshi-wonder.com/conoha-vps-ubuntu-20-04-wordpress/

https://tency.co.jp/news/start-conoha-vps-wordpress/

https://qiita.com/erukku/items/b9c20f3163ad4abb2904#:~:text=7%20certbot%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%202%E9%80%9A%E3%82%8A%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%BE%E3%81%99%207.1%20%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%92%E4%B8%A1%E6%96%B9%E8%A1%8C%E3%81%86%20%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%ABHTTPS%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%8F%AF%E8%83%BD%E3%81%AB%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82,%28Apache%29%20%23%20sudo%20certbot%20--apache%207.2%20%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E3%81%BF%E5%8F%96%E5%BE%97