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をブートストラップする。

 

 

Vagrant&VirtualBox – 仮想環境構築・利用の流れ

概要

Vagrant、VirtualBoxをインストール済みとして、個別のvirtualboxの仮想環境の導入・利用・削除の流れをまとめる。

Vagrant Cloudのbento/centos-7.7を導入する場合を例にする。

仮想環境の導入

virtualboxの検索と追加

  1. サイトでvirtualboxを探す
    • bento/centos-7.7を確認
  2. virtualboxを加える
    • vagrant box add bento/centos-7.7
      →ここでvirtualboxやvmwareなど複数のプロバイダーの選択肢が出た場合はvirtualboxを選択
  3. 追加後の確認
    • vagrant box list

ディレクトリーの作成と初期化

  1. 仮想環境ディレクトリーを作成
    • mkdir centos7 & cd centos7 
  2. virtualboxの初期化
    • vagrant init bento/centos-7.7
      →Vagrantfileが作成される

仮想環境の利用

仮想環境の起動と接続

  1. 仮想環境ディレクトリーでVagrantを起動
    • vagrant up
  2. 仮想環境に接続
    • vagrant ssh

仮想環境の停止

  1. 仮想環境のOSを終了(exitなど)
  2. vagrant halt

仮想環境の削除

仮想環境の削除

  1. 仮想環境idの確認
    • vagrant global-status
  2. 仮想環境の削除
    • vagrant destroy id

virtualboxの削除

  1. virtualboxの確認
    • vagrant box list
  2. virtualboxの削除
    1. vagrant box remove bento/centos-7.7

 

Vagrant/AmazonLinux2 – Railsインストール

概要

VagrantのAmazonLinux2仮想環境rbenv/Rubyをインストール後、Railsをインストールした記録。

  • ホスト:Windows10
  • ゲスト:Vagrant + VirtualBox + bento/amazonlinux-2

Railsの最新版ではなく、オリジナルの環境に併せて特定のバージョンを指定してインストールした。

Railsに影響する機能の停止

SELinux

もともとSELinuxは無効状態だった。

firewalld

そもそもfirewalldはセットされていなかった。

Railsのインストール

一応、gemで使用できるRailsの確認。使用可能なRailsはない。

gemでRailsのバージョン5.1.7を指定してインストール。

再度使用可能なRailsを探して、インストールされていることを確認する。

Railsサーバーの稼働

エラー~JavaScriptランタイムがない

テスト用のプロジェクトを生成してRailsサーバーを起動しようとしたところ、エラーになった。

Node.jsでもよさそうなので、CentOS7と同じ手順Node.jsをインストール。Rails6では最新安定版のNode.jsだと警告が出たのでダウングレード下が、Rails5では最新版では警告が出なかった。

ここまででrails serverの実行が可能になった。

ホストブラウザーからの接続

vagrantfileに以下の1行を記述

config.vm.network "forwarded_port", guest: 3000, host: 3000

テスト用のプロジェクトを生成してrails sを実行すると、「このサイトにアクセスできません」と弾かれる。

netstatで確認すると、ポート3000は開いている。

サーバー立ち上げのオプションを以下の様にして接続成功。

rails s -b 0.0.0.0

以前参考にしたサイトを再度確認すると、Rails4.2以降ではこの接続方法になるとのこと。オリジナルの環境ではrails sで十ていたが(エイリアス?)。

既存プロジェクトの実行

オリジナルの環境でつくったプロジェクトをダウンロードし、共有フォルダー経由で仮想環境に移して実行したところ、db:createでエラーが出た。

指示通りにbundle install

この後db:migrationは問題なく、これでアプリケーションがオリジナルの環境通りに実行できるようになった。

一方、仮想環境で作ったプロジェクトをオリジナルの環境にアップロードした場合、オリジナル側でbundle installが必要になったが、これで問題なく実行できた。

 

Vagrant/AmazonLinux2 – rbenv/Rubyインストール

概要

VagrantのAmazonLinux2仮想環境にrbenv&Rubyをインストールした記録。

  • ホスト:Windows10
  • ゲスト:Vagrant + VirtualBox + bento/amazonlinux-2

Gitのインストール

CentOS7仮想環境と同じ方法でGitをインストール。

バージョン確認

rbenv/Rubyのインストール

CentOS7仮想環境と同じ方法でインストール・設定(ライブラリーのインストールも含む)。

  • Gitからrbenvをクローン
  • .bash_profileの設定
  • Gitからruby-buildをクローン
  • Rubyに必要なライブラリーをインストール

Rubyインストール時に最新バージョンではなく過去のバージョンを指定してインストール。

  • rbenv install --list-allで全バージョンを確認
  • Rubyのインストール時に、バージョンを指定してインストール
  • rbenv globalで通常使うバージョンを指定

 

Vagrant – 仮想環境構築 – Amazon Linux 2

概要

クラウドで利用していたAWS(Amazon Web Service)のEC2/Cloud9の環境をVagrantでローカルに構築した記録。利用時の環境に併せて、OS、MySQL、Ruby、Railsのバージョンをできるだけ整合させた。

オリジナルの環境

  • OS : Amazon Linux AMI release 2018.03
  • MySQL : mysql Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1
  • Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
  • Rails : Rails 5.1.7

構築した環境

  • OS(Box) : bento/amazonlinux-2 (virtualbox, 1.2.1)
  • MySQL : Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.1
  • Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
  • Rails : Rails 5.1.7

Vagrant/VirtualBoxの導入

Vagrant – 仮想環境構築 – CentOS7を参照。

Boxの導入

ダウンロード

vagruntupFind Boxesでキーワードamazonを含むBoxを検索し、bento/amazonlinux-2(1.2.1)を選択。

このBoxをvagrant addコマンドでローカルに追加。

仮想環境の初期化

ディレクトリー\vagrant\amazonlinux2を作成・移動し、vagrant initでダウンロードしたBoxで環境を構築。

仮想環境の利用

仮想環境の起動

vagrant upコマンドで仮想環境を起動。初回起動時は多数のパッケージインストールや依存関係の解決で時間がかかる。

仮想環境へのログイン

vagrant sshコマンドで仮想環境にログイン。EC2のロゴが表示される。

システム情報

リリースの表現が違っている。

構築したシステム情報

オリジナルのシステム情報

ロケールとタイムゾーンの設定

確認

タイムゾーンがUTC、ロケールはLANG=enになっている。

ロケールの設定

ロケールをJPに設定して再起動。表現は日本語になるが、まだタイムゾーンはUTC。

timedatectlで現在のロケールを確認。UTC。

タイムゾーンの設定

timedatectl list-timezonesで設定可能なタイムゾーンを確認。

タイムゾーンをAsia/Tokyoに設定。

その他の設定

共有設定、Atomでの接続はCentOS7と同じ手順で完了。

 

Vagrant – コマンド

Vagrant全般

ヘルプ・コマンド一覧

コマンド全体

  • vagrant -h
  • vagrant --help

サブコマンド

  • vagrant help command

Vagrantのバージョン確認

  • vagrant -v
  • vagrant --version

Box関係

Boxの一覧

  • vagrant box list

Boxの追加・削除

  • vagrant box add **/**
  • vagrant box add virtual_name box_name.box
  • vagrant box remove **/**
  • vagrant box remove box_name --box-version ****.**
  • Box削除の前にvagrant destroyで仮想マシンを削除する

Boxの更新

対象の仮想環境のディレクトリー内で実行。

  • vagrant box update

バックアップ/リストア

  • vagrant package box_name
    →現在の仮想環境をバックアップ
    →カレントディレクトリーにpackage.box作成
  • vagrant package box_name --output buckup_name.box

リストアはaddの後init。

  • vagrant add box_name backup_name.box
    →仮想環境ディレクトリーに移動
    vagrant init box_name

仮想マシン操作

仮想マシン操作は仮想マシンのディレクトリー内で。

仮想環境の一覧・動作状況

  • vagrant global-status

仮想マシンの初期化~vagrantfile作成

  • vagrant init box_name

仮想マシンの起動・停止・確認

仮想マシンに関する操作は仮想マシンのディレクトリー内で。

  • vagrant up
  • vagrant halt
  • vagrant restart
  • vagrant status

仮想マシンへの接続/接続情報確認

  • vagrant ssh
  • vagrant ssh-config

仮想マシンの削除

  • vagrant destroy id
    • idvagrant global-statusで確認
    • Boxを削除する前に仮想マシンを削除する

Snapshot~スナップショット

  • 対象の仮想マシンのvagrantfileがあるディレクトリーで実行
  • vagrant haltで停止しなくても、snapshot実行時に一時仮想マシンを停止して再起動してくれる

スナップショットの保存

vagrant snapshot save snapshot_name

スナップショットの一覧

vagrant snapshot list

スナップショットの復元

vagrant snapshot restore snapshot_name

スナップショットの削除

vagrant snapshot delete snapshot_name

 

Vagrant – Atomを使う

方法1~共有フォルダ-

共有フォルダにあるファイルをホスト側のAtomで開く。

ただし、Railsのファイルを編集している場合、いったんRailsサーバーを立ち上げなおさないと内容が反映されないという症状が出た。

方法2~AtomからFTP接続

remote-ftpのインストール

AtomにFTP接続用のパッケージをインストールして接続する。

手順

  1. File → Settings→Installからremote-ftpを検索してインストール
  2. AtomからホストのVirtualBoxの仮想マシンフォルダーを開く(C:\vagrant\centos7)
  3. Packages→Remote FTP → Create SFTP config file
  4. Atomで開いた.ftpconfigファイルの内容を編集

.ftpconfigファイルの編集

.ftpconfigファイルの編集に必要な情報は、コンソールからvagrant ssh-configコマンドで表示させる。

この情報に基づいて.ftpconfigを編集。

接続

  1. Packages→RemoteFTP→Toggle
  2. Remoteタブ表示
  3. Connectボタンをクリック

トラブル

ERBファイル

Railsのerbファイルに色がつかない。config.csonを編集してみたが効果がなかった。

原因はtree-sitter parserのバグが考えられ、以下で対処。

  1. Settings→Coreの”Use Tree Sitter Parsers”のチェックを外す
  2. 再起動→チェックが外れているという警告は無視

 

Vagrant/CentOS7 – Railsのインストール

概要

Vagrant + VirtualBox + CentOSの環境にRuby、MySQLをインストール後、Railsをインストールするのにいろいろと躓きながら進めた記録。

構成

  • Vagrant : 2.2.14
  • VirtualBox : 6.1.18
  • Box : bento/CentOS-7.7
  • mysql : Ver 8.0.23 for Linux on x86_64
  • Ruby : ruby 3.0.0p0
  • Rails : Rails 6.1.3

インストール概略

階層が下のものは今回必要になったもの。

  • SELinux、firewalldの停止
  • Railsインストール
    • sasscインストール
      • g++インストール
    • mysql-develインストール
      • Node.jsインストール
  • Railsサーバー実行
    • webpackerインストール
      • Node.jsインストール(再掲)
      • Yarnインストール

利用手順

アプリケーション生成

sqlite3がデフォルトで未インストールではエラーが出るため、コマンドラインでmysqlを指定。

  • rails new app_name -d mysql
  • rails new app_name --database=mysql

database.ymlの修正

データベースを使わない場合は、development、test、productionの各database:をコメントアウト/削除。

Railsサーバー起動

アプリケーションディレクトリー内で以下を実行。

rails s -b 0.0.0.0

ブラウザから以下でアクセス。

localhost:3000

Railsに影響する機能の停止

Railsをインストール・稼働させるにあたって、Railsに影響を与える機能を停止させる。

SELinux

アクセス制御機能のSELinuxのステータスがEnforsingの場合にはPermissiveになるよう設定する。

firewalld

ファイアーウォール・サービスfirewalldが有効の場合は無効化する。

Railsのインストール

Rails本体のインストール

インストール後のバージョン確認。

エラー1~アプリ生成時~sassc

sasscパッケージがない

Railsインストール後にアプリケーションを生成しようとすると、sasscインストール時にエラーとなる。

sasscインストール時にg++がない

メッセージに従ってsasscをインストールしようとするとエラーになる。g++がないのが原因らしい。

参考サイト:centos7でsassc 2.0.0 with native extensionsのインストールに失敗

gcc-c++はあるようだが・・・

インストールしてみる。

sasscのインストール成功

gcc-c++をインストールしてみると、無事sasscがインストールできた。

エラー2~アプリ生成時~sqlite3

sqlite3エラー

再度アプリケーションを生成すると、まだsqlite3に関するエラーが残っている。使いたいのはmysql。

mysql-develのインストール

mysqlを使いたいので、mysql-develの存在を確認。

yum list | grep mysql-devl

存在しない場合はインストール。

Node.jsがないというエラー

生成時にエラーが発生したアプリケーションをいったん削除し、データベースにmysqlを指定してアプリケーションを生成。

railsサーバー起動でもエラー

webpackerエラー

ここでいったんrails sでサーバーを起動すると、webpackerの設定ファイルがないというエラー。

webpackerインストールエラー

webpackerインストール時の”Please run rails webpacker:install”に従ってインストールしようとすると、ここでも”Node.jsがない”というエラーが出てサーバーが起動しない。

Node.jsのインストール

アプリケーション生成時、Railsサーバー実行時に共通してNode.jsに関するエラーが出ているので、Node.jsをインストール

当初、最新版のv15.10.0をインストールした。

再度webpackerインストールでエラー

再度webpackerをインストールしようとすると、Node.jsの警告とYarnに関するエラーが出てストップ。

Node.jsのダウングレード

Node.jsの警告も気持ち悪いので、ダウングレード。

ダウングレードしたNode.jsを使用。

ここで再度webpackerをインストールしようとすると、まだ”Yarnがインストールされていない”というエラーが残っている。

Yarnのインストール

npmでYarnをインストールする。

参考:Yarn公式サイト

webpackerインストール

Node.jsとYarnがそろったので、webpackerがインストールできた。

Railsサーバー起動・接続

vagrantfile設定

vagrantfileには以下の1行を設定している。

サーバー起動・接続

ここでrails sでサーバーを起動するが、ブラウザーがつながらない。

参考サイト(Rails4.2:Vagrant上の仮想マシンで起動したRailsにホストのブラウザからアクセス出来ない)のおかげで、Railsサーバーを以下で立ち上げるとよいことが分かった。

この状態で、ホストのブラウザーからlocalhost:3000でつながった。

アプリケーション生成~成功

ここで再度アプリケーションを生成して成功。

viなどでdatabase.ymlを修正。

Railsサーバー起動。

ホストのブラウザーからlocalhost:3000で接続。