feat(send): add role for self-hosted Send file-share service
Deploys timvisee/send with a Redis backend behind Traefik. Supports local-disk or S3 storage (e.g. via the garage role). Uses the shared `*_domains` list convention so the router can accept internal *.int.* names alongside the canonical BASE_URL host.
This commit is contained in:
parent
78095cca1d
commit
de947dd8a4
7 changed files with 236 additions and 0 deletions
69
roles/send/templates/docker-compose.yml.j2
Normal file
69
roles/send/templates/docker-compose.yml.j2
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
services:
|
||||
{{ send_service_name }}:
|
||||
image: {{ send_image }}
|
||||
container_name: {{ send_service_name }}
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- {{ send_redis_service_name }}
|
||||
networks:
|
||||
- {{ send_traefik_network }}
|
||||
- {{ send_internal_network }}
|
||||
{% if send_extra_hosts is defined and send_extra_hosts | length > 0 %}
|
||||
extra_hosts:
|
||||
{% for host in send_extra_hosts %}
|
||||
- "{{ host }}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
environment:
|
||||
{% if send_use_ssl %}
|
||||
BASE_URL: "https://{{ send_domains[0] }}"
|
||||
{% else %}
|
||||
BASE_URL: "http://{{ send_domains[0] }}"
|
||||
{% endif %}
|
||||
REDIS_HOST: "{{ send_redis_service_name }}"
|
||||
REDIS_PORT: "6379"
|
||||
MAX_FILE_SIZE: "{{ send_max_file_size }}"
|
||||
DEFAULT_DOWNLOADS: "{{ send_default_downloads }}"
|
||||
MAX_DOWNLOADS: "{{ send_max_downloads }}"
|
||||
DEFAULT_EXPIRE_SECONDS: "{{ send_default_expire_seconds }}"
|
||||
MAX_EXPIRE_SECONDS: "{{ send_max_expire_seconds }}"
|
||||
MAX_FILES_PER_ARCHIVE: "{{ send_max_files_per_archive }}"
|
||||
DOWNLOAD_COUNTS: "{{ send_download_counts }}"
|
||||
EXPIRE_TIMES_SECONDS: "{{ send_expire_times_seconds }}"
|
||||
{% if send_storage_backend == "s3" %}
|
||||
S3_BUCKET: "{{ send_s3_bucket }}"
|
||||
S3_ENDPOINT: "{{ send_s3_endpoint }}"
|
||||
S3_USE_PATH_STYLE_ENDPOINT: "{{ 'true' if send_s3_use_path_style else 'false' }}"
|
||||
AWS_ACCESSKEYID: "{{ send_s3_access_key }}"
|
||||
AWS_SECRETACCESSKEY: "{{ send_s3_secret_key }}"
|
||||
AWS_REGION: "{{ send_s3_region }}"
|
||||
{% else %}
|
||||
FILE_DIR: "/uploads"
|
||||
volumes:
|
||||
- {{ send_docker_volume_dir }}/uploads:/uploads
|
||||
{% endif %}
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network={{ send_traefik_network }}
|
||||
- traefik.http.routers.{{ send_service_name }}.rule=Host({% for d in send_domains %}`{{ d }}`{% if not loop.last %}, {% endif %}{% endfor %})
|
||||
- traefik.http.services.{{ send_service_name }}.loadbalancer.server.port={{ send_port }}
|
||||
{% if send_use_ssl %}
|
||||
- traefik.http.routers.{{ send_service_name }}.entrypoints=websecure
|
||||
- traefik.http.routers.{{ send_service_name }}.tls=true
|
||||
{% else %}
|
||||
- traefik.http.routers.{{ send_service_name }}.entrypoints=web
|
||||
{% endif %}
|
||||
|
||||
{{ send_redis_service_name }}:
|
||||
image: {{ send_redis_image }}
|
||||
container_name: {{ send_redis_service_name }}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- {{ send_internal_network }}
|
||||
volumes:
|
||||
- {{ send_docker_volume_dir }}/redis:/data
|
||||
|
||||
networks:
|
||||
{{ send_internal_network }}:
|
||||
{{ send_traefik_network }}:
|
||||
external: true
|
||||
Loading…
Add table
Add a link
Reference in a new issue