americandog1993の日記

プログラマー歴半年のメモ

Vagrantで立ち上げた仮想CentOSのファイルをCyberduckから操作したい

環境

OSX EICapitan
Vagrant 1.9.7
VirtualBox 5.1.24
CentOS7

下準備

IPアドレス

Vagrantの以下部分のコメントを外すとIPアドレスを扱えるようになる。

# Vagrantfile
- #config.vm.network "private_network", ip: "192.168.33.10"
+ config.vm.network "private_network", ip: "192.168.33.10"

鍵の確認

Vagrantfileの置いてあるディレクトリに入り、vagrant sshしてない状態で、

$ vagrant ssh-config

IdentityFileのパスをメモっておく。

ファイル書き込み権限変更

Cyberduckからvagrantユーザで入った時に/var/www/html以下のソースファイルを自由に扱えるようにしたかったので、

$ sudo chmod -R 777 /var/www/html

と叩いた。

Cyberduck接続設定

接続 SFTP
ホスト 192.168.33.10
ユーザ vagrant
パスワード 空欄
SSH Private Key 鍵のパスを入力

ついでにブックマーク登録の詳細設定でパス欄にいつも使うディレクトリパスを書いておくと捗る。
ex. /var/www/html

さくらVPS(CentOS7)をWebサーバ化してHelloWorldする

環境

さくらのVPS CentOS7

ログイン

$ ssh root@[IPアドレス]

パスワード入力欄が出てくるので入力してrootで入る。

Apacheを入れる

# yum -y install httpd

ファイアウォール設定

http通信できるようにしないとブラウザでURL打っても繋がらない。

# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

これでhttpを許可するようになる。

htmlファイル作成

# vi /var/www/html/index.html
< !-- /var/www/html/index.html -- >
Hello World

表示確認

ブラウザのアドレスバーにVPSIPアドレスを打ち込みENTER。
Hello World表示が見えたら成功。

VagrantでCentOS7立ち上げてみる

筆者環境

OSX EICapitan

VirtualBoxをインストー

Vagrant by HashiCorp
ここから。
pkg開くときに検証中と出て進まないときは以下のコマンドで対応。

$ sudo installer -package /Volumes/VirtualBox/VirtualBox.pkg -target /

Vagrantインストー

Vagrant by HashiCorp
ここから。
同上の現象で進めなくなった場合は以下コマンド。

$ sudo installer -package /Volumes/Vagrant/Vagrant.pkg -target /

Box追加

Discover Vagrant Boxes - Vagrant Cloud
ここから好きな環境を選んで落としてくればいいっぽい(自己責任)。

f:id:americandog1993:20170723201336p:plain

CentOS7が欲しいのでこれをチョイス。

$ vagrant box add centos/7

ボックスはあくまでテンプレート。鋳型のようなもん(たぶん)。
続いてボックスを実体として立ち上げていく。

vagrant up

好きな場所に好きな名前でディレクトリを作る。
自分の場合は

$ cd
$ mkdir myVM
$ cd myVM
$ mkdir CentOS7

とした。
作ったCentOS7ディレクトリに入ってvagrant initする。
VagrantFileができるのでそのままの設定でよければvagrant up。

$ cd CentOS7
$ vagrant init centos/7
$ vagrant up

vagrant upが終わったら

$ vagrant ssh

仮想マシンに入れる。

CentOS7 mysqlがインストールできない

$ sudo yum install mysql-server
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * updates: centosk3.centos.org
パッケージ mysql-server は利用できません。
エラー: 何もしません

エラーの原因は正確にはわからないが、デフォルトで入ってるmariaDBと競合する場合があるという記事を発見。
下記の通りに実施したら無事インストールできた。

$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql/
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
$ sudo yum -y install mysql-community-server
$ mysqld --version
mysqld  Ver 5.7.19 for Linux on x86_64 (MySQL Community Server (GPL))

ドットインストールの「さくらのVPS入門」の手順通りに進めたらハマったのでメモ

どこでハマるのか

さくらのVPSはCentOS7も選択できるが、講座の環境に合わせるためCentOS6で進めていった。
#08-#09 SSHの設定をしよう で鍵設定を行い、鍵ログインを試すところでrefuseされる。

解決策

#10 ファイアウォールの設定をしよう まで済ませると鍵ログインできるようになる。

refuseされる原因

おそらくだが、sshdconfigとiptablesのポート設定が不一致だったことが原因。
なので、sshdconfigだけ変更した段階ではうまくいかない。
同じ箇所でハマった人は、iptablesまで済ませてからログインを試すことを勧める。

講座で使われているCentOSバージョンは6.3とある。
現在ではCentOS6をインストールするとバージョンは6.9である。
講座公開時は問題なかったのかもしれない。

CentOSのcronで定期作業を自動で行わせる

環境

さくらのVPS CentOS6

動機

railsアプリケーションを作ってて自動メンテに挑戦してみたいと思ったため。
毎度ながら素人の自分でもできる超簡単な方法を採ったので、たぶんもっとセキュアでいい方法はあると思う。

やったこと

Webアプリ側

自作のチャットアプリで1分毎に「test」と自動投稿させてみる。
rails側でこういうアクションを書く。

def create_test_comment
   Comment.create(content: 'test')
end

ルーティングでアプリURL/testにアクセスすれば上のアクションが実行されるよう設定。

CentOS

$ crontab -u [ユーザ名] -e

エディタが起動されるので、

*/1 * * * * curl http://example.com/test

と入力して保存。
あとは自動実行をわくわくして見守る。

f:id:americandog1993:20170716071758p:plain

うまくいってることを確認。
同じ要領で「テーブルのレコードが◯件を超えた分を削除」とか定期実行させられそう。

合ってるはずなのにエラーが出る時

$rails s

の再起動を試してみる。
特にbundle installとbundle updateした後は必須っぽい?