Compare commits

...

11 Commits

Author SHA1 Message Date
767c4106ef Add Seafile AI service configuration to swarm-compose.yml and create original seafile-ai.yml file for enhanced deployment options and service integration. 2025-12-23 03:53:07 -05:00
64bc42e6a8 Update Traefik network configuration in swarm-compose.yml to use 'traefik.swarm.network' instead of 'traefik.docker.network' for improved clarity and consistency in service routing. 2025-12-22 17:06:20 -05:00
436bb671d6 Update Seafile stack configuration by modifying storage paths in stack.env and swarm-compose.yml to point to a new local directory. Introduce a new stack.env.portainer file containing environment variables for Seafile services, enhancing deployment clarity and organization. 2025-12-22 14:56:15 -05:00
039d03df59 Remove reset script and environment configuration for Seafile stack. The reset.sh script and stack.env.portainer file have been deleted to streamline the project structure and eliminate unused components. Update swarm-compose.yml to reflect new directory paths for Seafile data volumes, enhancing organization and clarity in the deployment setup. 2025-12-21 22:41:06 -05:00
555784d7e8 Add custom command options for MariaDB service in swarm-compose.yml to optimize connection handling and timeout settings, enhancing database performance and reliability. 2025-12-21 22:14:17 -05:00
313dde6196 Update environment variables in swarm-compose.yml to set REDIS_PASSWORD to an empty value and enable SEAFILE_AI with additional configuration options for LLM integration, enhancing service capabilities and configuration clarity. 2025-12-21 22:11:37 -05:00
c4bf51094d Refactor swarm-compose.yml to remove environment variable defaults and streamline service configurations. Set fixed values for images and environment variables across services, enhancing clarity and consistency in the Seafile stack setup. 2025-12-21 22:01:31 -05:00
5c0c55537e Add reset script and environment configuration for Seafile stack
Introduced a new reset.sh script to facilitate the removal of the Seafile stack and its associated data directories, with user confirmation to prevent accidental data loss. Additionally, added stack.env.portainer file containing environment variables for Seafile services, enhancing configuration management and deployment consistency.
2025-12-21 21:59:06 -05:00
a4b69e2eaa Update Traefik router rules in swarm-compose.yml to use a fixed hostname 'sf.lab' for Seafile and Seadoc services, enhancing routing consistency. 2025-12-21 21:46:39 -05:00
91cf93a8a1 Update default values for SEAFILE_SERVER_HOSTNAME and JWT_PRIVATE_KEY in swarm-compose.yml for improved configuration consistency and security. 2025-12-21 21:43:11 -05:00
969d66b4de Set default value for INIT_SEAFILE_MYSQL_ROOT_PASSWORD in swarm-compose.yml to enhance security and consistency. 2025-12-21 21:40:57 -05:00
4 changed files with 199 additions and 78 deletions

32
originals/seafile-ai.yml Normal file
View File

@@ -0,0 +1,32 @@
services:
seafile-ai:
image: ${SEAFILE_AI_IMAGE:-seafileltd/seafile-ai:13.0-latest}
container_name: seafile-ai
restart: unless-stopped
volumes:
- ${SEAFILE_VOLUME:-/opt/seafile-data}:/shared
# ports:
# - 8888:8888
environment:
- SEAFILE_AI_LLM_TYPE=${SEAFILE_AI_LLM_TYPE:-openai}
- SEAFILE_AI_LLM_URL=${SEAFILE_AI_LLM_URL:-}
- SEAFILE_AI_LLM_KEY=${SEAFILE_AI_LLM_KEY:-}
- SEAFILE_AI_LLM_MODEL=${SEAFILE_AI_LLM_MODEL:-gpt-4o-mini}
- FACE_EMBEDDING_SERVICE_URL=${FACE_EMBEDDING_SERVICE_URL:-http://face-embedding:8886}
- FACE_EMBEDDING_SERVICE_KEY=${FACE_EMBEDDING_SERVICE_KEY:-${JWT_PRIVATE_KEY:?Variable is not set or empty}}
- SEAFILE_SERVER_URL=${INNER_SEAHUB_SERVICE_URL:-http://seafile}
- JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
- SEAFILE_AI_LOG_LEVEL=${SEAFILE_AI_LOG_LEVEL:-info}
- CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
- REDIS_HOST=${REDIS_HOST:-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
depends_on:
seafile:
condition: service_healthy
networks:
- seafile-net
networks:
seafile-net:
name: seafile-net

View File

@@ -24,7 +24,7 @@ MD_STORAGE_TYPE=$SEAF_SERVER_STORAGE_TYPE # disk, s3
SS_STORAGE_TYPE=$SEAF_SERVER_STORAGE_TYPE # disk, s3
### Local storage path
BASIC_STORAGE_PATH=/opt
BASIC_STORAGE_PATH=/home/trav/seafile
SEAFILE_VOLUME=$BASIC_STORAGE_PATH/seafile-data
SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/seafile-mysql/db
SEAFILE_ELASTICSEARCH_VOLUME=$BASIC_STORAGE_PATH/seafile-elasticsearch/data

55
stack.env.portainer Normal file
View File

@@ -0,0 +1,55 @@
SEAFILE_NODE=little
SEAFILE_IMAGE=seafileltd/seafile-pro-mc:13.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_REDIS_IMAGE=redis
SEAFILE_ELASTICSEARCH_IMAGE=elasticsearch:8.15.0
SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
SEAFILE_ELASTICSEARCH_VOLUME=/home/trav/seafile/seafile-elasticsearch/data
SEAFILE_MYSQL_VOLUME=/home/trav/seafile/seafile-mysql/db
SEAFILE_VOLUME=/home/trav/seafile/seafile-data
SEADOC_VOLUME=/home/trav/seafile/seadoc-data
SEAFILE_SERVER_HOSTNAME=sf.lab
SEAFILE_SERVER_PROTOCOL=http
TIME_ZONE=Etc/UTC
JWT_PRIVATE_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
SEAFILE_MYSQL_DB_HOST=db
SEAFILE_MYSQL_DB_PORT=3306
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=squirtle123456
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
SEADOC_MYSQL_DB_NAME=seahub_db
CACHE_PROVIDER=redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
MEMCACHED_HOST=memcached
MEMCACHED_PORT=11211
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=squirtle123456
INIT_SEAFILE_ADMIN_EMAIL=travis.vas@gmail.com
INIT_SEAFILE_ADMIN_PASSWORD=squirtle123
SEAFILE_SERVICE_URL=http://seafile
SITE_ROOT=/
NON_ROOT=false
SEAFILE_LOG_TO_STDOUT=false
ENABLE_SEADOC=true
SEAF_SERVER_STORAGE_TYPE=disk
S3_COMMIT_BUCKET=
S3_FS_BUCKET=
S3_BLOCK_BUCKET=
S3_KEY_ID=
S3_SECRET_KEY=
S3_USE_V4_SIGNATURE=true
S3_AWS_REGION=us-east-1
S3_HOST=
S3_USE_HTTPS=true
S3_PATH_STYLE_REQUEST=false
S3_SSE_C_KEY=
ENABLE_NOTIFICATION_SERVER=false
INNER_NOTIFICATION_SERVER_URL=http://notification-server:8083
NOTIFICATION_SERVER_URL=
ENABLE_SEAFILE_AI=false
SEAFILE_AI_SERVER_URL=http://seafile-ai:8888
MD_FILE_COUNT_LIMIT=100000

View File

@@ -10,11 +10,11 @@ x-deploy-default: &deploy_default
placement:
constraints:
# IMPORTANT: because these are bind-backed volumes, keep services on the node that has the data paths.
- node.hostname == ${SEAFILE_NODE:-crackbox}
- node.hostname == little
services:
elasticsearch:
image: ${SEAFILE_ELASTICSEARCH_IMAGE:-elasticsearch:8.15.0}
image: elasticsearch:8.15.0
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
@@ -41,11 +41,16 @@ services:
memory: 4G
db:
image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
env_file:
- stack.env
image: mariadb:10.11
command:
- --wait_timeout=28800
- --interactive_timeout=28800
- --max_connections=500
- --net_read_timeout=60
- --net_write_timeout=60
- --max_allowed_packet=64M
environment:
- MARIADB_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-squirtle123456}
- MARIADB_ROOT_PASSWORD=squirtle123456
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
@@ -69,9 +74,7 @@ services:
<<: *deploy_default
redis:
image: ${SEAFILE_REDIS_IMAGE:-redis}
env_file:
- stack.env
image: redis
command:
- /bin/sh
- -c
@@ -82,7 +85,7 @@ services:
redis-server
fi
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
- REDIS_PASSWORD=
networks:
- net
healthcheck:
@@ -95,56 +98,58 @@ services:
<<: *deploy_default
seafile:
image: ${SEAFILE_IMAGE:-seafileltd/seafile-pro-mc:13.0-latest}
env_file:
- stack.env
image: seafileltd/seafile-pro-mc:13.0-latest
volumes:
- seafile_shared:/shared
environment:
- INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
- SEAFILE_MYSQL_DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
- SEAFILE_MYSQL_DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
- SEAFILE_MYSQL_DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
- SEAFILE_MYSQL_DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:-squirtle123456}
- SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME:-ccnet_db}
- SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME:-seafile_db}
- SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}
- TIME_ZONE=${TIME_ZONE:-Etc/UTC}
- INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL:-me@example.com}
- INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD:-asecret}
- SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME:-}
- SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL:-http}
- SITE_ROOT=${SITE_ROOT:-/}
- NON_ROOT=${NON_ROOT:-false}
- JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:-}
- SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT:-false}
- ENABLE_SEADOC=${ENABLE_SEADOC:-true}
- SEADOC_SERVER_URL=${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:-}/sdoc-server
- CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
- REDIS_HOST=${REDIS_HOST:-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
- MEMCACHED_HOST=${MEMCACHED_HOST:-memcached}
- MEMCACHED_PORT=${MEMCACHED_PORT:-11211}
- SEAF_SERVER_STORAGE_TYPE=${SEAF_SERVER_STORAGE_TYPE:-}
- S3_COMMIT_BUCKET=${S3_COMMIT_BUCKET:-}
- S3_FS_BUCKET=${S3_FS_BUCKET:-}
- S3_BLOCK_BUCKET=${S3_BLOCK_BUCKET:-}
- S3_KEY_ID=${S3_KEY_ID:-}
- S3_SECRET_KEY=${S3_SECRET_KEY:-}
- S3_USE_V4_SIGNATURE=${S3_USE_V4_SIGNATURE:-true}
- S3_AWS_REGION=${S3_AWS_REGION:-us-east-1}
- S3_HOST=${S3_HOST:-}
- S3_USE_HTTPS=${S3_USE_HTTPS:-true}
- S3_PATH_STYLE_REQUEST=${S3_PATH_STYLE_REQUEST:-false}
- S3_SSE_C_KEY=${S3_SSE_C_KEY:-}
- ENABLE_NOTIFICATION_SERVER=${ENABLE_NOTIFICATION_SERVER:-false}
- INNER_NOTIFICATION_SERVER_URL=${INNER_NOTIFICATION_SERVER_URL:-http://notification-server:8083}
- NOTIFICATION_SERVER_URL=${NOTIFICATION_SERVER_URL:-${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:-}/notification}
- ENABLE_SEAFILE_AI=${ENABLE_SEAFILE_AI:-false}
- SEAFILE_AI_SERVER_URL=${SEAFILE_AI_SERVER_URL:-http://seafile-ai:8888}
- SEAFILE_AI_SECRET_KEY=${JWT_PRIVATE_KEY:-}
- MD_FILE_COUNT_LIMIT=${MD_FILE_COUNT_LIMIT:-100000}
- INIT_SEAFILE_MYSQL_ROOT_PASSWORD=squirtle123456
- SEAFILE_MYSQL_DB_HOST=db
- SEAFILE_MYSQL_DB_PORT=3306
- SEAFILE_MYSQL_DB_USER=seafile
- SEAFILE_MYSQL_DB_PASSWORD=squirtle123456
- SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
- SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
- SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
- TIME_ZONE=Etc/UTC
- INIT_SEAFILE_ADMIN_EMAIL=travis.vas@gmail.com
- INIT_SEAFILE_ADMIN_PASSWORD=squirtle123
- SEAFILE_SERVER_HOSTNAME=sf.lab
- SEAFILE_SERVER_PROTOCOL=http
- SITE_ROOT=/
- NON_ROOT=false
- JWT_PRIVATE_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
- SEAFILE_LOG_TO_STDOUT=false
- ENABLE_SEADOC=true
- SEADOC_SERVER_URL=http://sf.lab/sdoc-server
- CACHE_PROVIDER=redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=
- MEMCACHED_HOST=memcached
- MEMCACHED_PORT=11211
- SEAF_SERVER_STORAGE_TYPE=disk
- S3_COMMIT_BUCKET=
- S3_FS_BUCKET=
- S3_BLOCK_BUCKET=
- S3_KEY_ID=
- S3_SECRET_KEY=
- S3_USE_V4_SIGNATURE=true
- S3_AWS_REGION=us-east-1
- S3_HOST=
- S3_USE_HTTPS=true
- S3_PATH_STYLE_REQUEST=false
- S3_SSE_C_KEY=
- ENABLE_NOTIFICATION_SERVER=false
- INNER_NOTIFICATION_SERVER_URL=http://notification-server:8083
- NOTIFICATION_SERVER_URL=http://sf.lab/notification
- ENABLE_SEAFILE_AI=true
- SEAFILE_AI_SERVER_URL=http://seafile-ai:8888
- SEAFILE_AI_SECRET_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
- SEAFILE_AI_LLM_TYPE=openai
- SEAFILE_AI_LLM_URL=http://llm.lab
- SEAFILE_AI_LLM_KEY=sk-1234
- SEAFILE_AI_LLM_MODEL=deepseek-v3p2
- MD_FILE_COUNT_LIMIT=100000
networks:
- net
- public
@@ -161,29 +166,27 @@ services:
<<: *deploy_default
labels:
- "traefik.enable=true"
- "traefik.docker.network=public"
- "traefik.http.routers.seafile.rule=Host(`${SEAFILE_SERVER_HOSTNAME}`)"
- "traefik.swarm.network=public"
- "traefik.http.routers.seafile.rule=Host(`sf.lab`)"
- "traefik.http.routers.seafile.entrypoints=web"
- "traefik.http.services.seafile.loadbalancer.server.port=80"
# Ensure Seadoc path routers win
- "traefik.http.routers.seafile.priority=10"
seadoc:
image: ${SEADOC_IMAGE:-seafileltd/sdoc-server:2.0-latest}
env_file:
- stack.env
image: seafileltd/sdoc-server:2.0-latest
volumes:
- seadoc_shared:/shared
environment:
- DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
- DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
- DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
- DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:-squirtle123456}
- DB_NAME=${SEADOC_MYSQL_DB_NAME:-${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}}
- TIME_ZONE=${TIME_ZONE:-Etc/UTC}
- JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:-}
- NON_ROOT=${NON_ROOT:-false}
- SEAHUB_SERVICE_URL=${SEAFILE_SERVICE_URL:-http://seafile}
- DB_HOST=db
- DB_PORT=3306
- DB_USER=seafile
- DB_PASSWORD=squirtle123456
- DB_NAME=seahub_db
- TIME_ZONE=Etc/UTC
- JWT_PRIVATE_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
- NON_ROOT=false
- SEAHUB_SERVICE_URL=http://seafile
networks:
- net
- public
@@ -194,13 +197,44 @@ services:
<<: *deploy_default
labels:
- "traefik.enable=true"
- "traefik.docker.network=public"
- "traefik.swarm.network=public"
# Route Seadoc endpoints on the same host:
- "traefik.http.routers.seadoc.rule=Host(`${SEAFILE_SERVER_HOSTNAME}`) && (PathPrefix(`/socket.io`) || PathPrefix(`/sdoc-server`))"
- "traefik.http.routers.seadoc.rule=Host(`sf.lab`) && (PathPrefix(`/socket.io`) || PathPrefix(`/sdoc-server`))"
- "traefik.http.routers.seadoc.entrypoints=web"
- "traefik.http.routers.seadoc.priority=100"
- "traefik.http.services.seadoc.loadbalancer.server.port=80"
seafile-ai:
image: seafileltd/seafile-ai:13.0-latest
volumes:
- seafile_shared:/shared
environment:
- SEAFILE_AI_LLM_TYPE=openai
- SEAFILE_AI_LLM_URL=http://llm.lab
- SEAFILE_AI_LLM_KEY=sk-1234
- SEAFILE_AI_LLM_MODEL=deepseek-v3p2
- FACE_EMBEDDING_SERVICE_URL=http://face-embedding:8886
- FACE_EMBEDDING_SERVICE_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
- SEAFILE_SERVER_URL=http://seafile
- JWT_PRIVATE_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
- SEAFILE_AI_LOG_LEVEL=info
- CACHE_PROVIDER=redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=
networks:
- net
expose:
- "8888"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8888/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
<<: *deploy_default
volumes:
seafile_elasticsearch_data:
name: seafile_elasticsearch_data
@@ -208,7 +242,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEAFILE_ELASTICSEARCH_VOLUME:-/opt/seafile-elasticsearch/data}
device: /home/trav/seafile/seafile-elasticsearch/data
seafile_mysql_data:
name: seafile_mysql_data
@@ -216,7 +250,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEAFILE_MYSQL_VOLUME:-/opt/seafile-mysql/db}
device: /home/trav/seafile/seafile-mysql/db
seafile_shared:
name: seafile_shared
@@ -224,7 +258,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEAFILE_VOLUME:-/opt/seafile-data}
device: /home/trav/seafile/seafile-data
seadoc_shared:
name: seadoc_shared
@@ -232,7 +266,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEADOC_VOLUME:-/opt/seadoc-data}
device: /home/trav/seafile/seadoc-data
networks:
net: