EC2でRedmine構築
急遽EC2でRedmineを構築するということになって検証で立ち上げ作業をしていて
というよりDockerFile使うとかBitnami使えばもっと早くできるじゃないかという
ツッコミはあるかもしれませんが、取りあえず一から構築してみようということで
万が一同じ作業をするときになったら困るので備忘録としてメモ
Ubuntu+Nginx+Unicorn構成で動かしています。
というよりDockerFile使うとかBitnami使えばもっと早くできるじゃないかという
ツッコミはあるかもしれませんが、取りあえず一から構築してみようということで
万が一同じ作業をするときになったら困るので備忘録としてメモ
Ubuntu+Nginx+Unicorn構成で動かしています。
日次バックアップはAMIでイメージを取る方法で設定(今検証中ですが、、、)
課題としてはデータベース部分、EC2のストレージ8GBなので少し心配
まぁ一杯になりそうならRDSに移そう。でその時にログ類も考えよう
◆大枠の手順は以下の通り
- Ubuntu初期設定
- nginx、データベース設定
- Redmineインストール
- Ruby関連インストール
- プラグイン類導入
- EC2日次バックアップ設定(日次でAMIイメージをバックアップする)
- 事後作業
◆参考にしたサイト(ほぼコピペ(笑)、先人の皆様ありがとうございます。)
1.OS設定参照
2.Redmine設定関連参照
- https://qiita.com/bikun_bikun/items/30951573fc900d78d0c9
- https://qiita.com/suesan/items/3baeb26e09c379a9bb2b
- https://qiita.com/godai0505/items/44d12ef0d52b2dc9d560
- https://symfoware.blog.fc2.com/blog-entry-2074.html
- http://zaka-think.com/linux/ubuntu/redmine/
- https://www.saintsouth.net/blog/setup-redmine-with-nginx-mariadb-on-centos7/
- http://marimomemo.hatenablog.jp/entry/2017/03/04/191921
- http://blog.redmine.jp/articles/3_4/install/ubuntu/
- https://qiita.com/eighty8/items/82063beab09ab9e41692
- http://blog.redmine.jp/articles/3_4/install/ubuntu/
- https://www.redmineup.com/pages/ja/help/installation/installing-redmine-on-ubuntu-16-04
- https://qiita.com/ozy-san/items/5c5daf68af501ef8c62a
- https://qiita.com/0ta2/items/d20e81b9395a654f6e55
3.unicorn関連参照
- https://www.techbox.jp/entry/nginx-unicorn
- http://www.torutk.com/projects/swe/wiki/Redmine%E3%82%92CentOS_7%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%83%BCUnicorn%E3%81%A8Nginx%E7%B7%A8#Unicorn%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E5%8C%96%E8%B5%B7%E5%8B%95%E7%B5%82%E4%BA%86%E5%88%B6%E5%BE%A1
4.EC2関連参照
5.Redmineプラグイン関連参照
- https://curecode.jp/tech/redmine-attachment-files-on-s3/
- http://netazone.net/archives/2080
- https://curecode.jp/tech/redmine-attached-thumbnails-into-amazon-s3/
- http://one-person.hatenablog.jp/entry/2017/03/24/215049
- https://qiita.com/y_hokkey/items/2b04668c52bc9504174d
- https://github.com/onozaty/redmine-view-customize
6.EC2バックアップ関連参照
◆手順詳細
1.初期設定
2.nginx、PostgreSQLインストール
4.Ruby関連インストール
5.プラグイン類導入
6.EC2日次バックアップ設定(日次でAMIイメージをバックアップする)
7.事後作業
## ホスト名設定 $ sudo hostnamectl set-hostname redmine_host ## アップデート $ sudo apt-get -y update $ sudo apt-get -y upgrade ## sshセキュア強化 $ sudo vi /etc/ssh/sshd_config + PermitRootLogin no $ sudo service ssh restart ## 日本語化 $ sudo apt-get -y install language-pack-ja $ sudo update-locale LANG=ja_JP.UTF-8 $ sudo apt-get -y install binutils $ strings /etc/default/locale $ sudo apt-get -y install manpages-ja manpages-ja-dev ## timeZone設定 $ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime $ sudo dpkg-reconfigure --frontend noninteractive tzdata $ strings /etc/localtime ## ntp $ sudo apt-get -y install ntp $ ntpq -p $ date ## chkrootkitインストール $ sudo apt-get -y install chkrootkit $ sudo chkrootkit | grep INFECTED ## デフォルトエディタ変更 $ sudo update-alternatives --config editor $ sudo apt-get -y remove nano ## 追加リポジトリ $ sudo apt-get -y install apt-file ## ウイルス検知ソフトインストール $ sudo apt -y install clamav $ sudo sed -i -e "s/^NotifyClamd/#NotifyClamd/g" /etc/clamav/freshclam.conf $ sudo systemctl start clamav-freshclam $ sudo clamscan --infected --remove --recursive /home $ sudo vi /etc/cron.daily/clamav #以下ファイル内容 -------------------------------------------- #!/bin/bash PATH=/usr/bin:/bin # スキャン除外設定 excludelist=/root/clamscan.exclude if [ -s $excludelist ]; then for i in `cat $excludelist` do if [ $(echo "$i"|grep \/$) ]; then i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d` excludeopt="${excludeopt} --exclude-dir=^$i" else excludeopt="${excludeopt} --exclude=^$i" fi done fi # ウイルススキャン CLAMSCANTMP=`mktemp` clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1 [ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \ # レポートのメール送信 grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root rm -f $CLAMSCANTMP -------------------------------------------- $ sudo chmod 755 /etc/cron.daily/clamav ## Fail2Banインストール $ sudo apt-get -y install fail2ban ## logwatchインストール $ sudo apt-get -y install logwatch ## メール送信設定 $ sudo apt-get -y install postfix $ sudo apt-get -y install sasl2-bin $ sudo apt-get -y install mailutils $ sudo vi /etc/postfix/main.cf #以下ファイル内容 -------------------------------------------- smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_tls_security_level = encrypt header_size_limit = 4096000 relayhost = [smtp.sendgrid.net]:587 -------------------------------------------- $ sudo vi /etc/postfix/sasl_passwd #以下ファイル内容 -------------------------------------------- [smtp.sendgrid.net]:587 sendgridID:password -------------------------------------------- $ sudo chmod 600 /etc/postfix/sasl_passwd $ sudo postmap hash:/etc/postfix/sasl_passwd $ sudo systemctl restart postfix $ echo "test" | mail -s "test" mymail@myhost
2.nginx、PostgreSQLインストール
## nginxインストール $ sudo apt-get -y install nginx ## SSL証明書作成 $ cd /etc/nginx/ $ sudo mkdir ssl $ cd ssl $ sudo openssl genrsa -aes128 -out server.key 2048 Enter pass phrase for server.key:password Verifying - Enter pass phrase for server.key:password $ sudo openssl rsa -in server.key -out server.key Enter pass phrase for server.key:password $ sudo openssl req -new -days 3650 -key server.key -out server.csr $ sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 36500 ## nginx設定 $ sudo vi /etc/nginx/nginx.conf #以下ファイル内容(server_tokens off追記) -------------------------------------------- http { ## # Basic Settings ## server_tokens off; -------------------------------------------- $ sudo vi /etc/nginx/conf.d/local.conf #以下ファイル内容 -------------------------------------------- upstream unicorn-unix-domain-socket { server unix:/var/www/redmine/tmp/sockets/unicorn.sock fail_timeout=0; } server { listen 80; # httpへのアクセスをhttpsへリダイレクトする listen [::]:80; server_name 127.0.0.1; if ($http_x_forwarded_proto != https) { return 301 https://$host$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; ssl on; server_name 127.0.0.1; index index.html index.htm index.php; ssl_stapling on; ssl_stapling_verify on; ssl_session_timeout 5m; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains" always; location / { root /var/www/redmine; access_log /var/log/nginx/redmine_access.log; error_log /var/log/nginx/redmine_error.log; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://unicorn-unix-domain-socket; } } -------------------------------------------- ## PostgresSQLインストール $ sudo apt-get update $ sudo apt-get -y install postgresql $ sudo systemctl enable postgresql $ sudo systemctl list-unit-files | grep postgres $ sudo apt-get -y install libpq-dev3.Redmineインストール
## PostgresSQLインストール
$ sudo apt-get update
$ sudo apt-get -y install postgresql
$ sudo systemctl enable postgresql
$ sudo systemctl list-unit-files | grep postgres
$ sudo apt-get -y install libpq-dev
## Redmineのデータベース作成
$ sudo -u postgres createuser -P redmine
Enter password for new role: password
Enter it again: password
$ sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
$ psql -U redmine -h localhost -d redmine
## 必要ツールインストール
$ sudo apt-get install -y build-essential
$ sudo apt-get -y install git build-essential libssl-dev
$ sudo apt-get -y install zlib1g-dev libxslt1-dev libreadline-dev libcurl4-openssl-dev
$ sudo apt-get -y install imagemagick libmagick++-dev
## Redmine設定
$ cd /var/www
$ sudo wget http://www.redmine.org/releases/redmine-3.4.6.tar.gz
$ sudo tar -xvzf redmine-3.4.6.tar.gz
$ sudo rm -rf redmine-3.4.6.tar.gz
$ sudo mv redmine-3.4.6 redmine
$ cd redmine/config/
$ vi database.yml
#以下ファイル内容
--------------------------------------------
default: &default
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "password"
encoding: utf8
pool: 5
development:
<<: --------------------------------------------="" code="" database:="" default="" production:="" redmine="" test:="">
$vi configuration.yml
#以下ファイル内容
--------------------------------------------
default:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.sendgrid.net"
port: 587
domain: "smtp.sendgrid.net"
authentication: :login
user_name: "name"
password: "password"
--------------------------------------------
4.Ruby関連インストール
## rbenvインストール $ cd $ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ exec $SHELL -l #$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc #$ echo 'alias sudo="sudo env PATH=$PATH"' >> ~/.bashrc #$ source ~/.bashrc $ rbenv install $(rbenv install -l | grep -v - | tail -1) ~10分程度かかる~ $ rbenv versions $ rbenv global 2.5.1 $ rbenv versions $ ruby -v ## 追加パッケージインストール $ cd /var/www/redmine $ vi Gemfile #以下ファイル内容(追記) -------------------------------------------- #Added gem "unicorn" -------------------------------------------- $ gem install rubygems-update $ update_rubygems $ gem install bundler --no-ri --no-rdoc $ gem install daemon_controller rack passenger --no-rdoc --no-ri $ bundle update $ gem install rbenv-rehash $ bundle install --path vendor/bundler --without development test $ bundle exec rake generate_secret_token $ bundle exec rake db:migrate RAILS_ENV=production ## unicorn設定 $ vi config/unicorn.rb #以下ファイル内容 -------------------------------------------- # Railsのルートパスを求める。(RAILS_ROOT/config/unicorn.rbに配置している場合。) rails_root = File.expand_path('../../', __FILE__) # RAILS_ENVを求める。(RAILS_ENV毎に挙動を変更したい場合に使用。今回は使用しません。) # rails_env = ENV['RAILS_ENV'] || "development" # 追記に記載してます。入れた方がいいです。 ENV['BUNDLE_GEMFILE'] = rails_root + "/Gemfile" # Unicornは複数のワーカーで起動するのでワーカー数を定義 # サーバーのメモリなどによって変更すること。 worker_processes 2 # 指定しなくても良い。 # Unicornの起動コマンドを実行するディレクトリを指定します。 # (記載しておけば他のディレクトリでこのファイルを叩けなくなる。) working_directory rails_root # 接続タイムアウト時間 timeout 30 # Unicornのエラーログと通常ログの位置を指定。 stderr_path File.expand_path('../../log/unicorn_stderr.log', __FILE__) stdout_path File.expand_path('../../log/unicorn_stdout.log', __FILE__) # Nginxで使用する場合は以下の設定を行う(※このパスをNginx側で設定したパスと揃えておく必要があります)。 listen File.expand_path('../../tmp/sockets/unicorn.sock', __FILE__) # とりあえず起動して動作確認をしたい場合は以下の設定を行う。 #listen 8080 # ※「backlog」や「tcp_nopush」の設定もあるけど、よくわかって無い。 # プロセスの停止などに必要なPIDファイルの保存先を指定。 pid File.expand_path('../../tmp/pids/unicorn.pid', __FILE__) # 基本的には`true`を指定する。Unicornの再起動時にダウンタイムなしで再起動が行われる。 preload_app true # 効果なしとの記事を見たので、コメントアウト。 # GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true # USR2シグナルを受けると古いプロセスを止める。 # 後述するが、記述しておくとNginxと連携する時に良いことがある。 before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end -------------------------------------------- ## 動作検証 $ bundle exec unicorn_rails -c config/unicorn.rb -l 3000 -E production & ## unicorn起動コマンド準備 $ bundle exec rails generate task unicorn $ vi lib/tasks/unicorn.rake #以下ファイル内容 -------------------------------------------- namespace :unicorn do desc "Start unicorn for production env." task(:start) do config_path = "/var/www/redmine/config/unicorn.rb" sh "unicorn_rails -c #{config_path} -E production -D" end desc "Stop unicorn" task(:stop) { unicorn_signal :QUIT } desc "Restart unicorn with USR2" task(:restart) { unicorn_signal :USR2 } desc "Increment number of worker processes" task(:increment) { unicorn_signal :TTIN } desc "Decrement number of worker processes" task(:decrement) { unicorn_signal :TTOU } desc "Unicorn pstree (depends on pstree command)" task(:pstree) do sh "pstree '#{unicorn_pid}'" end def unicorn_signal signal Process.kill signal, unicorn_pid end def unicorn_pid begin File.read("/var/www/redmine/tmp/pids/unicorn.pid").to_i rescue Errno::ENOENT raise "Unicorn doesn't seem to be running" end end end -------------------------------------------- $ bundle exec rake unicorn:start $ bundle exec rake unicorn:stop ## Redmine自動起動設定 $ sudo vi /etc/init.d/unicorn #以下ファイル内容 -------------------------------------------- #!/bin/sh # chkconfig: 345 90 20 # description: Redmine # processname: unicorn_redmine RAILS_ENV=production SERVICE=redmine USER=ubuntu RAILS_ROOT_DIR="/var/www/redmine" PID=${RAILS_ROOT_DIR}/tmp/pids/unicorn.pid UNICORN_CONF=${RAILS_ROOT_DIR}/config/unicorn.rb UNICORN_ALIVE=`ps aux|grep '${UNICORN_CONF}'|grep -v grep|wc -l` start() { if [ $UNICORN_ALIVE = 0 ]; then rm -f $PID fi if [ -e ${PID} ]; then echo "${SERVICE} already started" exit 1 fi echo "start ${SERVICE}" sudo su -l ${USER} -c "cd ${RAILS_ROOT_DIR} && bundle exec unicorn_rails -c ${UNICORN_CONF} -D" } stop() { if [ ! -e ${PID} ]; then echo "${SERVICE} not started" exit 1 fi echo "stop ${SERVICE}" kill -QUIT `cat ${PID}` } force_stop() { if [ ! -e ${PID} ]; then echo "${SERVICE} not started" exit 1 fi echo "stop ${SERVICE}" kill -INT `cat ${PID}` } reload() { if [ ! -e ${PID} ]; then echo "${SERVICE} not started" start exit 0 fi echo "reload ${SERVICE}" kill -USR2 `cat ${PID}` } restart() { if [ -e ${PID} ]; then stop sleep 3 fi start } case "$1" in start) start ;; stop) stop ;; force-stop) force_stop ;; reload) reload ;; restart) restart ;; *) echo "Syntax Error: release [start|stop|force-stop|reload|restart]" ;; esac -------------------------------------------- $ sudo chmod 755 /etc/init.d/unicorn ## 自動起動設定 $sudo vi /lib/systemd/system/unicorn.service #以下ファイル内容 -------------------------------------------- [Unit] Description=Unicorn Server After=postgresql.service [Service] WorkingDirectory=/var/www/redmine Environment=RAILS_ENV=production SyslogIdentifier=unicorn PIDFile=/var/www/redmine/tmp/pids/unicorn.pid ExecStart=/home/ubuntu/.rbenv/shims/bundle exec "unicorn_rails -c config/unicorn.rb -E production -D" ExecStop=/usr/bin/kill -QUIT $MAINPID ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target -------------------------------------------- $ sudo chmod 755 /lib/systemd/system/unicorn.service $ sudo ln -s /lib/systemd/system/unicorn.service /etc/systemd/system/multi-user.target.wants/unicorn.service $ sudo systemctl start unicorn.service $ sudo systemctl stop unicorn.service $ sudo systemctl enabled unicorn.service ~エラーが出るが無視~ $ sudo reboot Redmineが起動していることを確認 ## 添付ファイルS3保管プラグイン導入 $ cd /var/www/redmine $ git clone git://github.com/ka8725/redmine_s3.git plugins/redmine_s3 $ cp plugins/redmine_s3/config/s3.yml.example config/s3.yml S3にバケット作成 APIからアクセス可能なS3Fullアクセス権限のユーザを作成する。 $ vi config/s3.yml #以下ファイル内容 -------------------------------------------- production: access_key_id: KEY secret_access_key: KEY bucket: NAME folder: files endpoint: s3.amazonaws.com secure: true private: true expires: proxy: false thumb_folder: -------------------------------------------- $ bundle install --without development test
5.プラグイン類導入
## テーマ修正(ヘルプで日本語使用可能に) ## チケットのテンプレート,自分の担当チケット件数表示,クリップボード,CSVインポート ## アバター,EXCEL エクスポート,wiki拡張,工数管理,画面カスタマイズ ## Redmineログデータダウンロード,ナレッジベース $ git clone https://github.com/farend/redmine_theme_farend_basic.git public/themes/farend_basic $ git clone https://github.com/akiko-pusu/redmine_issue_templates.git plugins/redmine_issue_templates $ git clone https://github.com/peclik/clipboard_image_paste.git plugins/clipboard_image_paste $ git clone https://github.com/agileware-jp/redmine_importer.git plugins/redmine_importer $ git clone https://github.com/akiko-pusu/redmine_issue_badge.git plugins/redmine_issue_badge $ git clone https://github.com/ncoders/redmine_local_avatars.git plugins/redmine_local_avatars $ git clone https://github.com/two-pack/redmine_xlsx_format_issue_exporter.git plugins/redmine_xlsx_format_issue_exporter $ git clone https://github.com/haru/redmine_wiki_extensions.git plugins/redmine_wiki_extensions $ git clone https://github.com/momibun926/redmine_issue_evm plugins/redmine_issue_evm $ git clone https://github.com/tkusukawa/redmine_work_time.git plugins/redmine_work_time $ git clone https://github.com/onozaty/redmine-view-customize.git plugins/view_customize $ git clone https://github.com/haru/redmine_logs.git plugins/redmine_logs $ git clone https://github.com/alexbevi/redmine_knowledgebase.git plugins/redmine_knowledgebase $ bundle install $ bundle exec rake redmine:plugins:migrate RAILS_ENV=production ## ガントチャート ~FREE版ダウンロード~ https://www.easyredmine.com/redmine-gantt-plugin $ sudo apt-get -y install unzip $ unzip easy_gunt.zip $ mv easy_gantt plugins/ $ bundle install $ bundle exec rake db:migrate NAME=easy_gantt RAILS_ENV=production $ bundle exec rake redmine:plugins NAME=easy_gantt RAILS_ENV=production ## ガントチャート祝日設定 ~Redmineにて設定~ [管理]→[View customize]→[New view customize ] Path pattern: /projects/.*/easy_gantt Type: JavaScript Code: // 休日をガントチャートにプロット window.ysy = { settings: { holidays: [ // 2018年の日本の祝日 "2018-01-03", "2018-01-08", "2018-02-12", "2018-03-21", "2018-04-30", "2018-07-16", "2018-09-17", "2018-09-24", "2018-10-08", "2018-11-23", "2018-12-24", "2019-01-01", "2019-01-02", "2019-01-03" ]}}; ~~~~~~~~~~~ ## Redmineログローテート設定 $ sudo vi /etc/logrotate.d/redmine #以下ファイル内容 -------------------------------------------- /var/www/redmine/log/*log{ daily missingok rotate 14 notifempty copytruncate compress } -------------------------------------------- $ sudo logrotate -dv /etc/logrotate.d/redmine
6.EC2日次バックアップ設定(日次でAMIイメージをバックアップする)
管理コンソールでEC2FullACCESSユーザを作成 EC2に以下のタグを付ける ~~~ キー:Backup-Generation , 値:2 キー:Name 値:Redmine_Ubuntu_sv ~~~ ## AWS-CLIインストール $ sudo apt-get install python-setuptools $ sudo apt-get -y install python-pip $ sudo pip install awscli ## バックアップスクリプト作成 $ aws configure --profile PROFILE_NAME AWS Access Key ID [None]: KEYID AWS Secret Access Key [None]: ACCESS_KEY Default region name [None]: ap-northeast-1 Default output format [None]: text $ aws ec2 describe-instances --profile PROFILE_NAME --region ap-northeast-1 --instance-ids インスタンスID ~インスタンスの表示内容確認~ $ sudo vi ami_auto_backup.sh #以下ファイル内容 -------------------------------------------- #!/bin/bash export HOME=/root; PROFILE="PROFILE" REGION="ap-northeast-1" ## tmpディレクトリチェック if [ ! -e "/tmp" ];then mkdir -p /tmp fi ## 「Backup-Generation」というタグが付いている、インスタンスID,世代数(Backup-GenerationのValue)を取得 /usr/local/bin/aws ec2 describe-tags --profile ${PROFILE} --region ${REGION} --filters "Name=tag-key,Values=Backup-Generation" | awk '{print $3" "$5}' > /tmp/tmp_get_data while read INSTANCE_ID SEDAI_NO; do if [ ! -z ${INSTANCE_ID} -a ! -z ${SEDAI_NO} ];then ## AMIの数を確認 NOW_AMI_CNT=`/usr/local/bin/aws ec2 describe-images --profile ${PROFILE} --region ${REGION} --filters Name=tag-key,Values=Backup-Type Name=tag-value,Values=auto --query 'sort_by(Images[].{YMD:CreationDate,Name:Name,ImageId:ImageId,DESC:Description},&YMD)' | grep "${INSTANCE_ID}" | wc -l` ## Backup-GenerationのValueと現在のAMI数を比較し、現在のAMI数がBackup-GenerationのValueに達していた場合は、一番古いAMIを削除する if [ ${NOW_AMI_CNT} -eq ${SEDAI_NO} ];then ## 削除対象のAMI_ID取得 DELETE_AMI_ID=`/usr/local/bin/aws ec2 describe-images --profile ${PROFILE} --region ${REGION} --filters Name=tag-key,Values=Backup-Type Name=tag-value,Values=auto --query 'sort_by(Images[].{YMD:CreationDate,Name:Name,ImageId:ImageId,DESC:Description},&YMD)' | grep "${INSTANCE_ID}" | head -1 | awk '{print $4}'` ## AMI登録の解除 /usr/local/bin/aws ec2 deregister-image --profile ${PROFILE} --region ${REGION} --image-id ${DELETE_AMI_ID} ## 削除対象のスナップショットID取得 DELETE_SNAPSHOT_ID=`/usr/local/bin/aws ec2 describe-snapshots --profile ${PROFILE} --region ${REGION} --filters Name=description,Values=*${DELETE_AMI_ID}* --query 'Snapshots[*].{ID:SnapshotId}'` ## スナップショットの削除 /usr/local/bin/aws ec2 delete-snapshot --profile ${PROFILE} --region ${REGION} --snapshot-id ${DELETE_SNAPSHOT_ID} fi ## インスタンス名取得 INSTANCE_NAME=`/usr/local/bin/aws ec2 describe-tags --profile ${PROFILE} --region ${REGION} --filters "Name=tag-key,Values=Name" | grep "${INSTANCE_ID}" | awk '{print $5}'` ## AMI作成 DATE=`date +%Y%m%d%H%M%S` CREATE_AMI_ID=`/usr/local/bin/aws ec2 create-image --profile ${PROFILE} --region ${REGION} --instance-id ${INSTANCE_ID} --name "${INSTANCE_NAME}_${DATE}" --description "Create from ${INSTANCE_ID}" --no-reboot` sleep 2 ## AMIにタグを付けする(例: Name:amazon-linux-test-SV Backup-Type:auto) /usr/local/bin/aws ec2 create-tags --profile ${PROFILE} --region ${REGION} --resources ${CREATE_AMI_ID} --tags Key=Name,Value=${INSTANCE_NAME} Key=Backup-Type,Value=auto fi done < /tmp/tmp_get_data rm -f /tmp/tmp_get_data exit 0 -------------------------------------------- $ sudo chmod 755 ami_auto_backup.sh $ sudo crontab -e # 以下追記 -------------------------------------------- 30 6 * * * ubuntu cd /var/www/redmine ; bundle exec rake redmine:send_reminders RAILS_ENV=production 30 2 * * * ubuntu /bin/sh /home/ubuntu/ami_auto_backup.sh >/dev/null 2>&1 --------------------------------------------
7.事後作業
# ElasticIP割当 $ sudo shutdown -h now ~管理コンソールで停止したインスタンスに対してElasticIPを割当~ ~インスタンスを起動する # nginxのIPアドレスを固定IPに変更し再起動 $ sudo vi /etc/nginx/conf.d/local.conf # 以下修正 2か所 -------------------------------------------- server_name staticIP; -------------------------------------------- $ sudo service nginx restart
とりあえず、動くところまでは確認できてます。
けど「clipboard_image_paste」とS3の相性が悪いみたいで画像をCtrl+Vで貼り付けて
保存しようとするとInternalErrorになるんだよなぁ。
どなたか回避策をご教示いただけると幸いです。
コメント
clipbordimageの不具合解消されたみたいです。