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

開発初心者が学生向けサービスを作成する話 #1(環境構築編)

1
Posted at

はじめに

数ある記事から私の記事を見つけてくださりありがとうございます。この記事は備忘録として作成しました。

「ここ間違えてるよー」ってところがある場合に指摘をしてくださると嬉しいです。私の勉強にもなるため、ご協力をお願いします

システム

基本的なシステム構成
・AlmaLinux 10 (minimal) を VirtualBox 上に構築
・Web サーバーとして Nginx、データベースとして MySQL を使用します。

色々な言語やフレームワークを学習するため、Laravel や Node.js など複数の環境も使用します。
それらに必要なソフトウェア(PHP / php-fpm / Composer / Node.jsなど)は、
次回以降、各言語を使用するタイミングで都度インストールします。

システム構築(見よう見まね)

1. VirtualBoxの設定

今回は以下の構成でいきます

Almalinaxのインストール

親の顔より見たかもしれないインストール風景は端折ります
(画面に従うだけ、特に詰まったところもなし)

SSH接続しておく(任意)

SSH接続してターミナルから操作できるようにしときましょう

Mac(開発するコンピュータ)上で以下のコマンドを入力します

ssh (初期設定で設定したAlma Linuxのユーザー名)@(仮想環境のipアドレス)
ipアドレスの確認について

ipアドレスの確認 = ifconfig
を使用するってのが私の中であったのですがなんか使えなかった。
どうやらnet-tools系のコマンドは標準でインストールされていないみたいです
ってことで代替コマンドは以下のとおりです

ip addr show

または

ip a

覚えるのが一番いいと思いますが、そんなこと絶対忘れて毎回調べる羽目になるのが嫌なので、net-toolsをインストールしときます

sudo dnf install net-tools

これでifconfigが使えるようになります

2. 基本ソフトウェアの導入

2-1. Nginxのインストール

sudo dnf install nginx -y
dnfってなぁに?

dnfとはRHEL系OSのパッケージ管理ツール
(Ubuntuだとaptみたいなやつ)
古い記事だとRHEL系のパッケージ管理ツールはyumを使ってるけど、バージョンアップによってdnfに置き換わりつつあるみたい(ざっくりしか知らん)

次に下記のコード実行をしてステータスを確認

sudo systemctl start nginx
systemctl status nginx
systemctlってなぁに?

systemctlはLinuxのサービスを管理するためのコマンド

用途 コマンド 意味
サービスを起動 systemctl start <サービス名> 今すぐ起動
停止 systemctl stop <サービス名> 今すぐ停止
再起動 systemctl restart <サービス名> 設定反映にも使う
状態確認 systemctl status <サービス名> 起動してる?エラーは?
自動起動 ON systemctl enable <サービス名> OS 起動時に自動起動
自動起動 OFF systemctl disable <サービス名> 自動起動しない
以下のような構文がでてたら成功

Active:Active(runnninng)

2-2. MySQLのインストール

sudo dnf install https://dev.mysql.com/get/mysql84-community-release-el10-1.noarch.rpm
sudo dnf makecache
sudo dnf install -y mysql-community-server
makecacheってなぁに?

makecacheとは、パッケージの一覧を最新に更新するコマンド
これがないと新しいソフトが見つからない

これも同様にインストールできているか確認

sudo systemctl start mysqld
systemctl status mysqld

これもActive:Active(runnninng)ってのがどこかにでてたら成功

2-3. 自動起動に設定

OS起動ごとにコマンドの入力をするのは面倒なので、自動でサーバーを起動できるようにしておきましょう

sudo systemctl enable nginx
sudo systemctl enable mysqld

3. ポート解放

外部から(仮想環境外)からサーバー画面にアクセスできるようにポート解放をします

ポート解放ってなぁに?

ポートとは、外部からコンピュータにアクセスする場合のコンピュータ上のソフトウェアの住所を示すものです
ポート解放とは、外部のコンピュータがソフトウェアに接続できるように、コンピュータの入口を開けることです。

sudo firewall-cmd --permanent --add-port={80/tcp,443/tcp}
sudo firewall-cmd --reload

念の為に解放できているかチェック

sudo firewall-cmd --list-all

ports: のところに80/tcp、443/tcpが出ていればオッケー!

動作確認

仮想環境のipアドレス(192.168.x.xxx)を入力してwebページが表示されるか確認してみましょう

スクリーンショット 2025-11-19 16.40.21.png

こんなのが出ればオッケー


4.Nginxの公開ディレクトリの変更(任意)

標準設定だとこれからの用途で面倒になってくるので、変更しておきます。

4-1.ディレクトリの変更

nginxの設定ファイルはデフォルトで/etc/nginx/nginx.confにあるので、ここのファイルを編集して任意のディレクトリにしましょう

今回はパスを/var/www/htmlに変更します

sudo vi /etc/nginx/nginx.conf
viってなぁに

vi とは、Linux上のテキストエディタです

「コマンドモード」と「入力モード」という2つのモードがあり、モードを切り替えて操作します。
コマンド例:
:wq: 保存して終了
i または a: 入力モードに移行
Escキー: コマンドモードに移行

これを開くと以下のようなものが出てくるので、aキーを押して編集モードをオンにしましょう

スクリーンショット 2025-12-03 22.27.23.png

ページ下部に行くと、serverと記載されているので、このrootの欄を任意のディレクトリに変更します

例)
server {
    root        /var/www/html;
    index       index.html index.htm;
    }

この内容をEscキーを押した後、:wqを入力して変更を保存します
念のため、設定ファイルにミスがないか確認し、変更の読み直しをしておきましょう

sudo nginx -t
sudo systemctl reload nginx

では指定したディレクトリに移動してhtmlファイルを作成し、webアクセスできるか確認しましょう

4-2. SELinuxの設定

私はここで403エラーが発生してめちゃくちゃ困った
さーてどうしたものかと思っていたらSELinuxが悪さをしているみたい

SELinuxってなぁに

SELinuxはrwxの標準の権限よりもさらに権力な権限を持っているヤバいやつ。
rwxで許可されてても、SELinuxが許可されてないと通らない

getenforce

これを入力したら、Enforcingが出ました(SELinuxが実行されてることを示す)

sudo setenforce 0

このコマンドを実行してSELinuxをオフにしたらWebサイトが表示されたんですよね〜

これは一時的な無効化で、再起動すると元に戻ります。
ずっと無効にしたい場合は /etc/selinux/config を編集します。

4-2-1.SELinux用のツールをインストールする

SELinux用のツールがなければインストールしておきます

sudo dnf install -y policycoreutils-python-utils

4-2-2.指定したディレクトリをSELinuxで許可する

sudo semanage fcontext -a -t httpd_sys_content_t '(ディレクトリのパス)(/.*)?'
sudo restorecon -Rv (ディレクトリのパス)

これによって指定したディレクトリへのアクセスが許可されました

4-2-3.SELinuxを有効にして動作チェック

sudo setenforce 1

こうするとアクセスできました!!
(原因特定に2日かかったから嬉しい)

4-3.権限チェック

念のため、権限を確認しておきましょう

ls -la

ディレクトリがdrwxr-xr-x(755)、その中のファイル(今回だとHTML)が-rw-r--r--(644)になっていればOKです
できていない場合は以下のコマンドを入力しましょう

# 各ディレクトリ
sudo chmod 755 (ディレクトリ1)
sudo chmod 755 (ディレクトリ1/ディレクトリ2)
・
・
・

# 最後のディレクトリ
sudo chmod 644 (ディレクトリ1/ディレクトリ2/・・・/ディレクトリn/)

5. MySQLの初期設定

MySQLの初期設定をします

5-1. MySQLの初期設定

以下のコマンドを入力して、MySQLの初期設定を行います

sudo mysql_secure_installation

このコマンドを実行後、以下のような情報の入力が求められます

・元のユーザーrootのパスワード
これはMySQLのrootパスワードです。
パスワードがわからないときは?

rootのパスワードについて
MySQLはインストール直後にrootの一時パスワードを自動生成するので、これを確認しましょう。
パスワードは /var/log/mysqld.log に記載されています。

sudo grep 'temporary password' /var/log/mysqld.log

これを実行すると、

[Note] A temporary password is generated for root@localhost: Abcdefg!hijk

こんなものが表示されます。
Abcdefg!hijkに該当する部分がMySQLの初期パスワードになります。

・新しいパスワード
新しいパスワードを入力します。
半角英数、大文字小文字記号を含むパスワードが必要です

・新しく設定したパスワードで良いかの確認
問題がなければ ` y ` 変更したければ ` n `を入力しましょう

・匿名ユーザーを削除するかの確認
削除しないと誰でもアクセスできる状況になるので、もちろん`y`(削除)を選択します

・リモートアクセスを禁止するかの確認
遠隔アクセスを許可しちゃうとパスワードの漏洩があった時にDBが乗っ取られる可能性があるので`y`(禁止)にします

・testデータベースを削除するかの確認
セキュリティ的には穴になるので`y`(削除)にしておきます

・権限テーブルを再読み込みするかの確認
今までの変更を反映するために`y`にしときます

6. Gitの導入

環境への投入のしやすさや、複数人での開発にgitは必要不可欠なので今のうちに使えるようにしちゃいましょう
事前にGitHubのアカウントは作成しておいてください

通常、Alma LinuxなどのRHELは古いバージョンのGitを提供しています
最新バージョンを使用したい場合は下記のサイトを参考にしてください
まっぴぃ「Install Git on CentOS 8」(Zenn)
私はインストーラーを作成するのが面倒なので古いバージョンを使います

6-1. gitのインストール

sudo dnf install git

タスクが完了したら、インストールできてるか確認しましょう

git --version

git version x.xx.xと出ればインストールは完了です

6-2. gitの設定(サーバーサイド)

今回はリポジトリがPrivateであるため、SSHキーの設定をしておきます。

gitと連携する方法として、SSH接続と個人用アクセストークンを使用する方法があるようです
今回はCUIベースで開発をしているので、SSHを使用して連携します

6-2-1. ユーザー情報の登録

任意のユーザー名(なんでもいい)とGitHubのメールアドレスをAlmaLinux上に登録します

git config --global user.name "(任意の名前)"
git config --global user.email "(GitHubのメールアドレス)"

設定できたか確認する

git config --list

user.name=(設定した名前)
user.email=(GitHubのメールアドレス)

このように出力されれば大丈夫です

6-2-2.SSHの設定

ssh-keygen -t ed25519 -C "(GitHubのメールアドレス)"

実行したらSSHキーの保存場所を尋ねられますが特にこだわりがないのでEnter連打しました
(こうすると~/.ssh/id_ed25519に保存されます
 あとパスフレーズも)

次にSSHエージェントにSSHキーを追加します

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
SSHエージェントってなぁに

公開鍵認証で使われる秘密鍵をメモリ上で安全に保持し、SSH接続時のパスフレーズ入力を省略できるバックグラウンドプログラムらしいです。今の作業はSSHエージェントに秘密鍵を追加するということをしているらしい

6-3.GitHubにもキーを追加

6-3-1.GitHubに追加する鍵を表示

cat ~/.ssh/id_ed25519.pub

これを入力したらssh-ed25519 AAA... email(GitHubのメールアドレス)のようなものが表示されるので、クリップボードにコピーしておきます

(こういう時SSHでアクセスしとくと便利)

6-3-2.GitHub上での操作

以下の手順で鍵をGitHubにも追加しときましょう
1. Githubにログインする
2. 右上の自分のアイコンをクリックし、Settingsをクリック
3. SSH and GPGkeysをクリック
4. New SSh keyをクリック
5.Titleに好きな名前をつけて、Keyにコピーした鍵を貼り付ける
6.Add SSH Keyをクリックし、登録を完了させる

6-4. GitHubからデプロイ

ではいよいよGitHub上のファイルをサーバー上に持っていきましょう

git clone git@github.com:(ユーザーネーム)/(リポジトリ名).git .

これでサーバー上に持っていくことができました。ブラウザ上で AlmaLinuxのIPアドレスを入力して変更が適用されているか確認しましょう。スクリーンショット 2025-12-11 23.45.02.png
すごく簡素なページですがうまく実行できていることが確認できます。

6-5. 次回以降のデプロイ方法

コードの変更をGitHub上にコミットできたら、以下のコードを用いてAlmaLinux上にも変更を適用させましょう

cd /(Nginxの公開ディレクトリ)
git pull origin main

これで変更が適用されます。

さいごに

これでWebサーバーとして最低限機能する環境が構築できました。お疲れ様でした。

初投稿記事でしたが、いかがでしたか。私の解説に適当な部分や、曖昧な部分があると思うので、繰り返しにはなりますが気になる部分は指摘をお願いいたします。

次回からはPHPとMySQLを用いてログインサイトを作成します。

参考・引用文献

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