5.4 KB241 lines
Blame
1{
2 on_demand_tls {
3 ask http://grove-api:4000/api/pages/ask
4 }
5}
6
7thegild.app {
8 tls /certs/thegild.app.crt /certs/thegild.app.key
9
10 reverse_proxy thegild-caddy:80
11
12 header {
13 Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
14 Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'"
15 Referrer-Policy "strict-origin-when-cross-origin"
16 Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()"
17 X-Content-Type-Options nosniff
18 X-Frame-Options DENY
19 }
20}
21
22canopy.{$DOMAIN} {
23 handle /api/auth/* {
24 reverse_proxy hub-api:4000
25 }
26
27 handle /api/canopy/* {
28 reverse_proxy grove-api:4000
29 }
30
31 handle /api/repos {
32 reverse_proxy grove-api:4000
33 }
34
35 handle /api/repos/* {
36 reverse_proxy grove-api:4000
37 }
38
39 handle {
40 reverse_proxy grove-web:3000
41 }
42
43 header {
44 X-Content-Type-Options nosniff
45 X-Frame-Options DENY
46 }
47}
48
49ring.{$DOMAIN} {
50 handle /api/auth/* {
51 reverse_proxy hub-api:4000
52 }
53
54 handle /api/ring/* {
55 reverse_proxy grove-api:4000
56 }
57
58 handle /api/repos {
59 reverse_proxy grove-api:4000
60 }
61
62 handle /api/repos/* {
63 reverse_proxy grove-api:4000
64 }
65
66 handle {
67 reverse_proxy grove-web:3000
68 }
69
70 header {
71 X-Content-Type-Options nosniff
72 X-Frame-Options DENY
73 }
74}
75
76isl.{$DOMAIN} {
77 handle /ws {
78 reverse_proxy 172.18.0.1:3011 {
79 header_down -X-Frame-Options
80 }
81 }
82
83 handle {
84 reverse_proxy 172.18.0.1:3011 {
85 header_down -X-Frame-Options
86 }
87 }
88
89 header {
90 X-Content-Type-Options nosniff
91 Content-Security-Policy "frame-ancestors https://grove.host https://*.grove.host http://grove.test:*"
92 }
93}
94
95{$DOMAIN} {
96 handle /v2/* {
97 reverse_proxy registry:5000
98 }
99
100 handle /api/canopy/* {
101 reverse_proxy grove-api:4000
102 }
103
104 handle /api/auth/* {
105 reverse_proxy hub-api:4000
106 }
107
108 handle /api/instances {
109 reverse_proxy hub-api:4000
110 }
111
112 handle /api/instances/* {
113 reverse_proxy hub-api:4000
114 }
115
116 handle /api/orgs {
117 reverse_proxy hub-api:4000
118 }
119
120 handle /api/orgs/* {
121 reverse_proxy hub-api:4000
122 }
123
124 handle /api/repos {
125 reverse_proxy grove-api:4000
126 }
127
128 handle /api/repos/* {
129 reverse_proxy grove-api:4000
130 }
131
132 handle /api/pages/* {
133 reverse_proxy grove-api:4000
134 }
135
136 handle /downloads/* {
137 root * /srv
138 file_server
139 }
140
141 handle /health {
142 reverse_proxy hub-api:4000
143 }
144
145 handle {
146 reverse_proxy grove-web:3000
147 }
148
149 header {
150 X-Content-Type-Options nosniff
151 X-Frame-Options DENY
152 }
153}
154
155# Grove Pages — path-based default hosting at pages.grove.host/{owner}/{repo}
156pages.{$DOMAIN} {
157 root * /srv/pages/sites/_pages
158 file_server browse
159
160 header {
161 X-Content-Type-Options nosniff
162 X-Frame-Options SAMEORIGIN
163 }
164}
165
166# Grove Pages — custom domains
167:443 {
168 tls {
169 on_demand
170 }
171
172 root * /srv/pages/sites/{host}
173 file_server browse
174
175 header {
176 X-Content-Type-Options nosniff
177 X-Frame-Options SAMEORIGIN
178 }
179}
180
181# letterpresslabs.ca — static Grove Pages content + tend signup API
182aeternus.ca {
183 redir https://letterpresslabs.ca{uri} permanent
184}
185
186letterpresslabs.ca {
187 handle {
188 root * /srv/pages/sites/letterpresslabs.ca
189 file_server
190 }
191
192 header {
193 X-Content-Type-Options nosniff
194 X-Frame-Options SAMEORIGIN
195 }
196}
197
198# Product pages share the site repository's assets and deploy atomically with it.
199(letterpress-product) {
200 @assets path /product-pages.css /product-login.css /fonts/* /whitebeam-berries.svg /omnibind-clasp.svg /curbpay-curb.svg /curbpay-dollar.svg
201 handle @assets {
202 root * /srv/pages/sites/letterpresslabs.ca
203 file_server
204 }
205 handle {
206 root * /srv/pages/sites/letterpresslabs.ca/{args[0]}
207 file_server
208 }
209 header {
210 X-Content-Type-Options nosniff
211 X-Frame-Options SAMEORIGIN
212 }
213}
214
215whitebeam.letterpresslabs.ca {
216 import letterpress-product whitebeam
217}
218
219omnibind.letterpresslabs.ca {
220 import letterpress-product omnibind
221}
222
223curbpay.letterpresslabs.ca {
224 import letterpress-product curbpay
225}
226
227# bluebellcare.ca — bluebell (hereditary cancer genetics portal). The apex is
228# the landing page; tenant subdomains (genaissance., demo.) are served by the
229# same bluebell-caddy ingress, which routes by Host. Add new tenants here.
230bluebellcare.ca, www.bluebellcare.ca, demo.bluebellcare.ca, genaissance.bluebellcare.ca, healica.bluebellcare.ca, clinique1037.bluebellcare.ca, genomicare.bluebellcare.ca, genolife.bluebellcare.ca, magic.bluebellcare.ca, medcan.bluebellcare.ca, dnaide.bluebellcare.ca, sunnybrook.bluebellcare.ca, nygh.bluebellcare.ca, trillium.bluebellcare.ca, hamilton.bluebellcare.ca {
231 reverse_proxy bluebell-caddy:80
232
233 header {
234 Strict-Transport-Security "max-age=31536000; includeSubDomains"
235 Referrer-Policy "strict-origin-when-cross-origin"
236 Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()"
237 X-Content-Type-Options nosniff
238 X-Frame-Options DENY
239 }
240}
241