propro 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/ext/bash/app/monit.sh +51 -0
- data/ext/bash/app/unicorn/monit.sh +23 -0
- data/ext/bash/app/unicorn/nginx.sh +59 -0
- data/ext/bash/app/unicorn.sh +123 -0
- data/ext/bash/app.sh +13 -0
- data/ext/bash/lib/rvm.sh +4 -0
- data/lib/propro/package.rb +4 -0
- data/lib/propro/source.rb +0 -2
- data/lib/propro/version.rb +1 -1
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bb594745fd646bd208e8c8c322c8072b20f2cf1
|
4
|
+
data.tar.gz: a490d0308d9525e9b9581d0921d1dfb011979706
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbb1f187a215514bdd86eb28d36b8bf1054c0524d2de3dff5ceabd86ee730839bbf5f38abc99eeb4db22972c92f9f20846bf7a60551250322cc64e0fc52f2f5c
|
7
|
+
data.tar.gz: 22a73690ae5a412eb51bcd5347ab473460a868ee6634d5e5c29e6b332442f4704bbcc4cf4fe1b4187299b3001f678432504e66acdf32e26feddc6582a7f14029
|
data/README.md
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
function app-monit-install {
|
3
|
+
install-packages monit
|
4
|
+
}
|
5
|
+
|
6
|
+
function app-monit-logrotate {
|
7
|
+
announce "Create logrotate for Monit"
|
8
|
+
tee /etc/logrotate.d/monit <<EOT
|
9
|
+
/var/log/monit.log {
|
10
|
+
rotate 4
|
11
|
+
weekly
|
12
|
+
minsize 1M
|
13
|
+
missingok
|
14
|
+
create 640 root adm
|
15
|
+
notifempty
|
16
|
+
compress
|
17
|
+
delaycompress
|
18
|
+
postrotate
|
19
|
+
invoke-rc.d monit reload > /dev/null
|
20
|
+
endscript
|
21
|
+
}
|
22
|
+
EOT
|
23
|
+
}
|
24
|
+
|
25
|
+
function app-monit-configure {
|
26
|
+
mv /etc/monit/monitrc /etc/monit/monitrc.defaults
|
27
|
+
touch /etc/monit/monitrc
|
28
|
+
tee "/etc/monit/monitrc" << EOT
|
29
|
+
# copy into /etc/monit/monitrc
|
30
|
+
# set ownership to root:root
|
31
|
+
# set permissions to 600
|
32
|
+
set daemon 60
|
33
|
+
set logfile syslog facility log_daemon
|
34
|
+
set mailserver localhost
|
35
|
+
#set alert admin@domain.com
|
36
|
+
|
37
|
+
set httpd port 2812
|
38
|
+
|
39
|
+
allow localhost
|
40
|
+
allow admin:monit
|
41
|
+
|
42
|
+
include /etc/monit/conf.d/*
|
43
|
+
EOT
|
44
|
+
}
|
45
|
+
|
46
|
+
function provision-app-monit {
|
47
|
+
section "Monit"
|
48
|
+
app-monit-install
|
49
|
+
app-monit-configure
|
50
|
+
app-monit-logrotate
|
51
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
# requires nginx.sh
|
3
|
+
# requires app.sh
|
4
|
+
# requires app/unicorn.sh
|
5
|
+
export APP_UNICORN_NGINX_ACCESS_LOG_FILE_NAME="access.log" # @specify
|
6
|
+
export APP_UNICORN_NGINX_ERROR_LOG_FILE_NAME="error.log" # @specify
|
7
|
+
export APP_UNICORN_UPSTREAM_PORT=4000 #@specify
|
8
|
+
APP_UNICORN_NGINX_ACCESS_LOG_FILE="$NGINX_LOG_DIR/$APP_UNICORN_NGINX_ACCESS_LOG_FILE_NAME"
|
9
|
+
APP_UNICORN_NGINX_ERROR_LOG_FILE="$NGINX_LOG_DIR/$APP_UNICORN_NGINX_ERROR_LOG_FILE_NAME"
|
10
|
+
|
11
|
+
function app-unicorn-monit-install {
|
12
|
+
tee "/etc/monit/conf.d/$APP_DOMAIN.conf" <<EOT
|
13
|
+
check process unicorn_app
|
14
|
+
with pidfile $(get-app-unicorn-pid-file)
|
15
|
+
group unicorn
|
16
|
+
start program = "/etc/init.d/unicorn start" with timeout 100 seconds
|
17
|
+
stop program = "/etc/init.d/unicorn stop"
|
18
|
+
EOT
|
19
|
+
}
|
20
|
+
function provision-app-unicorn-monit {
|
21
|
+
announce "installing Unicorn Monit"
|
22
|
+
app-unicorn-monit-install
|
23
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
# requires nginx.sh
|
3
|
+
# requires app.sh
|
4
|
+
# requires app/unicorn.sh
|
5
|
+
export APP_UNICORN_NGINX_ACCESS_LOG_FILE_NAME="access.log" # @specify
|
6
|
+
export APP_UNICORN_NGINX_ERROR_LOG_FILE_NAME="error.log" # @specify
|
7
|
+
export APP_UNICORN_UPSTREAM_PORT=4000 #@specify
|
8
|
+
APP_UNICORN_NGINX_ACCESS_LOG_FILE="$NGINX_LOG_DIR/$APP_UNICORN_NGINX_ACCESS_LOG_FILE_NAME"
|
9
|
+
APP_UNICORN_NGINX_ERROR_LOG_FILE="$NGINX_LOG_DIR/$APP_UNICORN_NGINX_ERROR_LOG_FILE_NAME"
|
10
|
+
|
11
|
+
function provision-app-unicorn-nginx {
|
12
|
+
tee "$NGINX_SITES_DIR/$APP_DOMAIN.conf" <<EOT
|
13
|
+
upstream $(get-app-id) {
|
14
|
+
server 127.0.0.1:$APP_UNICORN_UPSTREAM_PORT fail_timeout=0;
|
15
|
+
}
|
16
|
+
|
17
|
+
# Redirect www.$APP_DOMAIN => $APP_DOMAIN
|
18
|
+
server {
|
19
|
+
listen 80;
|
20
|
+
listen 443 ssl;
|
21
|
+
server_name www.$APP_DOMAIN;
|
22
|
+
return 301 \$scheme://$APP_DOMAIN\$request_uri;
|
23
|
+
}
|
24
|
+
|
25
|
+
server {
|
26
|
+
server_name $APP_DOMAIN;
|
27
|
+
root $(get-app-current-public-dir);
|
28
|
+
|
29
|
+
access_log $APP_UNICORN_NGINX_ACCESS_LOG_FILE combined;
|
30
|
+
error_log $APP_UNICORN_NGINX_ERROR_LOG_FILE notice;
|
31
|
+
|
32
|
+
location ~* \.(eot|ttf|woff)\$ {
|
33
|
+
add_header Access-Control-Allow-Origin *;
|
34
|
+
}
|
35
|
+
|
36
|
+
location ~ ^/(assets)/ {
|
37
|
+
root $(get-app-current-public-dir);
|
38
|
+
expires max;
|
39
|
+
add_header Cache-Control public;
|
40
|
+
gzip_static on;
|
41
|
+
}
|
42
|
+
|
43
|
+
try_files \$uri/index.html \$uri.html \$uri @rack_app;
|
44
|
+
|
45
|
+
location @rack_app {
|
46
|
+
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
47
|
+
proxy_set_header Host \$http_host;
|
48
|
+
proxy_redirect off;
|
49
|
+
proxy_pass http://$(get-app-id);
|
50
|
+
}
|
51
|
+
|
52
|
+
error_page 500 502 503 504 /500.html;
|
53
|
+
|
54
|
+
location = /500.html {
|
55
|
+
root $(get-app-current-public-dir);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
EOT
|
59
|
+
}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
export APP_UNICORN_CONFIG_DIR_RELATIVE="config/"
|
3
|
+
export APP_UNICORN_CONFIG_FILE_NAME="unicorn.rb" # @specify
|
4
|
+
|
5
|
+
APP_UNICORN_CONFIG_FILE_RELATIVE="$APP_UNICORN_CONFIG_DIR_RELATIVE/$APP_UNICORN_CONFIG_FILE_NAME"
|
6
|
+
|
7
|
+
function get-app-unicorn-app-root {
|
8
|
+
echo "$(get-app-current-dir)"
|
9
|
+
}
|
10
|
+
|
11
|
+
function get-app-unicorn-pid-file {
|
12
|
+
echo "$(get-app-unicorn-app-root)/log/unicorn.pid"
|
13
|
+
}
|
14
|
+
|
15
|
+
function app-unicorn-install {
|
16
|
+
announce "Create init.d for Unicorn"
|
17
|
+
|
18
|
+
tee /etc/init.d/unicorn <<EOT
|
19
|
+
#!/bin/sh
|
20
|
+
set -u
|
21
|
+
set -e
|
22
|
+
|
23
|
+
# copy this to /etc/init.d/unicorn
|
24
|
+
# set owner to root:root
|
25
|
+
# chmod a+x
|
26
|
+
# update-rc.d unicorn defaults
|
27
|
+
# adapted from http://gist.github.com/308216
|
28
|
+
APP_ROOT=$(get-app-unicorn-app-root)
|
29
|
+
PID=$(get-app-unicorn-pid-file)
|
30
|
+
OLD_PID="\$PID.oldbin"
|
31
|
+
ENV=$(get-app-env)
|
32
|
+
HOME=$(get-app-home)
|
33
|
+
|
34
|
+
cd \$APP_ROOT || exit 1
|
35
|
+
|
36
|
+
start_unicorn () {
|
37
|
+
su deploy -c "cd \${APP_ROOT} && bin/unicorn -E \${ENV} -D -o 127.0.0.1 -c \${APP_ROOT}/config/unicorn.rb \${APP_ROOT}/config.ru"
|
38
|
+
}
|
39
|
+
|
40
|
+
sig () {
|
41
|
+
test -s "\$PID" && kill -\$1 \`cat \$PID\`
|
42
|
+
}
|
43
|
+
|
44
|
+
oldsig () {
|
45
|
+
test -s \$OLD_PID && kill -\$1 \`cat \$OLD_PID\`
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
case \$1 in
|
50
|
+
start)
|
51
|
+
sig 0 && echo >&2 "Already running" && exit 0
|
52
|
+
start_unicorn
|
53
|
+
;;
|
54
|
+
stop)
|
55
|
+
sig QUIT && exit 0
|
56
|
+
echo >&2 "Not running"
|
57
|
+
;;
|
58
|
+
force-stop)
|
59
|
+
sig TERM && exit 0
|
60
|
+
echo >&2 "Not running"
|
61
|
+
;;
|
62
|
+
restart|reload)
|
63
|
+
sig HUP && echo reloaded OK && exit 0
|
64
|
+
echo >&2 "Couldn't reload, starting unicorn instead"
|
65
|
+
start_unicorn
|
66
|
+
;;
|
67
|
+
upgrade)
|
68
|
+
sig USR2 && exit 0
|
69
|
+
echo >&2 "Couldn't upgrade, starting unicorn instead"
|
70
|
+
start_unicorn
|
71
|
+
;;
|
72
|
+
rotate)
|
73
|
+
sig USR1 && echo rotated logs OK && exit 0
|
74
|
+
echo >&2 "Couldn't rotate logs" && exit 1
|
75
|
+
;;
|
76
|
+
*)
|
77
|
+
echo >&2 "Usage: \$0 <start|stop|restart|upgrade|rotate|force-stop>"
|
78
|
+
exit 1
|
79
|
+
;;
|
80
|
+
esac
|
81
|
+
|
82
|
+
EOT
|
83
|
+
|
84
|
+
chmod +x /etc/init.d/unicorn
|
85
|
+
|
86
|
+
}
|
87
|
+
|
88
|
+
function app-unicorn-sudoers {
|
89
|
+
announce "Adding sudoers entries"
|
90
|
+
for event in start status stop reload restart upgrade rotate; do
|
91
|
+
tee -a /etc/sudoers.d/unicorn.entries <<EOT
|
92
|
+
$APP_USER ALL=NOPASSWD: /etc/init.d/unicorn $event
|
93
|
+
EOT
|
94
|
+
done
|
95
|
+
}
|
96
|
+
|
97
|
+
function app-unicorn-logrotate {
|
98
|
+
announce "Create logrotate for Unicorn"
|
99
|
+
tee /etc/logrotate.d/unicorn <<EOT
|
100
|
+
$(get-app-shared-dir)/log/*.log {
|
101
|
+
daily
|
102
|
+
missingok
|
103
|
+
rotate 90
|
104
|
+
compress
|
105
|
+
delaycompress
|
106
|
+
notifempty
|
107
|
+
dateext
|
108
|
+
create 640 deploy deploy
|
109
|
+
sharedscripts
|
110
|
+
postrotate
|
111
|
+
/etc/init.d/unicorn rotate
|
112
|
+
endscript
|
113
|
+
}
|
114
|
+
EOT
|
115
|
+
}
|
116
|
+
|
117
|
+
function provision-app-unicorn {
|
118
|
+
section "Unicorn"
|
119
|
+
app-unicorn-install
|
120
|
+
app-unicorn-sudoers
|
121
|
+
app-unicorn-logrotate
|
122
|
+
}
|
123
|
+
|
data/ext/bash/app.sh
CHANGED
@@ -5,6 +5,7 @@ export APP_DOMAIN="" # @require
|
|
5
5
|
export APP_AUTHORIZED_GITHUB_USERS="" # @require
|
6
6
|
export APP_USER="deploy" # @specify
|
7
7
|
export APPS_DIR="/sites" # @specify
|
8
|
+
export APP_ENV="production" # @specify
|
8
9
|
|
9
10
|
function get-app-dir {
|
10
11
|
echo "$APPS_DIR/$APP_DOMAIN"
|
@@ -42,6 +43,18 @@ function get-app-current-public-dir {
|
|
42
43
|
echo "$(get-app-current-dir)/public"
|
43
44
|
}
|
44
45
|
|
46
|
+
function get-app-user {
|
47
|
+
echo $APP_USER
|
48
|
+
}
|
49
|
+
|
50
|
+
function get-app-home {
|
51
|
+
echo "/home/$(get-app-user)"
|
52
|
+
}
|
53
|
+
|
54
|
+
function get-app-env {
|
55
|
+
echo $APP_ENV
|
56
|
+
}
|
57
|
+
|
45
58
|
function get-app-id {
|
46
59
|
path-to-id $APP_DOMAIN
|
47
60
|
}
|
data/ext/bash/lib/rvm.sh
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# requires app.sh
|
3
3
|
export RVM_CHANNEL="stable"
|
4
4
|
RVM_REQUIRED_PACKAGES="curl gawk g++ gcc make libc6-dev libreadline6-dev zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev"
|
5
|
+
RVM_DEFAULT_GEMS="bundler" #@specify
|
5
6
|
|
6
7
|
# $1 unix user
|
7
8
|
# $2 ruby version
|
@@ -18,4 +19,7 @@ function rvm-install-for-user {
|
|
18
19
|
|
19
20
|
announce "Set Ruby $2 as default for user $1"
|
20
21
|
su - $1 -c "rvm --default use $2"
|
22
|
+
|
23
|
+
announce "Install default gems"
|
24
|
+
su - $1 -c "gem install $RVM_DEFAULT_GEMS"
|
21
25
|
}
|
data/lib/propro/package.rb
CHANGED
data/lib/propro/source.rb
CHANGED
data/lib/propro/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Nielsen
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- examples/vagrant.propro
|
98
98
|
- examples/vps_webserver.propro
|
99
99
|
- ext/bash/app.sh
|
100
|
+
- ext/bash/app/monit.sh
|
100
101
|
- ext/bash/app/nginx.sh
|
101
102
|
- ext/bash/app/node.sh
|
102
103
|
- ext/bash/app/pg.sh
|
@@ -104,6 +105,9 @@ files:
|
|
104
105
|
- ext/bash/app/puma/nginx.sh
|
105
106
|
- ext/bash/app/rvm.sh
|
106
107
|
- ext/bash/app/sidekiq.sh
|
108
|
+
- ext/bash/app/unicorn.sh
|
109
|
+
- ext/bash/app/unicorn/monit.sh
|
110
|
+
- ext/bash/app/unicorn/nginx.sh
|
107
111
|
- ext/bash/db/pg.sh
|
108
112
|
- ext/bash/db/redis.sh
|
109
113
|
- ext/bash/lib/extras.sh
|