Commit 7ace9563 by Tsubasa Namiki

Initial commit

parents
AWS_SSH_KEY=${HOME}/.ssh/vagrant.pem
AWS_SSH_USERNAME="REPLACE_ME"
AWS_ACCESS_KEY_ID="REPLACE_ME"
AWS_SECRET_ACCESS_KEY="REPLACE_ME"
AWS_KEYPAIR_NAME="REPLACE_ME"
AWS_SECURITY_GROUP="REPLACE_ME"
.vagrant
.bundle
.env
vendor/bundle
Gemfile.lock
ssh-config
--color
--format documentation
# A sample Gemfile
source "https://rubygems.org"
gem "rake"
gem "itamae"
gem "serverspec"
gem "parallel"
\ No newline at end of file
Docker Restyaboard
==============================
Restyaboard
http://restya.com/board/
Install
------------------------------
```bash
$ bundle install
$ cp .env.sample .env
$ vim .env
$ vagrant plugin install vagrant-aws
$ vagrant plugin install dotenv
$ vagrant up
```
Provisioning
------------------------------
```bash
$ bundle exec rake provision
```
Spec
------------------------------
```bash
$ bundle exec rake spec
```
require 'rake'
require 'parallel'
require 'rspec/core/rake_task'
task :spec => 'spec:all'
task :provision => 'provision:all'
task :default => [:provision, :spec]
task :test do
`vagrant ssh-config`.scan /^Host (\w+)/ do |result|
host = result[0]
node = host
node = 'default' unless File.exist? "provision/nodes/#{node}.yaml"
p node
end
end
namespace :spec do
targets = []
Dir.glob('./spec/*').each do |dir|
next unless File.directory?(dir)
target = File.basename(dir)
target = "_#{target}" if target == "default"
targets << target
end
task :all => targets
task :default => :all
targets.each do |target|
original_target = target == "_default" ? target[1..-1] : target
desc "Run serverspec tests to #{original_target}"
RSpec::Core::RakeTask.new(target.to_sym) do |t|
ENV['TARGET_HOST'] = original_target
t.pattern = "spec/#{original_target}/*_spec.rb"
end
end
end
namespace :provision do
task :default => :all
task :all do
commands = []
`vagrant ssh-config`.scan /^Host (\w+)/ do |result|
host = result[0]
node = "provision/nodes/#{node}.yaml"
node = "provision/nodes/default.yaml" unless File.exist? node
main = "provision/entrypoint.rb"
commands.push "itamae ssh --vagrant --host #{host} -y #{node} #{main}"
end
Parallel.each commands, in_threads: commands.length do |command|
sh command
end
end
end
# -*- mode: ruby -*-
# vi: set ft=ruby :
Dotenv.load
# change default provider to digital_ocean
ENV['VAGRANT_DEFAULT_PROVIDER'] = "aws"
# Vagrantfile API/syntax version.
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define :docker, primary: true do |docker|
docker.vm.provider :aws do |provider, override|
override.vm.hostname = "docker"
override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
override.vm.box = "aws"
override.ssh.username = ENV['AWS_SSH_USERNAME']
override.ssh.private_key_path = ENV['AWS_SSH_KEY']
override.ssh.pty = true
provider.access_key_id = ENV['AWS_ACCESS_KEY_ID']
provider.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
provider.keypair_name = ENV['AWS_KEYPAIR_NAME']
provider.region = "ap-northeast-1" # Tokyo
provider.availability_zone = "ap-northeast-1c" # Tokyo
provider.ami = "ami-cbf90ecb" # Tokyo Amazon Linux AMI 2015.03 (64-bit)
provider.instance_type = "t2.micro"
provider.instance_ready_timeout = 120
provider.terminate_on_shutdown = false
provider.security_groups = [ENV['AWS_SECURITY_GROUP']]
provider.tags = {"Name" => "docker"}
# synced folder
override.vm.synced_folder ".", "/vagrant", disabled: true
end
end
end
data00restyaboard:
image: busybox
volumes:
- /volumes/data00elasticsearch:/usr/share/elasticsearch/data
- /volumes/data00postgres:/var/lib/postgresql/data
- /volumes/data00restyaboard:/usr/share/nginx/html/media
elasticsearch:
image: elasticsearch
volumes_from:
- data00restyaboard
restart: always
postgres:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: something
volumes_from:
- data00restyaboard
restart: always
restyaboard:
build: restyaboard
links:
- elasticsearch:elasticsearch
- postgres:postgres
ports:
- 5555:80
volumes_from:
- data00restyaboard
restart: always
package "docker" do
action :install
end
execute "install docker-compose" do
command "pip install -U docker-compose"
not_if "test -e /usr/local/bin/docker-compose"
end
service "docker" do
action [:enable, :start]
end
package 'ntp' do
action :install
end
service 'ntpd' do
action [:enable, :start]
end
execute "update yum repo" do
command <<-EOL
yum -y update
date >> /var/log/yum-update
EOL
not_if "test -e /var/log/yum-update"
end
package 'git'
\ No newline at end of file
execute "setting localtime" do
command <<-EOL
mv /etc/localtime /etc/localtime.org
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
EOL
not_if "test -e /etc/localtime.org"
end
file "/etc/sysconfig/clock" do
action :edit
block do |content|
content.gsub! /^ZONE=.*$/, 'ZONE="Asia/Tokyo"'
content.gsub! /^UTC=true$/, ''
end
not_if "grep -e 'Tokyo' /etc/sysconfig/clock"
end
\ No newline at end of file
node["recipes"] = node["recipes"] || []
node["recipes"].each do |recipe|
include_recipe recipe
end
\ No newline at end of file
---
recipes:
- roles/base.rb
- roles/docker.rb
\ No newline at end of file
include_recipe "../cookbooks/ntp/default.rb"
include_recipe "../cookbooks/timezone/default.rb"
include_recipe "../cookbooks/packages/default.rb"
\ No newline at end of file
include_recipe "../cookbooks/docker/default.rb"
execute "add group docker for ec2-user" do
command "gpasswd -a ec2-user docker"
not_if "id ec2-user | grep docker"
end
git "/home/ec2-user/docker-restyaboard" do
repository "https://github.com/namikingsoft/docker-restyaboard.git"
user "ec2-user"
not_if "test -d /home/ec2-user/docker-restyaboard"
end
execute "docker up" do
command "COMPOSE_API_VERSION=1.18 docker-compose build"
cwd "/home/ec2-user/docker-restyaboard"
user "ec2-user"
not_if "docker ps | grep restyaboard"
end
\ No newline at end of file
FROM centos:7
# update package
RUN yum update -y
RUN yum install -y git bzip2 postgresql cronie
# add repository
RUN rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
RUN rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/packages/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
RUN sed -i 's/^enabled=1$/enabled=0/g' /etc/yum.repos.d/epel.repo
RUN rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# install nginx
COPY etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
RUN yum install -y --enablerepo=nginx nginx
# install php6.6
RUN yum install -y --enablerepo=remi-php56\
php php-fpm php-pgsql php-mbstring php-pecl-imagick
RUN sed -i 's/^user = apache$/user = nginx/g' /etc/yum.repos.d/epel.repo
RUN sed -i 's/^group = apache$/group = nginx/g' /etc/yum.repos.d/epel.repo
# install node.js
RUN yum install -y --enablerepo=epel nodejs npm
RUN npm install -g grunt-cli
# install restyaboard
RUN rm -rf /usr/share/nginx/html
RUN git clone https://github.com/RestyaPlatform/board.git\
/usr/share/nginx/html
WORKDIR /usr/share/nginx/html
RUN cp restyaboard.conf /etc/nginx/conf.d
RUN cp -R media /tmp
RUN npm install
RUN grunt build
RUN echo '*/5 * * * * php /usr/share/nginx/htmlserver/php/R/shell/cron.php'\
> /var/spool/cron/root
# volume
VOLUME /usr/share/nginx/html/media
# entry point
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["start"]
#!/bin/bash
set -e
if [ "$1" = 'start' ]; then
# config
sed -i "s/^.*'R_DB_USER'.*$/define('R_DB_USER', 'restya');/g" \
/usr/share/nginx/html/server/php/R/config.inc.php
sed -i "s/^.*'R_DB_PASSWORD'.*$/define('R_DB_PASSWORD', '${POSTGRES_ENV_POSTGRES_PASSWORD}');/g" \
/usr/share/nginx/html/server/php/R/config.inc.php
sed -i "s/^.*'R_DB_HOST'.*$/define('R_DB_HOST', '${POSTGRES_PORT_5432_TCP_ADDR}');/g" \
/usr/share/nginx/html/server/php/R/config.inc.php
sed -i "s/^.*'R_DB_PORT'.*$/define('R_DB_PORT', '${POSTGRES_PORT_5432_TCP_PORT}');/g" \
/usr/share/nginx/html/server/php/R/config.inc.php
# media
cp -R /tmp/media /usr/share/nginx/html
chmod -R go+w /usr/share/nginx/html/media
chmod -R go+w /usr/share/nginx/html/client/img
# init db
export PGHOST=$POSTGRES_PORT_5432_TCP_ADDR
export PGPORT=$POSTGRES_PORT_5432_TCP_PORT
export PGUSER=$POSTGRES_ENV_POSTGRES_USER
export PGPASSWORD=$POSTGRES_ENV_POSTGRES_PASSWORD
set +e
psql -c "CREATE USER restya WITH ENCRYPTED PASSWORD '${PGPASSWORD}'"
psql -c "CREATE DATABASE restyaboard OWNER restya ENCODING 'UTF8'"
if [ "$?" = 0 ]; then
psql -d restyaboard -f /usr/share/nginx/html/sql/restyaboard_with_empty_data.sql
fi
set -e
# service start
crond
php-fpm
nginx
# tail log
exec tail -f /var/log/nginx/access.log /var/log/nginx/error.log
fi
exec "$@"
[nginx]
name=nginx repo
#baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=0
require 'spec_helper'
describe service('docker') do
it { should be_enabled }
it { should be_running }
end
\ No newline at end of file
require 'serverspec'
require 'net/ssh'
require 'tempfile'
set :backend, :ssh
set :request_pty, true
if ENV['ASK_SUDO_PASSWORD']
begin
require 'highline/import'
rescue LoadError
fail "highline is not available. Try installing it."
end
set :sudo_password, ask("Enter sudo password: ") { |q| q.echo = false }
else
set :sudo_password, ENV['SUDO_PASSWORD']
end
host = ENV['TARGET_HOST']
# `vagrant up #{host}`
config = Tempfile.new('', Dir.tmpdir)
config.write(`vagrant ssh-config #{host}`)
config.close
options = Net::SSH::Config.for(host, [config.path])
options[:user] ||= Etc.getlogin
set :host, options[:host_name] || host
set :ssh_options, options
# Disable sudo
# set :disable_sudo, true
# Set environment variables
# set :env, :LANG => 'C', :LC_MESSAGES => 'C'
# Set PATH
# set :path, '/sbin:/usr/local/sbin:$PATH'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment