仕事上、掲題の開発環境を構築する必要があったので構築。
その時のメモを残す。
必要アプリケーション
バージョンは最新で問題ない。
自分の環境にあったものを選んでローカルにインストールする。
- vagrant (URL:https://www.vagrantup.com/ )
- virturalbox (URL:https://www.virtualbox.org/ )
※2019/01/22追記
vagrantの最新バージョンがvirturalbox 6.1系に対応していない。
どうしてもvirturalbox 6.1系を使いたい場合は以下を参考にvagrantのコアファイルを修正すること
https://qiita.com/shuu1222/items/7a6d04172363be44025c
フォルダ構成
以下のようなフォルダ構成で作成
作業フォルダ
├ src // WEBルートにマウントするソースなどを格納
└ vagrant // vagrantfileを配置。
└ Vagrantfile
Vagrantfileの作成
VagrantからVirtualBoxを起動するための設定ファイルを作成する。
###CentOS8をマウント
後々配布できるように個別でダウンロードしないで済むようにvagrant cloud上にあるファイルを指定しておく。
https://app.vagrantup.com/generic/boxes/centos8
Vagrant.configure("2") do |config|
# CentOS8
config.vm.box = "generic/centos8"
end
ネットワーク設定
ネットワーク設定を追加。IPアドレスは適当。
とりあえずprivate指定。
スマホアクセスなどしたいないなら以下を参照。
https://qiita.com/kurkuru/items/4a4879e01944a7c08f1d
Vagrant.configure("2") do |config|
# CentOS8
config.vm.box = "generic/centos8"
# ネットワーク設定
config.vm.network "private_network", ip: "192.168.50.11"
end
CPU/メモリ設定
ここも設定は適当。小さすぎず大きすぎずでいいと思う
Vagrant.configure("2") do |config|
# CentOS8
config.vm.box = "generic/centos8"
# ネットワーク設定
config.vm.network "private_network", ip: "192.168.50.11"
# メモリ/CPU
config.vm.provider "virtualbox" do |vb|
vb.memory = 1024
vb.cpus = 1
end
end
同期フォルダ設定
仮想環境上にマウントするソースフォルダの設定を入れる。
開発環境用なので、フルアクセス。
vagrantフォルダをマウントしているのは後々プロビジョンするため。しないなら必要ない。
Vagrant.configure("2") do |config|
# CentOS8
config.vm.box = "generic/centos8"
# ネットワーク設定
config.vm.network "private_network", ip: "192.168.50.11"
# メモリ/CPU
config.vm.provider "virtualbox" do |vb|
vb.memory = 1024
vb.cpus = 1
end
# 同期フォルダ
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 = 1
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.remote_connect_back = On
xdebug.remote_port = 9000
php-fpmの設定
nginxでphpを使うために動作ユーザをnginxにしてやる。
他の細かい設定など今回は割愛。
興味がある人は以下を参照。めっちゃ詳しい。
https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc
# ~~省略
# 追加
listen.owner = nginx
listen.group = nginx
#修正
user = nginx #apache から変更
group = nginx #apache から変更
# ~~省略
nginxの設定
今後、いくつか同じ環境上に別サイトを構築する必要があったので、
デフォルトのまま、httpブロックの末尾にconf.dの読み込みを追記
# ~~省略
http {
・・・
include /etc/nginx/conf.d/*.conf;
}
構築サイトの設定を追加
他変なファイルにアクセスさせないなどの設定はあるが割愛。
※2020/11/12追記
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
の部分はもしかしたらfastcgi_pass unix:/run/php-fpm/www.sock;
じゃないと動かないかもしれません。
/etc/php-fpm.d/www.conf
のlisten
の値と一致させれば動きますので、動かない場合は確認して修正をお願いします。
server {
listen 80;
server_name [任意のアクセスドメイン名];
root /var/www/[Vagrantfileで設定したルート名];
index index.php;
charset utf-8;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on php-fpm.sock;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/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 user 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード';
> grant all privileges on DB名.* TO 'ユーザ名'@'localhost';
以上。