Nginxでphpを使うと403エラー

Nginx + php_fpm環境を設定してて問題なかったのに

http://(サーバードメイン)/sample
にアクセスするとエラーが..

2016/05/14 16:37:55 [error] 7942#0: *621 directory index of "/usr/share/nginx/html/sample/" is forbidden

http://(サーバードメイン)/sample/index.php

だと問題ない..ちょっと考えたらわかるのにはまりました..
nginxの設定ファイルを確認

server {                                                                           
    listen       80;                                                                                                                                                                                         
    server_name  sample.co.jp;                                       
    root   /usr/share/nginx/html;                                               

    access_log  /var/log/nginx/base-access.log  main;                           
    error_log  /var/log/nginx/base-error.log warn;                              

    location / {                                                                
        index  index.html index.htm;                                            
    }                                                                           

    #error_page  404              /404.html;                                    

    # redirect server error pages to the static page /50x.html                  
    #                                                                           
    error_page   500 502 503 504  /50x.html;                                    
    location = /50x.html {                                                      
        root   /usr/share/nginx/html;                                           
    }                                                                           

    # pass the PHP scripts to FastCGI server                                    
    #                                                                           
    location ~ \.php$ {                                                         
        fastcgi_pass   unix:/var/run/php5-fpm.sock;                             
        fastcgi_index  index.php;                                               
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;        
        include        fastcgi_params;                                          
    }                                                                           
} 

location /
の下に index.php がないですね..ファイルがないのでエラーになってたようです
追加して解決しました

sshでログインできるユーザーを増やしてみた

sshでログインできるサーバーに他の人もログインさせたかったのでユーザーを作ってみました
Ubuntu 14.04で行っています

$ sudo useradd user
$ id user

uid=1001(user) gid=1001(user) groups=1001(user)

useraddを使うとhomeディレクトリが作成されません
homeディレクトリを設定

$ mkdir /sample
$ sudo chown user:user /sample
$ sudo chmod 755 /sample
$ sudo usermod -d /sample user

これでログインすると /sample にいるようになります

$ su – user

で確認

sshの鍵を作ります

$ ssh-keygen -t rsa

デフォルトだと .ssh に id_rsa と id_rsa.pub ができます
sshログインできるように公開鍵をセット

$ cat .ssh/id_rsa.pub > .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

これで、秘密鍵(.ssh/id_rsa)をローカルにコピーして設定してあげればログインできるようになります

エラーが出てはまったのは、

$ tail /var/log/auth.log

Authentication refused: bad ownership or modes for directory

でした

ホームディレクリに書き込み権限があるとエラーになる様子

$ chmod 755 /sample

で直りました

rbenvを使っているとcronでrubyのバージョンが古かった

rbenvでrubyをインストールした環境でcronを使ってrubyプログラムを動かしているつもりが動かなくなってました
gemがないとかでエラーが

手っ取り早くフルパスを指定してあげました

$ crontab -e

*/5 * * * * /usr/local/rbenv/versions/2.3.0/bin/ruby ./test.rb   

いけてないですが応急処置

Dockerを使ってrails 5を動かしてみる

DockerとRails5を試してみました

Quickstart: Compose and Rails
をベースに行いました
dockerやdocker-composeはインストール済み、Ubuntu 14.04上で行いました

Dockerfileを用意

$ vim Dockerfile

FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install -j4
ADD . /myapp

Gemfileを用意します

$ vim Gemfile

source "https://rubygems.org"
gem 'rails', '>= 5.0.0.beta4', '< 5.1'

Quickstartの手順通り、Gemfile.lockを用意

$ touch Gemfile.lock

docker-compose.ymlを用意

$ vim docker-compose.yml

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

rails newしてrailsアプリを作っておりきます

$ docker-compose run web rails new . –force –database=postgresql –skip-bundle

railsアプリのファイル権限がrootになっているので、権限を変えます

$ sudo chown -R $USER:$USER .

javascriptランタイムのために、therubyracerのコメントアウト状態を解除

$ vim Gemfile

gem 'therubyracer', platforms: :ruby

railsのデータベース設定を用意

$ config/database.yml

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db

test:
  <<: *default
  database: myapp_test

buildして立ち上げます

$ docker-compose build
$ docker-compose up

http://(server domain):3000 にアクセス!

https://gyazo.com/a41526a2386d9c78b718cdee0dc619bb

rails5が立ち上がっています!

scaffoldして簡単に画面を作ってみます

$ docker-compose run web rails generate scaffold Article title:string
$ docker-compose run web rails db:migrate
$ docker-compose up

http://(server domain):3000/articles にアクセス!

https://gyazo.com/9da374e51b901d68da2b9f69eceddebc

できてます

このままだと docker rm でコンテナを消すとデータベースのデータが消えます

$ docker-compose run web rails db:migrate

すれば戻りますが、データベースをホスト側に保存させてみます

volumes を bind します
postgresql用のディレクトリをホスト側へ用意

$ mkdir -p datastore/postgresql

docker-compose.yml に バインドさせる設定を追記

$ vim docker-compose.yml

version: '2'
services:
  db:
    image: postgres
    volumes:
      - ./datastore/postgresql:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

$ docker-compose build
$ docker-compose up

これでデータベースのデータもホスト側へ保存されるようになりました
ここまでくれば開発ができそうです