恥ずかしいバズり方をした話
以下の記事が 1019はてブ がつき,はてなブックマークのランキングも1番上にまで来ました.記事自体への 3903 アクセスありました.
なぜ恥ずかしいバズり方なのかと言うと,日本語ががばがば過ぎてバズったからだ.
この記事の内容は2つの記事の内容をコピペした物でした.コピペ時になぜか濁点が抜けしまいました.そこではてブのコメントで大量の指摘コメントがつきました.
寝る前のノリと勢いで投稿するもんじゃありませんね.この記事も寝る前のノリと勢いで書いているので何も反省しないとバレバレですが
このことに関してあんまり書く気はなかったけど,コメントを見ていて気になるものがあったのでこのネタで記事を書きます.
本題に言及すると link list的な紹介serviceはdemeritが勝ると思う。流入も薄く初期は改善の為の測定noiseになる。CGM serviceだと流入対象的にtest投稿が増える。初期ほどorganicが大切。初期を脱すればゴミみたいな流入は不要。
organic が大切だと言うのは,激しく同意します.そしてこういった記事からの流入が直接コンバージョンに結びつくことは少ないです.
ただ紹介service に投稿するいいことも紹介したい.こういったサービスを見ている人にはブログなどをやってる方も少なくない.そこでしっかりとした記事でサービスを紹介してもらえればサービスを理解したユーザに届けてもらえる.ただの新しもの好きな人々に知ってもらうのが目的ではなくメディアを運営している人に知ってもらうきっかけを得るために自分は投稿しています.
実際に記事を公開後にブログなどで紹介頂いたこともあります.
最後に
何が正解かはわかりませんが,僕はこんな理由でこの記事にもリンクを貼っておきますね.
www.kagusearch.com
おやすみなさーい
Jenkins で Ruby on Rails をデプロイ
今回目指す形
Github のmasterブランチにプッシュされた場合にRailsのデプロイと再起動を行う.
Jenkins をインストール
インストールは yum でおk
yum -y install java-1.7.0-openjdk yum install -y java-1.8.0-openjdk-devel wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key yum install -y jenkins
Jenkins と Githubの連携
GitHub plugin のインストール
Jenkinsの管理からプラグインの管理にてインストール(ついでに必要となる ruby, rake, rbenv もインストールしておく)
GitHub側の設定
SSH keyの登録
サーバでSSH keyを作成する.(以下はjenkinsユーザにて行う)
ssh-keygen
ssh configを設定しておく
Host github github.com HostName github.com IdentityFile ~/.ssh/id_git_rsa #ここに自分の鍵のファイル名 User git
公開鍵を GitHub の設定より設定しておきます.
GtiHubをHookするJenkinsのジョブ設定
「Settings」=> 「Server Hooks」=>「 Jenkins (Github plugin)」で「Jenkins Url」に[JenkinsのURL]/github-webhookを設定する.
Jenkinsの起動とジョブの作成
service jenkins start
localhost:8080 で起動するので Nginxで80portに設定する.
接続するとパスワードを求められるので以下のファイルからコピーする.
cat /var/lib/jenkins/secrets/initialAdminPassword
接続できたらジョブを作成から フリースタイル・プロジェクトのビルド を選択する.
ソースコード管理はGitを選択しプロジェクトURLを設定する.(master以外のブランチも選択可能)
ビルド・トリガには GitHub hook trigger for GITScm polling を選択しておく.
ビルド環境では,rbenv build wrapperを選択し Preinstall gem list にて bundler,rake を行う.
ビルドは,シェルを選択し以下のように設定する.
cd /var/www/dev-sample/ git pull bundle install rails db:migrate ps aux | grep unicorn | grep -v grep | awk '{ print "kill -9", $2 }' | sh bundle exec unicorn_rails -c config/unicorn.rb -E production -D
これでmasterブランチにプッシュされれば自動でデプロイが行われる.
Centos7 + Nginx + Ruby on Rails をVPSにセットアップ その2
独自ドメイン化 SSL + Http2化
ConoHa + お名前.com に独自ドメイン設定
お名前.comで,DNSレコード設定で 登録したいURL Type A で ConoHa の ip を設定する. VPS設定 で IPアドレス の逆引きホスト名に登録したいURLを登録します.
SSL + Http2化
参考文献
SSLは,Let's Encrypt で発行してもらいます.
その為,準備としてNginx を止めます.
systemctl stop nginx
そして ipv6 も無効化しておきます.
ipv6 の ConoHa でポートを閉じておきましょう.
cerbot をインストールして自動設定してもらいます.
メールアドレスを聞かれるので設定するのはそこだけです.
yum install epel-release yum install certbot certbot-auto certonly --standalone -d URL
次に Nginx の設定です. etc/sysctl.conf に設定した.
server{ listen 443 ssl http2; server_name URL; ssl on; ssl_certificate /etc/letsencrypt/live/URL/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/URL/privkey.pem; location / { proxy_pass http://unicorn; } }
あとはこのサイトで HTTP2 をテストすることができます.
HTTP/2 Test | A simple HTTP/2.0 test tool
Capistrano で自動デプロイ
Gemfile に追加
group :development, :test do gem 'capistrano'#, '~> 3.2.1' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-bundler' gem 'capistrano3-unicorn' #Unicornの起動を簡単に行える end
Capistrano の設定
初期テンプレートファイルを作ってくれるコマンドを叩きます.
bundle exec cap install
作られた Capfile に以下を追記します.
# Load DSL and Setup Up Stages require 'capistrano/setup' # Includes default deployment tasks require 'capistrano/deploy' require 'capistrano/setup' require 'capistrano/deploy' # rbenvを使用している場合 require 'capistrano/rbenv' # デプロイ先のサーバで、ユーザディレクトリでrbenvをインストールしている場合 set :rbenv_type, :user set :rbenv_ruby, '2.5.0' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano3/unicorn'
デプロイ設定
共通部分の設定を config/deploy.rb に記述する
lock '3.10.1' set :application, "sample" set :repo_url, "https://GitHub_Personal access tokens:@github.com/GitHub_User/sample.git" set :deploy_to, '/var/www/sample' set :rbenv_ruby, '2.5.0' set :scm, :git set :log_level, :debug set :pty, true set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets} set :default_env, { path: "/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH" } set :keep_releases, 5 after 'deploy:publishing', 'deploy:restart' namespace :deploy do desc 'Restart application' task :restart do invoke 'unicorn:restart' end end
Railsアプリの稼働ディレクトリである/var/www/sampleと設定 config/unicorn/staging.rb
@app_path = '/var/www/sample' working_directory @app_path + "/current" worker_processes 2 preload_app true timeout 30 listen "/tmp/unicorn.sock", :backlog => 64 pid "/var/www/sample/shared/tmp/pids/unicorn.pid" stderr_path "#{@app_path}/log/unicorn.stderr.log" stdout_path "#{@app_path}/log/unicorn.stdout.log" before_fork do |server, worker| ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT']) end before_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.connection.disconnect! end old_pid = "#{server.config[:pid]}.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.establish_connection end end
/config/environments/staging.rbは、production.rbをコピー
cp /config/environments/production.rb /config/environments/staging.rb
/config/deploy/staging.rbに対象のサーバとSSHの設定を記述
set :rails_env, "staging" set :unicorn_rack_env, "staging" role :app, %w{IP:PORT} role :web, %w{IP:PORT} server 'ip', user: 'USER', roles: %w{app web}, port: PORT set :ssh_options, { keys: %w(~/.ssh/SSH_RSA), forward_agent: false, auth_methods: %w(publickey) }
最後にデプロイコマンドです.
bundle exec cap staging deploy
個人開発Webサービスを公開するときにやったことリスト
はじめに
サービス開始時に何をやったかリストアップする機会があったので備忘録としてここにも書いとく 2016年9月15日にリリースしたamazonの家具を寸法と価格から検索できる「家具search|Amazon,楽天,Yahooの家具をサイズ検索!」をリリースしたときに行った作業をです.
一様最高 1 ヶ月 15,000 円ほどの収益を上げていますが,2017年通年では 10万 ほどでした.
ここ最近 Google 先生になぜかインデックス数と検索順位ともにあれな感じにされているので収益が上がらないのが実情です.
サービスを公開するときにやったことリスト
ほぼ基本的な事項のみ
これもやっとけみたいなのあればコメントいただけると助かります.
モンバイルファーストインデックス始まったみたいなのでスマホ用サイトとPC用サイトの情報格差はなくしたほうがいいらしいです.
- サービス公開用サーバのセットアップ
- SEO
- ターゲットキーワードの設定
- 競合サイトのターゲットキーワード調査
- キーワードプランナーを利用したキーワードの検索数調査
- Google サジェストを利用した周辺ワード調査
- url正規化
- http通信はhttps通信にリダイレクト
- トラディショナルスラッシュの設定
- URLの一本化
- Google Bot 用 サイトマップ (sitemap.xml) の作成
- メタタグの設定
- ユーザ向けサイトマップの作成
- 画像の圧縮
- 見出しタグの設定
- HTML,JavaScript,CSS の圧縮
- Search Console の設定
- サイトマップの登録
- robots.txt の登録
- Google Analytics
- コンバージョン設定
- Google Search Console との連携
- ターゲットキーワードの設定
- ランディングページ もしくは help ページの作成
- 利用規約ページの作成
- サイト紹介の作成
- スクリーンショット -サービスの紹介文章
- 紹介動画
- webサイト評価ツールで一定の評価を得る
- 独自ドメインとSSL証明書の設定
- リリースと宣伝開始
ここまでやるとだいたい PageSpeed Insights にて90点くらい取れています.
しかし検索順位などはメタメタな感じです.
誰か理由を教えてほしい...
Centos7 + Nginx + Ruby on Rails をVPSにセットアップ その1
はじめに
自分用の備忘録です.
参考にしたURLを貼っているのでそこも読みつつ進めていってください.
セキュリティの初期設定に関しては以下のチェックシートを参考にしながらやってます.
セキュリティ対策チェックリスト [VPS・CentOS7編] - Qiita
初期設定
yum update
sudo yum -y update
ユーザ作成とsudo許可
$ useradd sampleuser $ passwd sampleuser $ visudo
sampleuserにsudoを許可
sampleuser ALL=(ALL) ALL
sshをprot22から変更
CentOS7でSSHのポート番号を変更する - Qiita
22番ポートは攻撃の対象となるので2222番ポートに変更する.
vi /etc/ssh/sshd_config
sshd_configのProtを 22 から 2222 に変更
- # Port 22 + Port 2222
#sshdを再起動 systemctl restart sshd # ssh.xmlのコピーのssh-2222.xmlを作成 cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-2222.xml vi /etc/firewalld/services/ssh-2222.xml
- <port protocol="tcp" port="22"/> + <port protocol="tcp" port="2222"/>
#2222ポートを許可 firewall-cmd --permanent --add-service=ssh-2222 #ssh(22ポート)のfirewallの許可一覧から削除 firewall-cmd --remove-service=ssh --zone=public --permanent #firewallを再起動 firewall-cmd --reload
作成したユーザに秘密鍵公開鍵認証ログインを設定
ローカルPCにて鍵作成と鍵送信
ssh-keygen cd .ssh mv id_rsa vps_rsa mv id_rsa.pub vps_rsa.pub chmod 0600 vps_rsa vps_rsa.pub #scpで鍵を送信 scp ./vps_rsa.pub sampleuser@ip
リーモートサーバにて鍵のセットアップ
mv vps_rsa.pub .ssh/authorized_keys
ローカルからsshができるか確認[sampleuser@ip ~]$になれば成功している.
ssh -i .ssh/id_rsa.pub sampleuser@ip
ローカルで ssh config もついでに書いておく.
Host vps HostName ip Port 2222 IdentityFile ~/.ssh/vps_rsa User sampleuser
rootユーザへ直接ログインを禁止
rootでのSSHログインを禁止 - SSHサーバーの設定 - Linux入門 - Webkaru
configにてルートログインを禁止
sudo vim /etc/ssh/sshd_config
- PermitRootLogin yes + PermitRootLogin no # sampleuser だけ ssh を許可 + AllowUsers sampleuser
sshd を再起動
sudo systemctl restart sshd
パスワードログインを禁止
[CentOS]sshのパスワード認証方式を無効にする | ごった煮 - tips about programming and building a server
よりセキュア―な秘密鍵認証を利用するのでパスワードログインを禁止.
必ず秘密鍵認証でログインできることを確認してから行ってください.
sudo vim /etc/ssh/sshd_config
- PermitEmptyPasswords yes - PasswordAuthentication yes + PermitEmptyPasswords no + PasswordAuthentication no
sshd を再起動
systemctl restart sshd
Denyhosts 導入
CentOSでSSHへのブルートフォースアタック(総当り)への対策2
何度もログインを試みるIPをブロックする Denyhosts を導入する.
yum install denyhosts systemctl start denyhosts systemctl enable denyhosts
/etc/denyhosts.confの以下のように編集
# ログインが成功した場合にリセットする(たまに失敗したりしていつか入れなくならないように) + RESET_ON_SUCCESS = yes - #RESET_ON_SUCCESS = yes
ログインできなくなった時は以下のファイルから自分のipアドレスを削除しましょう.
/etc/hosts.deny /var/lib/denyhosts/hosts /var/lib/denyhosts/hosts-restricted /var/lib/denyhosts/hosts-root /var/lib/denyhosts/hosts-valid /var/lib/denyhosts/users-hosts
Nginxセットアップ
パッケージのみで CentOS の Nginx を HTTP/2 対応にする - Qiita
インストール・起動・デフォルトで再起動設定
yum -y install epel-release yum -y install nginx systemctl enable nginx systemctl start nginx systemctl status nginx.service
http、httpsをfirewallの許可一覧に追加
最後のfirewall のstatsの public に http、https が追加されていれば完了
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --add-service=https firewall-cmd --reload firewall-cmd --list-all-zones
Nginx セキュリティの設定
ここを見ながら設定していきました.
nginx/Railsのセキュリティ対策メモ - Qiita
ここから設定する項目の意味はここに載っているので読んでおきましょう.
Nginxのバージョン番号を返さない
まずバージョン依存の虚弱性をつかれないようにNginxのバージョン情報などをレスポンスとして返さないようにする. /etc/nginx/niginx.confに以下を追加
http{ # Nginxのバージョン番号をエラーページとServer headerに含まれないようにします server_tokens off;
X-XSS-Protection
「X-XSS-Protection」はWebブラウザのクロスサイトスクリプティング(XSS)に対するフィルタ機能をを強制的に有効にするというものです.
/etc/nginx/conf.d/default.conf
#XSS対策 add_header X-XSS-Protection "1; mode=block";
ちなみにRailsを利用する場合にはデフォルトで設定されるので設定不要
Content-Security-Policy
Content-Security-Policy (以下CSP) を利用する場合、実行を許可するスクリプトの正しいドメインをブラウザに向けて指定することにより、XSS の発生する箇所を削減・根絶することができます。CSP をサポートするブラウザは、サーバから指定されたホワイトリストに載っているドメインのスクリプトのみ実行し、他のスクリプトはすべて無視します。
Content Security Policy (CSP) - HTTP | MDN
/etc/nginx/conf.d/default.conf に以下を追記
add_header Content-Security-Policy "default-src 'self'";
Strict-Transport-Security
通常http通信をhttps通信にリダイレクトすると思います.この時ユーザ側は一旦http通信を行ってしまうので中間者攻撃を受けてしまうリスクが生じます.
Strict-Transport-Securityを利用することでWeb サイトはブラウザに対して、そのサイトでは HTTP を使用せず、代わりに HTTPS へ置き換えてアクセスすることを試みるように伝達することが可能になります.
HTTP Strict Transport Security - Web セキュリティ | MDN
/etc/nginx/conf.d/default.conf に以下を追記
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
X-Frame-Options(クリックジャッキング対策)
クリックジャッキング対応として、自身と生成元が同じフレーム内に限りページを表示する設定をします.
/etc/nginx/conf.d/default.conf に以下を追記
add_header X-Frame-Options SAMEORIGIN;
X-Content-Type-Options
サーバーが応答ヘッダー "X-Content-Type-Options: nosniff" を送信する場合、script 要素と styleSheet 要素は、誤った MIME タイプでの応答を拒否します。これは、MIME タイプの問題を悪用した攻撃を防ぐためのセキュリティ機能です。 MIME タイプのセキュリティ リスクの軽減 (Windows)
/etc/nginx/conf.d/default.conf
add_header X-Content-Type-Options nosniff;
設定を反映
Nginx を再起動して Welcame to Nginx が表示されれば完了.
systemctl restart nginx
Ruby on Rails のセットアップ
依存パッケージインストール
yum install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel git
rbenvインストール
git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile echo 'eval "$(rbenv init -)"' >> /etc/profile
ruby-buildインストール
git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
Ruby install
お手元のバージョンをお使いください.
インストールとバージョンを指定
rbenv install -v 2.5.0 rbenv global 2.5.0
Ruby on Rails install
gem update --system gem install --no-ri --no-rdoc rails gem install bundler rbenv rehash
Rails アプリの作成
Railsアプリを作成して / にアプセスすると hoge を表示する.
rails new sample cd sample rails g controller index vim app/view/index/index.html.erb # hogeを表示する vim config/routes.rb # root :to => 'web#index'
Unicorn セットアップ
Nginx + Unicorn + Rails - Qiita
Gemfile に unicorn を追加
- gem 'puma' + gem 'uncorn'
bundle install
uncornの設定ファイルを以下のように作成する. /config/unicron.rb
File.expand_path: https://ruby-doc.org/core-2.2.0/File.html#method-c-expand_path rails_root = File.expand_path('../../', __FILE__) worker_processes 2 working_directory rails_root listen "#{rails_root}/tmp/unicorn.sock" pid "#{rails_root}/tmp/unicorn.pid" stderr_path "#{rails_root}/log/unicorn_error.log" stdout_path "#{rails_root}/log/unicorn.log"
デーモン化起動
unicorn_rails -c config/unicorn.rb -E development -D
停止
ps ax|grep unicorn|grep -v grep kill 番号
Nginx と Unicorn を接続
defaultを直接いじる前にバックアップはとっておきましょう.
/etc/nginx/conf.d/default.conf
upstream unicorn { server unix:/Rails_root_path/tmp/unicorn.sock; } server { listen 80; server_name localhost; add_header Content-Security-Policy "default-src 'self'"; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; location / { proxy_pass http://unicorn; } }
Nginxリスタート
systemctl restart nginx
これで hoge が表示されれば設定は完了です.
プチビジネス月次レポート 2017年5月号
はじめに
今回の1ヶ月レポート対象は、2016年9月15日にリリースしたamazonの家具を寸法と価格から検索できる「家具search|Amazon,楽天,Yahooの家具をサイズ検索!」です。
学生の内にサービス立ち上げ経験を得たくてプチビジネスとして初めた。 作るのは非常に楽しいのですが冷静に分析する機会を作らないとなかなか難しいので、分析を行う。理由とその時何を考えていたかのログをとる意味で書いていくつもりです。 学生の内にサービス立ち上げや運営してみたい人の参考になればいいなー
サービスの目標
去年は、1 ヶ月運営費用が 12 $ 位なので 1.5万円 を 3~4 月に回収すること。これは達成しました。具体的には、2月 11,012円、3月 9,597円となりました。
今年度の目標は去年の倍額を稼ぐことです。つまり、20,609円の倍額である41,218円を2ヶ月で稼ぐことです。
注意事項
Google analyticsの詳細なデータの開示が利用規約違反にあたるので四捨五入した値を公開することにします。 Amazon アソシエイトは大丈夫そうなので生の値で公開します。 なので全て約〇〇だと思って見ていただければ幸いです。
5月
行ったこと
- サイトのリニューアル
- 楽天の追加
- Yahooショッピングの追加
データ・ユーザ分析
- Google Analytics
- 前月→今月
- UU:614→520↓
- PV:2272→2474↑
- 直帰率:47.96%→57.45%↓
- ページ/セッション:2.99→3.35↑
全体として好調に推移している。
mobileの割合が大きく伸びた。tabletが増えた理由はなぞ。
集客
- Direct:450→298↓
- Organic Search:250→216↓
- Referral:35→160↑
- Social:16→58↑
Amazon アソシエイト
- amazon商品ページ移動数:808→735↑
- 注文数:78→42↑
- 売上:約23,0943円 → 約230,743円↑
- 利益:約7,447円 → 約 6893円↑
失敗と反省
web記事での紹介からアクセス数はある程度稼げていますが一時的なものです。家具サイズ検索など1位だった検索順位を取り戻さないと収益は6月以降は収益性が下がっていくことは明白です。
Amazon,楽天,yahooショッピングの家具サイズ検索サイト「家具search」を作った
作成したサイト概要
一言で言えば,Amazon,楽天,yahooショッピングで家具を幅、奥行き、高さ、価格の範囲指定してサイズ検索できるサービスです。
実物はこちら→家具search
家具search | Amazon,楽天,Yahooの家具をサイズから検索できるサービス
きっかけ
棚をECサイトで探す場合、「棚 150」とかで検索すると思います。
しかし検索結果にはサイズは表記されません。
そのため幅150cmと思ってクリックすると違った大きさのものだったりするのが非常にイライラされられます。
他にも高さや奥行きなどの要素も含んだ検索はAmazonでは現状不可能です。 またmmとcmと表記が統一されておらずいい感じに検索できません。
しかもAmazonならカテゴリを選択しないと価格の絞込さえできません。
そこで家具を幅、奥行き、高さ、価格を範囲指定して検索できる家具サイズ検索サイトを作ろうと思いました。
使い方
トップページや各ページにあるこのフォームに幅,高さ,奥行き,価格が 最小値 < 最大値 になるようにしてください。
aはアマゾン、YはYahooショッピング、Rは楽天を意味します。下の画像の場合は値段が amazon < Yahooショッピング < 楽天 であることを意味します。
最後に
皆様にぴったりサイズの家具との出会いがありますように!
twitter、fasebook、はてなブックマークなんかのソーシャルシェアをして頂けると助かります。
利用した感想ご意見などは以下のフォームで送っていただけると幸いです。
家具searchに関して