ラベル Shell の投稿を表示しています。 すべての投稿を表示
ラベル Shell の投稿を表示しています。 すべての投稿を表示

2019/12/17

rsyncの悲劇 〜本番環境を消し飛ばす前に覚えておきたいこと〜


この記事は本番環境でやらかしちゃった人 Advent Calendar 2019 17日目の記事です。


はじめまして、ダーシノ(@bc_rikko)です。

突然ですが、懺悔します。
私は転職して10ヶ月で2回も本番環境をぶっ飛ばしました。お客様をはじめ、関係各位には多大なるご迷惑をおかけしたことを、ここでお詫び申し上げます。


1回目は2015年11月27日、入社27日目のこと。
gitの設定ミスにより壊れたブランチをmasterにforce pushしてしまい、CIが流れて本番環境が壊れた。原因はpush.defaultなのだが、詳しくはすでに記事を書いているのでそちらを読んでほしい。
2回目は翌年9月1日、入社してちょうど10ヶ月たった日のことだ。
またしても本番環境をぶっ飛ばした。しかも、前回より盛大に……。

タイトルにもあるようにrsyncコマンドが原因だ。
当記事では、この「rsyncの悲劇」を二度と繰り返さないために原因・対策を共有したい。


勘の鋭い方は「rsync」と「本番環境でやらかしちゃった」という組み合わせでオチにお気づきと思いますが、しばらくの間お付き合いください。

2017/07/14

シェルスクリプト内でCentOS6.xと7.xのバージョンを判定する

「入門UNIXシェルプログラミング」を読んだこともあり、シェルスクリプト書きたい熱が高まっていた。そこで手始めにサーバの初期設定を行うシェルスクリプト(↓こんな感じ)を書いていた。
この記事では、CentOSのバージョンをユーザに入力してもらっていたのだが、そこも自動化するためにシェルスクリプト内でバージョンの判定できないかな?と思ったのだが、ちょっと躓いたので共有もかねてまとめる。

2016/08/26

シェルスクリプトでCentOSにPython3の開発環境を自動構築する(pip, pyenv, virtualenv)

フロントエンドエンジニアとして生き残りをはかるため、サーバサイドにも手を伸ばそう!と決め、Python3+falcon+SQLAlchemy+MySQL+gunicorn+NginxでWebAPIサーバを立てようとしていた。
でもサーバのOSにCentOS7を選んでしまったので、python3がはいっていない。

手作業でPython3の開発環境を構築してもいいが、初心者なのでサーバを作って壊してを繰り返す予定だし、最近シェルスクリプトを覚えて「なんでもシェルスクリプトで書きたいマン」になっていたので、自動化するためにスクリプトをつくった。


開発環境は以下を想定している。
  • CentOS 7.2 64bit
  • Python 3.5.1
  • pyenv 1.0.0
  • pyenv-virtualenv 1.0.0
  • pip 7.1.2

2016/08/16

シェルスクリプトでCentOS6.x/7.xの初期設定をする

CentOSでサーバを立てたときに、まず最初に必ずやっておきたい初期設定がある。
その作業の一覧が以下のとおり。
  • パッケージを最新化する
  • 新規ユーザを作成する
  • suコマンドを制限する
    • suコマンドを実行可能なユーザ・グループを限定する
    • 特定のグループ以外suコマンドでrootに昇格できないように制限する
    • パスワード入力なしでsudoコマンドを利用できるようにする
  • ssh接続を制限する
    • rootユーザのsshログインを禁止する
    • sshで公開鍵認証のみ接続を許可する
    • sshでパスワード認証を禁止する
    • 公開鍵をサーバに登録する
  • sshdサービスを再起動する
  • iptablesまたはfirewalldの設定 ←今回はやらない

Webアプリケーションをつくりたくて、WebサーバとAPサーバを用意しようと思ったが、毎回この初期設定をするのが超絶メンドそう...。

ということで、自動化するために初期設定をしてくれるシェルスクリプトをつくったので、その詳細な説明と「なぜ設定が必要なのか」をまとめていく。