@@ -29,48 +29,46 @@ regarding FiftyOne Enterprise.
2929
3030## Table of Contents
3131
32- <!-- markdownlint-disable link-fragments -->
33-
3432<!-- toc -->
3533
36- - [ Prerequisites] ( #prerequisites )
37- - [ Step 1: Prepare License File] ( #step-1-prepare-license-file )
38- - [ Step 2: Choose Authentication Mode] ( #step-2-choose-authentication-mode )
39- - [ 👉 Choose your mode] ( #%F0%9F%91%89 -choose-your-mode )
40- - [ Step 3: Configure Environment] ( #step-3-configure-environment )
34+ - [ : white_check_mark : Prerequisites] ( #white_check_mark- prerequisites )
35+ - [ : closed_lock_with_key : Step 1: Prepare License File] ( #closed_lock_with_key- step-1-prepare-license-file )
36+ - [ : file_folder : Step 2: Choose Authentication Mode] ( #file_folder- step-2-choose-authentication-mode )
37+ - [ : point_right : Choose your mode] ( #point_right -choose-your-mode )
38+ - [ : gear : Step 3: Configure Environment] ( #gear- step-3-configure-environment )
4139 - [ 1. Copy the template ` .env ` file] ( #1-copy-the-template-env-file )
4240 - [ 2. Fill out required values in ` .env ` ] ( #2-fill-out-required-values-in-env )
4341 - [ 3. Create a ` compose.override.yaml ` to override configuration] ( #3-create-a-composeoverrideyaml-to-override-configuration )
44- - [ 📦 Official Docker Images] ( #%F0%9F%93%A6 -official-docker-images )
45- - [ Step 4: Initial Deployment] ( #step-4-initial-deployment )
42+ - [ : package : Official Docker Images] ( #package -official-docker-images )
43+ - [ : rocket : Step 4: Initial Deployment] ( #rocket- step-4-initial-deployment )
4644 - [ 1. Enable Database Admin mode] ( #1-enable-database-admin-mode )
4745 - [ 2. Launch the application] ( #2-launch-the-application )
48- - [ Step 5: Configure SSL & Reverse Proxy (Nginx / Load Balancer)] ( #step-5-configure-ssl--reverse-proxy-nginx--load-balancer )
49- - [ 🧭 Routing Overview (Path-Based Proxy)] ( #%F0%9F%A7%AD -routing-overview-path-based-proxy )
50- - [ 📁 Nginx Configuration Options] ( #%F0%9F%93%81 -nginx-configuration-options )
51- - [ 🔹 1. ** Path-Based Routing** ] ( #%F0%9F%94%B9 -1-path-based-routing )
52- - [ 🔹 2. ** Hostname-Based Routing** ] ( #%F0%9F%94%B9 -2-hostname-based-routing )
53- - [ 📄 Notes] ( #%F0%9F%93%84 -notes )
54- - [ Step 6: Configuring FiftyOne Enterprise Plugins] ( #step-6-configuring-fiftyone-enterprise-plugins )
55- - [ 🔹 1. Builtin Plugins Only (Default)] ( #%F0%9F%94%B9 -1-builtin-plugins-only-default )
56- - [ 🔹 2. Shared Plugins (Custom Plugins in ` fiftyone-app ` ) ] ( #%F0%9F%94%B9 -2-shared-plugins-custom-plugins-in-fiftyone-app )
46+ - [ : globe_with_meridians : Step 5: Configure SSL & Reverse Proxy (Nginx / Load Balancer)] ( #globe_with_meridians- step-5-configure-ssl--reverse-proxy-nginx--load-balancer )
47+ - [ : compass : Routing Overview (Path-Based Proxy)] ( #compass -routing-overview-path-based-proxy )
48+ - [ : open_file_folder : Nginx Configuration Options] ( #open_file_folder -nginx-configuration-options )
49+ - [ : small_blue_diamond : 1. ** Path-Based Routing** ] ( #small_blue_diamond -1-path-based-routing )
50+ - [ : small_blue_diamond : 2. ** Hostname-Based Routing** ] ( #small_blue_diamond -2-hostname-based-routing )
51+ - [ : page_facing_up : Notes] ( #page_facing_up -notes )
52+ - [ : jigsaw : Step 6: Configuring FiftyOne Enterprise Plugins] ( #jigsaw- step-6-configuring-fiftyone-enterprise-plugins )
53+ - [ : small_blue_diamond : 1. Builtin Plugins Only (Default)] ( #small_blue_diamond -1-builtin-plugins-only-default )
54+ - [ : small_blue_diamond : 2. Shared Plugins] ( #small_blue_diamond -2-shared-plugins )
5755 - [ Enable shared plugin mode] ( #enable-shared-plugin-mode )
58- - [ 🔹 3. RECOMMENDED: Dedicated Plugins (Isolated ` teams-plugins ` Service) ] ( #%F0%9F%94%B9 -3-recommended-dedicated-plugins-isolated-teams-plugins-service )
56+ - [ : small_blue_diamond : 3. RECOMMENDED: Dedicated Plugins] ( #small_blue_diamond -3-recommended-dedicated-plugins )
5957 - [ Enable dedicated plugin mode] ( #enable-dedicated-plugin-mode )
60- - [ 📌 Notes] ( #%F0%9F%93%8C -notes )
61- - [ Step 7: Configuring FiftyOne Enterprise Delegated Operators] ( #step-7-configuring-fiftyone-enterprise-delegated-operators )
62- - [ 🔧 Enabling Delegated Operator Mode] ( #%F0%9F%94%A7 -enabling-delegated-operator-mode )
58+ - [ : pushpin : Notes] ( #pushpin -notes )
59+ - [ : gear : Step 7: Configuring FiftyOne Enterprise Delegated Operators] ( #gear- step-7-configuring-fiftyone-enterprise-delegated-operators )
60+ - [ : wrench : Enabling Delegated Operator Mode] ( #wrench -enabling-delegated-operator-mode )
6361 - [ Example: Enable on top of ** Dedicated Plugins** mode] ( #example-enable-on-top-of-dedicated-plugins-mode )
64- - [ 📄 Optional: Upload Run Logs] ( #%F0%9F%93%84 -optional-upload-run-logs )
65- - [ 🖥️ GPU-Enabled Workloads] ( #%F0%9F%96%A5%EF%B8%8F -gpu-enabled-workloads )
66- - [ 🧱 Custom Plugin Images] ( #%F0%9F%A7%B1 -custom-plugin-images )
62+ - [ : page_facing_up : Optional: Upload Run Logs] ( #page_facing_up -optional-upload-run-logs )
63+ - [ : desktop_computer : GPU-Enabled Workloads] ( #desktop_computer -gpu-enabled-workloads )
64+ - [ : bricks : Custom Plugin Images] ( #bricks -custom-plugin-images )
6765- [ Step 8: Configuring Authentication (CAS)] ( #step-8-configuring-authentication-cas )
68- - [ 🛠️ Optional: CAS Customization Instructions] ( #%F0%9F%9B%A0%EF%B8%8F -optional-cas-customization-instructions )
69- - [ ℹ️ Notes] ( #%E2%84%B9%EF%B8%8F -notes )
66+ - [ : hammer_and_wrench : Optional: CAS Customization Instructions] ( #hammer_and_wrench -optional-cas-customization-instructions )
67+ - [ : information_source : Notes] ( #information_source -notes )
7068- [ Upgrades] ( #upgrades )
71- - [ 🚫 Disable Automatic Migrations] ( #%F0%9F%9A%AB -disable-automatic-migrations )
72- - [ 🛠️ What Happens If You Migrate with database admin False?] ( #%F0%9F%9B%A0%EF%B8%8F -what-happens-if-you-migrate-with-database-admin-false )
73- - [ 📚 Next Steps] ( #%F0%9F%93%9A -next-steps )
69+ - [ : no_entry_sign : Disable Automatic Migrations] ( #no_entry_sign -disable-automatic-migrations )
70+ - [ : hammer_and_wrench : What Happens If You Migrate with database admin False?] ( #hammer_and_wrench -what-happens-if-you-migrate-with-database-admin-false )
71+ - [ : books : Next Steps] ( #books -next-steps )
7472- [ Known Issues] ( #known-issues )
7573- [ Advanced Configuration] ( #advanced-configuration )
7674 - [ Snapshot Archival] ( #snapshot-archival )
@@ -80,9 +78,7 @@ regarding FiftyOne Enterprise.
8078
8179<!-- tocstop -->
8280
83- <!-- markdownlint-enable link-fragments -->
84-
85- ## Prerequisites
81+ ## :white_check_mark : Prerequisites
8682
8783- Docker and Docker Compose are installed
8884- License file from Voxel51
@@ -98,7 +94,7 @@ regarding FiftyOne Enterprise.
9894 Please note that we do not support MongoDB Atlas Serverless instances
9995 because we require Aggregations.
10096
101- ## Step 1: Prepare License File
97+ ## : closed_lock_with_key : Step 1: Prepare License File
10298
10399> Required for ** v2.0+**
104100
@@ -115,7 +111,7 @@ mv license.key "${LOCAL_LICENSE_FILE_DIR}/license"
115111> picked up immediately, you may need to restart the ` teams-cas ` and ` teams-api `
116112> services.
117113
118- ## Step 2: Choose Authentication Mode
114+ ## : file_folder : Step 2: Choose Authentication Mode
119115
120116FiftyOne Enterprise offers two authentication modes:
121117
@@ -124,15 +120,15 @@ FiftyOne Enterprise offers two authentication modes:
124120- ` internal-auth ` → Choose this mode when in an airgapped deployment - aigapped
125121 deployments will not require network egress to external services.
126122
127- ### 👉 Choose your mode
123+ ### : point_right : Choose your mode
128124
129125Navigate into the appropriate directory:
130126
131127``` bash
132128cd legacy-auth # or internal-auth
133129```
134130
135- ## Step 3: Configure Environment
131+ ## : gear : Step 3: Configure Environment
136132
137133### 1. Copy the template ` .env ` file
138134
@@ -150,7 +146,7 @@ At minimum, configure:
150146- ` FIFTYONE_DATABASE_URI ` – Your MongoDB connection URI
151147- ` FIFTYONE_ENCRYPTION_KEY ` – Used to encrypt storage credentials
152148
153- > 🔑 To generate a key:
149+ > : key : To generate a key:
154150
155151``` bash
156152from cryptography.fernet import Fernet
@@ -171,7 +167,7 @@ services:
171167 FIFTYONE_DATABASE_ADMIN : true # Only for first install
172168` ` `
173169
174- ### 📦 Official Docker Images
170+ ### :package: Official Docker Images
175171
176172Voxel51 publishes the following private FiftyOne Enterprise images to Docker
177173Hub:
184180- ` voxel51/fiftyone-teams-cas`
185181- ` voxel51/fiftyone-teams-cv-full` ← full CV/ML environment
186182
187- > 🔐 For access, contact your Voxel51 support team to obtain Docker Hub
188- > credentials.
183+ > :closed_lock_with_key: For access, contact your Voxel51 support team to obtain
184+ > Docker Hub credentials.
189185
190186You can override the default image used by any service in
191187`compose.override.yaml`. For example :
@@ -196,7 +192,7 @@ services:
196192 image: voxel51/fiftyone-app-torch:v2.10.0
197193` ` `
198194
199- # # Step 4: Initial Deployment
195+ # # :rocket: Step 4: Initial Deployment
200196
201197# ## 1. Enable Database Admin mode
202198
@@ -244,7 +240,7 @@ curl -Iv http://localhost:3000/api/hello
244240# Expected: HTTP/1.1 200 OK
245241` ` `
246242
247- # # Step 5: Configure SSL & Reverse Proxy (Nginx / Load Balancer)
243+ # # :globe_with_meridians: Step 5: Configure SSL & Reverse Proxy (Nginx / Load Balancer)
248244
249245Next, you will need to place a **reverse proxy or SSL endpoint** in front of
250246your FiftyOne Enterprise services. This can be a tool like :
@@ -259,7 +255,7 @@ These proxies will:
259255- Terminate HTTPS/SSL (if using TLS)
260256- Optionally apply authentication headers, logging, or load balancing
261257
262- # ## 🧭 Routing Overview (Path-Based Proxy)
258+ # ## :compass: Routing Overview (Path-Based Proxy)
263259
264260| Path | Proxied To | Description |
265261| ------------- | ----------- | ------------------------------------ |
@@ -270,30 +266,30 @@ These proxies will:
270266| `/_pymongo` | `teams-api` | MongoDB requests via SDK |
271267| `/health` | `teams-api` | Health check endpoint |
272268
273- # ## 📁 Nginx Configuration Options
269+ # ## :open_file_folder: Nginx Configuration Options
274270
275271Voxel51 provides example Nginx configs for two routing strategies :
276272
277- # ### 🔹 1. **Path-Based Routing**
273+ # ### :small_blue_diamond: 1. **Path-Based Routing**
278274
279275All services are routed based on URL path :
280276
281- 📄 Full configuration here :
277+ :page_facing_up : Full configuration here:
282278[`example-nginx-path-routing.conf`](./example-nginx-path-routing.conf)
283279
284- # ### 🔹 2. **Hostname-Based Routing**
280+ # ### :small_blue_diamond: 2. **Hostname-Based Routing**
285281
286282teams-app and teams-api are routed using different subdomain or hostname :
287283
288284- ` fiftyone.your-company.com` → App
289285- ` fiftyone-api.your-company.com` → API
290286
291- 📄 Full configuration here :
287+ :page_facing_up : Full configuration here:
292288
293289- [`example-nginx-site.conf`](./example-nginx-site.conf) (App + CAS)
294290- [`example-nginx-api.conf`](./example-nginx-api.conf) (API)
295291
296- # ## 📄 Notes
292+ # ## :page_facing_up: Notes
297293
298294- FiftyOne Enterprise supports routing traffic through proxy servers. Please
299295 refer to the
@@ -302,20 +298,20 @@ teams-app and teams-api are routed using different subdomain or hostname:
302298- To validate your deployments api connection, see
303299 [Validating Your Deployment](../docs/validating-deployment.md)
304300
305- # # Step 6: Configuring FiftyOne Enterprise Plugins
301+ # # :jigsaw: Step 6: Configuring FiftyOne Enterprise Plugins
306302
307303FiftyOne Enterprise supports three plugin modes : **Builtin**, **Shared**, and
308304**Dedicated**. Each offers different trade-offs in isolation, flexibility, and
309305resource management.
310306
311- # ## 🔹 1. Builtin Plugins Only (Default)
307+ # ## :small_blue_diamond: 1. Builtin Plugins Only (Default)
312308
313309This is the default configuration. It enables only the plugins shipped with the
314310platform.
315311
316- ✅ No additional configuration needed.
312+ :white_check_mark : No additional configuration needed.
317313
318- # ## 🔹 2. Shared Plugins (Custom Plugins in `fiftyone-app`)
314+ # ## :small_blue_diamond: 2. Shared Plugins
319315
320316Custom plugins are run **within the same container** as the app
321317(`fiftyone-app`). Use this if :
@@ -337,7 +333,7 @@ docker compose \
337333
338334> 📁 Plugins will run inside the `fiftyone-app` container.
339335
340- # ## 🔹 3. RECOMMENDED: Dedicated Plugins (Isolated `teams-plugins` Service)
336+ # ## :small_blue_diamond: 3. RECOMMENDED: Dedicated Plugins
341337
342338Custom plugins are run in a **separate `teams-plugins` container**, isolated
343339from the app and API services.
@@ -350,13 +346,13 @@ Use this mode when:
350346
351347# ### Enable dedicated plugin mode
352348
353- 1. Ensure your `.env` file includes the following :
349+ - Ensure your `.env` file includes the following :
354350
355351` ` ` shell
356352FIFTYONE_TEAMS_PLUGIN_URL=http://teams-plugins:5151
357353` ` `
358354
359- 2. Use `compose.dedicated-plugins.yaml` (instead of `compose.yaml`)
355+ - Use `compose.dedicated-plugins.yaml` (instead of `compose.yaml`)
360356
361357` ` ` shell
362358docker compose \
@@ -365,28 +361,28 @@ docker compose \
365361 up -d
366362` ` `
367363
368- 3. Optional : If using a [proxy server](./docs/configuring-proxies.md), ensure
369- the plugin service is excluded from proxying.
364+ - Optional : If using a [proxy server](./docs/configuring-proxies.md), ensure the
365+ plugin service is excluded from proxying.
370366
371367> 🔧 This prevents traffic from being routed incorrectly through your proxy for
372368> internal plugin calls.
373369
374- # ## 📌 Notes
370+ # ## :pushpin: Notes
375371
376372- All plugin modes require persistent storage (volumes) for plugin files.
377373- For multi-node deployments, ensure that the volume is available on all nodes.
378374- To manage and deploy plugins via the UI, go to :
379375 ` https://<your-domain>/settings/plugins`
380376
381- # # Step 7: Configuring FiftyOne Enterprise Delegated Operators
377+ # # :gear: Step 7: Configuring FiftyOne Enterprise Delegated Operators
382378
383379Delegated Operators allow FiftyOne Enterprise to offload plugin execution to
384380**worker containers**, enabling scalable and reliable long-running operations.
385381
386- 🧩 This feature is **compatible with all three plugin modes** : Builtin, Shared ,
387- and Dedicated.
382+ :jigsaw : This feature is **compatible with all three plugin modes**: Builtin,
383+ Shared, and Dedicated.
388384
389- # ## 🔧 Enabling Delegated Operator Mode
385+ # ## :wrench: Enabling Delegated Operator Mode
390386
391387To launch worker containers, include `compose.delegated-operators.yaml`
392388alongside your existing plugin mode.
@@ -401,10 +397,10 @@ docker compose \
401397 up -d
402398` ` `
403399
404- > 📁 This will start a `teams-delegated-operator` service and attach it to the
405- > shared plugin volume.
400+ > :open_file_folder: This will start a `teams-delegated-operator` service and
401+ > attach it to the shared plugin volume.
406402
407- # ## 📄 Optional: Upload Run Logs
403+ # ## :page_facing_up: Optional: Upload Run Logs
408404
409405You can enable **log uploads** for delegated operation runs by setting :
410406
@@ -421,15 +417,15 @@ Logs will be stored in the format:
421417This is useful for auditing, debugging, or monitoring delegated operator
422418executions in shared storage or cloud buckets.
423419
424- # ## 🖥️ GPU-Enabled Workloads
420+ # ## :desktop_computer: GPU-Enabled Workloads
425421
426422FiftyOne services like Delegated Operators can be scheduled on **GPU-enabled
427423hardware** for more efficient computation.
428424
429425To setup containers with GPU resources, see the
430426[configuring GPU workloads documentation](./docs/configuring-gpu-workloads.md).
431427
432- # ## 🧱 Custom Plugin Images
428+ # ## :bricks: Custom Plugin Images
433429
434430If your delegated operators or plugins require **custom dependencies**, build
435431and deploy **custom plugin images**. You can base them on
@@ -444,7 +440,7 @@ and deploy **custom plugin images**. You can base them on
444440FiftyOne Enterprise uses a Central Authentication Service (CAS) introduced in
445441v1.6. This enables centralized login, roles, and user management.
446442
447- # ## 🛠️ Optional: CAS Customization Instructions
443+ # ## :hammer_and_wrench: Optional: CAS Customization Instructions
448444
4494451. Update required CAS variables in `.env` :
450446 - ` FIFTYONE_AUTH_SECRET`
@@ -459,7 +455,7 @@ v1.6. This enables centralized login, roles, and user management.
459455 to bring up services.
4604561. Ensure your proxy (e.g., nginx) forwards `/cas` to the CAS service port.
461457
462- # ## ℹ️ Notes
458+ # ## :information_source: Notes
463459
464460- [Pluggable authentication docs](https://docs.voxel51.com/enterprise/pluggable_auth.html#pluggable-authentication)
465461 includes information on configuring CAS.
@@ -471,7 +467,7 @@ v1.6. This enables centralized login, roles, and user management.
471467When upgrading FiftyOne Enterprise, you must explicitly **prevent automatic
472468database migrations** to avoid breaking active SDK sessions or deployments.
473469
474- # ## 🚫 Disable Automatic Migrations
470+ # ## :no_entry_sign: Disable Automatic Migrations
475471
476472Before running your upgraded containers, set the following override :
477473
@@ -488,7 +484,7 @@ services:
488484The environment variable `FIFTYONE_DATABASE_ADMIN` acts as a safeguard to
489485prevent the database from being modified automatically.
490486
491- # ## 🛠️ What Happens If You Migrate with database admin False?
487+ # ## :hammer_and_wrench: What Happens If You Migrate with database admin False?
492488
493489If `FIFTYONE_DATABASE_ADMIN=false` is set, and a migration attempt is made via
494490CLI :
@@ -528,7 +524,7 @@ dataset version
528524quickstart 0.21.2
529525` ` `
530526
531- # ## 📚 Next Steps
527+ # ## :books: Next Steps
532528
533529After disabling `FIFTYONE_DATABASE_ADMIN`, refer to :
534530
@@ -539,10 +535,10 @@ for complete guidance on upgrading from previous versions
539535# # Known Issues
540536
541537For a list of common issues and their solutions, refer to the
542- [📄 Known Issues documentation](./docs/known-issues.md).
538+ [:page_facing_up : Known Issues documentation](./docs/known-issues.md).
543539
544540If you encounter a new issue, please open a ticket on the
545- [📬 GitHub Issues page](https://github.com/voxel51/fiftyone-teams-app-deploy/issues).
541+ [:mailbox_with_mail : GitHub Issues page](https://github.com/voxel51/fiftyone-teams-app-deploy/issues).
546542
547543# # Advanced Configuration
548544
0 commit comments