larry1chan@qq.com 1 jaar geleden
commit
5c8d59da4f
6 gewijzigde bestanden met toevoegingen van 334 en 0 verwijderingen
  1. 10 0
      .env
  2. 2 0
      .gitignore
  3. 68 0
      cleanup.sh
  4. 151 0
      docker-compose.yml
  5. 19 0
      set_config.sh
  6. 84 0
      sync_dir.sh

+ 10 - 0
.env

@@ -0,0 +1,10 @@
+STORAGE_ROOT=/home/orbitzs/projects/nextcloud
+DATA_VOLUME_ROOT=$STORAGE_ROOT/storage
+REDIS_VOLUME_ROOT=$STORAGE_ROOT/storage/metadata/redis
+DB_VOLUME_ROOT=$STORAGE_ROOT/storage/metadata/db
+ELASTIC_SEARCH_ROOT=$STORAGE_ROOT/storage/metadata/elastic
+OO_VOLUME_ROOT=$STORAGE_ROOT/storage/metadata/oo_data
+CLAMAV_ROOT=$STORAGE_ROOT/storage/metadata/clamav
+MYSQL_ROOT_PASSWORD=2eqQ6Rqs
+MYSQL_PASSWORD=VT2cL4Zg
+CONTAINER_NAME=nc20241230

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+storage 
+test

+ 68 - 0
cleanup.sh

@@ -0,0 +1,68 @@
+#!/bin/bash
+source .env
+docker-compose down
+
+purge_dir(){
+
+        rm -Rf $DATA_VOLUME_ROOT
+        mkdir $DATA_VOLUME_ROOT  
+        mkdir $DATA_VOLUME_ROOT/metadata  
+        mkdir $DATA_VOLUME_ROOT/data  
+        mkdir $DATA_VOLUME_ROOT/metadata/elastic  
+        mkdir $DATA_VOLUME_ROOT/metadata/redis  
+        mkdir $DATA_VOLUME_ROOT/metadata/clamav  
+        mkdir $DATA_VOLUME_ROOT/metadata/oo_data  
+        mkdir $DATA_VOLUME_ROOT/metadata/db  
+}
+
+clean_up(){
+	docker volume rm ${CONTAINER_NAME}_files
+	docker volume rm ${CONTAINER_NAME}_db
+	docker volume rm ${CONTAINER_NAME}_clamav 
+	docker volume rm ${CONTAINER_NAME}_oo_data 
+	docker volume rm ${CONTAINER_NAME}_redis
+  	docker volume rm ${CONTAINER_NAME}_es_index
+  	docker volume rm ${CONTAINER_NAME}_es_root
+  
+
+        if [ ! -d "$DATA_VOLUME_ROOT" ]; then
+	        # Try to create the directory
+       		mkdir -p "$DATA_VOLUME_ROOT"
+        else
+                echo "$DATA_VOLUME_ROOT already exists"
+        fi
+	#cd $DATA_VOLUME_ROOT
+	#pwd
+	#sudo rm -Rf ./data
+	#sudo rm -Rf ./metadata
+	#mkdir ./metadata
+	#mkdir ./data
+        #mkdir ./metadata/elastic
+        #mkdir ./metadata/redis
+        #mkdir ./metadata/clamav
+        #mkdir ./metadata/oo_data
+        #mkdir ./metadata/db
+
+	while true; do
+    		read -p "WARNING: Do you wish to proceed. This will ERASE all the data on $DATA_VOLUME_ROOT?" yn
+	    case $yn in
+	        [Yy]* ) purge_dir; break;;
+	        [Nn]* ) exit;;
+	        * ) echo "Please answer yes or no.";;
+	    esac
+	done
+
+
+ 	docker ps
+ 	docker volume ls
+}
+
+while true; do
+    read -p "Do you wish to proceed. This will ERASE all the data on $DATA_VOLUME_ROOT and remove ${CONTAINER_NAME} volumes?" yn
+    case $yn in
+        [Yy]* ) clean_up; break;;
+        [Nn]* ) exit;;
+        * ) echo "Please answer yes or no.";;
+    esac
+done
+

+ 151 - 0
docker-compose.yml

@@ -0,0 +1,151 @@
+version: '3'
+
+volumes:
+  files:
+    name: ${CONTAINER_NAME}_files
+    driver: local
+    driver_opts: 
+      type: volume 
+      o: 'bind'
+      device: "${DATA_VOLUME_ROOT}/data"
+  db:
+    name: ${CONTAINER_NAME}_db
+    driver: local
+    driver_opts: 
+      type: volume 
+      o: 'bind'
+      device: "${DB_VOLUME_ROOT}"
+
+  redis:
+    name: ${CONTAINER_NAME}_redis
+    driver: local
+    driver_opts: 
+      type: volume 
+      o: 'bind'
+      device: "${REDIS_VOLUME_ROOT}"
+
+  es_index:
+    name: ${CONTAINER_NAME}_es_index
+    driver: local
+    driver_opts:
+      type: volume 
+      o: 'bind'
+      device: "${ELASTIC_SEARCH_ROOT}"
+
+  es_root:
+    name: ${CONTAINER_NAME}_es_root
+    driver: local
+    driver_opts:
+      type: volume 
+      o: 'bind'
+      device: "${ELASTIC_SEARCH_ROOT}"
+
+
+  oo_data:
+    name: ${CONTAINER_NAME}_oo_data
+    driver: local
+    driver_opts: 
+      type: volume 
+      o: 'bind'
+      device: "${OO_VOLUME_ROOT}"
+ 
+  clamav:
+    name: ${CONTAINER_NAME}_clamav
+    driver: local
+    driver_opts: 
+      type: volume 
+      o: 'bind'
+      device: "${CLAMAV_ROOT}"
+
+
+services:
+  db:
+    image: mariadb:11.4.2
+    container_name: ${CONTAINER_NAME}_db
+    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
+    restart: "no" 
+    volumes:
+      - db:/var/lib/mysql
+    environment:
+      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
+      - MYSQL_DATABASE=nextcloud
+      - MYSQL_USER=nextcloud
+
+
+  redis:
+    image: redis:7.2.4-alpine
+    container_name: ${CONTAINER_NAME}_redis
+    restart: "no"
+    volumes:
+      - redis:/var/lib/redis
+
+
+  app:
+    image: nextcloud:30.0.4-apache
+    container_name: ${CONTAINER_NAME}
+    ports:
+      - 1234:80
+    links:
+      - db
+      - redis
+    volumes:
+      - files:/var/www/html
+    restart: "no" 
+    environment:
+      - REDIS_HOST=redis
+      - REDIS_PASSWORD=
+      - PHP_MEMORY_LIMIT=1G
+      - PHP_UPLOAD_LIMIT=12G
+
+  cron:
+    image: nextcloud:30.0.4-apache
+    container_name: ${CONTAINER_NAME}_cron
+    links:
+      - db
+      - redis
+    volumes:
+      - files:/var/www/html
+    restart: "no" 
+    entrypoint: /cron.sh
+
+
+  es01:
+    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.23
+    container_name: ${CONTAINER_NAME}_es 
+    environment:
+      - node.name=es01
+      - discovery.type=single-node
+    ulimits:
+      memlock:
+        soft: -1
+        hard: -1
+    volumes:
+      - es_index:/usr/share/elasticsearch/data
+      - es_root:/usr/share/elasticsearch
+    restart: "no" 
+    ports:
+      - 9200:9200
+
+
+  av:
+    container_name: ${CONTAINER_NAME}_clamav 
+    image: mkodockx/docker-clamav:alpine
+    restart: "no" 
+    ports:
+      - 3310:3310
+    volumes:
+      - clamav:/etc/clamav
+
+
+  onlyoffice:
+    container_name: ${CONTAINER_NAME}_onlyoffice
+    image: onlyoffice/documentserver:latest
+    restart: "no"
+    environment:
+      - JWT_SECRET=secret
+    ports:
+      - 9980:80
+    volumes:
+      - oo_data:/var/www/onlyoffice/Data
+      - oo_data:/var/log/onlyoffice

+ 19 - 0
set_config.sh

@@ -0,0 +1,19 @@
+#!/bin/bash
+
+set -x
+
+docker exec -u www-data nc20240608 php occ --no-warnings config:system:get trusted_domains >> trusted_domain.tmp
+
+if ! grep -q "nginx-server" trusted_domain.tmp; then
+    TRUSTED_INDEX=$(cat trusted_domain.tmp | wc -l);
+    docker exec -u www-data nc20240608 php occ --no-warnings config:system:set trusted_domains $TRUSTED_INDEX --value="nginx-server"
+fi
+
+rm trusted_domain.tmp
+
+docker exec -u www-data nc20240608 php occ --no-warnings nc20240608:install onlyoffice
+
+docker exec -u www-data nc20240608 php occ --no-warnings config:system:set onlyoffice DocumentServerUrl --value="/ds-vpath/"
+docker exec -u www-data nc20240608 php occ --no-warnings config:system:set onlyoffice DocumentServerInternalUrl --value="http://onlyoffice-document-server/"
+docker exec -u www-data nc20240608 php occ --no-warnings config:system:set onlyoffice StorageUrl --value="http://nginx-server/"
+docker exec -u www-data nc20240608 php occ --no-warnings config:system:set onlyoffice jwt_secret --value="secret"

+ 84 - 0
sync_dir.sh

@@ -0,0 +1,84 @@
+#!/bin/bash
+
+# Function to display usage information
+usage() {
+    echo "Usage: $0 [-n|--dry-run] <source_directory> <destination_directory>"
+    echo "Options:"
+    echo "  -n, --dry-run    Perform a trial run with no changes made"
+    exit 1
+}
+
+# Default dry run flag
+DRY_RUN=false
+
+# Parse command-line arguments
+ARGS=$(getopt -o n -l dry-run -n "$0" -- "$@")
+if [ $? -ne 0 ]; then
+    usage
+fi
+
+eval set -- "$ARGS"
+
+# Process arguments
+while true; do
+    case "$1" in
+        -n|--dry-run)
+            DRY_RUN=true
+            shift
+            ;;
+        --)
+            shift
+            break
+            ;;
+        *)
+            usage
+            ;;
+    esac
+done
+
+# Check if source and destination paths are provided
+if [ $# -ne 2 ]; then
+    usage
+fi
+
+# Assign input arguments to variables
+SOURCE_DIR="$1"
+DEST_DIR="$2"
+
+# Validate source directory exists
+if [ ! -d "$SOURCE_DIR" ]; then
+    echo "Error: Source directory does not exist"
+    exit 1
+fi
+
+# Create destination directory if it doesn't exist (unless dry run)
+if [ "$DRY_RUN" = false ]; then
+    mkdir -p "$DEST_DIR"
+fi
+
+# Prepare rsync options
+RSYNC_OPTS="-av"
+
+# Add dry run option if specified
+if [ "$DRY_RUN" = true ]; then
+    RSYNC_OPTS+=" --dry-run"
+    echo "=== PERFORMING DRY RUN (NO CHANGES WILL BE MADE) ==="
+fi
+
+# Add compression and delete options
+RSYNC_OPTS+=" -z --delete"
+
+# Perform rsync
+rsync $RSYNC_OPTS "$SOURCE_DIR/" "$DEST_DIR"
+
+# Check rsync exit status
+if [ $? -eq 0 ]; then
+    if [ "$DRY_RUN" = true ]; then
+        echo "Dry run completed successfully. No changes were made."
+    else
+        echo "Synchronization completed successfully"
+    fi
+else
+    echo "Synchronization failed"
+    exit 1
+fi