hub/Caddyfileblame
View source
e5b523e1{
e5b523e2 on_demand_tls {
e5b523e3 ask http://grove-api:4000/api/pages/ask
e5b523e4 }
e5b523e5}
e5b523e6
9ba59117thegild.app {
cb3a2928 tls /certs/thegild.app.crt /certs/thegild.app.key
cb3a2929
9abbd4110 reverse_proxy thegild-caddy:80
9ba591111
9ba591112 header {
9abbd4113 Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
9abbd4114 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'"
9abbd4115 Referrer-Policy "strict-origin-when-cross-origin"
9abbd4116 Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()"
9ba591117 X-Content-Type-Options nosniff
9ba591118 X-Frame-Options DENY
9ba591119 }
9ba591120}
9ba591121
da0f65122canopy.{$DOMAIN} {
da0f65123 handle /api/auth/* {
da0f65124 reverse_proxy hub-api:4000
da0f65125 }
da0f65126
1da987427 handle /api/canopy/* {
1da987428 reverse_proxy grove-api:4000
1da987429 }
1da987430
da0f65131 handle /api/repos {
da0f65132 reverse_proxy grove-api:4000
da0f65133 }
da0f65134
da0f65135 handle /api/repos/* {
da0f65136 reverse_proxy grove-api:4000
da0f65137 }
da0f65138
da0f65139 handle {
da0f65140 reverse_proxy grove-web:3000
da0f65141 }
da0f65142
da0f65143 header {
da0f65144 X-Content-Type-Options nosniff
da0f65145 X-Frame-Options DENY
da0f65146 }
da0f65147}
da0f65148
fe2e54449ring.{$DOMAIN} {
fe2e54450 handle /api/auth/* {
fe2e54451 reverse_proxy hub-api:4000
fe2e54452 }
fe2e54453
fe2e54454 handle /api/ring/* {
fe2e54455 reverse_proxy grove-api:4000
fe2e54456 }
fe2e54457
fe2e54458 handle /api/repos {
fe2e54459 reverse_proxy grove-api:4000
fe2e54460 }
fe2e54461
fe2e54462 handle /api/repos/* {
fe2e54463 reverse_proxy grove-api:4000
fe2e54464 }
fe2e54465
fe2e54466 handle {
fe2e54467 reverse_proxy grove-web:3000
fe2e54468 }
fe2e54469
fe2e54470 header {
fe2e54471 X-Content-Type-Options nosniff
fe2e54472 X-Frame-Options DENY
fe2e54473 }
fe2e54474}
fe2e54475
4bb999b76isl.{$DOMAIN} {
4bb999b77 handle /ws {
abf167c78 reverse_proxy 172.18.0.1:3011 {
abf167c79 header_down -X-Frame-Options
abf167c80 }
4bb999b81 }
4bb999b82
4bb999b83 handle {
abf167c84 reverse_proxy 172.18.0.1:3011 {
abf167c85 header_down -X-Frame-Options
abf167c86 }
4bb999b87 }
4bb999b88
4bb999b89 header {
4bb999b90 X-Content-Type-Options nosniff
7e5aa7791 Content-Security-Policy "frame-ancestors https://grove.host https://*.grove.host http://grove.test:*"
4bb999b92 }
4bb999b93}
4bb999b94
135dfe595{$DOMAIN} {
5f0fbcf96 handle /v2/* {
5f0fbcf97 reverse_proxy registry:5000
5f0fbcf98 }
5f0fbcf99
8d0dc12100 handle /api/canopy/* {
8d0dc12101 reverse_proxy grove-api:4000
8d0dc12102 }
8d0dc12103
f0bb192104 handle /api/auth/* {
135dfe5105 reverse_proxy hub-api:4000
135dfe5106 }
135dfe5107
4dfd09b108 handle /api/instances {
4dfd09b109 reverse_proxy hub-api:4000
4dfd09b110 }
4dfd09b111
f0bb192112 handle /api/instances/* {
f0bb192113 reverse_proxy hub-api:4000
f0bb192114 }
f0bb192115
79efd41116 handle /api/orgs {
79efd41117 reverse_proxy hub-api:4000
79efd41118 }
79efd41119
79efd41120 handle /api/orgs/* {
79efd41121 reverse_proxy hub-api:4000
79efd41122 }
79efd41123
ffa10b4124 handle /api/repos {
ffa10b4125 reverse_proxy grove-api:4000
ffa10b4126 }
ffa10b4127
f0bb192128 handle /api/repos/* {
f0bb192129 reverse_proxy grove-api:4000
f0bb192130 }
f0bb192131
85f7497132 handle /api/pages/* {
85f7497133 reverse_proxy grove-api:4000
85f7497134 }
85f7497135
4ae9b20136 handle /downloads/* {
4ae9b20137 root * /srv
4ae9b20138 file_server
4ae9b20139 }
4ae9b20140
135dfe5141 handle /health {
135dfe5142 reverse_proxy hub-api:4000
135dfe5143 }
135dfe5144
135dfe5145 handle {
4a006da146 reverse_proxy grove-web:3000
135dfe5147 }
135dfe5148
135dfe5149 header {
135dfe5150 X-Content-Type-Options nosniff
135dfe5151 X-Frame-Options DENY
135dfe5152 }
135dfe5153}
e5b523e154
ff50d03155# Grove Pages — path-based default hosting at pages.grove.host/{owner}/{repo}
ff50d03156pages.{$DOMAIN} {
ff50d03157 root * /srv/pages/sites/_pages
ff50d03158 file_server browse
ff50d03159
ff50d03160 header {
ff50d03161 X-Content-Type-Options nosniff
ff50d03162 X-Frame-Options SAMEORIGIN
ff50d03163 }
ff50d03164}
ff50d03165
ff50d03166# Grove Pages — custom domains
e5b523e167:443 {
e5b523e168 tls {
e5b523e169 on_demand
e5b523e170 }
e5b523e171
e5b523e172 root * /srv/pages/sites/{host}
1688ad1173 file_server browse
e5b523e174
e5b523e175 header {
e5b523e176 X-Content-Type-Options nosniff
e5b523e177 X-Frame-Options SAMEORIGIN
e5b523e178 }
e5b523e179}
9abbd41180
9abbd41181# letterpresslabs.ca — static Grove Pages content + tend signup API
9abbd41182aeternus.ca {
9abbd41183 redir https://letterpresslabs.ca{uri} permanent
9abbd41184}
9abbd41185
9abbd41186letterpresslabs.ca {
9abbd41187 handle {
9abbd41188 root * /srv/pages/sites/letterpresslabs.ca
9abbd41189 file_server
9abbd41190 }
9abbd41191
9abbd41192 header {
9abbd41193 X-Content-Type-Options nosniff
9abbd41194 X-Frame-Options SAMEORIGIN
9abbd41195 }
9abbd41196}
9abbd41197
43c8b35198# Product pages share the site repository's assets and deploy atomically with it.
43c8b35199(letterpress-product) {
43c8b35200 @assets path /product-pages.css /product-login.css /fonts/* /whitebeam-berries.svg /omnibind-clasp.svg /curbpay-curb.svg /curbpay-dollar.svg
43c8b35201 handle @assets {
43c8b35202 root * /srv/pages/sites/letterpresslabs.ca
43c8b35203 file_server
43c8b35204 }
43c8b35205 handle {
43c8b35206 root * /srv/pages/sites/letterpresslabs.ca/{args[0]}
43c8b35207 file_server
43c8b35208 }
43c8b35209 header {
43c8b35210 X-Content-Type-Options nosniff
43c8b35211 X-Frame-Options SAMEORIGIN
43c8b35212 }
43c8b35213}
43c8b35214
43c8b35215whitebeam.letterpresslabs.ca {
43c8b35216 import letterpress-product whitebeam
43c8b35217}
43c8b35218
43c8b35219omnibind.letterpresslabs.ca {
43c8b35220 import letterpress-product omnibind
43c8b35221}
43c8b35222
43c8b35223curbpay.letterpresslabs.ca {
43c8b35224 import letterpress-product curbpay
43c8b35225}
43c8b35226
9abbd41227# bluebellcare.ca — bluebell (hereditary cancer genetics portal). The apex is
9abbd41228# the landing page; tenant subdomains (genaissance., demo.) are served by the
9abbd41229# same bluebell-caddy ingress, which routes by Host. Add new tenants here.
bbf5828230bluebellcare.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 {
9abbd41231 reverse_proxy bluebell-caddy:80
9abbd41232
9abbd41233 header {
9abbd41234 Strict-Transport-Security "max-age=31536000; includeSubDomains"
9abbd41235 Referrer-Policy "strict-origin-when-cross-origin"
9abbd41236 Permissions-Policy "camera=(), microphone=(), geolocation=(), interest-cohort=()"
9abbd41237 X-Content-Type-Options nosniff
9abbd41238 X-Frame-Options DENY
9abbd41239 }
9abbd41240}