1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

EC2を使いこなしたいが、LinuxやApache、Larabelの知識に自信がないので、実際にどのように使うのかを確認しながら、学びたいという人向けにコンテンツを整理してみました。私自身、久しぶりに内容を整理してみた所、正規表現の使い方やLinuxの基礎を学びなおす事が出来て、勉強になりました。Linuxの使い方にも熟練しており、EC2を使いこなせているという自信をお持ちの方は、読み流してやってくださいませ。

目次

  1. EC2の用途
  2. EC2インスタンスを起動する際に、自動的に実行されるユーザーデータを設定する方法
    ユーザーデータスクリプト
  3. EC2にApacheをインストールする手順
  4. Linuxコマンド OS、ネットワーク
  5. Linuxコマンド ファイル操作
  6. Linuxコマンド 定番
  7. viエディタ
  8. ファイル表示
  9. Linuxの一般的なディレクトリ構造
  10. Laravel
  11. Laravelを使うための事前準備
  12. LaravelアプリケーションをEC2インスタンスにデプロイする
  13. Laravelの.envファイルの設定例
  14. LaravelのストレージにS3を使用する場合

EC2の用途

用途 説明
Webサーバー EC2上にWebサーバーを構築することができます。ApacheやNginxなどのWebサーバーソフトウェアをインストールし、WebサイトやWebアプリケーションをホストすることができます。
データベースサーバー EC2上にデータベースサーバーを構築することができます。MySQLやPostgreSQLなどのデータベースソフトウェアをインストールし、データベースをホストすることができます。
アプリケーションサーバー EC2上にアプリケーションサーバーを構築することができます。JavaやRuby、Pythonなどの言語で書かれたアプリケーションを実行するためのサーバーを構築することができます。
バッチ処理サーバー EC2上にバッチ処理サーバーを構築することができます。定期的に実行されるジョブやバッチ処理を実行するためのサーバーを構築することができます。
分散処理サーバー EC2上に分散処理サーバーを構築することができます。HadoopやSparkなどの分散処理フレームワークをインストールし、大規模なデータ処理を行うためのサーバーを構築することができます。
VPNサーバー EC2上にVPNサーバーを構築することができます。OpenVPNなどのVPNソフトウェアをインストールし、安全なリモートアクセスを提供するためのサーバーを構築することができます。

EC2インスタンスを起動する際に、自動的に実行されるユーザーデータを設定する方法

ユーザーデータスクリプト

#!/bin/bash
# ホスト名
sudo hostnamectl set-hostname aws-dbserver-1a.localdomain
sed -i 's/localhost/aws-dbserver-1a/g' /etc/hosts
sed -i 's/localhost.localdomain/aws-dbserver-1a/g' /etc/hosts
# タイムゾーン
cp /usr/share/zoneinfo/Japan /etc/localtime
sed -i 's|^ZONE=[a-zA-Z0-9\.\-\"]*$|ZONE="Asia/Tokyo”|g' /etc/sysconfig/clock
# 言語設定
echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n

このスクリプトでは、まずホスト名を変更し、次に、sedコマンドを使用して、/etc/hostsファイル内のlocalhostとlocalhost.localdomainを新しいホスト名に置換します。その後、タイムゾーンを変更し、言語設定を変更します。

sedコマンドの使い方 file.txtというファイルの中で、すべてのoldという文字列をnewという文字列に置換する例です。

コマンドの実行

sed 's/old/new/g' file.txt
記号 説明
s 置換コマンドを指定します。
old 置換対象の文字列を指定します。
new 置換後の文字列を指定します。
g グローバル置換を指定します。行内のすべての一致する文字列を置換します。
file.txt 置換を行う対象のファイルを指定します。

元のファイル (file.txt)

This is an old file.
The old file contains old data.

実行結果

This is a new file.
The new file contains new data.

EC2にApacheをインストールする手順

  1. EC2インスタンスにログインします。
  2. インスタンスが実行されているOSに合わせて、Apacheをインストールするためのパッケージを選択します。
    • Ubuntuの場合:
      sudo apt-get update
      sudo apt-get install apache2
      
    • Amazon Linux 2の場合:
      sudo yum update -y
      sudo yum install httpd -y
      
  3. Apacheを起動します。
    sudo service apache2 start     # Ubuntu
    sudo service httpd start       # Amazon Linux 2
    
  4. EC2インスタンスのセキュリティグループで、ポート80(HTTP)へのアクセスを許可します。これにより、外部からEC2インスタンスにアクセスできるようになります。

プロトコル: TCP
ポート範囲: 80
ソース: 0.0.0.0/0(すべてのIPアドレスからのアクセスを許可)

webブラウザで表示されるのは下記フォルダ

/var/www/html

所有者変更

sudo chown -R ec2-user /var/www/html

index.htmlなどを作成し、保存して、ブラウザ上でpublicIPアドレスを入力し、内容が表示されればOKです。

http://IPアドレス

これらの手順を実行することで、EC2インスタンスにApacheをインストールし、Webサーバーを起動することができます。

Linuxコマンド OS、ネットワーク

ifconfig
ネットワークインターフェイスの情報を表示するコマンドです。
IPアドレス、サブネットマスク、MACアドレスなどを表示することができます。
-sオプションをつけると、シンプルな表示に切り替えることができます。

$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 12:34:56:78:90:ab  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
          ...
$ ifconfig -s eth0
eth0  192.168.0.100  255.255.255.0  ...

hostname
ホスト名を表示するコマンドです。

$ hostname
myhostname

date
現在の日時を表示、または設定するコマンドです。

$ date
Sun Apr 11 11:22:33 JST 2023
$ sudo date --set "2023-04-11 12:34:56"

netstat
ネットワーク接続の状況を表示するコマンドです。
オプションによってTCP、UDP接続の情報、ルーティングテーブル、ソケットの状況などを表示することができます。
-rオプションをつけるとルーティングテーブルを表示することができます。

$ netstat -a
$ netstat -r

ping
指定したIPアドレスやホスト名に対して、疎通確認を行うコマンドです。

$ ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.256 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.234 ms
...

ssh
セキュアなリモートシェル接続を行うためのコマンドです。
SSHプロトコルを使用して、別のコンピュータにログインすることができます。
接続先のホスト名やIPアドレス、ポート番号を指定することができます。

$ ssh username@hostname
$ ssh -p 2222 username@192.168.0.100

df ディスク使用量・空き容量
df コマンドは、ディスク使用量と空き容量を表示するために使用されます。

$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       20480000  2023360  17421120  11% /
/dev/sda2      241856000 40184868 188854132  18% /home
/dev/sda3       20480000  1535956  17841624   8% /var

マウントポイントごとに使用可能な総容量、使用済み容量、空き容量、使用率などが表示されます。

free メモリ空き状況を確認
free コマンドは、現在のメモリの使用状況と空き容量を表示するために使用されます。

$ free
             total       used       free     shared    buffers     cached
Mem:       4047156    1910524    2136632     218240      80392     890064
-/+ buffers/cache:     936068    3111088
Swap:      4194300      35004    4159296

メモリの合計容量、使用済み容量、空き容量、共有メモリ、バッファ、キャッシュ、スワップの情報が表示されます。

top CPU、メモリの使用状況を確認

top - 12:10:58 up  1:09,  1 user,  load average: 0.26, 0.24, 0.21
Tasks: 197 total,   1 running, 196 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.3 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15860.0 total,   2314.4 free,   7868.4 used,   5687.1 buff/cache
MiB Swap:  16384.0 total,  16379.4 free,      4.6 used.   6115.9 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1529 root      20   0 2802604 390892  40524 S  5.0  2.4   1:23.89 gnome-shell
 1052 root     -51   0       0      0      0 S  0.7  0.0   0:56.50 irq/129-acpi_i
 1784 ken       20   0  678676 107744  75704 S  0.7  0.7   0:20.34 gnome-terminal-
 1206 root      20   0  381376  75720  38456 S  0.3  0.5   0:02.72 Xorg
 1925 ken       20   0 3021400 551588 120716 S  0.3  3.4   0:21.02 firefox
 1    root      20   0  168732  10380   7484 S  0.0  0.1   0:03.76 systemd

現在の時刻、システムの稼働時間、タスク数、CPU使用率、メモリ使用量などが表示されます。
その下には、各プロセスのPID、ユーザー名、CPU使用率、メモリ使用量、実行時間などが表示されます。

「ps」コマンドの基本的な使用方法
「ps」コマンドは、現在実行中のプロセスの情報を表示するために使用されます。
プロセスID (PID) を表示することもでき、PID を使用してプロセスを停止することができます。

$ ps

このコマンドは、現在実行中のすべてのプロセスを表示します。
しかし、表示される情報は少なく、実用的ではありません。より詳細な情報を表示するには、オプションを使用します。

よく使うオプションとして、「-a」オプションと「-u」オプションがあります。それぞれ、「a」オプションは、端末操作のプロセス (自分+他ユーザー) を表示し、「u」オプションは、各プロセスの実行ユーザー、CPU、メモリ使用量を表示します。

$ ps -a
$ ps -u

さらに、よく使うコマンドとして、「ps aux | grep xxx」があります。
「aux」オプションは、すべてのプロセスを表示するために使用され、「grep」コマンドは、キーワードに一致するプロセスを検索します。
これにより、プロセスの一覧から必要なプロセスを検索することができます。

$ ps aux | grep httpd

また、一部のプロセスは裏側で動作しているため、ユーザーが意図しない場合でも常に実行されています。
このようなプロセスを「デーモン」と呼びます。これらのプロセスは、「x」オプションを使用して表示することができます。

$ ps ax

最後に、「kill」コマンドを使用してプロセスを停止することができます。
プロセスを停止するには、そのプロセスのPIDを指定して「kill」コマンドを使用します。

$ kill PID

たとえば、プロセス番号が「1234」であるプロセスを停止する場合は、次のように入力します。

$ kill 1234

Linuxコマンド ファイル操作

コマンド 説明
ls ディレクトリ内のファイルやフォルダーの一覧を表示します。
cd カレントディレクトリを変更します。
mkdir 新しいディレクトリを作成します。
rm ファイルやディレクトリを削除します。
cp ファイルやディレクトリをコピーします。
mv ファイルやディレクトリを移動します。
touch 新しいファイルを作成します。
cat ファイルの中身を表示します。
chown ファイルのオーナーを変更します。
chmod ファイルのパーミッションを変更します。

Linuxにおけるファイルやディレクトリには、ユーザー、グループ、その他のユーザーのためのアクセス権が設定されています。
これらのアクセス権を変更するためには、chmodというコマンドを使用します。

chmodコマンドを使用すると、ファイルまたはディレクトリのアクセス権を変更できます。
アクセス権は、読み取り、書き込み、実行の3つの属性で構成されます。
これらの属性は、所有者、グループ、その他のユーザーのために個別に設定できます。

属性は、r(読み取り)、w(書き込み)、x(実行)の3つの文字で表されます。
これらの文字は、ファイルまたはディレクトリを所有するユーザー、グループ、その他のユーザーのためにそれぞれ設定されます。

また、rは4、wは2、xは1の数値で表すこともできます。これは、数字で表されるアクセス権の表記法です。
image.png
たとえば、rwxr-xr--の場合、所有者に読み取り、書き込み、実行のアクセス権があり、
グループには読み取り、実行のアクセス権があり、その他のユーザーには読み取りのアクセス権があることを意味します。
この場合、所有者は7、グループは5、その他のユーザーは4で表されます。

ファイルまたはディレクトリに対するアクセス権を設定する場合、次のように指定します。

数字で表したアクセス権を使用する場合

chmod 755 filename

記号で表したアクセス権を使用する場合

chmod u+rwx,g+rx,o+r filename

所有者には読み取り、書き込み、実行のアクセス権があり、グループとその他のユーザーには読み取りと実行のアクセス権があります。

Linuxコマンド 定番

コマンド 説明
pwd 現在のディレクトリのパスを表示します。
rmdir 空のディレクトリを削除します。
grep ファイルの中から特定のパターンを検索します。
sed ファイルの中の文字列を置換します。
ps 現在実行中のプロセスを表示します。
top システムのリソース使用状況を監視します。
tar ファイルをアーカイブし、圧縮または解凍します。

viエディタ

コマンド 説明
ESC 編集モードからコマンドモードに切り替える
x カーソルがある文字を削除する
/ 検索する文字列を入力する
:wq! 保存して終了する(!をつけることで、強制的に終了する)

ファイル表示

cat
ファイルの中身を表示

例えば、cat file.txtと入力すると、file.txtの中身がターミナル上に表示されます。

cat file.txt

tail
ファイルの末尾から指定した行数を表示

例えば、tail -n 10 file.txtと入力すると、file.txtの末尾から10行を表示します。

tail -n 10 file.txt

lessまたはmore
ターミナルに出力せずに何かを見たい場合に使用する

例えば、less file.txtまたはmore file.txtと入力すると、file.txtの中身を1行進むにはEnterを、1画面進むにはSpaceを、抜けるにはqを押します。

less file.txt
more file.txt

ファイル上書き
 >を使用してファイルを上書き

例えば、echo "Hello World" > file.txtと入力すると、file.txtに"Hello World"が上書きされます。

echo "Hello World" > file.txt

ファイル追記
 >>を使用してファイルに追記

例えば、echo "Hello World" >> file.txtと入力すると、file.txtの末尾に"Hello World"が追記されます。

echo "Hello World" >> file.txt

find
指定した条件に一致するファイルを検索する

例えば、find /home/user -name "*.txt"と入力すると、/home/userディレクトリ以下の拡張子が.txtのファイルを検索します。

find /home/user -name "*.txt"

grep
指定した文字列が含まれた行を検索

例えば、grep "Hello" file.txtと入力すると、file.txtの中で"Hello"が含まれた行を表示します。

"Hello"が含まれた行を検索する

grep "Hello" file.txt
This is a line containing the word Hello.
Hello, world!

複数のファイルを検索する

grep "Hello" file1.txt file2.txt file3.txt
file1.txt: This is a line containing the word Hello.
file2.txt: Hello, world!
file3.txt: Hello again!

正規表現を使用して数字のみを含む行を検索する

grep "^[0-9]*$" file.txt
12345
67890

行番号表示
-nオプションを付けることで、各行の行番号を表示

例えば、grep -n "Hello" file.txtと入力すると、file.txtの中で"Hello"が含まれた行とその行番号を表示します。

grep -n "Hello" file.txt

これにより、"Hello"という文字列を含むすべての行が表示され、各行の行番号が表示されます。行番号は、コロンの前に表示されます。

1:Hello, how are you?
3:Hello, nice to meet you.
5:Hello, world!

この場合、"Hello"が含まれる行は1行目、3行目、5行目であり、それぞれの行番号が1、3、5であることがわかります。

Linuxの一般的なディレクトリ構造

ディレクトリ 説明
/ ルートディレクトリ。すべてのディレクトリやファイルの最上位に位置し、システム全体を管理するためのディレクトリ。
/bin 基本的なシステムツールやコマンドを格納するためのディレクトリ。
/boot システム起動に必要なファイルを格納するためのディレクトリ。
/dev デバイスファイルを格納するためのディレクトリ。デバイスファイルとは、コンピュータの周辺機器や装置などを表すファイルです。
/etc システム全体の設定ファイルを格納するためのディレクトリ。
/home ユーザのホームディレクトリを格納するためのディレクトリ。
/lib システムに必要なライブラリファイルを格納するためのディレクトリ。
/media リムーバブルデバイス(USBメモリやCD-ROMなど)をマウントするためのディレクトリ。
/mnt ファイルシステムを一時的にマウントするためのディレクトリ。
/opt サードパーティのアプリケーションを格納するためのディレクトリ。
/proc カーネルやプロセスに関する情報を提供するための仮想ファイルシステム。
/root rootユーザのホームディレクトリを格納するためのディレクトリ。
/run システム起動時に生成されるランタイムデータを格納するためのディレクトリ。
/sbin システム管理用のコマンドやツールを格納するためのディレクトリ。
/srv システム上で提供するサービスのデータを格納するためのディレクトリ。
/sys カーネルが提供するデバイスやシステム情報を提供するための仮想ファイルシステム。
/tmp 一時的なファイルを格納するためのディレクトリ。
/usr システム全体の共有データやアプリケーションを格納するためのディレクトリ。
/var システムのログや一時ファイル、メールなど、可変データを格納するためのディレクトリ。

Laravel

Laravelは、PHP開発者にとって非常に人気のあるフレームワークの1つとなっています。また、Laravelは、コミュニティが大きく、多数のオープンソースのパッケージやツールを提供しているため、PHPの機能を利用し、開発者が迅速かつ効率的にアプリケーションを構築できるようにする多くの機能を提供しています。

Laravelの特徴

特徴 説明
MVCアーキテクチャ Laravelは、MVC(Model-View-Controller)アーキテクチャに基づいて設計されており、アプリケーションの機能を論理的に分離し、開発の効率性を高めます。
Artisan CLI Laravelは、コマンドラインツール「Artisan」を提供しています。Artisanを使用すると、簡単にアプリケーションのタスクを実行できます。
Eloquent ORM Laravelは、Eloquentと呼ばれるORM(Object-Relational Mapping)を提供しています。Eloquentは、データベースのテーブルをオブジェクトとして扱えるようにします。
Bladeテンプレートエンジン Laravelは、Bladeと呼ばれるテンプレートエンジンを提供しています。Bladeを使用すると、テンプレート内でPHPコードを簡単に埋め込むことができます。
テストフレームワーク Laravelは、PHPUnitを使用したテストをサポートしています。Laravelのテストフレームワークを使用すると、アプリケーションの動作を簡単にテストできます。

Laravelを使うための事前準備

EC2・VPC・RDS設定: LaravelアプリケーションをホストするためのEC2インスタンスを設定し、データベースをホストするためのRDSインスタンスを作成します。
composer: Laravelは、PHPのパッケージ管理システムであるComposerを使用して依存関係を解決します。

$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

Node.js: Laravelは、JavaScriptを使用してフロントエンドの機能を実装します。

$ curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
$ sudo yum install -y nodejs

PHP各種モジュール: Laravelは、多くのPHP拡張機能を使用します。

$ sudo yum install -y php-bcmath php-ctype php-fileinfo php-json php-mbstring php-openssl php-pdo php-tokenizer php-xml php-zip

Apache設定: Laravelは、Apache Webサーバーを使用して実行されます。

sudo vi /etc/httpd/conf/httpd.conf
<Directory /var/www/html>
AllowOverride All
</Directory>
sudo systemctl restart httpd

LaravelアプリケーションをEC2インスタンスにデプロイする

権限付与:

chmod -R 777 storage
chmod -R 777 bootstrap/cache

Composerを使用したライブラリのインストール:

composer update

Node.jsを使用したフロントエンドのビルド:

npm i && npm run prod

.envファイルの作成:

cp .env.example .env

アプリケーションキーの生成:

php artisan key:generate

Laravelの.envファイルの設定例

APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
php artisan config:clear
php artisan migrate:fresh --seed
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

LaravelのストレージにS3を使用する場合

AWS SDK for PHPとleague/flysystem-aws-s3-v3のインストール

composer require league/flysystem-aws-s3-v3

.envファイルの設定

AWS_ACCESS_KEY_ID= // IAMロール設定なら空白でok
AWS_SECRET_ACCESS_KEY= // IAMロール設定なら空白でok
AWS_DEFAULT_REGION=ap-northeast-1 // 東京リージョン
AWS_BUCKET=[バケット名]

ファイルをアップロードするコード

$file = $request->file('file');
Storage::disk('s3')->putFile('/', $file);

ここで、putFileメソッドの第一引数は、ファイルが保存されるS3上のパスを指定します。上記の例では、ルートディレクトリにファイルが保存されます。第二引数には、アップロードされるファイルを指定します。この例では、リクエストからファイルを取得していますが、アップロードされたファイルのパスを直接指定することもできます。

アプリケーション開発に集中するための方法を模索した
本記事はQmonus Value Streamの投稿キャンペーン記事です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?