仕事上、掲題の開発環境を構築する必要があったので構築。
その時のメモを残す。
必要アプリケーション
バージョンは最新で問題ない。自分の環境にあったものを選んでローカルにインストールする。
- vagrant (URL:https://www.vagrantup.com/)
- virturalbox (URL:https://www.virtualbox.org/)
フォルダ構成
以下のようなフォルダ構成で作成
作業フォルダ
├ src // WEBルートにマウントするソースなどを格納
└ vagrant // vagrantfileを配置。
└ Vagrantfile
Vagrantfileの作成
VagrantからVirtualBoxを起動するための設定ファイルを作成する。
CentOS8をマウント
後々配布できるように個別でダウンロードしないで済むようにvagrant cloud上にあるファイルを指定しておく。
https://app.vagrantup.com/generic/boxes/centos8
Vagrant.configure("2")do|config|# CentOS8config.vm.box="generic/centos8"end
ネットワーク設定
ネットワーク設定を追加。IPアドレスは適当。
とりあえずprivate指定。
スマホアクセスなどしたいないなら以下を参照。
https://qiita.com/kurkuru/items/4a4879e01944a7c08f1d
Vagrant.configure("2")do|config|# CentOS8config.vm.box="generic/centos8"# ネットワーク設定config.vm.network"private_network",ip: "192.168.50.11"end
CPU/メモリ設定
ここも設定は適当。小さすぎず大きすぎずでいいと思う
Vagrant.configure("2")do|config|# CentOS8config.vm.box="generic/centos8"# ネットワーク設定config.vm.network"private_network",ip: "192.168.50.11"# メモリ/CPUconfig.vm.provider"virtualbox"do|vb|vb.memory=1024vb.cpus=1endend
同期フォルダ設定
仮想環境上にマウントするソースフォルダの設定を入れる。
開発環境用なので、フルアクセス。
vagrantフォルダをマウントしているのは後々プロビジョンするため。しないなら必要ない。
Vagrant.configure("2")do|config|# CentOS8config.vm.box="generic/centos8"# ネットワーク設定config.vm.network"private_network",ip: "192.168.50.11"# メモリ/CPUconfig.vm.provider"virtualbox"do|vb|vb.memory=1024vb.cpus=1end# 同期フォルダconfig.vm.synced_folder"../src",/var/www/[任意の名前],:mount_options=>['dmode=777','fmode=777']config.vm.synced_folder".",'/vagrant',:mount_options=>['dmode=777','fmode=777']end
仮想環境起動確認
作成したVagrantfileを使って仮想環境を立ち上げる。
使用するターミナルツール(コマンドプロンプトやPowershellなど)はなんでもいい。
エラーなく立ち上がてばOK。
cd 作業フォルダ/vagrant
vagrant up
仮想環境にアクセス
vagrantのSSH転送機能を使って楽にアクセス。
vagrant ssh
仮想環境の設定 ※省略可
いよいよnginx,php,mysqlなどをインストールしていくのだが、その前に色々下地を整えておく。
ここで詳細を書くと長くなるので、参考リンクやコマンド単体を記載。
- SELinuxを無効化( https://qiita.com/hanaita0102/items/5d3675e4dc1530b255ba )
- Beep音を無効化 ( https://qiita.com/vmmhypervisor/items/4bae747f7518e083570a )
- 環境を日本語化 ( https://www.server-world.info/query?os=CentOS_8&p=japanese )
- 時刻を日本標準時設定
sudo timedatectl set-timezone Asia/Tokyo
- firewall設定 ※offにしてもいい。
sudo firewall-cmd --add-service=http --permanent# HTTPアクセスの許可sudo firewall-cmd --add-service=https --permanent# HTTPSアクセスの許可sudo firewall-cmd --add-port=9000/tcp --permanent# PHP Xdebug用にポート開放sudo firewall-cmd --reload# offにするならsudo systemctl stop firewalld
設定後vagrantを再起動
vagrant halt
vagrant up
PHP7.4とNginxのインストールと設定
設定ファイルやらなんやらが関係しているので1つの章でまとめる。
Nginxのインストール
sudo dnf install-y nginx
php7.4のインストール
CentOS8の標準は7.2のためリポジトリを先に落とす。
sudo dnf install-y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install-y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
デフォルトのphpモジュールを切る。
切らないと毎回リポジトリ指定をしてインストールしないといけないため。
sudo dnf module disable -y php
php7.4をremiからインストール
sudo dnf module install-y php:remi-7.4
# 関連して php-fpm,php-mbstring,php-json もインストールされる
他必要関連パッケージをインストール。
sudo dnf install-y php-mysqlnd php-pecl-xdebug php-intl php-zip
xdebug設定
開発しやすいように設定を入れる。
#追加
xdebug.default_enable = 1xdebug.remote_enable = Onxdebug.remote_autostart = Onxdebug.remote_connect_back = Onxdebug.remote_port = 9000
php-fpmの設定
nginxでphpを使うために動作ユーザをnginxにしてやる。
他の細かい設定など今回は割愛。
興味がある人は以下を参照。めっちゃ詳しい。
https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc
# ~~省略
# 追加
listen.owner = nginxlisten.group = nginx#修正
user = nginx#apache から変更
group = nginx#apache から変更
# ~~省略
nginxの設定
今後、いくつか同じ環境上に別サイトを構築する必要があったので、
デフォルトのまま、httpブロックの末尾にconf.dの読み込みを追記
#~~省略
http {
・・・
include /etc/nginx/conf.d/*.conf;
}
構築サイトの設定を追加
他変なファイルにアクセスさせないなどの設定はあるが割愛。
server {
listen80;
server_name [任意のアクセスドメイン名];
root /var/www/[Vagrantfileで設定したルート名];
indexindex.php;
charsetutf-8;
access_log /var/log/nginx/access.logmain;
error_log /var/log/nginx/error.logmain;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# redirect server error pages to the static page /50x.html
error_page500502503504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on php-fpm.sock;
location ~ \.php$ {
includefastcgi_params;
fastcgi_paramSCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_passunix:/run/php-fpm/php-fpm.sock;
try_files $uri =404;
}
}
プロセス再起動。ついでにOS起動時に動くように設定。
sudo systemctl restart nginx
sudo systemctl restart php-fpm
sudo systemctl enable nginx
sudo systemctl enable php-fpm
ブラウザからアクセス確認
ローカルのhostsファイルにローカルのドメインを追加
# 追記
192.168.50.11 [/etc/nginx/conf.d/default.confで設定したドメイン名]
テストでphpinfoを置く。
cd /var/www/[ルート]
echo'<?php phpinfo();'> index.php
ブラウザから「http://[設定したドメイン名]」にアクセスしてphpinfoが表示されればOK
mysql8.0のインストールと設定
CentOS8だと特に特別ならリポジトリを落とさないでもデフォルトでmysql8がインストールできる。
sudo dnf install-y @mysql
初期設定。
開発環境なので緩い設定(initialize-insecure)にしておく。
sudo rm-rf /var/lib/mysql
sudo mysqld --initialize-insecure--datadir=/var/lib/mysql --user=mysql
あと色々あるが、以下を入れておけばとりあえずOK。
# 追加
# mysqlではひらがなカタカナを判別
collation_server = utf8mb4_ja_0900_as_cs_ks
再起動と自動起動設定
sudo systemctl restart mysqld
sudo systemctl enable mysqld
DBの作成とユーザの作成
mysql -u root
> create database [作成したいDB名]
> create 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード';> grant all privileges on DB名.* TO 'ユーザ名'@'localhost';
以上。