Windows 10 Creators Update がリリースされました。
このアップデートでBash on Windowsもアップデートされましたので、最新版にアップデートするとともに、LAMP環境、すなわちApache、MySQL、PHP、これに加えRuby On Rails5.02環境を構築してみます。
Bash on Ubuntu on Windowsのアップデート
Anniversary Update版のBashが既にインストールされている場合は、インストール済みのBashをアンインストール後に、改めてCreators Update版のBashをインストールする必要があるということです。開発用アプリケーションやデータなどは事前にバックアップしておきます。
それでは、コマンドプロンプトを開いて、アンインストールを実行します。
lxrun /uninstall /full
今回は/fullオプションを付けてユーザーデータを含めすべてのデータを削除します。
続いてインストールを実行します。
lxrun /install
Windows ストアからダウンロードしています…が表示され、数分後にインストールが完了します。
Bash on Ubuntu on Windowsを開き、前回と同じ手順でSSHサーバーを立ち上げてみましたが、以下のエラーが表示されました。SSHのホストキーが自動生成されないようです。
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
手動生成して再スタート
sudo ssh-keygen -A sudo service ssh restart
正常起動しました。前回表示されていた接続拒否メッセージは今回は出ていません。
Rails 5.0.2 環境構築
まず前回と同じ手順でRails環境を構築しておきます。
今回のバージョンはRuby2.4.1、Rails5.0.2
MySQL 環境構築
最新版のMySQL 5.7 をインストールします。こちらでUbuntu / Debian (Architecture Independent), DEB Packageを確認して最新バージョンをダウンロード
wget http://dev.mysql.com/get/mysql-apt-config_0.8.4-1_all.deb
ダウンロードしたdebパッケージをインストール
sudo dpkg -i mysql-apt-config_0.8.4-1_all.deb
MySQL Server & Cluster (Currently selected: mysql-5.7)) を選択してEnter
mysql-5.7 を選択してEnter
Ok を選択してEnter
sudo apt-get update sudo apt-get install mysql-server
MySQLをスタートします。
sudo service mysql start
おまじないです。通常はMySQLをアップデートしたときに、最新との互換性のチェックや修正を行うものです。
sudo mysql_upgrade -u root
mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
データベースを作成しローカル接続アカウントを追加します。
create database db1 default character set utf8; grant all privileges on db1.* to user1@'localhost' identified by 'パスワード';
Apache 環境構築
Apache2をインストールします。
sudo apt-get install apache2
Apache2をスタートします。
sudo service apache2 start
ブラウザから確認してみます。http://localhost
続いてPassengerをインストールします。
gem install passenger
Apacheモジュールのビルドとインストール
sudo chmod o+x "/root" passenger-install-apache2-module
出力メッセージに従って以下をインストール
sudo apt-get install libcurl4-openssl-dev sudo apt-get install libcurl4-gnutls-dev sudo apt-get install apache2-dev sudo apt-get install libapr1-dev sudo apt-get install libaprutil1-dev
Apacheのconfigに記述する情報を出力しておきます。
passenger-install-apache2-module --snippet
上記で出力されたPassengerの設定情報とRailsサンプルアプリの設定情報を記述します。
vim /etc/apache2/sites-available/passenger.conf
LoadModule passenger_module /root/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /root/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.2 PassengerDefaultRuby /root/.rbenv/versions/2.4.1/bin/ruby </IfModule> <VirtualHost *:80> RailsEnv development PassengerEnabled on DocumentRoot /var/www/html/sample/public </VirtualHost> AcceptFilter http none AcceptFilter https none
passenger.conf を有効にして再起動します。
sudo a2dissite 000-default.conf sudo a2ensite passenger.conf sudo service apache2 restart
ブラウザから確認してみます。http://localhost
Passengerがエラーを吐きました。こんなエラーメッセージが出力されています。
Address already in use – listen(2) (Errno::EADDRINUSE)
/root/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.2/src/ruby_supportlib/phusion_passenger/request_handler.rb:303:in `listen’
そのソースコードを見ると
300: socket_address = "#{socket_dir}/#{socket_prefix}.#{generate_random_id(:base64)}" 301: socket_address = socket_address.slice(0, unix_path_max - 10) 302: socket = UNIXServer.new(socket_address) 303: socket.listen(BACKLOG_SIZE)
なぜ “Address already in use” ?
こちらを参考に環境変数を設定してみました。
vim /var/www/html/sample/config/environment.rb
........ ENV['_PASSENGER_FORCE_HTTP_SESSION']="true"
再起動して再度確認
sudo service apache2 restart
http://localhost
今度は正常に動きました。
PHP 環境構築
PHP7.1をインストールします。
sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.1 php -v
PHP 7.1.4-1+deb.sury.org~xenial+1 (cli) (built: Apr 11 2017 22:12:32) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.4-1+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies
passenger.conf を無効にしてデフォルトに戻し再起動します。
sudo a2dissite passenger.conf sudo a2ensite 000-default.conf sudo service apache2 restart
動作確認をしてみましょう。
vim /var/www/html/phpinfo.php
<?php phpinfo(); ?>
ブラウザから確認してみます。http://localhost/phpinfo.php
これで Bash on Ubuntu on Windows が本当に使える開発環境となりました。