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-dev
3.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の不具合解消されたみたいです。