Compare commits

...

5 Commits

3 changed files with 162 additions and 74 deletions

41
reset.sh Executable file
View File

@@ -0,0 +1,41 @@
#!/bin/bash
# Script to remove Seafile stack and volumes
STACK_NAME="seafile" # Change this to your actual stack name in Portainer
echo "Removing Seafile stack..."
docker stack rm $STACK_NAME
echo "Waiting for stack to be removed..."
sleep 10
echo "Removing Docker volumes..."
docker volume rm seafile_elasticsearch_data seafile_mysql_data seafile_shared seadoc_shared 2>/dev/null || true
echo "Removing data directories..."
echo "WARNING: This will delete all Seafile data!"
read -p "Are you sure you want to delete the data directories? (yes/no): " confirm
if [ "$confirm" = "yes" ]; then
sudo rm -rf /opt/seafile-elasticsearch/data
sudo rm -rf /opt/seafile-mysql/db
sudo rm -rf /opt/seafile-data
sudo rm -rf /opt/seadoc-data
echo "Creating empty directories..."
sudo mkdir -p /opt/seafile-elasticsearch/data
sudo mkdir -p /opt/seafile-mysql/db
sudo mkdir -p /opt/seafile-data
sudo mkdir -p /opt/seadoc-data
echo "Setting permissions..."
sudo chown -R 1000:1000 /opt/seafile-elasticsearch/data
sudo chown -R 999:999 /opt/seafile-mysql/db
sudo chown -R 1000:1000 /opt/seafile-data
sudo chown -R 1000:1000 /opt/seadoc-data
echo "Done! You can now redeploy the stack with your new admin email."
else
echo "Cancelled. Data directories were not deleted."
fi

55
stack.env.portainer Normal file
View File

@@ -0,0 +1,55 @@
SEAFILE_NODE=crackbox
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=/opt/seafile-elasticsearch/data
SEAFILE_MYSQL_VOLUME=/opt/seafile-mysql/db
SEAFILE_VOLUME=/opt/seafile-data
SEADOC_VOLUME=/opt/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 == crackbox
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,9 @@ services:
memory: 4G
db:
image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
env_file:
- stack.env
image: mariadb:10.11
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 +67,7 @@ services:
<<: *deploy_default
redis:
image: ${SEAFILE_REDIS_IMAGE:-redis}
env_file:
- stack.env
image: redis
command:
- /bin/sh
- -c
@@ -95,56 +91,54 @@ 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=false
- SEAFILE_AI_SERVER_URL=http://seafile-ai:8888
- SEAFILE_AI_SECRET_KEY=51a482da346fa9a7ea050600c30348b367f7a7144b814273e152c2c8f95965cc
- MD_FILE_COUNT_LIMIT=100000
networks:
- net
- public
@@ -162,28 +156,26 @@ services:
labels:
- "traefik.enable=true"
- "traefik.docker.network=public"
- "traefik.http.routers.seafile.rule=Host(`${SEAFILE_SERVER_HOSTNAME}`)"
- "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
@@ -196,7 +188,7 @@ services:
- "traefik.enable=true"
- "traefik.docker.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"
@@ -208,7 +200,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEAFILE_ELASTICSEARCH_VOLUME:-/opt/seafile-elasticsearch/data}
device: /opt/seafile-elasticsearch/data
seafile_mysql_data:
name: seafile_mysql_data
@@ -216,7 +208,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEAFILE_MYSQL_VOLUME:-/opt/seafile-mysql/db}
device: /opt/seafile-mysql/db
seafile_shared:
name: seafile_shared
@@ -224,7 +216,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEAFILE_VOLUME:-/opt/seafile-data}
device: /opt/seafile-data
seadoc_shared:
name: seadoc_shared
@@ -232,7 +224,7 @@ volumes:
driver_opts:
type: none
o: bind
device: ${SEADOC_VOLUME:-/opt/seadoc-data}
device: /opt/seadoc-data
networks:
net: