LoginSignup
5
12

More than 3 years have passed since last update.

Vagrant + VirtualBox で CentOS8 + Nginx + PHP7.4 + MySQL8.0環境を構築する

Last updated at Posted at 2019-12-14

仕事上、掲題の開発環境を構築する必要があったので構築。
その時のメモを残す。

必要アプリケーション

バージョンは最新で問題ない。自分の環境にあったものを選んでローカルにインストールする。

※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

Vagrantfile
Vagrant.configure("2") do |config|
  # CentOS8
  config.vm.box = "generic/centos8"
end

ネットワーク設定

ネットワーク設定を追加。IPアドレスは適当。
とりあえずprivate指定。
スマホアクセスなどしたいないなら以下を参照。
https://qiita.com/kurkuru/items/4a4879e01944a7c08f1d

Vagrantfile
Vagrant.configure("2") do |config|
  # CentOS8
  config.vm.box = "generic/centos8"

  # ネットワーク設定
  config.vm.network "private_network", ip: "192.168.50.11"
end

CPU/メモリ設定

ここも設定は適当。小さすぎず大きすぎずでいいと思う

Vagrantfile
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フォルダをマウントしているのは後々プロビジョンするため。しないなら必要ない。

Vagrantfile
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などをインストールしていくのだが、その前に色々下地を整えておく。
ここで詳細を書くと長くなるので、参考リンクやコマンド単体を記載。

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設定

開発しやすいように設定を入れる。

/etc/php.d/15-xdebug.ini
#追加
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

/etc/php-fpm.d/www.conf
# ~~省略
# 追加
listen.owner = nginx
listen.group = nginx

#修正
user = nginx     #apache から変更
group = nginx    #apache から変更
# ~~省略

nginxの設定

今後、いくつか同じ環境上に別サイトを構築する必要があったので、
デフォルトのまま、httpブロックの末尾にconf.dの読み込みを追記

/etc/nginx/nginx.conf
#~~省略
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.conflistenの値と一致させれば動きますので、動かない場合は確認して修正をお願いします。

/etc/nginx/conf.d/default.conf
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ファイルにローカルのドメインを追加

\Windows\System32\drivers\etc\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。

/etc/my.cnf
# 追加
# 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';

以上。

5
12
1

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
5
12