dokuen 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +25 -10
- data/Rakefile +18 -0
- data/bin/dokuen +2 -0
- data/dokuen.gemspec +6 -2
- data/lib/dokuen/cli.rb +6 -4
- data/lib/dokuen/version.rb +3 -0
- metadata +4 -9
- data/bin/install_launchdaemon +0 -6
- data/bin/pre-receive +0 -122
- data/bin/restart_nginx +0 -3
- data/lib/dokuen/config.rb +0 -11
data/README.md
CHANGED
@@ -12,13 +12,28 @@ Dokuen is a "personal app platform". It's the same idea as all of these PaaS and
|
|
12
12
|
|
13
13
|
### Step 1
|
14
14
|
|
15
|
+
WARNING: At the moment Dokuen needs a custom version of Mason. A patch has been accepted but as
|
16
|
+
of now (2012-05-19) there hasn't been a release with this patch. So, install mason:
|
17
|
+
|
18
|
+
```
|
19
|
+
$ git clone https://github.com/peterkeen/mason
|
20
|
+
$ cd mason
|
21
|
+
$ gem build mason.gemspec
|
22
|
+
$ gem install mason-0.0.11.gem
|
23
|
+
```
|
24
|
+
|
25
|
+
Then, install dokuen:
|
15
26
|
```
|
16
27
|
gem install dokuen
|
17
28
|
```
|
18
29
|
|
19
30
|
### Step 2
|
20
31
|
|
21
|
-
Install nginx using homebrew
|
32
|
+
Install nginx using homebrew:
|
33
|
+
|
34
|
+
```
|
35
|
+
$ brew install nginx
|
36
|
+
```
|
22
37
|
|
23
38
|
### Step 3
|
24
39
|
|
@@ -63,15 +78,15 @@ $ open http://<your_host>:12345/
|
|
63
78
|
|
64
79
|
## Available "app" Sub-commands
|
65
80
|
|
66
|
-
* create <name
|
67
|
-
* config <name
|
68
|
-
* set <key>=<value>
|
69
|
-
* delete <key>
|
70
|
-
* restart_app <name
|
71
|
-
* scale <name> <type>=<num
|
72
|
-
* buildpacks
|
73
|
-
* install_buildpack
|
74
|
-
* remove_buildpack
|
81
|
+
* `create <name>`
|
82
|
+
* `config <name>`
|
83
|
+
* `set <key>=<value> ...`
|
84
|
+
* `delete <key> ...`
|
85
|
+
* `restart_app <name>`
|
86
|
+
* `scale <name> <type>=<num>`
|
87
|
+
* `buildpacks`
|
88
|
+
* `install_buildpack <url>`
|
89
|
+
* `remove_buildpack <name>`
|
75
90
|
|
76
91
|
## DNS Setup
|
77
92
|
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
2
|
+
require "dokuen/version"
|
3
|
+
require 'rake'
|
4
|
+
|
5
|
+
def sys(cmd)
|
6
|
+
system(cmd) or raise "Error running #{cmd}"
|
7
|
+
end
|
8
|
+
|
9
|
+
task :build do
|
10
|
+
sys "gem build dokuen.gemspec"
|
11
|
+
end
|
12
|
+
|
13
|
+
task :release => :build do
|
14
|
+
sys "git tag -a -m 'tag version #{Dokuen::VERSION}' v#{Dokuen::VERSION}"
|
15
|
+
sys "git push origin master --tags"
|
16
|
+
sys "git push github master --tags"
|
17
|
+
sys "gem push dokuen-#{Dokuen::VERSION}.gem"
|
18
|
+
end
|
data/bin/dokuen
CHANGED
data/dokuen.gemspec
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
require 'dokuen/version'
|
4
|
+
|
1
5
|
Gem::Specification.new do |s|
|
2
6
|
s.name = 'dokuen'
|
3
|
-
s.version =
|
4
|
-
s.date =
|
7
|
+
s.version = Dokuen::VERSION
|
8
|
+
s.date = `date +%Y-%m-%d`
|
5
9
|
|
6
10
|
s.summary = 'A Personal Application Platform for Macs'
|
7
11
|
s.description = 'Like Heroku but Personal'
|
data/lib/dokuen/cli.rb
CHANGED
@@ -46,7 +46,7 @@ HERE
|
|
46
46
|
'/usr/local/var/dokuen/log',
|
47
47
|
'/usr/local/var/dokuen/nginx',
|
48
48
|
'/usr/local/var/dokuen/build',
|
49
|
-
'/usr/local/var/dokuen/
|
49
|
+
'/usr/local/var/dokuen/release',
|
50
50
|
]
|
51
51
|
FileUtils.mkdir_p(dirs, :mode => 0775)
|
52
52
|
FileUtils.chown(git_username, 'staff', dirs)
|
@@ -161,13 +161,15 @@ HERE
|
|
161
161
|
Dokuen.sys("launchctl load -wF #{destpath}")
|
162
162
|
end
|
163
163
|
|
164
|
-
desc "run_command [APP]
|
165
|
-
|
164
|
+
desc "run_command [APP]", "Run a command in the given app's environment"
|
165
|
+
method_option :command, :aliases => '-C', :desc => "Command to run"
|
166
|
+
def run_command(app="")
|
166
167
|
check_app(app)
|
167
168
|
read_env(app)
|
168
169
|
|
170
|
+
ENV['PATH'] = "/usr/local/bin:#{ENV['PATH']}"
|
169
171
|
Dir.chdir(ENV['DOKUEN_RELEASE_DIR']) do
|
170
|
-
Dokuen.sys("foreman run #{command}")
|
172
|
+
Dokuen.sys("foreman run #{options[:command]}")
|
171
173
|
end
|
172
174
|
end
|
173
175
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dokuen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-20 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -79,24 +79,19 @@ description: Like Heroku but Personal
|
|
79
79
|
email: pete@bugsplat.info
|
80
80
|
executables:
|
81
81
|
- dokuen
|
82
|
-
- install_launchdaemon
|
83
|
-
- pre-receive
|
84
|
-
- restart_nginx
|
85
82
|
extensions: []
|
86
83
|
extra_rdoc_files: []
|
87
84
|
files:
|
88
85
|
- Gemfile
|
89
86
|
- Gemfile.lock
|
90
87
|
- README.md
|
88
|
+
- Rakefile
|
91
89
|
- bin/dokuen
|
92
|
-
- bin/install_launchdaemon
|
93
|
-
- bin/pre-receive
|
94
|
-
- bin/restart_nginx
|
95
90
|
- dokuen.gemspec
|
96
91
|
- lib/dokuen.rb
|
97
92
|
- lib/dokuen/cli.rb
|
98
|
-
- lib/dokuen/config.rb
|
99
93
|
- lib/dokuen/deploy.rb
|
94
|
+
- lib/dokuen/version.rb
|
100
95
|
homepage: https://github.com/peterkeen/dokuen
|
101
96
|
licenses: []
|
102
97
|
post_install_message:
|
data/bin/install_launchdaemon
DELETED
data/bin/pre-receive
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'tmpdir'
|
4
|
-
require 'fileutils'
|
5
|
-
require 'time'
|
6
|
-
|
7
|
-
MASON = "/usr/local/Cellar/ruby/1.9.3-p125/lib/ruby/gems/1.9.1/gems/mason-0.0.11/bin/mason"
|
8
|
-
BASE_BUILD_DIR = '/usr/local/var/dokuen/build'
|
9
|
-
BASE_RELEASE_DIR = '/usr/local/var/dokuen/release'
|
10
|
-
BASE_NGINX_CONF = '/usr/local/var/dokuen/nginx'
|
11
|
-
BASE_ENV_DIR = '/usr/local/var/dokuen/env'
|
12
|
-
|
13
|
-
should_deploy = `git config hooks.deploy`.chomp
|
14
|
-
subdomain = `git config hooks.deploy.subdomain`.chomp
|
15
|
-
port = `git config hooks.deploy.port`.chomp
|
16
|
-
foreman = `git config hooks.deploy.foreman`.chomp
|
17
|
-
buildpack_url = `git config hooks.deploy.buildpack`.chomp
|
18
|
-
after_deploy = `git config hooks.deploy.after`.chomp
|
19
|
-
|
20
|
-
exit(0) if should_deploy != "true"
|
21
|
-
|
22
|
-
def sys(cmd)
|
23
|
-
system(cmd) or exit(1)
|
24
|
-
end
|
25
|
-
|
26
|
-
File.umask(0022)
|
27
|
-
|
28
|
-
git_dir = Dir.getwd
|
29
|
-
cache_dir = "#{BASE_BUILD_DIR}/#{subdomain}"
|
30
|
-
now = Time.now().utc().strftime("%Y%m%dT%H%M%S")
|
31
|
-
release_dir = "#{BASE_RELEASE_DIR}/#{subdomain}/#{now}"
|
32
|
-
env_dir = "#{BASE_ENV_DIR}/#{subdomain}"
|
33
|
-
|
34
|
-
FileUtils.mkdir_p(cache_dir, :mode => 0777)
|
35
|
-
FileUtils.mkdir_p(release_dir, :mode => 0777)
|
36
|
-
FileUtils.mkdir_p(env_dir, :mode => 0777)
|
37
|
-
|
38
|
-
rev = ""
|
39
|
-
STDIN.each do |line|
|
40
|
-
puts line
|
41
|
-
parts = line.split(/\s/)
|
42
|
-
next if parts[2] != "refs/heads/master"
|
43
|
-
rev = parts[1]
|
44
|
-
end
|
45
|
-
|
46
|
-
ENV['GIT_DIR'] = nil
|
47
|
-
ENV['PATH'] = "/usr/local/bin:#{ENV['PATH']}"
|
48
|
-
|
49
|
-
clone_dir = Dir.mktmpdir
|
50
|
-
|
51
|
-
|
52
|
-
sys("git clone #{git_dir} #{clone_dir}")
|
53
|
-
|
54
|
-
Dir.chdir clone_dir
|
55
|
-
|
56
|
-
sys("git reset --hard #{rev}")
|
57
|
-
|
58
|
-
sys("#{MASON} build #{clone_dir} -b #{buildpack_url} -o #{release_dir} -c #{cache_dir}")
|
59
|
-
sys("chmod -R a+r #{release_dir}")
|
60
|
-
sys("find #{release_dir} -type d -exec chmod a+x {} \\;")
|
61
|
-
|
62
|
-
if after_deploy != ""
|
63
|
-
Dir.chdir release_dir
|
64
|
-
sys("envdir #{env_dir} foreman run #{after_deploy}")
|
65
|
-
end
|
66
|
-
|
67
|
-
base_port = port.to_i - 200
|
68
|
-
|
69
|
-
launch_agent_contents = <<HERE
|
70
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
71
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
72
|
-
<plist version="1.0">
|
73
|
-
<dict>
|
74
|
-
<key>KeepAlive</key>
|
75
|
-
<true/>
|
76
|
-
<key>Label</key>
|
77
|
-
<string>info.bugsplat.#{subdomain}</string>
|
78
|
-
<key>ProgramArguments</key>
|
79
|
-
<array>
|
80
|
-
<string>/usr/local/bin/envdir</string>
|
81
|
-
<string>#{BASE_ENV_DIR}/#{subdomain}</string>
|
82
|
-
<string>/usr/local/bin/foreman</string>
|
83
|
-
<string>start</string>
|
84
|
-
<string>-c</string>
|
85
|
-
<string>#{foreman}</string>
|
86
|
-
<string>-f</string>
|
87
|
-
<string>#{release_dir}/Procfile</string>
|
88
|
-
<string>-p</string>
|
89
|
-
<string>#{base_port}</string>
|
90
|
-
</array>
|
91
|
-
<key>RunAtLoad</key>
|
92
|
-
<true/>
|
93
|
-
<key>UserName</key>
|
94
|
-
<string>peter</string>
|
95
|
-
<key>WorkingDirectory</key>
|
96
|
-
<string>#{release_dir}</string>
|
97
|
-
</dict>
|
98
|
-
</plist>
|
99
|
-
HERE
|
100
|
-
|
101
|
-
puts "Installing LaunchDaemon"
|
102
|
-
File.open("#{release_dir}/info.bugsplat.#{subdomain}.plist", "w+") do |file|
|
103
|
-
file.write launch_agent_contents
|
104
|
-
end
|
105
|
-
sys("sudo /usr/local/bin/install_launchdaemon #{release_dir}/info.bugsplat.#{subdomain}.plist")
|
106
|
-
|
107
|
-
puts "Restarting Nginx"
|
108
|
-
File.open("#{BASE_NGINX_CONF}/info.bugsplat.#{subdomain}.conf", "w+") do |file|
|
109
|
-
file.write <<HERE
|
110
|
-
server {
|
111
|
-
server_name #{subdomain}.bugsplat.info;
|
112
|
-
listen 443;
|
113
|
-
ssl on;
|
114
|
-
location / {
|
115
|
-
proxy_pass http://localhost:#{port}/;
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
HERE
|
120
|
-
end
|
121
|
-
|
122
|
-
sys("sudo /usr/local/bin/restart_nginx")
|
data/bin/restart_nginx
DELETED