]> git.openstreetmap.org Git - chef.git/blob - cookbooks/dev/recipes/default.rb
a5ceee9403578cf5e6fd319eed10d85cacfb9806
[chef.git] / cookbooks / dev / recipes / default.rb
1 #
2 # Cookbook Name:: dev
3 # Recipe:: default
4 #
5 # Copyright 2011, OpenStreetMap Foundation
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #     https://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19
20 require "yaml"
21 require "securerandom"
22
23 include_recipe "apache"
24 include_recipe "passenger"
25 include_recipe "git"
26 include_recipe "memcached"
27 include_recipe "mysql"
28 include_recipe "nodejs"
29 include_recipe "postgresql"
30 include_recipe "python"
31
32 package %w[
33   php
34   php-cgi
35   php-cli
36   php-curl
37   php-db
38   php-fpm
39   php-imagick
40   php-mcrypt
41   php-mysql
42   php-pear
43   php-pgsql
44   php-sqlite3
45 ]
46
47 package %w[
48   pngcrush
49   pngquant
50 ]
51
52 package %w[
53   python
54   python-argparse
55   python-beautifulsoup
56   python-cheetah
57   python-dateutil
58   python-magic
59   python-psycopg2
60   python-gdal
61 ]
62
63 nodejs_package "svgo"
64
65 python_package "geojson"
66
67 apache_module "env"
68 apache_module "expires"
69 apache_module "headers"
70 apache_module "proxy"
71 apache_module "proxy_fcgi"
72 apache_module "rewrite"
73 apache_module "suexec"
74 apache_module "userdir"
75 apache_module "wsgi"
76
77 package "apache2-suexec-pristine"
78
79 service "php7.2-fpm" do
80   action [:enable, :start]
81 end
82
83 template "/etc/php/7.2/fpm/pool.d/default.conf" do
84   source "fpm-default.conf.erb"
85   owner "root"
86   group "root"
87   mode 0o644
88   notifies :reload, "service[php7.2-fpm]"
89 end
90
91 file "/etc/php/7.2/fpm/pool.d/www.conf" do
92   action :delete
93   notifies :reload, "service[php7.2-fpm]"
94 end
95
96 directory "/srv/dev.openstreetmap.org" do
97   owner "root"
98   group "root"
99   mode 0o755
100 end
101
102 template "/srv/dev.openstreetmap.org/index.html" do
103   source "dev.html.erb"
104   owner "root"
105   group "root"
106   mode 0o644
107 end
108
109 ssl_certificate "dev.openstreetmap.org" do
110   domains "dev.openstreetmap.org"
111   notifies :reload, "service[apache2]"
112 end
113
114 apache_site "dev.openstreetmap.org" do
115   template "apache.dev.erb"
116 end
117
118 package "phppgadmin"
119
120 template "/etc/phppgadmin/config.inc.php" do
121   source "phppgadmin.conf.erb"
122   owner "root"
123   group "root"
124   mode 0o644
125 end
126
127 file "/etc/apache2/conf.d/phppgadmin" do
128   action :delete
129 end
130
131 ssl_certificate "phppgadmin.dev.openstreetmap.org" do
132   domains "phppgadmin.dev.openstreetmap.org"
133   notifies :reload, "service[apache2]"
134 end
135
136 apache_site "phppgadmin.dev.openstreetmap.org" do
137   template "apache.phppgadmin.erb"
138 end
139
140 search(:accounts, "*:*").each do |account|
141   name = account["id"]
142   details = node[:accounts][:users][name] || {}
143
144   next unless %w[user administrator].include?(details[:status])
145
146   user_home = details[:home] || account["home"] || "#{node[:accounts][:home]}/#{name}"
147
148   next unless File.directory?("#{user_home}/public_html")
149
150   port = 7000 + account["uid"].to_i
151
152   template "/etc/php/7.2/fpm/pool.d/#{name}.conf" do
153     source "fpm.conf.erb"
154     owner "root"
155     group "root"
156     mode 0o644
157     variables :user => name, :port => port
158     notifies :reload, "service[php7.2-fpm]"
159   end
160
161   ssl_certificate "#{name}.dev.openstreetmap.org" do
162     domains ["#{name}.dev.openstreetmap.org", "#{name}.dev.osm.org"]
163     notifies :reload, "service[apache2]"
164   end
165
166   apache_site "#{name}.dev.openstreetmap.org" do
167     template "apache.user.erb"
168     directory "#{user_home}/public_html"
169     variables :user => name, :port => port
170   end
171
172   template "/etc/sudoers.d/#{name}" do
173     source "sudoers.user.erb"
174     owner "root"
175     group "root"
176     mode 0o440
177     variables :user => name
178   end
179 end
180
181 if node[:postgresql][:clusters][:"9.5/main"]
182   postgresql_user "apis" do
183     cluster "9.5/main"
184   end
185
186   template "/usr/local/bin/cleanup-rails-assets" do
187     cookbook "web"
188     source "cleanup-assets.erb"
189     owner "root"
190     group "root"
191     mode 0o755
192   end
193
194   node[:dev][:rails].each do |name, details|
195     database_name = details[:database] || "apis_#{name}"
196     site_name = "#{name}.apis.dev.openstreetmap.org"
197     rails_directory = "/srv/#{name}.apis.dev.openstreetmap.org"
198
199     if details[:repository]
200       site_aliases = details[:aliases] || []
201       secret_key_base = details[:secret_key_base] || SecureRandom.base64(96)
202
203       node.normal[:dev][:rails][name][:secret_key_base] = secret_key_base
204
205       postgresql_database database_name do
206         cluster "9.5/main"
207         owner "apis"
208       end
209
210       postgresql_extension "#{database_name}_btree_gist" do
211         cluster "9.5/main"
212         database database_name
213         extension "btree_gist"
214       end
215
216       rails_port site_name do
217         ruby node[:passenger][:ruby_version]
218         directory rails_directory
219         user "apis"
220         group "apis"
221         repository details[:repository]
222         revision details[:revision]
223         database_port node[:postgresql][:clusters][:"9.5/main"][:port]
224         database_name database_name
225         database_username "apis"
226         memcache_servers ["127.0.0.1"]
227         csp_enforce true
228         run_migrations true
229       end
230
231       template "#{rails_directory}/config/initializers/setup.rb" do
232         source "rails.setup.rb.erb"
233         owner "apis"
234         group "apis"
235         mode 0o644
236         variables :site => site_name
237         notifies :restart, "rails_port[#{site_name}]"
238       end
239
240       ssl_certificate site_name do
241         domains [site_name] + site_aliases
242         notifies :reload, "service[apache2]"
243       end
244
245       apache_site site_name do
246         template "apache.rails.erb"
247         variables :name => site_name, :aliases => site_aliases, :secret_key_base => secret_key_base
248       end
249     else
250       apache_site site_name do
251         action [:delete]
252       end
253
254       directory rails_directory do
255         action :delete
256         recursive true
257       end
258
259       file "/etc/cron.daily/rails-#{site_name.tr('.', '-')}" do
260         action :delete
261       end
262
263       postgresql_database database_name do
264         action :drop
265         cluster "9.5/main"
266       end
267
268       node.normal[:dev][:rails].delete(name)
269     end
270   end
271
272   directory "/srv/apis.dev.openstreetmap.org" do
273     owner "apis"
274     group "apis"
275     mode 0o755
276   end
277
278   template "/srv/apis.dev.openstreetmap.org/index.html" do
279     source "apis.html.erb"
280     owner "apis"
281     group "apis"
282     mode 0o644
283   end
284
285   ssl_certificate "apis.dev.openstreetmap.org" do
286     domains "apis.dev.openstreetmap.org"
287     notifies :reload, "service[apache2]"
288   end
289
290   apache_site "apis.dev.openstreetmap.org" do
291     template "apache.apis.erb"
292   end
293
294   node[:postgresql][:clusters].each_key do |name|
295     postgresql_munin name do
296       cluster name
297       database "ALL"
298     end
299   end
300 end
301
302 directory "/srv/ooc.openstreetmap.org" do
303   owner "root"
304   group "root"
305   mode 0o755
306 end
307
308 remote_directory "/srv/ooc.openstreetmap.org/html" do
309   source "ooc"
310   owner "root"
311   group "root"
312   mode 0o755
313   files_owner "root"
314   files_group "root"
315   files_mode 0o644
316 end
317
318 ssl_certificate "ooc.openstreetmap.org" do
319   domains ["ooc.openstreetmap.org",
320            "a.ooc.openstreetmap.org",
321            "b.ooc.openstreetmap.org",
322            "c.ooc.openstreetmap.org"]
323   notifies :reload, "service[apache2]"
324 end
325
326 apache_site "ooc.openstreetmap.org" do
327   template "apache.ooc.erb"
328 end