kompanee-recipes 0.0.10 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of kompanee-recipes might be problematic. Click here for more details.

@@ -0,0 +1,16 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ run_task "php:install", :as => "manager"
3
+
4
+ namespace :php do
5
+ desc "[internal] Install PHP 5 on Ubuntu"
6
+ task :install_on_ubuntu do
7
+ set :dependencies, %w{php5}
8
+ os.package_manager.install
9
+ end
10
+
11
+ desc "Install PHP 5"
12
+ task :install do
13
+ php.send("install_on_#{os_type}")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ run_task "phpmyadmin:install", :as => "manager"
3
+
4
+ namespace :phpmyadmin do
5
+ desc <<-DESC
6
+ Installs phpMyAdmin on the server.
7
+ DESC
8
+ task :install do
9
+ phpmyadmin.send("install_on_#{os_type}")
10
+ end
11
+
12
+ desc <<-DESC
13
+ [internal] Installs phpMyAdmin on Ubuntu.
14
+
15
+ * Installs phpMyAdmin via apt-get.
16
+ * Creates a Debian answer file to allow for an unattended installation.
17
+ DESC
18
+ task :install_on_ubuntu do
19
+ set(:phpmyadmin_password) {Capistrano::CLI.password_prompt("Password For phpMyAdmin: ")}
20
+
21
+ phpmyadmin_install_answers = <<-INSTALLANSWERS
22
+ phpmyadmin phpmyadmin/app-password-confirm select #{phpmyadmin_password}
23
+ phpmyadmin phpmyadmin/mysql/admin-pass select #{db_root_password}
24
+ phpmyadmin phpmyadmin/password-confirm select #{phpmyadmin_password}
25
+ phpmyadmin phpmyadmin/setup-password select #{phpmyadmin_password}
26
+ phpmyadmin phpmyadmin/mysql/app-pass select #{phpmyadmin_password}
27
+ phpmyadmin phpmyadmin/reconfigure-webserver select apache2
28
+ phpmyadmin phpmyadmin/dbconfig-install boolean true
29
+ INSTALLANSWERS
30
+
31
+ put phpmyadmin_install_answers, "#{user_home}/phpmyadmin_install_answers"
32
+ run "#{sudo} debconf-set-selections #{user_home}/phpmyadmin_install_answers"
33
+ run "rm #{user_home}/phpmyadmin_install_answers"
34
+
35
+ set :dependencies, %w{phpmyadmin}
36
+ os.package_manager.install
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ desc <<-DESC
3
+ Makes certain that the server is set up properly to handle deployments.
4
+
5
+ It will install:
6
+ * A web server
7
+ * The web server's SSL capabilities
8
+ * PHP
9
+ * RVM
10
+ * Database Server
11
+ * phpMyAdmin
12
+ * Phusion Passenger
13
+ * Bundler
14
+ * Bash Environment
15
+ * VIM Environment
16
+ DESC
17
+ task :server_setup do
18
+ git.install
19
+
20
+ os.package_manager.update
21
+ os.development_tools.install_common
22
+
23
+ web_server.install
24
+ apache.modules.ssl.install
25
+ php.install
26
+ rvm.install.default
27
+ db.install
28
+ phpmyadmin.install
29
+ passenger.install.default
30
+ bundler.install
31
+
32
+ vim.environment.setup
33
+ bash.environment.setup
34
+ end
35
+ end
@@ -0,0 +1,99 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ run_task "rvm:install:prerequisites", :as => "manager"
3
+ run_task "rvm:install:manager_symlink", :as => "manager"
4
+
5
+ namespace :rvm do
6
+ namespace :install do
7
+ desc <<-DESC
8
+ [internal] Packages required by RVM for installation.
9
+
10
+ Ubuntu requires a certain set of packages be available before
11
+ RVM can be installed. This task installs those packages. It has no value
12
+ on its own.
13
+ DESC
14
+ task :prerequisites do
15
+ set :dependencies, %w{curl bison zlib1g-dev libssl-dev libreadline5-dev libxml2-dev autoconf subversion ruby}
16
+ os.package_manager.install
17
+ end
18
+
19
+ namespace :for_user do
20
+ desc <<-DESC
21
+ [internal] Installs a `.rvmrc` file for the current Capistrano user.
22
+
23
+ The settings include:
24
+ * Install an application's Ruby version on use.
25
+ If an application has an `.rvmrc` file which invokes a Ruby version
26
+ that is not installed, RVM will install it.
27
+ * Create an application's gemset on use.
28
+ If an application has an `.rvmrc` file which invokes a gemset that
29
+ does not exist, RVM will create it.
30
+ * Revert to system Ruby
31
+ Set Ruby version back to `system` when changing out of a project
32
+ directory.
33
+ DESC
34
+ task :rvmrc do
35
+ rvmrc = <<-RVMRC
36
+ export rvm_install_on_use_flag=1
37
+ export rvm_gemset_create_on_use_flag=1
38
+
39
+ export rvm_project_rvmrc_default=1
40
+ export rvm_trust_rvmrcs_flag=1
41
+ RVMRC
42
+
43
+ put rvmrc, "#{user_home}/.rvmrc"
44
+ end
45
+
46
+ desc <<-DESC
47
+ [internal] Installs the requisite line in the .bashrc file which will load
48
+ RVM when the user logs in.
49
+ DESC
50
+ task :bashrc do
51
+ run %Q{echo "[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"" >> #{user_home}/.bashrc}
52
+ end
53
+
54
+ desc <<-DESC
55
+ Installs RVM for whichever user is currently being used with Capistrano.
56
+ DESC
57
+ task :default do
58
+ run "bash < <(curl http://rvm.beginrescueend.com/releases/rvm-install-head)"
59
+ rvm.install.for_user.bashrc
60
+ rvm.install.for_user.rvmrc
61
+ end
62
+ end
63
+
64
+ desc <<-DESC
65
+ [internal] This task will symlink the .rvm directory from the deployment user to the management user's home directory.
66
+
67
+ It doesn't do any good to have a different RVM installed for the deployment user and management user.
68
+
69
+ It will also create a .rvmrc file in the management user's home directory.
70
+ DESC
71
+ task :manager_symlink do
72
+ run "ln -sfn #{deployment_user_home}/.rvm #{manager_user_home}/.rvm"
73
+ rvm.install.for_user.rvmrc
74
+ rvm.install.for_user.bashrc
75
+ end
76
+
77
+ desc <<-DESC
78
+ [internal] Install RVM on Ubuntu.
79
+ DESC
80
+ task :on_ubuntu do
81
+ rvm.install.prerequisites
82
+ rvm.install.for_user.default
83
+ rvm.install.manager_symlink
84
+ end
85
+
86
+ desc <<-DESC
87
+ Installs RVM on the server.
88
+
89
+ Installs RVM for the deployment user. The deployment user will own RVM
90
+ but it will also be available for the management user as well via a symlink.
91
+
92
+ Both users will also have a .rvmrc file installed.
93
+ DESC
94
+ task :default do
95
+ rvm.install.send("on_#{os_type}")
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,9 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :sqlite3 do
3
+ desc "Install SQLite3"
4
+ task :install_on_ubuntu, :roles => [:ubuntu, :sqlite3, :db] do
5
+ set :dependencies, %w{sqlite3 libsqlite3-ruby}
6
+ os.package_manager.install
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :deploy do
3
+ task :tag do
4
+ raise "Tagging deployments with Subversion has not been implemented yet."
5
+ end
6
+ end
7
+
8
+ namespace :svn do
9
+ desc "Install Subversion"
10
+ task :install_on_ubuntu do
11
+ set :dependencies, %w{subversion}
12
+ os.package_manager.install
13
+ end
14
+
15
+ desc "Install Subversion"
16
+ task :install do
17
+ svn.send("install_on_#{os_type}")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,235 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ ######################################################################
3
+ # UBUNTU SERVER TASKS #
4
+ ######################################################################
5
+ set :os_type, "ubuntu"
6
+
7
+ before "deploy:config:symlink", "deploy:config:create"
8
+
9
+ run_task "os:package_manager:update", :as => "manager"
10
+ run_task "os:development_tools:install_common", :as => "manager"
11
+
12
+ namespace :deploy do
13
+ namespace :config do
14
+ desc <<-DESC
15
+ Creates the directory where the `symlink` task will look for its configuration files.
16
+
17
+ It will first look in the user's home directory to see if there is
18
+ a file of the same name as one of the shared files. If there is, it
19
+ will move that to the shared location. If not, it will create an
20
+ empty file.
21
+ DESC
22
+ task :create do
23
+ run "if [ ! -d #{shared_path}/config ]; then mkdir -p #{shared_path}/config; fi"
24
+
25
+ global_shared_files.each do |shared_file|
26
+ local_shared_file = "#{shared_file}.#{rails_env}"
27
+
28
+ if File.exists?(local_shared_file)
29
+ top.upload(local_shared_file, "#{shared_path}/#{shared_file}", :mode => "400")
30
+ else
31
+ run "touch #{shared_path}/#{shared_file}"
32
+ end
33
+ end
34
+ end
35
+
36
+ desc <<-DESC
37
+ Symlinks sensitive configuration files which shouldn't be checked into source control.
38
+
39
+ By default, these live in the shared directory that Capistrano sets up.
40
+ DESC
41
+ task :symlink do
42
+ global_shared_files.each do |shared_file|
43
+ run "ln -nfs #{shared_path}/#{shared_file} #{latest_release}/#{shared_file}"
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ run_task 'os:users:manager:create', :as => "root"
50
+ run_task 'os:users:deploy:create', :as => "root"
51
+
52
+ run_task 'os:users:deploy:public_key:authorize', :as => "deploy"
53
+ run_task 'os:users:deploy:public_key:create', :as => "deploy"
54
+ run_task 'os:users:manager:public_key:authorize', :as => "manager"
55
+ run_task 'os:users:manager:public_key:create', :as => "manager"
56
+
57
+ namespace :os do
58
+ namespace :users do
59
+ desc <<-DESC
60
+ Creates the users which will be used to interact with the system.
61
+
62
+ This task will create both the `deploy` user and the `manager` user.
63
+ DESC
64
+ task :create do
65
+ os.users.manager.create
66
+ os.users.deploy.create
67
+ end
68
+
69
+ desc <<-DESC
70
+ Installs the local public key as an authorized key for the manager user and deployment user on the remote system.
71
+ DESC
72
+ task :authorize_public_keys do
73
+ os.users.manager.public_key.authorize
74
+ os.users.deploy.public_key.authorize
75
+ end
76
+
77
+ desc <<-DESC
78
+ [internal] Installs the local public key as an authorized key for the current user.
79
+ DESC
80
+ task :authorize_public_key_for_current_user do
81
+ pk = exists?(:public_key) ? public_key : `cat $HOME/.ssh/id_rsa.pub`
82
+
83
+ run "if [ ! -d .ssh ]; then mkdir .ssh; fi"
84
+ run "echo \"#{pk}\" > ./.ssh/authorized_keys"
85
+ run "chmod 600 ./.ssh/authorized_keys"
86
+ end
87
+
88
+ desc <<-DESC
89
+ [internal] Creates a public/private key pair for the current user.
90
+ DESC
91
+ task :create_key_pair_for_current_user do
92
+ set(:public_key_passphrase) {Capistrano::CLI.password_prompt("Public Key Passphrase: ")}
93
+ hostname = capture("echo $HOSTNAME").chomp
94
+ run %Q{ssh-keygen -t rsa -C "#{hostname}@#{domain}" -P "#{public_key_passphrase}" -f ~/.ssh/id_rsa}
95
+ end
96
+
97
+ namespace :root do
98
+ desc <<-DESC
99
+ [internal] Switches Capistrano to use the root user for all subsequent SSH actions.
100
+
101
+ It will prompt for the root user's password the first time it's needed.
102
+ (If the Kompanee Bash environment has been installed, you will no longer
103
+ be able to log in as root.)
104
+ DESC
105
+ task :use do
106
+ set_user_to("root")
107
+ end
108
+ end
109
+
110
+ namespace :manager do
111
+ desc <<-DESC
112
+ Creates the manager user on the remote system.
113
+
114
+ If the user already exists, this task will fail.
115
+ DESC
116
+ task :create do
117
+ run "useradd #{manager_username} --create-home --shell /bin/bash"
118
+ run "rm /home/#{manager_username}/.bashrc"
119
+ end
120
+
121
+ desc <<-DESC
122
+ Switches Capistrano to use the manager user for all subsequent SSH actions.
123
+
124
+ It will prompt for the manager user's password the first time it's needed.
125
+ (If public key authentication is already installed, you will not be prompted.)
126
+ DESC
127
+ task :use do
128
+ set_user_to(manager_username)
129
+ end
130
+
131
+ namespace :public_key do
132
+ desc <<-DESC
133
+ Sets the current local public key as an authorized user for the manager user.
134
+
135
+ If there is a `public_key` variable set, it will use that.
136
+ Otherwise, if `public_key` is not set, it will look in the default
137
+ `~/.ssh/id_rsa.pub` file.
138
+ DESC
139
+ task :authorize do
140
+ os.users.authorize_public_key_for_current_user
141
+ end
142
+
143
+ desc <<-DESC
144
+ Creates a public/private key pair set that can be used when logging into other systems.
145
+
146
+ * It will be installed at `/home/deploy/.ssh/id_rsa`.
147
+ * You will be prompted for a passphrase which will be attached to the key.
148
+ DESC
149
+ task :create do
150
+ os.users.create_key_pair_for_current_user
151
+ end
152
+ end
153
+ end
154
+
155
+ namespace :deploy do
156
+ desc <<-DESC
157
+ Creates the deployment user on the remote system.
158
+
159
+ If the user already exists, this task will fail.
160
+ DESC
161
+ task :create do
162
+ run "useradd #{deployment_username} --create-home --shell /bin/bash"
163
+ run "rm /home/#{deployment_username}/.bashrc"
164
+ end
165
+
166
+ desc <<-DESC
167
+ Switches Capistrano to use the deployment user for all subsequent SSH actions.
168
+
169
+ It will prompt for the deployment user's password the first time it's needed.
170
+ (If public key authentication is already installed, you will not be prompted.)
171
+ DESC
172
+ task :use do
173
+ set_user_to(deployment_username)
174
+ end
175
+
176
+ namespace :public_key do
177
+ desc <<-DESC
178
+ Sets the current local public key as an authorized user for the deployment user.
179
+
180
+ If there is a `public_key` variable set, it will use that.
181
+ Otherwise, if `public_key` is not set, it will look in the default
182
+ `~/.ssh/id_rsa.pub` file.
183
+ DESC
184
+ task :authorize do
185
+ os.users.authorize_public_key_for_current_user
186
+ end
187
+
188
+ desc <<-DESC
189
+ Creates a public/private key pair set that can be used when logging into other systems.
190
+
191
+ * It will be installed at `/home/deploy/.ssh/id_rsa`.
192
+ * You will be prompted for a passphrase which will be attached to the key.
193
+ DESC
194
+ task :create do
195
+ os.users.create_key_pair_for_current_user
196
+ end
197
+ end
198
+ end
199
+ end
200
+
201
+ namespace :package_manager do
202
+ desc <<-DESC
203
+ Runs the OS's package manager and updates its list of available packages.
204
+
205
+ This does NOT upgrade the installed packages.
206
+ DESC
207
+ task :update do
208
+ run "#{sudo} apt-get update"
209
+ end
210
+
211
+ desc <<-DESC
212
+ [internal] Uses the OS's built-in package manager to install a list of packages.
213
+
214
+ This task looks at the `dependencies` variable for an array of package names.
215
+ Once all packages are installed, the `dependencies` variable is unset.
216
+ DESC
217
+ task :install do
218
+ dependencies.each do |package|
219
+ run "#{sudo} apt-get install #{package} -y"
220
+ end
221
+ unset :dependencies
222
+ end
223
+ end
224
+
225
+ namespace :development_tools do
226
+ desc <<-DESC
227
+ Installs the development packages typically required for most deployments.
228
+ DESC
229
+ task :install_common do
230
+ set :dependencies, %w{libcurl4-openssl-dev build-essential debconf-utils libxslt-dev libxml2-dev}
231
+ os.package_manager.install
232
+ end
233
+ end
234
+ end
235
+ end