LoginSignup
1
0

vagrant + amazon linux 2(実際のAWS EC2でも使える)サーバ構築~WordPressインストール&nodejsもついでに

Last updated at Posted at 2022-10-22

概要

AWS EC2環境を作るための練習でvagrantのAmazon linux 2イメージを使用してサーバ作成とWordPressのインストールまでの備忘録

※これはvagrant init~BOX作成までを行った状態からの備忘録です。
 ローカル環境上であれば、wordpressはダウンロードしたzipファイルを解凍して置けばOKのはず。

環境

  • windows8.1
  • ConEmu
  • Vagrant
  • bento/amazonlinux-2(vagrant box)

ここからはスーパーユーザーにスイッチして作業を進めます。

スーパーユーザースイッチ

Terminal
sudo su

手順

システム情報のチェック

Terminal
cat /etc/os-release

↓が表示されればOK

Terminal
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

時計表示とタイムゾーンの設定

dateで現状を確認

Terminal
date

日本語で表示されるように設定

Terminal
sudo localectl set-locale LANG=ja_JP.UTF-8

タイムゾーンの設定を変更する↓のコマンドを実行

Terminal
sudo timedatectl set-timezone Asia/Tokyo

vagrantを再起動

Terminal
vagrant reload

SSHして時刻を確認して↓のように表示されればOK

Terminal
date
2022年  9月  7日 水曜日 12:59:08 JST

初期設定

↓のコマンドを実行してselinuxの状態確認する。 「Disabled」 になっていればOK

Terminal
getenforce

DBはMySQLを使うので最初から入っているmariaDBを削除します。

Terminal
sudo yum -y remove mariadb-libs mysql*

ちゃんと確認したい場合はこちら

DBはMySQLを使うので他のDBがインストールされていないか確認してインストールされている場合は削除します。

Terminal
sudo yum list installed | grep mariadb-libs

↓のようにmariadbが入っていることを確認したら次へ

Terminal
mariadb-libs.x86_64                   1:5.5.64-1.amzn2               installed

以下コマンドでアンインストールします。(ログに「完了しました!」が表示されればOK)

Terminal
sudo yum -y remove mariadb-libs mysql*

各種パッケージのアップデートとapacheやその他のパッケージをインストール。

パッケージのアップデート

Terminal
sudo yum -y update

そのたアプリの追加

Terminal
sudo yum -y install git vim wget epel-release dkms httpd zip unzip postfix ImageMagick-devel gcc-c++

2023年11月30日(木)現在再構築時に表示されませんでした。
EPELをインストールしろ!と出たら指示に従ってインストールします。
こんな感じの結果が出たら

Terminal
epel-release is available in Amazon Linux Extra topic "epel"

To use, run
# sudo amazon-linux-extras install epel

Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras
Terminal
sudo amazon-linux-extras install -y epel

Remiリポジトリをインストール

Terminal
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

EPELが有効になっているか確認するときはコレ

Terminal
sudo yum repolist all | grep -i epel

↓のように表示されればOK

Terminal
amzn2extra-epel/2/x86_64             Amazon Extras repo for epe 有効:          1
amzn2extra-epel-debuginfo/2/x86_64   Amazon Extras debuginfo re 無効
amzn2extra-epel-source/2             Amazon Extras source repo  無効
epel/x86_64                          Extra Packages for Enterpr 有効: 13,527+228
epel-debuginfo/x86_64                Extra Packages for Enterpr 無効
epel-source/x86_64                   Extra Packages for Enterpr 無効
epel-testing/x86_64                  Extra Packages for Enterpr 無効
epel-testing-debuginfo/x86_64        Extra Packages for Enterpr 無効
epel-testing-source/x86_64           Extra Packages for Enterpr 無効

もしvagrantでホスト側とマウントさせる場合はこちら

共有フォルダへのシンボリックリンク設定
rm -rf /var/www/html
ln -fs /vagrant /var/www/html

マウントは別にシンボリックリンクを使わなくてもvagrant側で設置可能でしたので編集いたします。
これをすればシンボリックリンク不要でした。

vagrantfile
  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"
  config.vm.synced_folder "./任意のフォルダ", "/var/www/html/", tpye:"nfs"

Laravelなどを使うときはnode.js使用時にエラーになるのでLaravel環境はシンボリックリンクを使わない方が良い。※Laravel環境を造ったときはxamppを使った…

apacheの設定

以下よく使うコマンド

用法 コマンド
文法チェック sudo apachectl configtest
システムチェック sudo service httpd configtest
起動 sudo systemctl start httpd.service
自動起動 sudo systemctl enable httpd.service
起動チェック sudo systemctl status httpd.service
再起動 sudo systemctl restart httpd.service

※チェックコマンドは「Syntax OK」が表示されればまぁOK

何かあったときのために設定ファイルをバックアップ。

Terminal
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk

vimで設定ファイルを編集します。

Terminal
sudo vim /etc/httpd/conf/httpd.conf

phpが使えるように以下2行を追加
※AddTypeタイプで検索(検索方法は「/〇〇」)して出てきた同項目の下に追加

vim
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

cssが読み込めるようにする。
「Directory "/var/www/html"」内の↓の部分を調整

- AllowOverride None
+ AllowOverride All

バーチャルホストの設定をさせる場合はこちらの設定を変更する。

vim
EnableSendfile on → EnableSendfile off

configtestでエラーが出る場合の対処方法(localの場合)

- #ServerName www.example.com:80
+ ServerName localhost:80

「:wq」で保存して終了し「よく使うコマンド」を順番に実行(※再起動は不要)
起動チェック時に↓のように表示されればOK

Terminal
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2022-09-07 13:39:35 JST; 11s ago
     Docs: man:httpd.service(8)
 Main PID: 24287 (httpd)
   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─24287 /usr/sbin/httpd -DFOREGROUND
           ├─24288 /usr/sbin/httpd -DFOREGROUND
           ├─24289 /usr/sbin/httpd -DFOREGROUND
           ├─24290 /usr/sbin/httpd -DFOREGROUND
           ├─24291 /usr/sbin/httpd -DFOREGROUND
           └─24292 /usr/sbin/httpd -DFOREGROUND

バーチャルホストの設定

バーチャルホストの設定2

Terminal
<VirtualHost *:80>
   ServerName hoge.com
   # !!! Be sure to point DocumentRoot to 'public'!
   DocumentRoot /var/www/html/hoge
   DirectoryIndex index.php index.html
   <Directory /var/www/html/hoge>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options Indexes ExecCGI FollowSymLinks MultiViews
      Order allow,deny
      Allow from all
      AllowOverride all
      # Uncomment this if you're on Apache >= 2.4:
      Require all granted
   </Directory>
   RewriteEngine on
   RewriteRule (.*) https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

mysql8のインストールと初期設定

リポジトリを追加

Terminal
sudo yum -y localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

リポジトリの追加が終わったらインストール可能なバージョンを確認する。

Terminal
sudo yum info mysql-community-server

こんな感じの結果出ればOK

結果
利用可能なパッケージ
名前                : mysql-community-server
アーキテクチャー    : x86_64
バージョン          : 8.0.28
リリース            : 1.el7
容量                : 451 M

MySqlをインストール
まず、必ずエラーになる公開鍵をインストールする。

Terminal
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

これをしないと「公開鍵がインストールされていません。インストールしてください」という感じで怒られる。

MySqlをインストール

Terminal
sudo yum -y install mysql-community-server

終わったらバージョンの確認

Terminal
mysqld --version
/usr/sbin/mysqld  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

設定をバックアップ

Terminal
sudo cp /etc/my.cnf /etc/my.cnf.org

認証プラグインの設定以下コマンドでcnfファイルを開く

Terminal
sudo vim /etc/my.cnf

最後の行に以下を追加。

これを追加
default_authentication_plugin=mysql_native_password

MySQLの起動、状態確認、自動起動を設定

起動

Terminal
sudo systemctl start mysqld

状態確認

Terminal
sudo systemctl status mysqld

自動起動

Terminal
sudo systemctl enable mysqld

起動確認はこんな感じ

結果
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2022-04-02 09:09:46 JST; 30s ago

passwordの設定をする。
mysqlを初回に起動すると一時パスワードがlogに吐き出されので以下のコマンドを打って出てきたパスをメモとして残しておく。

Terminal
sudo grep password /var/log/mysqld.log

パスワードの更新と初期設定をする。先程吐き出されたlogのパスワードから変更する。
※new passwordは2回入力したらあとはEnterのみ押していけばOK(本番では色々設定が必要)

Terminal
sudo mysql_secure_installation

ログインと状態確認をする。

用法 コマンド
ログイン方法 mysql -u root -p
状態確認 status

↓の結果が帰ってくればまぁ大丈夫。

Terminal
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          11
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.28 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/lib/mysql/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 7 min 47 sec

Threads: 2  Questions: 16  Slow queries: 0  Opens: 133  Flush tables: 3  Open tables: 49  Queries per second avg: 0.034

念の為文字コードも確認

Terminal
show variables like '%char%';

↓の結果が帰ってくればまぁ大丈夫だと思うので確認終わったらMySQLは終了

Terminal
mysql> show variables like '%char%';
+--------------------------------------+--------------------------------+
| Variable_name                        | Value                          |
+--------------------------------------+--------------------------------+
| character_set_client                 | utf8mb4                        |
| character_set_connection             | utf8mb4                        |
| character_set_database               | utf8mb4                        |
| character_set_filesystem             | binary                         |
| character_set_results                | utf8mb4                        |
| character_set_server                 | utf8mb4                        |
| character_set_system                 | utf8mb3                        |
| character_sets_dir                   | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1                              |
+--------------------------------------+--------------------------------+
9 rows in set (0.01 sec)

念の為node.jsをインストールしておく

2023年11月30日(木)時点では以下の方法が使えないので別方法をメモしておきます。

リポジトリ追加

Terminal
sudo curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -

上記を実行すると以下のメッセージが表示される。

image.png

翻訳すると…

Google先生によると
https://rpm.nodesource.com/setup_X にあるこのスクリプトは、以前は
install Node.js は現在非推奨であり、最終的には非アクティブになります。

NodeSource ディストリビューションの Github にアクセスし、次に従ってください。
リポジトリを移行する手順URLは↓。

移行方法はgithubの方に記載されている模様ですが内容吟味していない

インストール

Terminal
sudo yum install -y nodejs

調査したところ以下の方法でも追加可能

1. GitHubから nvmをクローンします。

Terminal
git clone https://github.com/creationix/nvm.git ~/.nvm

2.nvmへのパスを通します。

Terminal
source ~/.nvm/nvm.sh

3. nvmコマンドへのパスの設定します。ファイルを開いて

Terminal
vi .bash_profile

4. ↓のように編集します。

Terminal
# .bash_profile

# Get the aliases and functions
if [[ -s ~/.nvm/nvm.sh ]] ; then
        source ~/.nvm/nvm.sh ;
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

5.Node.jsをインストールするための準備(これでインストール可能なバージョンが表示される)

Terminal
nvm ls-remote

6.Node.js のインストール(インストールすときはバージョンを指定する)
※v16より上はエラーになる可能性大

Terminal
nvm install 16.20.2

7.使用するバージョンの指定(今度は「v」をつける)

Terminal
nvm use v16.20.2

確認コマンド

node

Terminal
node -v

npm

Terminal
npm -v

phpのインストール

ec2は何も設定しないとphp5.4がインストールされてしまうため諸々設定を入れつつインストールします。
まずはインストール可能なphpのバージョン確認
※インストールはamazon-linux-extrasコマンドを使用します。

Terminal
amazon-linux-extras | grep php

php8.2をインストールします。(現時点でインストール可能なものをインストールします。)

Terminal
sudo amazon-linux-extras install php8.2

残りの細かいphpをインストールしていきます。(8.2になっていればこれでインストール可能)
phpmyadminだけインストールできないので別でインストール(何個か失敗するかも)

Terminal
sudo yum install -y php-cli php-pdo php-fpm php-json php-mysqlnd
Terminal
sudo yum install -y php php-mbstring php-xml php-pear php82-php-pecl-xmlrpc.x86_64 php-gd php82-php-pecl-mcrypt.x86_64 php82-php-pecl-mysql.x86_64
Terminal
sudo yum install -y php-devel
Terminal
sudo yum -y install --enablerepo=epel,remi,remi-php74 phpmyadmin

↓のように利用可能なリポジトリが表示されるのでepelを使ってyumでインストールします。

結果
phpMyAdmin-4.4.15.10-6.el7.noarch : Handle the administration of MySQL over the World Wide Web
リポジトリー        : epel

yumコマンドを使用してphpmyadminをインストール。できたらバージョンの確認(php -v)ね

Terminal
sudo yum -y install --enablerepo=epel,remi,remi-php74 phpmyadmin

php.iniファイルの編集(事前にコピーはあったほうが安心)

Terminal
sudo vim /etc/php.ini

変更点

※検索は「/〇〇」

  • memory_limit = 512M
  • post_max_size = 100M
  • upload_max_filesize = 100M
  • date.timezone = Asia/Tokyo
  • display_errors = On
  • mbstring.language = Japanese
  • mbstring.internal_encoding = UTF-8
  • mbstring.http_input = UTF-8
  • mbstring.http_output = pass
  • mbstring.encoding_translation = On
  • mbstring.detect_order = auto

ImageMagickをインストールしてphpで利用できるように設定する。

スーパーユーザーで実行しないとmakeでエラーになります。

SHELL
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install

php.iniファイルに以下を追加する。

※「extension_dir =」で検索

php.ini
extension_dir = "/usr/lib64/php/modules/"
# インストールされたディレクトリ

[imagick]
extension="imagick.so"

インストールチェック

SHELL
php -m | grep imagick

phpmyadminの設定

Terminal
sudo vim /etc/httpd/conf.d/phpMyAdmin.conf

今の所コレで動いている。

vim
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require all granted
     </RequireAny>
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require all granted
     </RequireAny>
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Require all denied
</Directory>

<Directory /usr/share/phpMyAdmin/templates/>
    Require all denied
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Require all denied
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Require all denied
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>

設定が完了したら文法チェックなどをしてからhttpdを再起動。

Terminal
sudo apachectl configtest
sudo service httpd configtest
sudo systemctl restart httpd.service

試しにphpmyadminにアクセスして↓が表示されればOK

パブリックIP/phpmyadmin/

Postfixの設定

ローカルサーバからメール送信を可能にするための備忘録
https://qiita.com/akisute_sara/items/8f9e75a045b3d86d16ea

wordpressのインストール

DBでwordpress用のユーザーを作ります。(このDB作成はphpmyadminからでもOK)
※「your_strong_password」は任意のパスワードを入れてください。

こちらはサーバ上にwordpressをインストールする場合の手順です。
ローカルマシンで使用する場合は別途wordpress公式サイトからzipファイルダウンロードして展開した方が良いです。(多数環境を用意できたりするため)

MySQL
CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';

DBを作成します。(DB名は任意)

MySQL
CREATE DATABASE `wordpress-db`;

データベースに対して、以前作成した WordPress ユーザーに対する完全な権限を付与します。

MySQL
GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";

すべての変更を有効にするため、データベース権限をフラッシュしてMySQLを終了

MySQL
FLUSH PRIVILEGES;

以下コマンドでwordpressのファイルを取得します。

Terminal
wget https://ja.wordpress.org/latest-ja.tar.gz

ファイルの展開

Terminal
tar -xzvf latest-ja.tar.gz

展開されたファイルを ls で確認

結果
latest-ja.tar.gz  wordpress

wordpress内のconfigファイルのコピー&ファイル名の変更

Terminal
cd wordpress
cp -pr wp-config-sample.php wp-config.php

vimにて「wp-config.php」ファイルに作成したDBの情報を登録。

該当箇所

/** データベースの名前
define( 'DB_NAME', 'database_name_here' );

/** データベースのユーザー名 */
define( 'DB_USER', 'username_here' );

/** データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' );

WordPress Salts Generatorにアクセスし、認証用ユニークキー8行をそのまま全行テキストエディタにコピペ。
※なおconfigファイル内にURLは記載されている。
https://api.wordpress.org/secret-key/1.1/salt/

該当箇所

define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );

apacheのドキュメントルートでフォルダを作成します。

Terminal
cd /var/www/html
sudo mkdir wordpress

wordpressファイルをapacheのドキュメントルートに配置します。

Terminal
sudo cp -r wordpress/* /var/www/html/wordpress/

これで一通りの配置は完了しましたので作成したインスタンスのパブリックDNSから実際にアクセスしてみましょう。
※どこかでユーザー権限を変更する必要があるのでそこを確認する。

npmパッケージのexpressをインストールする。

vagrantファイルの編集

expressを実行するときのポートが必要になるためこちらのコードを28行目付近に追加
また、vagrantは管理者権限で実行する必要があります。

terminal
config.vm.network "forwarded_port", host: 3000, guest: 3000

terminalでの操作

まずexpressのプロジェクトを作成します?

terminal
npm i -g express-generator

任意の場所にプロジェクト用のディレクトリを作成します。

terminal
mkdir 〇〇

expressのひな型を作成します。

terminal
express -e 

※実行結果
image.png

続いて、npmをインストールします。

terminal
npm install

※実行結果
image.png

完了したらアプリを起動してみます。

terminal
DEBUG=node-test:* npm start

こんな画面がでればOK
image.png

★参考記事

ロケールとタイムゾーンの変更
http://taustation.com/vagrant-virtualbox-amazonlinux2/

初期設定7選
https://i-think-it.net/ec2-startup-centos7-7/#firewalldiptables

apacheの設定
https://go-journey.club/archives/14030

apacheの権限変更
https://kerberos.hatenablog.com/entry/2021/07/08/201120

apacheのSeverNameエラーが出る場合
https://onoredekaiketsu.com/apache-error-fully-qualified-domain-name/

phpのインストール方法
https://it-jog.com/wordpress/install-php74-wpress

wordpress日本語版のインストール
https://qiita.com/pugiemonn/items/84e060b39c2c15e80b57

wordpressの設定方法(aws公式)
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/hosting-wordpress.html

wordpressの設定方法(ユーザー記事)※こちらはmariaDBとnginx使っているようです。
https://kacfg.com/ec2-wordpress/

node.jsのインストール参考
https://qiita.com/oishihiroaki/items/bc663eb1282d87c46e97

エラーが出た場合
https://rensaba-programer.jp/2023/05/17/node-lib64-libm-so-6-version-glibc_2-27-not-found-required-by-node/

expressの起動方法
https://qiita.com/naoto_koyama/items/a0bf83b6faca7a4f2c58

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0