Combined landing with repo and serving repo directly via caddy

This commit is contained in:
2025-01-29 14:28:34 +00:00
parent 818675bf38
commit 9cdbdabb65
3 changed files with 144 additions and 10 deletions

View File

@@ -1,3 +1,5 @@
import repo.caddyfile
{
admin off
}
@@ -19,12 +21,7 @@
}
handle /repo* {
uri strip_prefix /repo
reverse_proxy am-d-model-data-repository-frontend:80 {
header_up X-Forwarded-Proto https
header_up X-Forwarded-For {remote}
header_up X-Real-IP {remote}
header_up Host {host}
}
import repo_site
}
}

66
caddy/repo.caddyfile Normal file
View File

@@ -0,0 +1,66 @@
(repo_cors) {
header {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
Access-Control-Allow-Headers "*"
Access-Control-Allow-Credentials true
Strict-Transport-Security "max-age=15768000"
# Request ID tracing
+X-Request-ID {uuid}
}
}
(repo_common_proxy) {
# Equivalent to proxy_request_buffering off
request_body_read_buffer_size 100mb
# Set headers similar to uwsgi_param
header_up Host {host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
header_up X-Request-ID {uuid}
# Remove sensitive headers
header_down -X-Session-ID
header_down -X-User-ID
}
(repo_site) {
import repo_cors
# UI Server routes
handle / {
reverse_proxy repo-web-ui:5000 {
import repo_common_proxy
# Default max upload size 100MB
request_body_max_size 100mb
}
}
# API routes
handle /api/* {
reverse_proxy repo-web-api:5000 {
import repo_common_proxy
# Default max upload size 100MB
request_body_max_size 100mb
}
}
# Large file upload API routes
handle_path /api/records/*/draft/files/*/content {
reverse_proxy repo-web-api:5000 {
import repo_common_proxy
# Max upload size 50GB
request_body_max_size 50gb
encode gzip
}
}
handle /static/* {
root * /opt/invenio/var/instance/static
file_server
}
handle /robots.txt {
root * /opt/invenio/var/instance/static
file_server
}
}

View File

@@ -14,25 +14,96 @@ services:
image: docker.io/library/caddy:latest
depends_on:
- site
- repo-web-ui
networks:
- am-d-model-network
- am-d-model-repo-network
ports:
- "80:80"
- "443:443"
volumes:
- caddy_data:/data
- ./caddy:/etc/caddy
- repo_static_data:/opt/invenio/var/instance/static
restart: unless-stopped
labels:
- "io.containers.autoupdate=registry"
repo-cache:
extends:
file: repo/docker-services.yml
service: cache
networks:
- am-d-model-network
repo-db:
extends:
file: repo/docker-services.yml
service: db
networks:
- am-d-model-network
repo-mq:
extends:
file: repo/docker-services.yml
service: mq
networks:
- am-d-model-network
repo-search:
extends:
file: repo/docker-services.yml
service: search
networks:
- am-d-model-network
repo-s3:
extends:
file: repo/docker-services.yml
service: s3
networks:
- am-d-model-network
# UI Application
repo-web-ui:
extends:
file: repo/docker-services.yml
service: app
command: ["uwsgi /opt/invenio/var/instance/uwsgi_ui.ini"]
image: am-d-model-data-repository:latest
ports:
- "5000"
volumes:
- repo_static_data:/opt/invenio/var/instance/static
networks:
- am-d-model-network
# API Rest Application
repo-web-api:
extends:
file: repo/docker-services.yml
service: app
command: ["uwsgi /opt/invenio/var/instance/uwsgi_rest.ini"]
image: am-d-model-data-repository:latest
ports:
- "5000"
networks:
- am-d-model-network
# Worker
repo-worker:
extends:
file: repo/docker-services.yml
service: app
command: ["celery -A invenio_app.celery worker --beat --loglevel=INFO"]
image: am-d-model-data-repository:latest
depends_on:
repo-search:
condition: service_started
repo-cache:
condition: service_started
repo-db:
condition: service_started
repo-mq:
condition: service_started
networks:
- am-d-model-network
networks:
am-d-model-network:
name: am-d-model-network
am-d-model-repo-network:
name: am-d-model-repo-network
external: true
volumes:
caddy_data:
repo_static_data: