propro 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +339 -0
  5. data/README.md +134 -0
  6. data/Rakefile +9 -0
  7. data/bin/propro +6 -0
  8. data/examples/vagrant.propro +41 -0
  9. data/examples/vps_webserver.propro +51 -0
  10. data/ext/bash/app/nginx.sh +9 -0
  11. data/ext/bash/app/node.sh +5 -0
  12. data/ext/bash/app/pg.sh +5 -0
  13. data/ext/bash/app/puma/nginx.sh +58 -0
  14. data/ext/bash/app/puma.sh +64 -0
  15. data/ext/bash/app/rvm.sh +7 -0
  16. data/ext/bash/app/sidekiq.sh +69 -0
  17. data/ext/bash/app.sh +75 -0
  18. data/ext/bash/db/pg.sh +47 -0
  19. data/ext/bash/db/redis.sh +20 -0
  20. data/ext/bash/lib/extras.sh +11 -0
  21. data/ext/bash/lib/nginx.sh +233 -0
  22. data/ext/bash/lib/node.sh +28 -0
  23. data/ext/bash/lib/pg.sh +44 -0
  24. data/ext/bash/lib/propro.sh +104 -0
  25. data/ext/bash/lib/redis.sh +59 -0
  26. data/ext/bash/lib/rvm.sh +21 -0
  27. data/ext/bash/lib/system.sh +57 -0
  28. data/ext/bash/lib/ubuntu.sh +175 -0
  29. data/ext/bash/vagrant/nginx.sh +31 -0
  30. data/ext/bash/vagrant/node.sh +5 -0
  31. data/ext/bash/vagrant/pg.sh +12 -0
  32. data/ext/bash/vagrant/redis.sh +5 -0
  33. data/ext/bash/vagrant/rvm.sh +6 -0
  34. data/ext/bash/vagrant/system.sh +26 -0
  35. data/ext/bash/vagrant.sh +3 -0
  36. data/ext/bash/vps/system.sh +156 -0
  37. data/lib/propro/cli/templates/init.tt +21 -0
  38. data/lib/propro/cli.rb +125 -0
  39. data/lib/propro/command.rb +17 -0
  40. data/lib/propro/export.rb +119 -0
  41. data/lib/propro/option.rb +36 -0
  42. data/lib/propro/package.rb +68 -0
  43. data/lib/propro/script.rb +95 -0
  44. data/lib/propro/source.rb +86 -0
  45. data/lib/propro/version.rb +3 -0
  46. data/lib/propro.rb +57 -0
  47. data/propro.gemspec +27 -0
  48. data/test/export_spec.rb +88 -0
  49. data/test/minitest_helper.rb +6 -0
  50. data/test/option_spec.rb +34 -0
  51. metadata +167 -0
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env bash
2
+ # requires nginx.sh
3
+ # requires app.sh
4
+ # requires app/puma.sh
5
+ export APP_PUMA_NGINX_ACCESS_LOG_FILE_NAME="access.log" # @specify
6
+ export APP_PUMA_NGINX_ERROR_LOG_FILE_NAME="error.log" # @specify
7
+ APP_PUMA_NGINX_ACCESS_LOG_FILE="$NGINX_LOG_DIR/$APP_PUMA_NGINX_ACCESS_LOG_FILE_NAME"
8
+ APP_PUMA_NGINX_ERROR_LOG_FILE="$NGINX_LOG_DIR/$APP_PUMA_NGINX_ERROR_LOG_FILE_NAME"
9
+
10
+ function provision-app-puma-nginx {
11
+ tee "$NGINX_SITES_DIR/$APP_DOMAIN.conf" <<EOT
12
+ upstream $(get-app-id) {
13
+ server unix:$(get-app-puma-socket-file) fail_timeout=0;
14
+ }
15
+
16
+ # Redirect www.$APP_DOMAIN => $APP_DOMAIN
17
+ server {
18
+ listen 80;
19
+ listen 443 ssl;
20
+ server_name www.$APP_DOMAIN;
21
+ return 301 \$scheme://$APP_DOMAIN\$request_uri;
22
+ }
23
+
24
+ server {
25
+ server_name $APP_DOMAIN;
26
+ root $(get-app-current-public-dir);
27
+
28
+ access_log $APP_PUMA_NGINX_ACCESS_LOG_FILE combined;
29
+ error_log $APP_PUMA_NGINX_ERROR_LOG_FILE notice;
30
+
31
+ location ~* \.(eot|ttf|woff)\$ {
32
+ add_header Access-Control-Allow-Origin *;
33
+ }
34
+
35
+ location ~ ^/(assets)/ {
36
+ root $(get-app-current-public-dir);
37
+ expires max;
38
+ add_header Cache-Control public;
39
+ gzip_static on;
40
+ }
41
+
42
+ try_files \$uri/index.html \$uri.html \$uri @rack_app;
43
+
44
+ location @rack_app {
45
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
46
+ proxy_set_header Host \$http_host;
47
+ proxy_redirect off;
48
+ proxy_pass http://$(get-app-id);
49
+ }
50
+
51
+ error_page 500 502 503 504 /500.html;
52
+
53
+ location = /500.html {
54
+ root $(get-app-current-public-dir);
55
+ }
56
+ }
57
+ EOT
58
+ }
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env bash
2
+ export APP_PUMA_CONFIG_DIR_RELATIVE="config/puma"
3
+ export APP_PUMA_CONFIG_FILE_NAME="puma.rb" # @specify
4
+ export APP_PUMA_CONF_FILE="/etc/puma.conf"
5
+
6
+ APP_PUMA_CONFIG_FILE_RELATIVE="$APP_PUMA_CONFIG_DIR_RELATIVE/$APP_PUMA_CONFIG_FILE_NAME"
7
+
8
+ function get-app-puma-socket-file {
9
+ echo "$(get-app-shared-sockets-dir)/puma.sock"
10
+ }
11
+
12
+ function provision-app-puma {
13
+ section "Puma"
14
+ announce "Create upstart for Puma"
15
+ tee /etc/init/puma.conf <<EOT
16
+ description "Puma Background Worker"
17
+ stop on (stopping puma-manager or runlevel [06])
18
+ setuid $APP_USER
19
+ setgid $APP_USER
20
+ respawn
21
+ respawn limit 3 30
22
+ instance \${app}
23
+ script
24
+ exec /bin/bash <<'EOTT'
25
+ export HOME="\$(eval echo ~\$(id -un))"
26
+ source "\$HOME/.rvm/scripts/rvm"
27
+ cd \$app
28
+ logger -t puma "Starting server: \$app"
29
+ exec bundle exec puma -C $APP_PUMA_CONFIG_FILE_RELATIVE
30
+ EOTT
31
+ end script
32
+ EOT
33
+
34
+ announce "Create upstart for Puma Workers"
35
+ tee /etc/init/puma-manager.conf <<EOT
36
+ description "Manages the set of Puma processes"
37
+ start on runlevel [2345]
38
+ stop on runlevel [06]
39
+ # /etc/puma.conf format:
40
+ # /path/to/app1
41
+ # /path/to/app2
42
+ env APP_PUMA_CONF="$APP_PUMA_CONF_FILE"
43
+ pre-start script
44
+ for i in \`cat \$APP_PUMA_CONF\`; do
45
+ app=\`echo \$i | cut -d , -f 1\`
46
+ logger -t "puma-manager" "Starting \$app"
47
+ start puma app=\$app
48
+ done
49
+ end script
50
+ EOT
51
+
52
+ tee /etc/puma.conf <<EOT
53
+ $(get-app-current-dir)
54
+ EOT
55
+
56
+ announce "Adding temp dir"
57
+ app-mkdir "$(get-app-shared-tmp-dir)/puma"
58
+
59
+ announce "Adding sudoers entries"
60
+ add-sudoers-entries $APP_USER "puma-manager" ""
61
+ add-sudoers-entries $APP_USER "puma" "app=$(get-app-current-dir)"
62
+
63
+ provision-app-puma-nginx
64
+ }
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ # requires app.sh
3
+ export APP_RVM_RUBY_VERSION="2.0.0" # @specify
4
+
5
+ function provision-app-rvm {
6
+ rvm-install-for-user $APP_USER $APP_RVM_RUBY_VERSION
7
+ }
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env bash
2
+ # requires app.sh
3
+ export APP_SIDEKIQ_CONFIG_DIR_RELATIVE="config/sidekiq"
4
+ export APP_SIDEKIQ_CONFIG_FILE_NAME="sidekiq.yml" # @specify
5
+ export APP_SIDEKIQ_PID_FILE_RELATIVE="tmp/sidekiq/worker.pid"
6
+ export APP_SIDEKIQ_CONF_FILE="/etc/sidekiq.conf"
7
+
8
+ APP_SIDEKIQ_CONFIG_FILE_RELATIVE="$APP_SIDEKIQ_CONFIG_DIR_RELATIVE/$APP_SIDEKIQ_CONFIG_FILE_NAME"
9
+
10
+ function provision-app-sidekiq {
11
+ section "Sidekiq"
12
+ announce "Create upstart for Sidekiq Manager"
13
+ tee /etc/init/sidekiq-manager.conf <<EOT
14
+ description "Manages the set of sidekiq processes"
15
+ start on runlevel [2345]
16
+ stop on runlevel [06]
17
+ env APP_SIDEKIQ_CONF="$APP_SIDEKIQ_CONF_FILE"
18
+
19
+ pre-start script
20
+ for i in `cat \$APP_SIDEKIQ_CONF`; do
21
+ app=`echo \$i | cut -d , -f 1`
22
+ logger -t "sidekiq-manager" "Starting \$app"
23
+ start sidekiq app=\$app
24
+ done
25
+ end script
26
+ EOT
27
+
28
+ announce "Create upstart for Sidekiq Workers"
29
+ tee /etc/init/sidekiq.conf <<EOT
30
+ description "Sidekiq Background Worker"
31
+ stop on (stopping sidekiq-manager or runlevel [06])
32
+ setuid $APP_USER
33
+ setgid $APP_USER
34
+ respawn
35
+ respawn limit 3 30
36
+ instance \${app}
37
+
38
+ script
39
+ exec /bin/bash <<EOTT
40
+ export HOME="\$(eval echo ~\$(id -un))"
41
+ source \$HOME/.rvm/scripts/rvm
42
+ logger -t sidekiq "Starting worker: \$app"
43
+ cd \$app
44
+ exec bundle exec sidekiq -C $APP_SIDEKIQ_CONFIG_FILE_RELATIVE -P $APP_SIDEKIQ_PID_FILE_RELATIVE
45
+ EOTT
46
+ end script
47
+
48
+ pre-stop script
49
+ exec /bin/bash <<EOTT
50
+ export HOME="\$(eval echo ~\$(id -un))"
51
+ source \$HOME/.rvm/scripts/rvm
52
+ logger -t sidekiq "Stopping worker: \$app"
53
+ cd \$app
54
+ exec bundle exec sidekiqctl stop $APP_SIDEKIQ_PID_FILE_RELATIVE
55
+ EOTT
56
+ end script
57
+ EOT
58
+
59
+ tee /etc/sidekiq.conf <<EOT
60
+ $(get-app-current-dir)
61
+ EOT
62
+
63
+ announce "Adding temp dir:"
64
+ app-mkdir "$(get-app-shared-tmp-dir)/sidekiq"
65
+
66
+ announce "Adding sudoers entries"
67
+ add-sudoers-entries $APP_USER "sidekiq-manager" ""
68
+ add-sudoers-entries $APP_USER "sidekiq" "app=$(get-app-current-dir)"
69
+ }
data/ext/bash/app.sh ADDED
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Provides tools and commands for deploying a Rack application with Capistrano
4
+ export APP_DOMAIN="" # @require
5
+ export APP_AUTHORIZED_GITHUB_USERS="" # @require
6
+ export APP_USER="deploy" # @specify
7
+ export APPS_DIR="/sites" # @specify
8
+
9
+ function get-app-dir {
10
+ echo "$APPS_DIR/$APP_DOMAIN"
11
+ }
12
+
13
+ function get-app-shared-dir {
14
+ echo "$(get-app-dir)/shared"
15
+ }
16
+
17
+ function get-app-shared-tmp-dir {
18
+ echo "$(get-app-shared-dir)/tmp"
19
+ }
20
+
21
+ function get-app-shared-log-dir {
22
+ echo "$(get-app-shared-dir)/log"
23
+ }
24
+
25
+ function get-app-shared-sockets-dir {
26
+ echo "$(get-app-shared-dir)/sockets"
27
+ }
28
+
29
+ function get-app-config-dir {
30
+ echo "$(get-app-dir)/config"
31
+ }
32
+
33
+ function get-app-current-dir {
34
+ echo "$(get-app-dir)/current"
35
+ }
36
+
37
+ function get-app-releases-dir {
38
+ echo "$(get-app-dir)/releases"
39
+ }
40
+
41
+ function get-app-current-public-dir {
42
+ echo "$(get-app-current-dir)/public"
43
+ }
44
+
45
+ function get-app-id {
46
+ path-to-id $APP_DOMAIN
47
+ }
48
+
49
+ # $1 path
50
+ function app-mkdir {
51
+ announce-item "$1"
52
+ as-user-mkdir $APP_USER "$1"
53
+ }
54
+
55
+ function app-create-user {
56
+ add-user $APP_USER "" ""
57
+ add-pubkeys-from-github $APP_USER "$APP_AUTHORIZED_GITHUB_USERS"
58
+ }
59
+
60
+ function app-create-dirs {
61
+ announce "Building app directory tree:"
62
+ app-mkdir "$APPS_DIR"
63
+ app-mkdir "$(get-app-dir)"
64
+ app-mkdir "$(get-app-releases-dir)"
65
+ app-mkdir "$(get-app-config-dir)"
66
+ app-mkdir "$(get-app-shared-dir)"
67
+ app-mkdir "$(get-app-shared-tmp-dir)"
68
+ app-mkdir "$(get-app-shared-log-dir)"
69
+ app-mkdir "$(get-app-shared-sockets-dir)"
70
+ }
71
+
72
+ function provision-app {
73
+ app-create-user
74
+ app-create-dirs
75
+ }
data/ext/bash/db/pg.sh ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env bash
2
+ export DB_PG_NAME="" # @require
3
+ export DB_PG_USER="" # @require
4
+ export DB_PG_BIND_IP="" # @specify Bind Postgres to specific interface
5
+ export DB_PG_TRUST_IPS="" # @specify Private network IPs allowed to connect to Postgres
6
+
7
+ function db-pg-bind-ip {
8
+ if [ -z $DB_PG_BIND_IP ]; then
9
+ return 0
10
+ fi
11
+
12
+ announce "Bind PostgreSQL to $DB_PG_BIND_IP"
13
+ tee -a $PG_CONFIG_FILE <<EOT
14
+ listen_addresses = 'localhost,$DB_PG_BIND_IP'
15
+ EOT
16
+ }
17
+
18
+ function db-pg-trust-ips {
19
+ if [ -z "$DB_PG_TRUST_IPS" ]; then
20
+ return 0
21
+ fi
22
+
23
+ announce "Allow private network connections from:"
24
+ # hba format: TYPE DBNAME USER ADDR AUTH
25
+ for trust_ip in $DB_PG_TRUST_IPS; do
26
+ announce-item "$trust_ip"
27
+ tee -a $PG_HBA_FILE <<EOT
28
+ host all all $trust_ip trust
29
+ EOT
30
+ done
31
+ }
32
+
33
+ # $1 db user name
34
+ function db-pg-create-user {
35
+ announce "Create database user: $1"
36
+ su - $PG_USER -c "createuser -D -R $1"
37
+ }
38
+
39
+ function provision-db-pg {
40
+ section "PostgreSQL Server"
41
+ pg-install-packages
42
+ pg-tune
43
+ db-pg-bind-ip
44
+ db-pg-trust-ips
45
+ db-pg-create-user $DB_PG_USER
46
+ pg-createdb $DB_PG_USER $DB_PG_NAME
47
+ }
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env bash
2
+ export DB_REDIS_BIND_IP="" # @specify
3
+
4
+ # $1 ip (private IP of server)
5
+ function redis-bind-ip {
6
+ if [ ! $DB_REDIS_BIND_IP ]; then
7
+ return 0
8
+ fi
9
+
10
+ announce "Bind Redis to local network interface"
11
+ tee -a $REDIS_CONF_FILE <<EOT
12
+ bind $DB_REDIS_BIND_IP
13
+ EOT
14
+ }
15
+
16
+ function provision-db-redis {
17
+ section "Redis"
18
+ redis-install
19
+ redis-bind-ip
20
+ }
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ export EXTRA_PACKAGES="" # @specify
3
+
4
+ function provision-extras {
5
+ if [ -z "$EXTRA_PACKAGES" ]; then
6
+ return 0
7
+ fi
8
+
9
+ section "Extras"
10
+ install-packages $EXTRA_PACKAGES
11
+ }
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env bash
2
+ export NGINX_VERSION="1.4.4" # @specify
3
+ export NGINX_USER="nginx"
4
+ export NGINX_CONFIGURE_OPTS="--with-http_ssl_module --with-http_gzip_static_module" # @specify
5
+ export NGINX_CONF_FILE="/etc/nginx.conf"
6
+ export NGINX_ETC_DIR="/etc/nginx"
7
+ export NGINX_LOG_DIR="/var/log/nginx"
8
+ export NGINX_ACCESS_LOG_FILE_NAME="access.log"
9
+ export NGINX_ERROR_LOG_FILE_NAME="error.log"
10
+ export NGINX_DEPENDENCIES="libpcre3-dev libssl-dev"
11
+ export NGINX_WORKER_COUNT=$(get-processor-count)
12
+ export NGINX_PID_FILE="/var/run/nginx.pid"
13
+ export NGINX_CLIENT_MAX_BODY_SIZE="5m" # @specify
14
+ export NGINX_WORKER_CONNECTIONS="2000" # @specify
15
+
16
+ NGINX_SITES_DIR="$NGINX_ETC_DIR/sites"
17
+ NGINX_CONF_DIR="$NGINX_ETC_DIR/conf"
18
+
19
+ function nginx-install {
20
+ local tmpdir=$(get-tmp-dir)
21
+ cd "$tmpdir"
22
+
23
+ install-packages $NGINX_DEPENDENCIES
24
+
25
+ announce "Download $NGINX_VERSION"
26
+ download http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz
27
+
28
+ announce "Extract"
29
+ extract nginx-$NGINX_VERSION.tar.gz
30
+
31
+ announce "Configure"
32
+ cd nginx-$NGINX_VERSION
33
+ ./configure $NGINX_CONFIGURE_OPTS
34
+
35
+ announce "Compile"
36
+ make
37
+
38
+ announce "Install $NGINX_VERSION"
39
+ make install
40
+
41
+ cd ~/
42
+ rm -rf "$tmpdir"
43
+ }
44
+
45
+ function nginx-configure {
46
+ announce "Creating Nginx user"
47
+ useradd -r $NGINX_USER
48
+
49
+ announce "Adding Nginx directories"
50
+ as-user-mkdir $NGINX_USER $NGINX_LOG_DIR
51
+ mkdir -p $NGINX_ETC_DIR
52
+ mkdir -p $NGINX_SITES_DIR
53
+ mkdir -p $NGINX_CONF_DIR
54
+
55
+ announce "Creating base Nginx config: $NGINX_CONF_FILE"
56
+ tee $NGINX_CONF_FILE <<EOT
57
+ user $NGINX_USER;
58
+ pid $NGINX_PID_FILE;
59
+ ssl_engine dynamic;
60
+ worker_processes $NGINX_WORKER_COUNT;
61
+
62
+ events {
63
+ multi_accept on;
64
+ worker_connections $NGINX_WORKER_CONNECTIONS;
65
+ use epoll;
66
+ }
67
+
68
+ http {
69
+ sendfile on;
70
+
71
+ tcp_nopush on;
72
+ tcp_nodelay off;
73
+
74
+ client_max_body_size $NGINX_CLIENT_MAX_BODY_SIZE;
75
+ client_body_temp_path /var/spool/nginx-client-body 1 2;
76
+
77
+ default_type application/octet-stream;
78
+
79
+ include /etc/nginx/conf/*.conf;
80
+ include /etc/nginx/sites/*.conf;
81
+ }
82
+ EOT
83
+
84
+ announce "Writing Nginx upstart /etc/init/nginx.conf"
85
+ tee /etc/init/nginx.conf <<EOT
86
+ description "Nginx HTTP Daemon"
87
+ author "George Shammas <georgyo@gmail.com>"
88
+
89
+ start on (filesystem and net-device-up IFACE=lo)
90
+ stop on runlevel [!2345]
91
+ env DAEMON="/usr/local/nginx/sbin/nginx -c $NGINX_CONF_FILE"
92
+ env PID="$NGINX_PID_FILE"
93
+ expect fork
94
+ respawn
95
+ respawn limit 10 5
96
+
97
+ pre-start script
98
+ \$DAEMON -t
99
+ if [ \$? -ne 0 ]
100
+ then exit \$?
101
+ fi
102
+ end script
103
+
104
+ exec \$DAEMON
105
+ EOT
106
+ }
107
+
108
+ function nginx-conf-add-mimetypes {
109
+ announce "Adding mimetypes config"
110
+ tee "$NGINX_CONF_DIR/mimetypes.conf" <<EOT
111
+ types_hash_max_size 2048;
112
+
113
+ types {
114
+ application/atom+xml atom;
115
+ application/java-archive jar war ear;
116
+ application/javascript js;
117
+ application/json json;
118
+ application/msword doc;
119
+ application/pdf pdf;
120
+ application/postscript ps eps ai;
121
+ application/rtf rtf;
122
+ application/vnd.ms-excel xls;
123
+ application/vnd.ms-fontobject eot;
124
+ application/vnd.ms-powerpoint ppt;
125
+ application/vnd.wap.wmlc wmlc;
126
+ application/x-7z-compressed 7z;
127
+ application/x-bittorrent torrent;
128
+ application/x-cocoa cco;
129
+ application/x-font-ttf ttf ttc;
130
+ application/x-httpd-php-source phps;
131
+ application/x-java-archive-diff jardiff;
132
+ application/x-java-jnlp-file jnlp;
133
+ application/x-makeself run;
134
+ application/x-perl pl pm;
135
+ application/x-pilot prc pdb;
136
+ application/x-rar-compressed rar;
137
+ application/x-redhat-package-manager rpm;
138
+ application/x-sea sea;
139
+ application/x-shockwave-flash swf;
140
+ application/x-stuffit sit;
141
+ application/x-tcl tcl tk;
142
+ application/x-x509-ca-cert der pem crt;
143
+ application/x-xpinstall xpi;
144
+ application/xhtml+xml xhtml;
145
+ application/xml xml;
146
+ application/zip zip;
147
+ audio/midi mid midi kar;
148
+ audio/mpeg mp3;
149
+ audio/ogg oga ogg;
150
+ audio/x-m4a m4a;
151
+ audio/x-realaudio ra;
152
+ audio/x-wav wav;
153
+ font/opentype otf;
154
+ font/woff woff;
155
+ image/gif gif;
156
+ image/jpeg jpeg jpg;
157
+ image/png png;
158
+ image/svg+xml svg svgz;
159
+ image/tiff tif tiff;
160
+ image/vnd.wap.wbmp wbmp;
161
+ image/webp webp;
162
+ image/x-icon ico;
163
+ image/x-ms-bmp bmp;
164
+ text/cache-manifest manifest appcache;
165
+ text/css css;
166
+ text/html html htm shtml;
167
+ text/mathml mml;
168
+ text/plain txt md;
169
+ text/vnd.sun.j2me.app-descriptor jad;
170
+ text/vnd.wap.wml wml;
171
+ text/x-component htc;
172
+ text/xml rss;
173
+ video/3gpp 3gpp 3gp;
174
+ video/mp4 m4v mp4;
175
+ video/mpeg mpeg mpg;
176
+ video/ogg ogv;
177
+ video/quicktime mov;
178
+ video/webm webm;
179
+ video/x-flv flv;
180
+ video/x-mng mng;
181
+ video/x-ms-asf asx asf;
182
+ video/x-ms-wmv wmv;
183
+ video/x-msvideo avi;
184
+ }
185
+ EOT
186
+ }
187
+
188
+ function nginx-conf-add-gzip {
189
+ announce "Adding gzip config"
190
+ tee $NGINX_CONF_DIR/gzip.conf <<EOT
191
+ gzip on;
192
+ gzip_buffers 32 4k;
193
+ gzip_comp_level 2;
194
+ gzip_disable "msie6";
195
+ gzip_http_version 1.1;
196
+ gzip_min_length 1100;
197
+ gzip_proxied any;
198
+ gzip_static on;
199
+ gzip_vary on;
200
+ gzip_types
201
+ text/css
202
+ text/plain
203
+ application/javascript
204
+ application/json
205
+ application/rss+xml
206
+ application/xml
207
+ application/vnd.ms-fontobject
208
+ font/truetype
209
+ font/opentype
210
+ image/x-icon
211
+ image/svg+xml;
212
+ EOT
213
+ }
214
+
215
+ function nginx-create-logrotate {
216
+ announce "Create logrotate for Nginx"
217
+ tee /etc/logrotate.d/nginx <<EOT
218
+ $NGINX_LOG_DIR/*.log {
219
+ daily
220
+ missingok
221
+ rotate 90
222
+ compress
223
+ delaycompress
224
+ notifempty
225
+ dateext
226
+ create 640 nginx adm
227
+ sharedscripts
228
+ postrotate
229
+ [ -f $NGINX_PID_FILE ] && kill -USR1 `cat $NGINX_PID_FILE`
230
+ endscript
231
+ }
232
+ EOT
233
+ }
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bash
2
+ export NODE_VERSION="0.10.25" # @specify
3
+
4
+ function get-node-pkg-name {
5
+ echo "node-v$NODE_VERSION-linux-$(get-archtype)"
6
+ }
7
+
8
+ function get-node-url {
9
+ echo "http://nodejs.org/dist/v$NODE_VERSION/$(get-node-pkg-name).tar.gz"
10
+ }
11
+
12
+ function node-install {
13
+ local tmpdir=$(get-tmp-dir)
14
+ cd "$tmpdir"
15
+
16
+ announce "Download Node $NODE_VERSION"
17
+ download $(get-node-url)
18
+
19
+ announce "Extract Node $NODE_VERSION"
20
+ extract "$(get-node-pkg-name).tar.gz"
21
+
22
+ announce "Install Node"
23
+ cd "./$(get-node-pkg-name)"
24
+ cp -r -t /usr/local bin include share lib
25
+
26
+ cd ~/
27
+ rm -r "$tmpdir"
28
+ }
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+ export PG_VERSION="9.3" # @specify
3
+ export PG_EXTENSIONS="btree_gin btree_gist fuzzystrmatch hstore intarray ltree pg_trgm tsearch2 unaccent" # @specify see: http://www.postgresql.org/docs/9.3/static/contrib.html
4
+ export PG_CONFIG_FILE="/etc/postgresql/$PG_VERSION/main/postgresql.conf"
5
+ export PG_HBA_FILE="/etc/postgresql/$PG_VERSION/main/pg_hba.conf"
6
+ export PG_TUNE_VERSION="0.9.3"
7
+ export PG_TUNE_URL="http://pgfoundry.org/frs/download.php/2449/pgtune-$PG_TUNE_VERSION.tar.gz"
8
+ export PG_USER="postgres"
9
+
10
+ function pg-install-packages {
11
+ install-packages postgresql-$PG_VERSION libpq-dev postgresql-contrib-$PG_VERSION
12
+ }
13
+
14
+ function pg-tune {
15
+ local tmpdir=$(get-tmp-dir)
16
+ cd "$tmpdir"
17
+
18
+ announce "Tune PostgreSQL $PG_VERSION"
19
+ download $PG_TUNE_URL
20
+ extract pgtune-$PG_TUNE_VERSION.tar.gz
21
+
22
+ ./pgtune-$PG_TUNE_VERSION/pgtune -i $PG_CONFIG_FILE -o $PG_CONFIG_FILE.pgtune
23
+ mv $PG_CONFIG_FILE $PG_CONFIG_FILE.original
24
+ mv $PG_CONFIG_FILE.pgtune $PG_CONFIG_FILE
25
+ chown $PG_USER:$PG_USER $PG_CONFIG_FILE
26
+
27
+ cd ~/
28
+ rm -rf "$tmpdir"
29
+ }
30
+
31
+ # $1 db user name
32
+ # $2 db name
33
+ function pg-createdb {
34
+ announce "Create database: $2"
35
+ su - $PG_USER -c "createdb -O $1 $2"
36
+
37
+ if [ $PG_EXTENSIONS ]; then
38
+ announce "Add extensions:"
39
+ for extension in $PG_EXTENSIONS; do
40
+ announce-item "$extension"
41
+ su - $PG_USER -c "psql -d $2 -c \"CREATE EXTENSION IF NOT EXISTS $extension;\""
42
+ done
43
+ fi
44
+ }