Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@tonkatu_tanaka

初心者がVagrantでローカル環境にLAMP環境構築してみた

LAMP環境でサイト制作することが多いので、VagrantでローカルにLAMP環境構築してみたメモ。


ローカル環境

マシン:mac os 10.15.4
知識:Linuxを少しいじったことがあるくらい

構築環境

LAMP version
centOS 7
APACHE 2.4
PHP 7.3
MYSQL 8.0

手順

1,VirtualBoxをインストール

2,Vagrantをインストール

3,Vagrantfileを設置

3-1,Vagrantfile作成

作業用のフォルダを作成しcuiで該当ディレクトリに移動し下記コマンドをうつ

vagrant init centos/7

3-2,Vagrantfile修正

Vagrantfile が作成されるので下記と差し替え

  • Vagrantfile:OS情報や基本的な環境設定が記載された。ファイル中身を書き換える
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network :private_network, ip: "192.168.33.10"
  config.vm.provider "virtualbox" do |vb|
   # GUIの有無
   vb.gui = false
   # 仮想マシンの名前
   vb.name = "centOS7"
   # 仮想マシンが使うメモリ(MB)
   vb.memory = "2048"
   # 仮想マシンが使うCPU
   vb.cpus = 1
 end

  # 秘密鍵の場所
  config.ssh.private_key_path = "/Users/xxxxxxx/.vagrant.d/insecure_private_key"
  config.ssh.insert_key = false
  if Object.const_defined? 'VagrantVbguest'
    config.vbguest.auto_update = false
    config.vbguest.no_remote = true
  end
  # ミドルウェアのインストール
  config.vm.provision :shell, keep_color: true, path: "Vagrantfile.provision.sh"
  # ホスト環境のフォルダをマウント(初期ではエラーになるのでコメントアウトしとく)
  # config.vm.synced_folder "xxxxxxxxxxx", "/var/www/html", mount_options: ['dmode=777','fmode=777']

end

Vagrantfile の下記行は適宜自分の環境に置き換える。

config.ssh.private_key_path = "/Users/xxxxxxx/.vagrant.d/insecure_private_key"

3-3,ミドルウェアインストールファイルの設置

ミドルウェア(Apache,Mysql,Php)のインストールのためのシェルスクリプトを設置

  • Vagrantfile.provision.sh:ミドルウェアをインストールするためのシェルスクリプトを記載。(ファイル名は任意)
Vagrantfile.provision.sh
#filename: Vagrantfile.provision.sh
#!/usr/bin/env bash

# timezone
cp -p /usr/share/zoneinfo/Japan /etc/localtime

# history format
HISTTIMEFORMAT='%y/%m/%d %H:%M:%S ';


# yumにリポジトリ追加してupdate
sudo yum -y install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y update

# yumでmariadbは削除
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql/

# yumで apatch mod_ssl wget git curl vim unzip インストール
sudo yum -y install httpd mod_ssl wget git curl vim unzip
# yumで 拡張パッケージ インストール
sudo yum -y install gcc gcc-devel curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker

# php7.3 インストール
sudo yum -y install --enablerepo=epel,remi,remi-php73 php php-{devel,mbstring,mysql,pdo,xml,gd,mcrypt,opcache,pear,pecl-ssh2,pecl-zip}

# composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# ポート開放(SELinux無効化)
sudo systemctl restart firewalld
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
sudo setenforce 0

# Apacheの起動、自動起動設定
sudo systemctl start httpd
sudo chkconfig httpd on

# PHPの設定ファイルのバックアップ、timezoneの設定
cp /etc/php.ini /etc/php.ini.org
sed -i -e "s/date\.timezone =/date\.timezone = Asia\/Tokyo/g" /etc/php.ini

# /etc/httpd/conf/httpd.confのバックアップと編集
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
sed -i -e "s/AllowOverride None/AllowOverride All/g" /etc/httpd/conf/httpd.conf

#Apachenのバージョン非表示
sed -i -e "s/ServerTokens OS/ServerTokens Prod/g" /etc/httpd/conf/httpd.conf
lineNum=`sudo grep "AddType application/x-gzip .gz .tgz" -n /etc/httpd/conf/httpd.conf | cut -d ":" -f 1`
if [ $lineNum ]; then
  sudo sed -i -e "${lineNum}a \    AddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf
  lineNum=$((lineNum+1))
  sudo sed -i -e "${lineNum}a \    AddType application/x-httpd-php-source .phps" /etc/httpd/conf/httpd.conf
fi


# mysql8 インストール
sudo yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/mysql-community.repo
sudo yum -y install --enablerep=mysql80-community mysql-community-server mysql-community-devel

# MySQLの起動と設定
systemctl restart mysqld

# 必要最小限のMySQLの設定内容を書き込む
cat << __CONF__ >> /etc/my.cnf
character-set-server = utf8
default_password_lifetime = 0
default-authentication-plugin = mysql_native_password
validate_password.policy = LOW
__CONF__

# MySQLの自動起動を有効化し起動する
systemctl enable mysqld
systemctl start mysqld


# httpd.confの反映
sudo systemctl restart httpd

4,Vagrantのコマンド実行

下記コマンドでVagrand実行し仮想環境を立ち上げる

vagrant up

5,Vagrant環境へログイン

下記コマンドで作成した仮想環境にSSH接続する

vagrant ssh

無事ログインできたら必要なミドルウェアがインストールされているか確認

yum list installed | grep httpd
httpd -v

yum list installed | grep php
php -v

yum list installed | grep mysql
mysqld -V

6,MYSQLの初期設定

vagrant環境にSSH接続しrootのパスワード変更する。
その後各種ユーザー作成する
(下記記載はMiiT+)

######################################################
## MYSQLの設定
#######################################################

# rootに変更
sudo su

# 初期パスワードを取得する
cat /var/log/mysqld.log | grep "A temporary password" | tr ' ' '\n' | tail -n1

# 最低限のセキュリティ設定
mysql_secure_installation

7,Vagrant環境(ゲストOS)にローカル環境(ホストOS)のフォルダ(ディレクトリ)をマウント(共有化)

長くなったので続きは
初心者がVagrantでローカル環境にLAMP環境構築してみた(マウント編)
に記載。


Vagrandコマンドメモ

コマンド 内容 注釈
vagrant init Vagrantfile作成 環境構築の最初の一歩すでに Vagrantfile がある場合は不要
vagrant up Vagrantで仮想環境立ち上げ Vagrantfile に記述された環境が作成される、2回目以降は基本環境立ち上げ
vagrant reload 再起動 仮想環境の再起動
vagrant halt シャットダウン 仮想環境のシャットダウン。癖つけよう
vagrant destroy 環境削除 作成した環境を削除

参考

初心者必読:【Linux環境構築】VagrantとVirtualBoxとは?使い方を初心者向けに解説!
https://kitsune.blog/linux-environment

参考:vagrant up 時の共有フォルダのマウントエラー解消方法
https://qiita.com/takutoki/items/33cf1230e032931f9adc

参考:Install MySQL 8.0 on CentOS 7
https://qiita.com/ymasaoka/items/7dc131dc98ba10a39854

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?