概要
AWS EC2環境を作るための練習でvagrantのAmazon linux 2イメージを使用してサーバ作成とWordPressのインストールまでの備忘録
※これはvagrant init~BOX作成までを行った状態からの備忘録です。
ローカル環境上であれば、wordpressはダウンロードしたzipファイルを解凍して置けばOKのはず。
環境
- windows8.1
- ConEmu
- Vagrant
- bento/amazonlinux-2(vagrant box)
ここからはスーパーユーザーにスイッチして作業を進めます。
スーパーユーザースイッチ
sudo su
手順
システム情報のチェック
cat /etc/os-release
↓が表示されればOK
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で現状を確認
date
日本語で表示されるように設定
sudo localectl set-locale LANG=ja_JP.UTF-8
タイムゾーンの設定を変更する↓のコマンドを実行
sudo timedatectl set-timezone Asia/Tokyo
vagrantを再起動
vagrant reload
SSHして時刻を確認して↓のように表示されればOK
date
2022年 9月 7日 水曜日 12:59:08 JST
初期設定
↓のコマンドを実行してselinuxの状態確認する。 「Disabled」 になっていればOK
getenforce
DBはMySQLを使うので最初から入っているmariaDBを削除します。
sudo yum -y remove mariadb-libs mysql*
ちゃんと確認したい場合はこちら
DBはMySQLを使うので他のDBがインストールされていないか確認してインストールされている場合は削除します。
sudo yum list installed | grep mariadb-libs
↓のようにmariadbが入っていることを確認したら次へ
mariadb-libs.x86_64 1:5.5.64-1.amzn2 installed
以下コマンドでアンインストールします。(ログに「完了しました!」が表示されればOK)
sudo yum -y remove mariadb-libs mysql*
各種パッケージのアップデートとapacheやその他のパッケージをインストール。
パッケージのアップデート
sudo yum -y update
そのたアプリの追加
sudo yum -y install git vim wget epel-release dkms httpd zip unzip postfix ImageMagick-devel gcc-c++
2023年11月30日(木)現在再構築時に表示されませんでした。
EPELをインストールしろ!と出たら指示に従ってインストールします。
こんな感じの結果が出たら
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
sudo amazon-linux-extras install -y epel
Remiリポジトリをインストール
sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
EPELが有効になっているか確認するときはコレ
sudo yum repolist all | grep -i epel
↓のように表示されればOK
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側で設置可能でしたので編集いたします。
これをすればシンボリックリンク不要でした。
# 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
何かあったときのために設定ファイルをバックアップ。
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk
vimで設定ファイルを編集します。
sudo vim /etc/httpd/conf/httpd.conf
phpが使えるように以下2行を追加
※AddTypeタイプで検索(検索方法は「/〇〇」)して出てきた同項目の下に追加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
cssが読み込めるようにする。
「Directory "/var/www/html"」内の↓の部分を調整
- AllowOverride None
+ AllowOverride All
バーチャルホストの設定をさせる場合はこちらの設定を変更する。
EnableSendfile on → EnableSendfile off
configtestでエラーが出る場合の対処方法(localの場合)
- #ServerName www.example.com:80
+ ServerName localhost:80
「:wq」で保存して終了し「よく使うコマンド」を順番に実行(※再起動は不要)
起動チェック時に↓のように表示されればOK
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
<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のインストールと初期設定
リポジトリを追加
sudo yum -y localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
リポジトリの追加が終わったらインストール可能なバージョンを確認する。
sudo yum info mysql-community-server
こんな感じの結果出ればOK
利用可能なパッケージ
名前 : mysql-community-server
アーキテクチャー : x86_64
バージョン : 8.0.28
リリース : 1.el7
容量 : 451 M
MySqlをインストール
まず、必ずエラーになる公開鍵をインストールする。
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
これをしないと「公開鍵がインストールされていません。インストールしてください」という感じで怒られる。
MySqlをインストール
sudo yum -y install mysql-community-server
終わったらバージョンの確認
mysqld --version
/usr/sbin/mysqld Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
設定をバックアップ
sudo cp /etc/my.cnf /etc/my.cnf.org
認証プラグインの設定以下コマンドでcnfファイルを開く
sudo vim /etc/my.cnf
最後の行に以下を追加。
default_authentication_plugin=mysql_native_password
MySQLの起動、状態確認、自動起動を設定
起動
sudo systemctl start mysqld
状態確認
sudo systemctl status mysqld
自動起動
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に吐き出されので以下のコマンドを打って出てきたパスをメモとして残しておく。
sudo grep password /var/log/mysqld.log
パスワードの更新と初期設定をする。先程吐き出されたlogのパスワードから変更する。
※new passwordは2回入力したらあとはEnterのみ押していけばOK(本番では色々設定が必要)
sudo mysql_secure_installation
ログインと状態確認をする。
用法 | コマンド |
---|---|
ログイン方法 | mysql -u root -p |
状態確認 | status |
↓の結果が帰ってくればまぁ大丈夫。
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
念の為文字コードも確認
show variables like '%char%';
↓の結果が帰ってくればまぁ大丈夫だと思うので確認終わったらMySQLは終了
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日(木)時点では以下の方法が使えないので別方法をメモしておきます。
リポジトリ追加
sudo curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
上記を実行すると以下のメッセージが表示される。
翻訳すると…
https://rpm.nodesource.com/setup_X にあるこのスクリプトは、以前は
install Node.js は現在非推奨であり、最終的には非アクティブになります。
NodeSource ディストリビューションの Github にアクセスし、次に従ってください。
リポジトリを移行する手順URLは↓。
移行方法はgithubの方に記載されている模様ですが内容吟味していない
インストール
sudo yum install -y nodejs
調査したところ以下の方法でも追加可能
1. GitHubから nvmをクローンします。
git clone https://github.com/creationix/nvm.git ~/.nvm
2.nvmへのパスを通します。
source ~/.nvm/nvm.sh
3. nvmコマンドへのパスの設定します。ファイルを開いて
vi .bash_profile
4. ↓のように編集します。
# .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をインストールするための準備(これでインストール可能なバージョンが表示される)
nvm ls-remote
6.Node.js のインストール(インストールすときはバージョンを指定する)
※v16より上はエラーになる可能性大
nvm install 16.20.2
7.使用するバージョンの指定(今度は「v」をつける)
nvm use v16.20.2
確認コマンド
node
node -v
npm
npm -v
phpのインストール
ec2は何も設定しないとphp5.4がインストールされてしまうため諸々設定を入れつつインストールします。
まずはインストール可能なphpのバージョン確認
※インストールはamazon-linux-extrasコマンドを使用します。
amazon-linux-extras | grep php
php8.2をインストールします。(現時点でインストール可能なものをインストールします。)
sudo amazon-linux-extras install php8.2
残りの細かいphpをインストールしていきます。(8.2になっていればこれでインストール可能)
phpmyadminだけインストールできないので別でインストール(何個か失敗するかも)
sudo yum install -y php-cli php-pdo php-fpm php-json php-mysqlnd
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
sudo yum install -y php-devel
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)ね
sudo yum -y install --enablerepo=epel,remi,remi-php74 phpmyadmin
php.iniファイルの編集(事前にコピーはあったほうが安心)
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でエラーになります。
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
php.iniファイルに以下を追加する。
※「extension_dir =」で検索
extension_dir = "/usr/lib64/php/modules/"
# インストールされたディレクトリ
[imagick]
extension="imagick.so"
インストールチェック
php -m | grep imagick
phpmyadminの設定
sudo vim /etc/httpd/conf.d/phpMyAdmin.conf
今の所コレで動いている。
# 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を再起動。
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ファイルダウンロードして展開した方が良いです。(多数環境を用意できたりするため)
CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
DBを作成します。(DB名は任意)
CREATE DATABASE `wordpress-db`;
データベースに対して、以前作成した WordPress ユーザーに対する完全な権限を付与します。
GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
すべての変更を有効にするため、データベース権限をフラッシュしてMySQLを終了
FLUSH PRIVILEGES;
以下コマンドでwordpressのファイルを取得します。
wget https://ja.wordpress.org/latest-ja.tar.gz
ファイルの展開
tar -xzvf latest-ja.tar.gz
展開されたファイルを ls で確認
latest-ja.tar.gz wordpress
wordpress内のconfigファイルのコピー&ファイル名の変更
cd wordpress
cp -pr wp-config-sample.php wp-config.php
vimにて「wp-config.php」ファイルに作成したDBの情報を登録。
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のドキュメントルートでフォルダを作成します。
cd /var/www/html
sudo mkdir wordpress
wordpressファイルをapacheのドキュメントルートに配置します。
sudo cp -r wordpress/* /var/www/html/wordpress/
これで一通りの配置は完了しましたので作成したインスタンスのパブリックDNSから実際にアクセスしてみましょう。
※どこかでユーザー権限を変更する必要があるのでそこを確認する。
npmパッケージのexpressをインストールする。
vagrantファイルの編集
expressを実行するときのポートが必要になるためこちらのコードを28行目付近に追加
また、vagrantは管理者権限で実行する必要があります。
config.vm.network "forwarded_port", host: 3000, guest: 3000
terminalでの操作
まずexpressのプロジェクトを作成します?
npm i -g express-generator
任意の場所にプロジェクト用のディレクトリを作成します。
mkdir 〇〇
expressのひな型を作成します。
express -e
続いて、npmをインストールします。
npm install
完了したらアプリを起動してみます。
DEBUG=node-test:* npm start
★参考記事
ロケールとタイムゾーンの変更
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
expressの起動方法
https://qiita.com/naoto_koyama/items/a0bf83b6faca7a4f2c58