Skip to content

Commit df54fb6

Browse files
committed
Add support for S3 storage backend
- Use for alpha instances - Add minio as helm chart dependency
1 parent 050c32d commit df54fb6

File tree

7 files changed

+93
-4
lines changed

7 files changed

+93
-4
lines changed

deploy/helm/ifrcgo-helm/Chart.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@ dependencies:
1515
version: 16.4.9
1616
condition: postgresql.enabled
1717
repository: https://charts.bitnami.com/bitnami
18+
- name: minio
19+
version: 15.0.3
20+
condition: minio.enabled
21+
repository: https://charts.bitnami.com/bitnami

deploy/helm/ifrcgo-helm/requirements.lock

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@ dependencies:
55
- name: postgresql
66
repository: https://charts.bitnami.com/bitnami
77
version: 16.4.9
8-
digest: sha256:ccb7b5c911cae85ec6358f0cf09db34c2fa53a0ebb11fa8ba0426ba991e89c18
9-
generated: "2025-02-18T16:12:59.123394069+05:45"
8+
- name: minio
9+
repository: https://charts.bitnami.com/bitnami
10+
version: 15.0.3
11+
digest: sha256:a4d204e014228cb7670468d6ec03f567918084eb4bc2f7429b2ec6531bdc2681
12+
generated: "2025-02-18T16:16:13.450899724+05:45"

deploy/helm/ifrcgo-helm/templates/config/secret.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ stringData:
2525
DJANGO_DB_PORT: {{ .Values.env.DJANGO_DB_PORT | quote }}
2626
{{- end }}
2727

28+
# Minio
29+
{{- if .Values.minio.enabled }}
30+
AWS_S3_ENABLED: "true"
31+
AWS_S3_ENDPOINT_URL: "https://{{ .Values.minio.apiIngress.hostname }}/"
32+
AWS_S3_ACCESS_KEY_ID: {{ required ".Values.minio.auth.rootUser" .Values.minio.auth.rootUser }}
33+
AWS_S3_SECRET_ACCESS_KEY: {{ required ".Values.minio.auth.rootPassword" .Values.minio.auth.rootPassword }}
34+
AWS_S3_REGION_NAME: "us-east-1"
35+
AWS_S3_MEDIA_BUCKET_NAME: "go-data"
36+
AWS_S3_STATIC_BUCKET_NAME: "go-static"
37+
{{- end }}
38+
2839
AZURE_STORAGE_ACCOUNT: "{{ .Values.env.AZURE_STORAGE_ACCOUNT }}"
2940
AZURE_STORAGE_KEY: "{{ .Values.env.AZURE_STORAGE_KEY }}"
3041
EMAIL_API_ENDPOINT: "{{ .Values.env.EMAIL_API_ENDPOINT }}"

deploy/helm/ifrcgo-helm/values.yaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,37 @@ redis:
102102
cpu: "1"
103103
memory: 2Gi
104104

105+
# https://artifacthub.io/packages/helm/bitnami/minio
106+
# extraEnvVars: https://github.com/bitnami/containers/blob/main/bitnami/minio/README.md#environment-variables
107+
minio:
108+
enabled: false # XXX: Used for alpha instances running outside Azure
109+
disableWebUI: true
110+
mode: standalone
111+
fullnameOverride: go-minio
112+
global:
113+
defaultStorageClass:
114+
apiIngress:
115+
enabled: true
116+
ingressClassName:
117+
hostname:
118+
annotations:
119+
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
120+
auth:
121+
forceNewKeys: True
122+
rootUser: go
123+
rootPassword:
124+
persistence:
125+
enabled: true
126+
size: 1Gi
127+
defaultBuckets: go-data,go-static
128+
provisioning:
129+
enabled: true
130+
resourcesPreset: "nano"
131+
cleanupAfterFinished:
132+
enabled: true
133+
extraCommands:
134+
- "mc anonymous set download provisioning/go-static"
135+
105136
postgresql:
106137
enabled: false # XXX: Used for alpha instances running outside Azure
107138
fullnameOverride: "go-pg"

main/settings.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@
4646
AZURE_STORAGE_KEY=(str, None),
4747
AZURE_STORAGE_TOKEN_CREDENTIAL=(str, None),
4848
AZURE_STORAGE_MANAGED_IDENTITY=(bool, False),
49+
# -- S3 storage
50+
AWS_S3_ENABLED=(bool, False),
51+
AWS_S3_ENDPOINT_URL=(str, None),
52+
AWS_S3_ACCESS_KEY_ID=str,
53+
AWS_S3_SECRET_ACCESS_KEY=str,
54+
AWS_S3_REGION_NAME=str,
55+
AWS_S3_MEDIA_BUCKET_NAME=str,
56+
AWS_S3_STATIC_BUCKET_NAME=str,
4957
# -- Filesystem (default) XXX: Don't use for production
5058
DJANGO_MEDIA_ROOT=(str, os.path.join(BASE_DIR, "media")),
5159
DJANGO_STATIC_ROOT=(str, os.path.join(BASE_DIR, "static")),
@@ -500,6 +508,38 @@ def parse_domain(*env_keys: str) -> str:
500508
# },
501509
# },
502510
}
511+
512+
# NOTE: This is used for instances outside azure environment
513+
elif env("AWS_S3_ENABLED"):
514+
AWS_S3_CONFIG_OPTIONS = {
515+
"endpoint_url": env("AWS_S3_ENDPOINT_URL"),
516+
"access_key": env("AWS_S3_ACCESS_KEY_ID"),
517+
"secret_key": env("AWS_S3_SECRET_ACCESS_KEY"),
518+
"region_name": env("AWS_S3_REGION_NAME"),
519+
}
520+
521+
STORAGES = {
522+
"default": {
523+
"BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
524+
"OPTIONS": {
525+
**AWS_S3_CONFIG_OPTIONS,
526+
"bucket_name": env("AWS_S3_MEDIA_BUCKET_NAME"),
527+
"location": "media/",
528+
"file_overwrite": False,
529+
},
530+
},
531+
"staticfiles": {
532+
"BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
533+
"OPTIONS": {
534+
**AWS_S3_CONFIG_OPTIONS,
535+
"bucket_name": env("AWS_S3_STATIC_BUCKET_NAME"),
536+
"querystring_auth": False,
537+
"location": "static/",
538+
"file_overwrite": True,
539+
},
540+
},
541+
}
542+
503543
else:
504544
# Filesystem
505545
MEDIA_ROOT = env("DJANGO_MEDIA_ROOT")

poetry.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ django-modeltranslation = "==0.17.5"
4141
django-read-only = "==1.12.0"
4242
django-reversion-compare = "==0.16.2"
4343
django-reversion = "==5.0.12"
44-
django-storages = { version = "==1.11.1", extras = ["azure"] }
44+
django-storages = { version = "==1.11.1", extras = ["s3", "azure"] }
4545
django-tinymce = "==4.1.0"
4646
django-oauth-toolkit = "3.0.1"
4747
djangorestframework-csv = "==2.1.1"

0 commit comments

Comments
 (0)