Vagrant を使った WordPress の開発環境 VAW(Vagrant Ansible WordPress)を最近使っているのですが、同期フォルダー以外の設定用ファイルの編集等で vi エディタを使わなければならない場合にちょっとストレスがたまります (>_<)
今回は、私のようになかなか vi エディタになれなくて苦労している方に、仮想サーバー上のファイルを vi エディタを使わずに、Windows側のエディタから直接編集する方法を紹介します
これまでに、仮想サーバーをあまり意識せずに WordPress関連の開発が出来るように データベースや、リモートデバッグ関連の記事を紹介してきましたが、さらに vi エディタを使用しなくてすむようになれば、サーバーへのハードルがまた少し低くなるかも知れません (^^)
VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
VAW(Vagrant Ansible WordPress) で NetBeans を使いリモートデバッグ!
※ここで紹介するのは Windowsから Vagrant VAW の vagrant/root ユーザーのファイルをSFTPを利用してリモート編集する方法です。動作環境が異なる場合はうまくいかない場合もあると思います
Windows側エディター
私は、普段 NetBeans IDE を使っているのですが、Netbeansは仮想サーバー内の個別の設定ファイル等をちょっと編集したいという場合には適していません
そこで NetBeans のプラグインを探すとremote file system というそれらしいプラグインがあったのですが、やってみるとうまく動作しません (^_^;)
ということで 最近は、オープンソースで開発されているエディタもたくさんあるので、軽量で手軽に使用できるエディターを調べてみました
例えば ATOM, Brackets, Visual Studio Code 等のモダンで高機能なエディタは、プラグインで様々な拡張機能を追加出来るようになっています
どれも無料で利用できるので試してみると、各エディタは、それぞれ特徴があり使い勝手や応答性違いがあるのですが、どれもプラグインを導入して機能を拡張出来るようになっています
これらのエディターを試してみて意外に好印象だったのは Visual Studio Code だったのですが、今回の目的の SFTP機能に関しては、残念ながらどのエディタでも自分の望むようなプラグインは見つけられませんでした
そこで、定番的なエディターも試して見るかと Notepad++ エディターをインストールして NppFTP プラグインを試してみるとまさにドンピシャでした (^^)
今まで NotePad を置き換えるちょっと高機能なエディターという程度の認識しかなく、使ったことがなかったのですが NotrPad++ と NppFTP の組み合わせはとても強力です
NotePad++
Notepad++ は、Windows で動作するフリーソフトのエディターで、C++言語で作成されているので比較的軽量できびきび動作し、プラグイン機能で様々な機能拡張が行えるようになっています
最近人気のエディターと比較すると若干古さは感じますが、どのエディターでも一長一短があるので、今回の目的においては最強のエディターのような気がします (^^)
インストール
Notepad++サイトからダウンロードしてインストールすればOKですが、今回は Notepad++ EUC-JP 対応版 というカスタム版を使ってみました
このカスタム版は、インストーラ形式ではありませんのでダウンロードした npp.6.8.8.bin.zip ファイルを適当なフォルダーで解凍するだけです
その中の notepad++.exe をダブルクリックすればエディタが起動します
初期設定
メニューの 設定→環境設定 をクリックします
最小限必要と思われる設定として、新規作成 項目のコードを UTF-8 にセットします
他の項目に関してはお好みで設定して下さい
設定→スタイル設定 からは各言語ごとのフォントやカラーの設定を行うことも出来ます
NppFTP プラグイン
今回の目的である NppFTP プラグイン を導入します
メニューから プラグイン→Plugin Maneger→Show Plugin Maneger をクリックします
Available から NppFTP を探してチェックしたら Install ボタンをクリックします
自動的にプラグインがダウンロードされ、リスタートの確認ダイアログが表示されるのでクリックしてプラグインを有効化します
ツールバーの右端に NppFTP のアイコンが追加されるのでクリックします
接続先情報の登録
NppFTP 部の右から2つ目の Settings アイコンをクリックします
今回は VAW(Vagrant Ansible WordPress) 仮想マシンの vagrant と root ユーザーの2つの接続情報を作成します
General Setting
キャッシュファイルの場所を指定します。デフォルトではプラグインフォルダー下の Config/NppFTP/Cache が使われますので、とくに変更する必要はありません
サーバー上のファイルは、実際にはエディタが直接編集しているわけではなく、自動的に下記動作を行うことであたかも直接編集しているように見せています
- 選択したファイルをダウンロードしてキャッシュに保存
- キャッシュデータの編集
- キャッシュデータをサーバーにアップロード
vagrant ユーザー登録
Profile Settings
Add New をクリックして接続先情報を登録します
はじめに VAW の通常のユーザー vagrant の接続情報を作成します
VAWをデフォルト状態で使用している場合の接続情報です
ユーザー vagrant のホームディレクトリ(/home/vagrant)以下を初期のリモートアクセスディレクトリにしています
鍵ファイルによる認証を使用していますので Password は空欄のままでOKです
鍵ファイルの登録
VAWの鍵ファイルは、BOXイメージと同じフォルダーにある vagrant_private_key ファイルを指定します
エクスプローラーの隠しファイルを表示する設定になっていれば下記位置に見えるはずです
C:\Users\[User_Name]\.vagrant.d\boxes\vaw-VAGRANTSLASH-centos6-default\0.1.0\virtualbox\vagrant_private_key
このファイルを Private Key File として登録します
隠しファイルの表示
サーバー側のファイルを探すときに隠しファイルも表示させたい場合は “-al” パラメータをセットします
Transfer と Cache の項目は、そのままでOKです
これで1回クローズして VAW 接続情報を保存します
root ユーザー登録
次に root ユーザー用の接続情報を作成します
これは、 vagrant ユーザーで接続した場合にアクセス出来ないファイルに対して編集を行いたい時に root ユーザー権限でそのファイルにアクセスするための接続情報です
vagrant ユーザーの接続情報の違いは、ユーザー名が root になる部分と、初期のリモートディレクトリが / になる部分です
他の設定は同じですので、割愛します
VAW仮想サーバー(Cent OS)側の設定
まずは VAW を起動させます
ここでは、VagrantのVAW環境を構築する手順は省略しますが、Vagrant や VAW に関しては下記記事中で紹介していますので参考にして下さい
VAW(Vagrant Ansible WordPress) のMySQLデータベースにHeidiSQLで接続する
VAWが起動していれば、vagrant ユーザー権限でアクセスできる範囲のファイルに対しては特別な設定をしなくてもアクセスすることが出来ます
作成した VAW 接続をクリックするとサーバー上のホームディレクトリ以下がエクスプローラ状に表示されます
これで編集したいファイルを選択してダブルクリックすると表示されます
ファイルを編集して保存(Ctrl sキー)すると自動的にサーバーへアップロードして更新されます
あたかも直接サーバー上のファイルを編集しているかのような自然な動作です (^^)
root 権限のファイルを編集するには
大抵の場合は、vagrant ユーザー権限で済むかも知れませんが、たまに root 権限のファイルを編集したい場合があるかもしれません
そんな時でも root ユーザーで接続すればファイルにアクセスすることが可能です。
vagrant ssh で接続してから sudo vi を使う必要はありません
但し、VAWを含め通常の仮想マシンでは root ユーザーの SSH/SFTP 接続は禁止されていることが多いので、作成した VAW-root 接続をクリックしても接続に失敗します
接続できないのは、セキュリティーを考慮して禁止されているからです
サーバーの /etc/ssh/sshd_config ファイルをみると PermitRootLogin no とか DenyUsers root などの記述がされていると思います
また、/root ディレクトリ下の .ssh に authorized_keys ファイルを用意する必要もあります
そこで、これらの設定の書き換えと vagrant ユーザーで使用しているキーファイルを root ユーザーにも使えるようにコピーする処理をシェルプログラムとして作りました
#!/bin/bash if [[ $# != 1 ]]; then echo "[Info]: Usage: sudo /vagrant/ssh_root.sh <enable|disable>" exit 1 else SSH_MODE=$1 fi if [[ $SSH_MODE == 'enable' ]]; then if [[ ! -d /root/.ssh ]]; then sudo mkdir -m 700 /root/.ssh fi if [[ ! -f /root/.ssh/authorized_keys ]]; then echo 'SSH root enable' cp /home/vagrant/.ssh/authorized_keys /root/.ssh/authorized_keys sed -i -e "s/^PermitRootLogin no/PermitRootLogin yes/" "/etc/ssh/sshd_config" sed -i -e "s/^DenyUsers root/#DenyUsers root/" "/etc/ssh/sshd_config" service sshd restart fi elif [[ $SSH_MODE == 'disable' ]]; then if [[ -f /root/.ssh/authorized_keys ]]; then echo 'SSH root disable' rm /root/.ssh/authorized_keys sed -i -e "s/^PermitRootLogin yes/PermitRootLogin no/" "/etc/ssh/sshd_config" sed -i -e "s/^#DenyUsers root/DenyUsers root/" "/etc/ssh/sshd_config" service sshd restart fi fi
このシェルプログラムを ssh_root.sh ファイル名で VAW プロジェクトフォルダーに保存します
このスクリプトを管理者権限で実行すれば簡単に root からの接続を有効化/無効化することが出来ます
vagrant ssh で接続してターミナルから実行できます
- 有効化する場合: sudo /vagrant/ssh_root.sh enable
- 無効化する場合: sudo /vagrant/ssh_root.sh disable
開発環境では、これも面倒なので VAW プロジェクトフォルダーの Vagrantfile を一部修正して、プロビジョニング時に有効化させてしまいます
50行目辺りに1行追加します
#vagrant ssh/sftp root user login enable/disable config.vm.provision :shell, privileged: true, path: "ssh_root.sh", args: "enable"
変更後の Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : ## Vagrant Settings ## vm_box = 'vaw/centos6-default' vm_box_version = '>= 0' vm_ip = '192.168.46.49' vm_hostname = 'vaw.local' vm_document_root = '/var/www/html' public_ip = '' ## That's all, stop setting. ## provision = <<-EOT VERSION=$(awk '{print $3}' /etc/*-release) if [[ $VERSION =~ ^release ]]; then VERSION=$(awk '{print $4}' /etc/*-release) fi echo '6' > /etc/yum/vars/releasever yum clean all yum -y install epel-release rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm yum -y install ansible ansible-playbook /vagrant/site.yml -c local -v --extra-vars "HOSTNAME=#{vm_hostname} DOCUMENT_ROOT=#{vm_document_root}" EOT # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = vm_box config.vm.box_version = vm_box_version config.vm.network :private_network, ip: vm_ip config.vm.hostname = vm_hostname if public_ip != '' config.vm.network :public_network, ip: public_ip end config.vm.synced_folder 'wordpress/', vm_document_root, :create => 'true' #vagrant ssh/sftp root user login enable/disable config.vm.provision :shell, privileged: true, path: "ssh_root.sh", args: "enable" config.ssh.forward_agent = true config.vm.provider "virtualbox" do |vb| # vb.gui = true # Use VBoxManage to customize the VM. For example to change memory: vb.customize [ "modifyvm", :id, "--memory", "1536", '--natdnshostresolver1', 'on', '--natdnsproxy1', 'on', ] end config.vm.provision :shell, :inline => provision end
これで vagrant provision を実行すれば root で接続できるようになります (^^)
※rootからの接続はセキュリティ的には問題あるので、開発環境だけにしておくよう注意です
普段は vagrant ユーザーで接続して、必要な場合のみ root ユーザーで接続するよう使い分けるのがよいと思います
以上
Vagrant 仮想サーバーの設定ファイルをちょっと編集したいという場合に、vi エディタを使わずに、Windows側のエディタから直接編集出来る方法を紹介しました