はじめに
こんにちは!なや(@NayaTaiyo)と申します!メンタリングを受ける中でTechBullの課題は、まずサーバの構築から始まります。今回はVagrantを利用してWordPressを構築したので、学んだことの振り返りとして構築手順書を書いてみました。
自己紹介
2000年生まれで、今年エンジニア歴2年目の駆け出しのインフラエンジニアとなります。SES企業に従事しており、主にlinuxやセキュリティ製品を扱うお仕事をしています。今後、自分の技術領域の拡大やインフラ設計・構築の案件に関われるエンジニアになりたいという思いからTechBullのコミュニティへ参画させていただきました。
WordPressとは
だれでも簡単にブログやWebサイトの作成ができる「コンテンツマネジメントシステム(CMS)」の一つです。さらにオープンソースソフトウェア(OSS)でもありソースコードを無償で公開しています。誰でも自由に改変や再配布ができるソフトウェアとなります。WordPressはクライアントからのリクエストを受けるWebサーバ、動的な処理を担うアプリケーションサーバ、データを保存するデータベースサーバの三階層の設計となります。
Vagrantとは
VagrantはHashiCorp社が開発しているVirtualBoxやVMWare、 Microsoft Azureなどをコードで操作してくれるプロビジョニングツールとなります。Vagrant を利用して構築される仮想マシン自体はVirtualBoxやVMWare の仮想マシンと変わりはありません。 Vagrant のメリットは今まで手動で行っていたOSの設定などをコードで簡単に開発環境が構築できるようになります。また、Vagrant はプラグインがあり、仮想マシンの起動~停止の基本操作だけではなく、様々な操作や拡張性が高いのも特徴の一つです。Linuxやサーバを始めて勉強するのであればVagrantから始めると良いと思います。
環境構築手順
- ホストOS : Windows 11
- Vagrant 2.4.1
- VirtualBox 7.0.14
- Amazon Linux 2 202404.23.0版
- サービス
- Web Server:Nginx
- Application:PHP8.3
- Database:Mysql8.0
- Vagrantfile
1 2 3 4 |
Vagrant.configure("2") do |config| config.vm.box = "bento/amazonlinux-2" config.vm.network "private_network", ip: "192.168.50.4" end |
- ユーザの作成
- 仮想マシンへのSSH接続
1 2 |
$ vagrant up $ vagrant ssh |
1 2 |
$ sudo useradd menta $ sudo cat /etc/passwd #user mentaが作成されているか確認 |
-
user「menta」でnopasswd設定をする(パスワード無しでコマンドを使用できる設定)
1 2 |
$ sudo visudo menta ALL=(ALL) NOPASSWD:ALL #追記 |
-
ssh鍵認証の設定
※ホストマシン(本手順だとWindows環境)に戻る
1 |
$ ssh-keygen -t rsa |
以下のように出力されるのでEnterを押下
1 2 3 |
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/PC_User/.ssh/id_rsa): Enter passphrase (empty for no passphrase): |
【説明】
- Enter file in which to save the key (/c/Users/PC_User/.ssh/id_rsa): :
ファイル名/ファイルパスを指定することができ、指定したファイル名でSSH鍵が作成される(ファイル名のみの場合はカレントディレクトリに作成される)
Enter passphrase (empty for no passphrase): :作成する鍵を使用した際のパスワード設定
※Enterのみを押下して進むと設定なしの状態で進む
1 2 3 4 5 6 7 |
$ vi ~/.ssh/config #Vagrantではなくローカルで設定する 以下追記 Host dev01 Hostname 192.168.50.4 User menta Port 22 IdentityFile ~/.ssh/id_rsa |
[説明]
- Host {ホスト名}
- リモートマシンの(仮想マシン)のホスト名
- Hostname {ipアドレス}
- リモートマシンの(仮想マシン)のipアドレス
- User {ユーザ名}
- SSH接続時、Hostを使用してログインする際のユーザ名
- Port 22
- SSHのポート番号
- IdentityFile {ファイルパス}
- 「ssh-keygen -t rsa」で作成した秘密鍵のファイルパス
- 「ssh-keygen -t rsa」で作成した秘密鍵のファイルパス
- リモートマシンのssh鍵設定と公開鍵配置
1 |
$ cat ~/.ssh/id_rsa.pub |
出力結果をメモにコピペしておく(後手順で使用するため)
1 |
$ ssh vagrant@192.168.50.4 #mentaで接続するとpwを聞かれるのでvagrantで接続 |
ホストの公開鍵を ~/.ssh/known_hosts
に登録するかを聞かれるので yes
pwを聞かれるのでvagrantを入力 ※vagrantユーザの初期パスがvagrantであるため
1 2 |
[vagrant@vagrant ~]$ sudo su [root@vagrant vagrant]# vi /etc/ssh/sshd_config |
以下の設定を修正(以下の設定のものはそのままで良い)
1 2 3 4 |
PubkeyAuthentication yes PermitRootLogin yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no |
[説明]
- PubkeyAuthentication yes/no
- 公開鍵認証有/無
- PermitRootLogin yes/no
- rootユーザでのSSHログイン有/無
- AuthorizedKeysFile {ファイルパス}
- 公開鍵ファイルのファイルパス
- PasswordAuthentication yes/no
- パスワード認証有/無
1 2 3 |
$ sudo su - menta $ mkdir ~/.ssh $ vi ~/.ssh/authorized_keys |
メモにコピペしたid_rsa.pubの出力結果を貼りつけ
- 引っかかりポイント
当時の筆者はssh接続時に指定したユーザのhomeディレクトリ配下にある「authorized_keys」ファイルを参照するのではなく、Vagrantユーザのhomeディレクトリ配下にある「authorized_keys」ファイルが全ユーザで共通の設定だと勘違いして鍵認証が許可されなかった経験があります。その他にも「authorized_keys」ファイルをちゃんと読み込めるようにアクセス権限のチェックも必要。
1 |
[root@vagrant vagrant]# systemctl restart sshd.service |
- ホストマシン(本手順だとWindows環境)に戻りssh ホスト名で接続確認
1 |
$ ssh dev01 |
Nginxのインストールと設定
- Nginxとは
Nginxは高性能かつ軽量なWebサーバであり、同時に複数の処理を高速で実行できるというメリットがあります。Nginxは多くのリクエストを同時に並列処理することを前提としたアーキテクチャーになっているため、サーバーダウンのリスクを減らした運用が期待できます。また、並列処理ができるということは、必要となるサーバーの数を減らせるということでもあります。1台のサーバーで多くの処理を担うことができるため、サーバー導入や運用にかかるコストを削減できるというメリットもあります。
一方で、Webサーバーとして広く使用されているもう一つの選択肢にApacheがあります。Apacheは歴史が長く、豊富な機能とモジュールを持っており、柔軟な設定ができる点が大きな強みです。また、モジュールベースの設計により、必要な機能を追加・カスタマイズしやすいという利点があります。Apacheは特に動的コンテンツの処理やCGI、PHPなどを使った処理で強みを発揮し、リクエストごとにプロセスやスレッドを生成して処理を行う「プロセスベース」のモデルを採用しています。
-
NginxとApacheの比較
-
アーキテクチャ:
-
Nginxは非同期イベント駆動型、Apacheはプロセス/スレッドベース
-
-
パフォーマンス:
-
Nginxは大量の同時接続に強く、リソース消費が少ない。Apacheは動的コンテンツの処理で強みを持つが、多数の同時接続ではパフォーマンスが低下する場合がある。
-
-
柔軟性:
-
Apacheはモジュールが豊富で、柔軟なカスタマイズが可能。Nginxは静的コンテンツやリバースプロキシに強く、軽量な環境に適している。
-
-
使い分け:
-
静的コンテンツの配信や、スケーラブルなウェブアプリケーション向けにはNginxが適しており、動的なコンテンツやカスタムモジュールを多く使用するサイトではApacheが有利になることがある。
-
-
- Nginxのインストール
1 2 3 |
$ sudo yum install -y https://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.26.1-2.el7.ngx.x86_64.rpm #最新バージョンのリポジトリを指定 $ sudo systemctl start nginx $ sudo systemctl enable nginx |
-
Nginxの設定
1 |
$ sudo vi /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format custom_log ' [nginx] time:$time_iso8601 server_addr:$server_addr host:$host method:$request_method reqsize:$request_length uri:$request_uri query:$query_string status:$status size:$body_bytes_sent referer:$http_referer ua:$http_user_agent forwardedfor:$http_x_forwarded_for reqtime:$request_time apptime:$upstream_response_time'; gzip on; gzip_types text/plain text/css application/json application/javascript application/xml text/xml application/x-javascript text/javascript image/svg+xml; gzip_min_length 1000; gzip_comp_level 6; include /etc/nginx/conf.d/*; } |
[説明]
- user {user名}
- Nginxを実行するユーザーを指定(デフォルトはnginx)
- worker_processes {auto/数値};
- ワーカープロセス数の指定。autoだと動的に数値を指定してくれる(autoを推奨)
- error_log {ファイルパス}
- 指定したファイルパスにエラーログを保存
- pid /run/nginx.pid;
- Nginxを起動した際のプロセスidが格納される。(基本は設定を変更しなくてよい)
- worker_connections {数値}
- 1つのワーカープロセスが同時に処理できる最大接続数
- log_format custom_log
- カスタムログ形式を定義。custom_logという名前のログフォーマットを作成し、リクエストや応答に関する詳細な情報をログに記録します。
- $time_iso8601
- リクエスト時のタイムスタンプをISO8601形式で記録します。
- $server_addr
- サーバー(本手順ではdev.menta.me)のIPアドレスを記録します。
- $host
- リクエストされたホスト名を記録します。
- $request_method
- HTTPリクエストのメソッド(GET、POSTなど)を記録します。
- $request_length
- リクエストのサイズを記録します。
- $request_uri
- リクエストされたURIを記録します。
- $query_string
- クエリパラメータを記録します。
- $status
- HTTPステータスコード(200、404など)を記録します。
- $body_bytes_sent
- 応答で送信されたバイト数を記録します。
- $http_referer
- リクエストのRefererヘッダ(アクセス元のリンク)を記録します。
- $http_user_agent
- ユーザーエージェント(ブラウザやクライアントの情報)を記録します。
- $http_x_forwarded_for
- クライアントのIPアドレスを記録します。特にプロキシ経由の場合に使用されます。
- $request_time
- リクエスト処理にかかった時間を記録します。
- $upstream_response_time
- 上流サーバーからの応答時間を記録します。(リバースプロキシの場合など)リバースプロキシは、バックエンドサーバーにクライアントからのリクエストを転送し、レスポンスをクライアントへ返す処理のこと
- gzip on
- Gzip圧縮を有効にする設定です。これにより、Nginxがクライアントに送信するコンテンツを圧縮し、帯域幅を削減。
- gzip_types {MIMEタイプ}
- Gzip圧縮するMIMEタイプを指定します。
- gzip_min_length {数値}
- Gzip圧縮を適用するコンテンツの最小サイズを設定しています。(バイト単位)
- gzip_comp_level {1~9}
- Gzip圧縮の圧縮レベルを指定します。(6を推奨)
- include {/etc/nginx/conf.d/*.confファイル}
- バーチャルホストの設定ファイルの呼び出し。バーチャルホストは、1台のサーバーで複数のドメインやウェブサイトをホストできる仕組みを指します。
- ドキュメントルートとindex.htmlの作成
1 2 3 4 |
$ sudo mkdir -p /var/www/dev.menta.me $ sudo vi /var/www/dev.menta.me/index.html test $ sudo chown -R nginx /var/www/dev.menta.me/index.html |
今回はindex.htmlに「test」と記載。ここで記載したものが後にブラウザ上に表示される。アクセス権に指定する所有者については「Nginxの設定」のuserディレクティブで設定したuser名を指定。以下、Nginxの設定より抜粋。
1 2 3 4 |
user nginx; #user名にnginxを指定している worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; |
- 引っかかりポイント
index.htmlの所有者の設定は現在ログインしているユーザ(whoamiコマンドで表示されるユーザ)ではなく「Nginxの設定」で指定したuser名を設定することで権限まわりのエラーが発生しづらくなります。Nginxがクライアントからのリクエストを受け付け、設定ファイルに記載されているuserディレクティブのuser(デフォルトはnginx)で後続の処理を行うため。
-
バーチャルホストの設定
ディレクトリが存在しない場合は作成
1 2 |
$ sudo mkdir /etc/nginx/conf.d $ sudo vi /etc/nginx/conf.d/dev.menta.me.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; server_name dev.menta.me; root /var/www/dev.menta.me/; index index.php index.html; access_log /var/log/nginx/dev.menta.me.log custom_log; error_log /var/log/nginx/dev.menta.me.error.log; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } |
- listen {80/443}
- ssl/tlsの設定ありの場合は443でも可能。基本は80でよい
- server_name {ホスト名/ipアドレス}
- この設定を適用するホスト名/ipアドレスを指定
- root {ディレクトリパスを指定}
- ドキュメントルートの指定。server_nameに対してのリクエストをドキュメントルート配下から探索
- index {ファイル名}
- クライアントが特定のファイル名を指定せず、単にディレクトリにアクセスしたときに、Nginxがどのファイルを探して返すべきかを定義
- access_log {ファイルパス} custom_log;
- カスタムログの保存。末尾にnginx.confで指定したログフォーマット名を付与することでログフォーマットの適用
- ログフォーマット名なしの場合は、デフォルトのアクセスログを保存
- error_log {ファイルパス};
- エラーログの保存
- location / { try_files $uri $uri/ =404;
- /にマッチするリクエスト(すべてのリクエスト)に対して、リクエストされたURIに対応するファイルを探し、もし存在しなければ、同名のディレクトリを探します。どちらも存在しなければ、404エラーを返す。
- location ~ \.php$
- phpで終わるリクエスト(PHPファイル)に対して、このlocationブロックの設定を適用します。
- include fastcgi_params
- PHPリクエストをFastCGIで処理する際に必要なFastCGIパラメータを定義したファイルを読み込みます。通常は、nginxのインストール時に提供されるfastcgi_paramsファイルを使用します
- fastcgi_pass unix:{ファイルパス}
- Unixドメインソケットを使う際の、ソケットファイルの指定。
- fastcgi_index {ファイル名}
- ディレクトリ内に{ファイル名}があれば、それをデフォルトで処理するように指定します。
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
- Nginxがドキュメントルート内のリクエストされたPHPファイルを探索し、PHP-FPMに正しいファイルパスを伝える設定
1 |
$ sudo systemctl restart nginx.service |
-
動作確認
ホストマシン(本手順ではWindows環境)にてhostsファイルの設定を行いブラウザからアクセス確認を行う。
メモ帳を管理者権限で開く→ファイル→開く→右下のプルダウンを「テキスト文書」から「すべてのファイル」に変更→C:\Windows\System32\drivers\etc\hostsを開く
1 |
192.168.50.4 dev.menta.me : {仮想マシンipアドレス} {ホスト名}で追記 |
http://dev.menta.meでブラウザからアクセスして、index.htmlの内容が表示されているのを確認
PHPのインストールと設定
- PHPとは
PHPはWebページを生成することができるサーバーサイドの動的型付け言語です。MySQLなどのデータベースとの連携が容易なことなどから、WordPressを含めたWebアプリケーションの開発(Laravel.CakePHPなど)にもよく使われる有名なスクリプト言語でもあります。
-
リポジトリの有効化
1 2 |
$ sudo yum install -y https://dl.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm $ sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm |
1 |
$ sudo vi /etc/yum.repos.d/remi-php83.repo |
1 2 3 4 5 6 7 8 9 |
[remi-php83] name=Remi's PHP 8.3 RPM repository forEnterprise Linux 7 - $basearch #baseurl=http://rpms.remirepo.net/enterprise/7/php83/$basearch/ #mirrorlist=https://rpms.remirepo.net/enterprise/7/php83/httpsmirror mirrorlist=http://cdn.remirepo.net/enterprise/7/php83/mirror enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi priority=1 #追記 |
-
PHPインストール
1 2 3 |
$ sudo yum install -y php php-cli php-fpm php-mysqlnd php-pdo php-gd php-mbstring php-xml php-json php-curl $ sudo yum install -y libzip5 libsodium openssl-devel gcc gcc-c++ libxml2-devel gd gd-devel $ sudo php -v |
-
php-fpmの設定
1 |
$ sudo vi /etc/php-fpm.d/www.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[www] user = nginx group = nginx listen = /run/php-fpm/www.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 pm = static pm.max_children = 10 pm.max_requests = 100 php_admin_value[memory_limit] = 256M request_terminate_timeout = 180 |
- user = {user名}
- PHP-FPM プロセスがどのユーザー権限で実行されるかを指定します。(基本はnginx.confのuserディレクティブで指定したuser名)
- group = {group名}
- PHP-FPM プロセスがどのグループ権限で実行されるかを指定します。(アクセス権管理がしやすいためnginxの指定でよいと思います。)
- listen = {ファイル名}
- UNIX ドメインソケットファイルを指定する場合があります。このソケットを介して Web サーバー(Nginxなど)と PHP-FPMが通信します。
- UNIX
- ドメインソケットファイルはローカル内でtcp/udpなどのネットワーク層のプロトコルを使用しないで高速な通信を行う。
- listen.owner = {user名}
- listen で指定されたソケットファイルの所有者を指定します。
- listen.group = {group名}
- listen で指定されたソケットファイルのグループを指定します。
- listen.mode = {パーミッション} :
- ソケットファイルのアクセス権限を設定します。
MySQLのインストールと設定
- MySQLとは
MySQLとは、世界でもっとも利用されている「データベース」です。MySQLの特徴の一つにトランザクション機能があります。トランザクションとは、データの一貫性を保つために、一連の処理が完了するまでデータを変更しないようにできる機能のことです。途中でトラブルがあった場合は、一連の処理をすべて破棄しデータに相違が出ないようにできます。これは、金融機関でのお金のやりとりなど、データに相違があると困る場合に役立つ機能です。MySQLでは、このトランザクションをサポートする機能が多くあるので、完全にデータの一貫性を保つことが可能なのです。
-
MySQLサーバのインストール
1 |
$ sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm |
1 |
$ sudo vi /etc/yum.repos.d/mysql-community.repo |
1 2 3 4 5 6 |
[mysql80-community] name=MySQL 8.0 Community Server baseurl=https://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 |
1 2 3 4 |
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 $ sudo rpm -qa gpg-pubkey* #keyidが表示されるのでコピー 例 gpg-pubkey-<00f97f56>-467e318a < >部分がkeyid $ sudo rpm -qi gpg-pubkey-<keyid> $ sudo yum install -y mysql-community-server |
1 |
$ sudo vi /etc/my.cnf |
1 2 3 4 5 6 7 |
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid |
- character-set-server={文字セット}
- MySQLサーバーで使用するデフォルトの文字セットを設定します。
- collation-server={コレーション(比較順序)}
- 文字セットの比較順序(コレーション)を設定します。
- datadir={ディレクトリパス} :
- MySQLのデータベースファイルが保存されるディレクトリを指定します。
- socket={ファイルパス} :
- MySQLサーバーがクライアントと通信するために使用するUnixソケットファイルを指定します。
- log-error={ファイルパス}
- MySQLサーバーがエラーログを記録するファイルを指定します。
- pid-file={ファイルパス}
- MySQLサーバーが実行される際のプロセスID(PID)を保存するファイルを指定します。
1 2 |
$ sudo systemctl start mysqld $ sudo systemctl enable mysqld |
- データベースの設定
1 2 3 |
$ sudo cat /var/log/mysqld.log | grep 'temporary password' #初回ログイン時のパスワードを取得。mysqlインストール時に作成されるもの。 2024-09-26T20:17:46.469265Z 6 [Note] [MY-010454] [Server] A <span style="color: #ff0000;" data-mce-style="color: #ff0000;">temporary password</span> is generated for root@localhost: {パスワード} $ mysql -u root -p |
1 2 3 4 5 6 |
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Menta_pw1234'; mysql> CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; mysql> CREATE USER 'menta'@'localhost' IDENTIFIED BY 'Menta_pw1234'; mysql> GRANT ALL PRIVILEGES ON wordpress_db.* TO 'menta'@'localhost'; mysql> FLUSH PRIVILEGES; mysql>EXIT; |
WordPressのダウンロードと設定
1 2 3 4 5 6 7 8 9 |
$ cd /var/www/dev.menta.me $ sudo chown -R nginx:nginx /var/www/dev.menta.me $ sudo chmod -R 755 /var/www/dev.menta.me $ sudo wget https://wordpress.org/latest.tar.gz $ sudo tar -xzvf latest.tar.gz $ sudo mv wordpress/* ./ $ sudo cp wp-config-sample.php wp-config.php $ sudo chown nginx:nginx /var/www/dev.menta.me/* $ sudo rm -rf wordpress latest.tar.gz wp-config-sample.php |
- wp-config.phpの修正
1 |
$ sudo vi /var/www/dev.menta.me/wp-config.php |
1 2 3 4 5 6 |
define( 'DB_NAME', 'wordpress_db' ); define( 'DB_USER', 'menta' ); define( 'DB_PASSWORD', 'Menta_pw1234' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8mb4' ); define( 'DB_COLLATE', '' ); |
[説明]
- define( ‘DB_NAME’, {‘データベース名’} )
- WordPress が使用するデータベースの名前です。
- define( ‘DB_USER’, {‘user名’ })
- DB_USER: データベースに接続する際に使用されるユーザー名です。
- define( ‘DB_PASSWORD’, {‘パスワード’} )
- データベースユーザー menta に対応するパスワードです。
- define( ‘DB_HOST’, {‘host名’} );
- DB_HOST: データベースサーバーのホスト名です。
- define( ‘DB_CHARSET’, {‘文字セット’} )
- データベースで使用する文字セットです。
- define( ‘DB_COLLATE’, ” )
- データベースでの文字列比較ルール(照合順序)を設定します。通常は空のまま(”)にしておくのが一般的で、 DB_CHARSETに依存して自動的に適切な値が使われます。
- 各サービス再起動
1 2 3 |
$ sudo systemctl restart nginx.service $ sudo systemctl restart php-fpm.service $ sudo systemctl restart mysqld.service |
http://dev.menta.meにアクセス。
初回のsetupを進めていきインストール後再度ログインして以下のようにダッシュボードが出れば完了となります!
まとめ
WordPressはWebサイトやブログなどを簡単に作成・管理できる代表的なCMSであり、世界中で利用されているため需要が高いといえます!!また、Linux、アプリケーション、Webサーバ、データベースを一貫して学ぶことも可能なので、自分のスキルアップや市場価値を上げたい方はこの機会に一度VagrantやWordPressについて学んでみてはいかがでしょうか。
長いブログとなりましたが、見ていただきありがとうございました!
2000年生まれ。社会人2年目の駆け出しエンジニア。SESにてインフラエンジニアとして従事。この先、設計や構築の案件に関われるようなエンジニアになりたいという思いからTechBullに加入し、日々勉強中。主に駆け出しエンジニアに向けて、手助けになるような記事を執筆中。