0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

サーバ構築をした話

Last updated at Posted at 2023-06-15

はじめに

これは株式会社ハートビーツ様のインターンシップで経験した内容を自分の環境で立て直してwordpressを実際に使うことができるようになるまで設定を行ったものである。今回作成するサーバはLAMP環境を構築する。
株式会社ハートビーツ様

自己紹介(2023年6月現在)

  • 2021年4月に大学入学し、初めてプログラミングを学ぶ
  • プログラミング経歴
    • C言語(2021年4月~2022年6月)
      • 主に学校の授業で使用
      • ubuntu、gcc、Atmel Studio、VScode
        • 基本文法から組み込みの基礎まで
        • AtCoderのBまでは安定的に解ける
    • Python(2021年10月~現在)
      • 主に学校の授業で使用
      • VScode、python、anaconda jupiter、Raspberry Pi, tensorfrow
        • 基本文法から機械学習の基礎、データ解析基礎、センサシステムの作成
    • Java(2022年5月~現在)
      • 独学で趣味の範囲で使用
        • 基本文法からMavan、Gradleまで経験あり
          • MinecraftのMod作成を行った
        • 現在はSpring Bootに挑戦中
  • Linuxに関しては全く触ったことがなくubuntuで触れたcdやviのみ使える

早速作業をしよう

今回準備するもの

  • AWSアカウント
  • Teraterm(windows)

今回利用するもの

  • AWS EC2(無料利用枠で最低限は動きます)
  • PHP
  • MySQL
  • Apache
  • WordPress

目次

1.Linux編
2.Apache編
3.PHP編
4.MySQL編
5.WordPress編
6.これを通して学んだこと
7.上手く動作しないとき

Linux設定編

  1. AWSマネジメントコンソールからインスタンスを作成、起動する
  2. Linuxの初期設定を変更する

では、やっていこう

AWSマネジメントコンソールからインスタンスを作成、起動する

各自のAWSマネジメントコンソールにログインする
リージョンを東京にする
マネジメントコンソール上側「コンピューティング」から「EC2」を選ぶ
image.png

「インスタンスを起動」を選ぶと下記のようなページに遷移する
image.png

インスタンスを作成の設定について
自分が実際に設定したもの
  1. 名前とタグ

    • サーバの内容を含めた方が良い
      • 今回はwebサーバなので「web」を含める
      • Alma Linuxからもじって「albus-webdb01」と設定
  2. AMI

    • AWS MarketplaceからAlma Linux OS 8.7を選択
      • インターンシップではalma Linuxを基にしたイメージを設定したため

    注意点
    Linuxディストリビューションによってはコマンドが少し異なるものがあります。
    この記事はRedHat系Alma Linuxで行います。
    その他RedHat系はCent OS、Fedoraがあります。
    違う場合は読み替えて実行してください。

  3. インスタンスタイプ

    • t2.micro
      • 無料枠で一番性能が高い
  4. キーペア

    • キーペア名は任意
    • キーペアタイプはED25519を選択
    • Teratarmでは「.pem」を選ぶ
    • キーペアを作成をクリック
  5. ネットワーク設定

    • VPC デフォルト
    • サブネット デフォルト
    • パブリックIPの自動割り当て デフォルト
    • ファイアウォール
      • セキュリティグループを作成する
      • セキュリティグループ名:任意
      • 説明:任意
      • インバウンドセキュリティグループのルール
        • タイプ ssh
        • ソースタイプ 任意の場所
        • 説明 任意
  6. ストレージを設定

    • 10GiB gp3

    注意点
    メモリが少なすぎるとMySQLの起動中、処理が遅くなる可能性がある

  7. その他はそのままで「インスタンスを起動」をクリック

  8. もしサービスなどを本格的に行う場合はAuto Scalingなどでアクセス数やインスタンス稼働率に応じてインスタンスを増減させる仕組みを組み込むべきですが、今回は趣旨と異なるため行いません。

Linuxの初期設定を行う

まずはTeratermなどで接続する

  1. 自動切断の設定
$ sudo vi /etc/ssh/sshd_config
#change
ClientAliveInterval 60
ClientAliveCountMax 30
#

$ sudo systemctl restart sshd

タイムゾーンの設定

$ sudo timedatectl set-timezone Asia/Tokyo

$ date
Thu Jun  8 14:47:24 JST 2023

ホスト名の設定

$ hostnamectl set-hostname albus-webdb01

$ hostname
albus-webdb01

SE Linuxの設定

$ getenforce
Enable

$ sudo vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

再起動しないと反映されないため一旦別コマンドで無効化

$ sudo setenforce 0

$ getenforce
Permissive

Linux設定終了!!

Apache設定編

  1. Apacheのインストール、設定
  2. テストページの作成、表示

Apacheのインストール、起動

$ sudo yum install httpd -y

インストールが完了する

$ sudo systemctl start httpd

$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           mqphp-fpm.conf
   Active: active (running) since Thu 2023-06-08 14:42:41 JST; 28min ago

ステータスを確認してActive:activeになっていれば完了
ブラウザでパブリックIPアドレスを入力するとテストページが表示される

次回から自動起動にする設定

$ sudo systemctl enabled httpd

テストページを作成し、テストページを表示する

$ sudo vi /var/www/html/index.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>テストページ</title>
</head>
<body>
テスト
</body>
</html>

保存後にブラウザにインスタンスのパブリックIPアドレスを入力することで以下のようなページが表示される
image.png

Apache設定終了!!

PHP設定編

  1. PHPのインストール
  2. ApacheとPHPを連結させる

PHPのインストール

システムパッケージを更新する

$ sudo dnf upgrade --refresh -y

PHPのリポジトリをインストールする

$ sudo dnf install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm

PHPのバージョンを確認する

$ dnf module list php

AlmaLinux 8 - BaseOS 3.0 MB/s | 3.0 MB 00:01
AlmaLinux 8 - AppStream 7.3 MB/s | 10 MB 00:01
AlmaLinux 8 - Extras 24 kB/s | 18 kB 00:00
AlmaLinux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
php 8.0 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

今回はPHP8.0を使うため対象バージョンを有効化する

$ sudo dnf module enable php:8.0 -y

インストールする

$ sudo dnf install php -y

PHPのバージョン確認

$ php -v
PHP 8.0.27 (cli) (built: Jan  3 2023 16:17:26) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.27, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.27, Copyright (c), by Zend Technologies

Apacheの設定ファイルにPHPをデフォルトで表示させる設定をする

vi /etc/apache2/sites-enabled/000-default.conf
#以下を追記
DirectoryIndex index.php index.html index.htm

ApacheとPHPを連結させる

PHPを起動&自動起動設定をする

$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm

ここがつまった!!
ここブラウザでパブリックIPアドレスを入れるとPHPのテストページがされるはずなのに動かない、、

そもそも!連結させるさせるためのファイルは入ったのか??

$ sudo rpm -qc php-fpm
#↓インストールしたもの
#/etc/httpd/conf.d/php.conf ←これ!!
#/etc/logrotate.d/php-fpm
#/etc/nginx/conf.d/php-fpm.conf
#/etc/nginx/default.d/php.conf
#/etc/php-fpm.conf

いるなぁ、、、

原因:Apacheの再起動しないと設定が判明されない!!

$ sudo systemctl restart httpd

連結できた!!
初期設定ではDocumentrootが/var/www/htmlになっているのでその配下にphp/phpinfo.phpを作成する

cd /var/www/html
mkdir php

テストページの作成

vi phpinfo.php

<?php phpinfo.php?>

ブラウザでパブリックIPアドレス/php/phpinfo.phpでアクセスするとバージョンや導入したライブラリなどが表示される。

PHP設定終了!!

MySQL設定編

  1. MySQLのインストール
  2. 初期設定

MySQLのインストール

rootユーザーのパスワードを設定する

passwd

ここで驚愕の事実を知る
下記コマンドでrootユーザーへの変更が出来る

$ sudo su -

PHPのインストールされているものの確認

# dnf list installed | grep php

php.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-cli.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-common.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-fpm.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-mbstring.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-opcache.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-pdo.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream
php-xml.x86_64 8.0.20-2.module_el8.7.0+3286+6cee236e
@appstream

MySQLのインストール

# dnf install mysql-server php-mysqlnd

なんでも「sudo」処理は危ないので一旦rootユーザーから抜ける

# exit

MySQLの起動、確認、自動起動設定をする

$ sudo systemctl start mysqld
$ sudo systemctl status mysqld
#active
$ sudo systemctl enable mysqld

MySQLの初期設定をする
参考サイト:MySQLの初期設定(Ingenious)

$ sudo mysql_secure_installation

MySQLへの設定確認

$ sudo mysql -u root -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.30 Source distribution
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL設定終了!!

WordPress設定編

  1. WordPressのインストール
  2. MySQLとの接続

WordPressのインストール

一旦rootユーザーに切り替える

$ sudo su -

Documentルートに移動してそこにインストールする

# cd /var/www/html

WordPressのインストール

# wget https://ja.wordpress.org/latest-ja.tar.gz
-bash: wget: command not found

wgetがない!?のでcurlを使うことに、、

# curl -O https://ja.wordpress.org/latest-ja.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 24.0M 100 24.0M 0 0 7024k 0 0:00:03 0:00:03 --:--:-- 7024k

zipファイルの解凍をする

# unzip latest-ja.zip
-bash: unzip: command not found

unzipも入ってない!?のでunzipをインストールすることに、、

# yum install unzip -y

MySQLとの接続

MySQLにWordPress用のデータベースとユーザ作成する

MySQLにログイン

# mysql -u root -p

データベースの作成とユーザへの権限割り振り

mysql> CREATE DATABASE sample;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY '****';
mysql> GRANT ALL PRIVILEGES ON sample.* TO testuser@localhost;
mysql> FLUSH PRIVILEGES;
mysql> exit

rootユーザから抜ける

# exit

wordpressのディレクトリに移動
先にバックアップファイルを作成する
今は/var/www/htmlにいるはずなので配下のディレクトリに移動する

cd ./wordpress
$ sudo cp wp-config-sample.php wp-config.php
$ ls
index.php wp-blog-header.php wp-cron.php wp-mail.php
license.txt wp-comments-post.php wp-includes wp-settings.php
readme.html wp-config.php wp-links-opml.php wp-signup.php
wp-activate.php wp-config-sample.php wp-load.php wp-trackback.php
wp-admin wp-content wp-login.php xmlrpc.php

configファイルを書き換える
先ほど作成したMySQLユーザの情報を書き込む

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'sample' );
/** Database username */
define( 'DB_USER', 'testUser' );
/** Database password */
define( 'DB_PASSWORD', '******' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0);

ここまでできたら確認!!
http://パブリックIPアドレス/wordpress/wp-admin/install.phpでアクセス!!
インストール画面に飛ぶことができたら完了!!

WordPress設定終了!!

WordPressで画像データを扱うためにはphp-gdというライブラリが必要になるためインストールしておく。
参考サイト:よろず屋ありみちのブログ

サーバ構築完了!!!

しかし、ここで落とし穴があることに気がつく

EC2インスタンスのパブリックIPアドレスが変わったらwordpressの記事見れない!!!!

次回:原因を突き止めて解決方法を試してみた。

学んだこと編

現代ではクラウドとして簡単に個人用サーバを立てられるようになったが、今回の実習を通してサーバがどのように出来上がっているのか、Linux、Apache、PHP、MySQLがどのように動いているのかを学んだ。学校で使ったことのあるコマンド「wgetやunzip」が入っていなくて素朴なLinuxでのCLI操作について慣れることも出来た。以下はリクエストを受け取ってからブラウザへ表示するまでのサーバ内部での処理を図にしてまとめた画像を掲載する。なお、今回はウェアサーバ内部についての記事のためHTMLリクエストやレンダリングについては省略する。

image.png

上手く動作しないとき編

ここでは上でまとめたものの作業中につまずいた問題について記載する

Apacheのテストページが表示されない!!
原因:DocumentRootの設定が間違ってる!!
確認方法

$ sudo vi /etc/httpd/conf/httpd.conf

DocumentRoot "/var/www/html"

ここのDocumentRootの部分がページを表示する際にコンピュータが辿るディレクトリの道で今設定の場合、/var/www/htmlディレクトリ配下のhogehoge.htmlなどが表示対象になる。

WordPressのインストールページに飛べない!!
原因:MySQLのユーザ作成のときにホスト名の設定を間違えた!!
間違えた箇所:mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY '****';
ここのlocalhostの部分をhostnamectlで設定した名前を入れてしまったことが原因で起きた
推測:hostnamectlはPC(Linux上)の名前が変わるだけでMySQLで認識するのは別サーバか、このサーバなのかの差だからlocalhostになるのではないかなぁ、、

と、いうことで!今回はサーバ構築をした話でした!
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?