Vagrant – ネットワーク設定

ホストオンリー

概要

  • ホスト~ゲスト間のみ通信が可能
  • 仮想環境起動時にゲスト側のプライベートアドレス(固定IP)を指定
  • 指定したIPでゲスト側に新たなインターフェイス(eth)が加わる
  • ゲスト側のサーバーでポートを指定して開き、ホスト側から固定IPとそのポートで接続

設定

Vagrantfileの以下のコメントアウトを外す。

設定状況の確認。指定したIPアドレスでeth1が設定されていてる。

  • ゲスト側のサーバーでeth1のIPアドレス(192.168.33.10)と任意のポート指定
  • ホスト側からそのIPアドレスポートで接続

接続例

たとえばPHPのビルトインサーバーを以下のように起動し、ホストのブラウザーのURLに192.168.33.10:8080/test.phpなどと指定。

ポート番号8080は任意の値を設定でき、ゲスト側のサーバーで指定した番号と同じものをホスト側のブラウザー等でも指定。

ポートフォワーディング

概要

  • ゲストとホストそれぞれのポート番号を指定する
  • ゲスト側ではeth0のIPアドレスとゲストに指定されたポート番号でサーバを起動
  • ホスト側ではlocalhost(127.0.0.1)とホストに指定されたポート番号でゲスト側に接続

設定

Vagrantfileの以下のコメントアウトを外す。

設定状況の確認。

  • ゲスト側ではeth0のIPアドレス(10.0.2.15)とVagrantfileのguestで指定したポート(3000)でサーバーを起動
  • ホスト側からはlocalhost(または127.0.0.1)とVagrantfileのhostで指定したポートで接続

接続例

たとえばPHPのビルトインサーバーを以下のように起動し、ホストのブラウザーのURLにlocalhost:3000/test.phpあるいは127.0.0.1:3000/test.phpなどと指定。

異なるポート番号の場合

ホスト側とゲスト側のポート番号は異なってもよい。たとえばVagrantfileの先ほどの1行上の方をコメントアウトする。

この場合はゲスト側でサーバーを起動する場合にポート80で起動する(注:ポート80を使う場合はroot権限が必要)。たとえばPHPのビルトインサーバーの場合は以下のとおり。

そしてホスト側のブラウザーからは以下で接続する。

localhost:8080/test.phpまたは127.0.0.1:8080/test.php

 

Linux – curl

概要

curlコマンドはcURL (see URL)から名付けられたコマンドで、URLを通したファイル転送を行うコマンドラインツール。

Vagrantのbento/CentOS7にはcurlがインストール済みで、以下のようにバージョンを確認できる。

GET

curl URLでHTTPのGETメソッドをコマンドラインで実行し、転送されたファイルはコンソールに表示される。

-s, -S

curl -s URLはプログレス表示を抑制。ただしエラーメッセージも表示されなくなる。

curl -S URLはエラーメッセージを出力。

curl -sS URLはプログラス表示を抑制しながらエラーは表示させる。

-I, -i

curl -I URLでレスポンスヘッダー表示。

curl -i URLでボディーを含むレスポンス表示。

-v

リクエストを含むヘッダーとボディーを表示。

POST

-X

-XオプションでPOSTを指定してPOSTメソッドでリクエスト。

-d

-dオプションでパラメーターを指定。

 

Vagrant – PHPインストール – CentOS7

概要

CentOS7へのPHPのインストールはyumを使うが、公式のリポジトリ―ではバージョン5まででPHP7系がインストールできない。

PHP7をインストールするのに、sudo yum install php73 php73-php ...とすると、起動コマンドがphp73になる。これをphpで起動できるようにするのにRemi Repositoryを使わせてもらう。Remi Repositoryをインストールするに当たってはEPEL (Extra Packages for Enterprise Linux)が必要になる。

Remi RepositoryのサイトにあるConfiguration Wizardで条件を指定して、必要な情報を得ておく。設定条件は、

  • Operating system: CentOS7 (maintained until June 2024)
  • Wanted PHP version: 7.3.28 (security only support until December 2021)
  • Type of installation: Default / Single version (simplest way)

Wizard answerとして以下を含む情報が得られる。

  • Command to install the EPEL repository configuration package:
    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • Command to install the Remi repository configuration package:
    yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
  • PHP version 7.3 packages are available for CentOS 7 in remi-php73 repository
  • Command to upgrade (the repository only provides PHP):
    yum update
  • Command to install additional packages:
    yum install php-xxx

yumのアップデート

念のため。

EPELのインストール

yumアップデートでEPELがインストール済みとわかる。インストール済みのリストをとってみると

EPELをインストールする手順の覚え書き。

Remiリポジトリーのインストール

PHP73リポジトリーの有効化

/etc/yum.repos.d/remi-php73.repoを編集。

PHP本体のインストール

インストールの確認。

この時点でインストールされているパッケージの確認。

必要なパッケージのインストール

php-devel php拡張を構築するのに必要なファイル
php-opcache バイトコード化アクセラレーター
php-intl 国際化関数
php-mbstring マルチバイト文字関連
php-mysqlnd MySQLネイティブドライバー
php-pdo PDO
php-xml XML利用
php-xmlrpc XMLデータ交換
php-gd 画像処理関連

基本的な機能

国際化・マルチバイト

データベース関係

XML関係

画像関係

 

MySQL – リレーションを持つCSVのインポート

概要

参照関係を持つテーブルにCSVデータをインポートすることを考える。

  • 親テーブルの主キーにAUTO_INCREMENTが設定されていて、子テーブルがそのキーを参照するリレーションを対象とする
  • データの追加ではなく、空のテーブルに新たにデータを登録するケースを対象とする

テーブル構成

以下のようなテーブル構造とする。

  • branchesテーブルは支社に関する情報を記録する
    • AUTO_INCREMENTの支社ID(プライマリーキー)
    • 支社名
  • warehousesテーブルは支社に属する倉庫に関する情報を記録する
    • AUTO_INCREMENTの倉庫ID(プライマリーキー)
    • 倉庫が属する支社を参照する支社ID(外部キー)
    • 倉庫名
  • customersテーブルは倉庫から出荷される先の顧客に関する情報を記録する
    • AUTO_INCREMENTの顧客ID(プライマリーキー)
    • 顧客を担当する倉庫のID(外部キー)
    • 顧客名

ExcelでCSVファイルの作成

元データの入力

以下の3つのテーブルデータを別のシートに入力する。

<branchesテーブル>

id name
1 関東支社
2 関西支社

<warehousesテーブル>

id branch_id name
1 1 千葉倉庫
2 1 八王子倉庫
3 2 東大阪倉庫
4 2 神戸倉庫

<customersテーブル>

id warehouse_id customer
1 1 山田商会
2 1 田中屋
3 2 中川商店
4 2 川井製作所
5 3 井戸商店
6 3 戸田商会
7 4 田村屋
8 4 村山製作所

CSVファイルの保存

3つのシートそれぞれをCSVファイルで保存する。

  • 名前を付けて保存
  • ファイルの種類は”CSV UTF-8 (コンマ区切り)”
  • シートごとに別々のCSVファイルに保存

BOMなしへの変換

ExcelのUTF-8はBOM付きで保存されるので、これをBOMなしのUTF-8に変換する。

たとえば、Windowsのメモ帳で読み込んでUTF-8(BOM付きではない方)で保存し直すなど。

ファイルの提供

外部サーバーの場合、FTPで所定の場所にCSVファイルをアップロード。

Vagrant仮想環境の場合、保存されたCSVファイルを共有ディレクトリーにコピーまたは移動。

MySQLでの操作

ローカルファイルを許可してログイン

MySQLにログインするのに、--enable-local-infileを指定してローカルファイルからの入力を許可。

MySQL内でローカルファイルの入力許可

@@local_infile変数の内容をチェックする。0の場合はローカルファイル入力が許可されていないので、SET GLOBALで許可する。

テーブルの準備

CREATE TABLEでCSVデータを読み込むテーブルを準備する。

作成したテーブルの構造。

CSVファイルの読み込み

アップロードまたは共有されたCSVファイルをLOAD DATA LOCAL INFILEクエリーで読み込む。

  • カンマ区切り→FILES TERMINATED BY ','
  • 改行コード→LINES TERMINATED BY '\r\n'
  • 1行目が見出し行の場合→IGNORE 1 LINES

読み込み結果の確認

各テーブルデータの確認

参照関係の確認

外部キーによる参照関係の確認。各外部キーと親テーブルのキーでテーブルを結合。

実行結果。

新規追加の確認

たとえば新たな支社を1つ追加し、AUTO_INCREMENTが機能していることを確認。

外部結合してみる。

 

Vagrant – PHPインストール – FreeBSD

さくらのレンタルサーバーに合わせた仮想環境にPHPをインストール。bootstrap済みのpkgで簡単にインストールできた。

 

Vagrant – MySQLインストール – FreeBSD

pkgによるインストール

FreeBSDのバージョンが古いと言われたが、ミスマッチを無視することができるようなので無視して続行。

インストール直後の主要ファイルの存在状況は以下の通り。

/usr/local/etc/mysql/my.cnf → 存在
$HOME/.mysql_secret → 存在しない
/root/.mysql_secret → 存在しない
/usr/local/libdata/ldconfig/mysql57-server → 存在
/usr/local/share/mysql/mysql.server → 存在

 

MySQLサーバー起動

/etc/rc.confに以下の1行を追加してvagrant reload

サーバーの実行状況を確認。

サーバーを再起動する場合。

サーバーを起動すると.mysql_secretファイルが作成される。

初回ログインとパスワード変更

初期パスワードの確認

rootユーザーの初期パスワードは/root/.mysql_secretファイルに書かれている。

初回ログイン

パスワードを変更

SET PASSWORDクエリーでパスワードを変更。

日本語の設定

さくらサーバーでの日本語の扱い

インストールしたままの状態だと、ロケールやエンコーディングの設定が日本語の扱いに適していないので変更する必要がある。さくらサーバーのMySQLでの扱いは以下のようになっている。

OSのロケール

ロケールは日本(ja_JP)で文字コードはUTF-8で設定されている。

MySQLの文字コード

systemがutf8、databaseとserverがutf8mb4で設定されている。

MySQLの照合順序

databaseとserverの照合順序はutf8mb4_general_ciに設定されている。

Vagrantの設定

さくらサーバー上のMySQLの設定に合わせる。ロケール、文字コード、照合順序の詳細については以下を参照。

ロケール設定

/etc/profileに以下2行を追加してvagrantをリロード。

※’=’の前後にはスペースを入れない。

<変更後のロケール>

文字コードと照合順序の設定

/usr/local/etc/mysql/my.cnf[mysql]セクションと[mysqld]セクションに各々以下を追加してMySQLをリロード(sudo /usr/local/etc/rc.d/mysql-server restart)。

<変更後の文字コード>

<変更後の照合順序>

 

Vagrant – 環境構築 – さくらサーバー/FreeBSD

概要

さくらレンタルサーバーの環境をローカルのVagrantで構築。使用はできるだけ本家に近づけるようにした(2021年6月時点)。

ホストOS
Windows10
ゲストOS/Box
FreeBSD 11.2-RELEASE-p10 (GENERIC)
bento/freebsd-11.2
MySQL
mysql Ver 14.14 Distrib 5.7.34, for FreeBSD11.4 (amd64) using EditLine wrapper
PHP
PHP 7.4.20 (cli) (built: Jun 8 2021 01:11:43) ( NTS )

特にMySQLのインストールで行きつ戻りつして数日かかった。

FreeBSD仮想環境の構築

Boxのダウンロード

bento/freebsd-11.2のボックスを追加。

仮想環境のディレクトリー準備

Windowsで既作成の\vagrantディレクトリー下にsakuraディレクトリーを作成して移動。

イニシャライズ

仮想環境ディレクトリーを初期化。FreeBSDの仮想環境が構築され、vagrantfileが作成される。

仮想環境の起動

仮想サーバーの起動

vagrant upコマンドでFreeBSDの仮想サーバーを起動する。

仮想サーバーへの接続

vagrant sshで仮想サーバーにログインする。

タイムゾーン設定

初期状態はUTC。

タイムゾーンはtzsetupにタイムゾーンのファイルを指定して設定する。

まずtzsetupの場所を確認。

次にタイムゾーンファイルの場所を確認。

tzsetupTokyoを与えて実行。タイムゾーンファイルを使うかと尋ねられるのでYes。

タイムゾーン設定後

ファイル共有設定

Vagrantfile

以下の行のコメントを外して修正。

1つ目の引数

  • ホスト側の共有ディレクトリーのパスで、仮想環境を起動したディレクトリーからの相対パス
  • この設定ではC:\vagrant\sakura\shareがホスト側の共有ディレクトリーになる
  • このディレクトリーはホスト側で作成する必要がある

2つ目の引数

  • ゲスト側の共有ディレクトリーの絶対パス
  • この場合は~/shareがゲスト側の共有ディレクトリーになる
  • このディレクトリーは自動作成される

ホスト側の共有ディレクトリー作成

ホスト側のWindowsで共有ディレクトリーを作成

Vagrant起動/再起動

vagrant up/reloadでvagrantfileの内容を仮想マシンに反映させる。その結果、vagrantfileで指定したパスで仮想マシンにshareディレクトリーが作成される。

pkgのブートストラップ

MySQLやPHPなどをインストールするのにpkgによるバイナリーパッケージ管理を利用する。このため、pkgをブートストラップする。

 

 

MySQL – CSVファイルへのエクスポート

コマンド

以下のコマンドで、指定したテーブルのデータをCSVファイルに書きだす。

エラー対応

下記のようなエラーが出る場合。

グローバル変数を確認する。

この場合、表示されたディレクトリーにのみCSVファイルを書き込むことが可能なので、以下のように指定する。

結果のファイルdata.csvは/var/lib/mysql-filesディレクトリー下に保存される。

 

MySQL – テーブルのカラムの変更

カラム名の変更

changeの場合

カラムの型の変更

changeの場合

ALTER TABLE … CHANGEで変更するが、新しいカラムでも現在のカラム名を指定する必要がある。

modifyの場合

 

MySQL – テーブルのカラムの削除

1つのカラムの削除

複数のカラムの削除