feat(template): add open archiver template (#6593)

Co-authored-by: 🏔️ Peak <122374094+peaklabs-dev@users.noreply.github.com>
This commit is contained in:
Wei S.and🏔️ Peak authored and GitHub committed 2026-01-12 23:41:36 +01:00
1 parent d4957ff3d1
commit ae4ffb0248
3 files changed
+5009 -7920

No files matched your search

+4903 -7920
View File
File diff suppressed because it is too large. Load diff
+19
View File
@@ -0,0 +1,19 @@
<svg width="361" height="361" viewBox="0 0 361 361" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g clip-path="url(#clip0_2_36)">
<mask id="mask0_2_36" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="361" height="361">
<path d="M361 0H0V361H361V0Z" fill="white"/>
</mask>
<g mask="url(#mask0_2_36)">
<path d="M406.486 -45.486H-45.486V406.486H406.486V-45.486Z" fill="url(#pattern0_2_36)"/>
</g>
</g>
<defs>
<pattern id="pattern0_2_36" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_2_36" transform="scale(0.002)"/>
</pattern>
<clipPath id="clip0_2_36">
<rect width="361" height="361" fill="white"/>
</clipPath>
<image id="image0_2_36" width="500" height="500" preserveAspectRatio="none" xlink:href="data:image/png;base64,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 truncated
</defs>
</svg>

After

Width:  |  Height:  |  Size: 164 KiB

+87
View File
@@ -0,0 +1,87 @@
# documentation: https://docs.openarchiver.com/
# slogan: A self-hosted, open-source email archiving solution with full-text search capability.
# tags: email archiving,email,compliance,search
# logo: svgs/openarchiver.svg
# port: 3000
services:
open-archiver:
image: logiclabshq/open-archiver:latest
environment:
- SERVICE_URL_OPENARCHIVER_3000
- ENCRYPTION_KEY=${SERVICE_HEX_32_ENCRYPTIONKEY}
- STORAGE_ENCRYPTION_KEY=${SERVICE_HEX_32_STORAGEENCRYPTIONKEY}
- PORT_BACKEND=${PORT_BACKEND:-4000}
- PORT_FRONTEND=${PORT_FRONTEND:-3000}
- NODE_ENV=${NODE_ENV:-production}
- SYNC_FREQUENCY=${SYNC_FREQUENCY:-* * * * *}
- POSTGRES_DB=${POSTGRES_DB:-open_archive}
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
- DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-open-archiver-db}
- MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILISEARCH}
- MEILI_HOST=http://meilisearch:7700
- REDIS_HOST=valkey
- REDIS_PORT=6379
- REDIS_PASSWORD=${SERVICE_PASSWORD_VALKEY}
- REDIS_TLS_ENABLED=false
- STORAGE_TYPE=${STORAGE_TYPE:-local}
- STORAGE_LOCAL_ROOT_PATH=${STORAGE_LOCAL_ROOT_PATH:-/var/data/open-archiver}
- BODY_SIZE_LIMIT=${BODY_SIZE_LIMIT:-100M}
- STORAGE_S3_ENDPOINT=${STORAGE_S3_ENDPOINT}
- STORAGE_S3_BUCKET=${STORAGE_S3_BUCKET}
- STORAGE_S3_ACCESS_KEY_ID=${STORAGE_S3_ACCESS_KEY_ID}
- STORAGE_S3_SECRET_ACCESS_KEY=${STORAGE_S3_SECRET_ACCESS_KEY}
- STORAGE_S3_REGION=${STORAGE_S3_REGION}
- STORAGE_S3_FORCE_PATH_STYLE=${STORAGE_S3_FORCE_PATH_STYLE:-false}
- JWT_SECRET=${SERVICE_BASE64_128_JWT}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-7d}
- RATE_LIMIT_WINDOW_MS=${RATE_LIMIT_WINDOW_MS:-60000}
- RATE_LIMIT_MAX_REQUESTS=${RATE_LIMIT_MAX_REQUESTS:-100}
volumes:
- archiver-data:/var/data/open-archiver
depends_on:
postgres:
condition: service_healthy
valkey:
condition: service_healthy
meilisearch:
condition: service_healthy
postgres:
image: postgres:17-alpine
environment:
- POSTGRES_DB=${POSTGRES_DB:-open-archiver-db}
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
- LC_ALL=C
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
timeout: 20s
retries: 10
valkey:
image: valkey/valkey:8-alpine
command: valkey-server --requirepass ${SERVICE_PASSWORD_VALKEY}
volumes:
- valkey-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
meilisearch:
image: getmeili/meilisearch:v1.15
environment:
- MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILISEARCH}
volumes:
- meilisearch-data:/meili_data
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:7700/health"]
interval: 2s
timeout: 10s
retries: 15