はじめに
数ある記事から私の記事を見つけてくださりありがとうございます。この記事は備忘録として作成しました。
「ここ間違えてるよー」ってところがある場合に指摘をしてくださると嬉しいです。私の勉強にもなるため、ご協力をお願いします
システム
基本的なシステム構成
・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ページが表示されるか確認してみましょう
こんなのが出ればオッケー
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キーを押して編集モードをオンにしましょう
ページ下部に行くと、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アドレスを入力して変更が適用されているか確認しましょう。
すごく簡素なページですがうまく実行できていることが確認できます。
6-5. 次回以降のデプロイ方法
コードの変更をGitHub上にコミットできたら、以下のコードを用いてAlmaLinux上にも変更を適用させましょう
cd /(Nginxの公開ディレクトリ)
git pull origin main
これで変更が適用されます。
さいごに
これでWebサーバーとして最低限機能する環境が構築できました。お疲れ様でした。
初投稿記事でしたが、いかがでしたか。私の解説に適当な部分や、曖昧な部分があると思うので、繰り返しにはなりますが気になる部分は指摘をお願いいたします。
次回からはPHPとMySQLを用いてログインサイトを作成します。
参考・引用文献
- ChatGPT
- Makinaga Shin「CentOS ifconfig使えない!?」(Qiita)
- nginx: Linux packages
- Jeff Wilson 「How to Install MySQL on AlmaLinux 10」(RoseHosting)
- Red Hat Documentation「3.4. ファイアウォールで必要なポートを開く」
- ShinyaOkazawa(伸也 岡澤)「nginx 公開ディレクトリの変更」(Qiita)
- まっぴぃ「Install Git on CentOS 8」(Zenn)
- hosoya17「AlmaLinuxにGitをインストールする」(Qiita)
- Nats72「AlmaLinuxにGitをインストールして設定するところまでのメモ」(Qiita)
- GitHub Documents「リモートリポジトリから変更を取得する」

