larry1chan@qq.com vor 1 Jahr
Commit
bbbd927e29
10 geänderte Dateien mit 392 neuen und 0 gelöschten Zeilen
  1. 7 0
      .env
  2. 2 0
      .gitignore
  3. 2 0
      Dockerfile
  4. 0 0
      README.md
  5. 13 0
      bak_nc_db.sh
  6. 68 0
      cleanup.sh
  7. 2 0
      clear_vol_files.sh
  8. 195 0
      docker-compose.yml
  9. 19 0
      set_config.sh
  10. 84 0
      sync_dir.sh

+ 7 - 0
.env

@@ -0,0 +1,7 @@
+STORAGE_ROOT=/home/orbitzs/projects/nc2
+DATA_VOLUME_ROOT=$STORAGE_ROOT/storage
+MYSQL_ROOT_PASSWORD=2eqQ6Rqs
+MYSQL_PASSWORD=123456
+CONTAINER_NAME=nc202501
+DUPLICAT_BACKUP_LOC=/media/orbitzs/nextcloud_files/backup/nc2/duplicati/backups
+NEXTCLOUD_HOST=https://1984.algometic.com

+ 2 - 0
.gitignore

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

+ 2 - 0
Dockerfile

@@ -0,0 +1,2 @@
+FROM nextcloud:30.0.4-apache
+RUN apt-get update && apt-get install -y ffmpeg

+ 0 - 0
README.md


+ 13 - 0
bak_nc_db.sh

@@ -0,0 +1,13 @@
+#
+# https://makeshiftinsights.com/blog/backup-restore-docker-mysql-data/
+#
+#  start docker db
+docker start nc202501_db
+
+#  backup 
+# 
+docker exec -it nc202501_db mariadb-dump -u root --password=2eqQ6Rqs nextcloud > backup.sql
+#
+#  restore
+#docker exec -i nc202501_db mariadb  -u root --password=2eqQ6Rqs  nextcloud < backup.sql
+

+ 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
+

+ 2 - 0
clear_vol_files.sh

@@ -0,0 +1,2 @@
+docker exec -u root -it nc202501_duplicati rm -Rf /source/data/*
+docker exec -u root -it nc202501_duplicati rm -Rf /source/db/*

+ 195 - 0
docker-compose.yml

@@ -0,0 +1,195 @@
+version: '3'
+
+volumes:
+
+
+  files_player1:
+    name: ${CONTAINER_NAME}_files_player1
+    driver: local
+    driver_opts:
+      type: volume
+      o: 'bind'
+      device: "/media/orbitzs/nextcloud_files/apex/player1"
+
+  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
+
+  db_r1:
+    name: ${CONTAINER_NAME}_db_r1
+    driver: local
+
+  redis:
+    name: ${CONTAINER_NAME}_redis
+    driver: local
+
+  es_index:
+    name: ${CONTAINER_NAME}_es_index
+    driver: local
+
+  es_root:
+    name: ${CONTAINER_NAME}_es_root
+    driver: local
+
+
+  oo_data:
+    name: ${CONTAINER_NAME}_oo_data
+    driver: local
+ 
+  clamav:
+    name: ${CONTAINER_NAME}_clamav
+    driver: local
+
+  duplicati_backups:
+    name: ${CONTAINER_NAME}_duplicati
+    driver: local
+    driver_opts: 
+      type: volume 
+      o: 'bind'
+      device: "${DUPLICAT_BACKUP_LOC}"
+    
+
+ 
+
+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
+    #  - db_r1:/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
+    image: nextcloud-ffmpeg-image:latest
+    container_name: ${CONTAINER_NAME}
+    ports:
+      - 1234:80
+    links:
+      - db
+      - redis
+    volumes:
+      - files:/var/www/html
+      - files_player1:/var/www/html/data/player1
+    restart: "no" 
+    environment:
+      - REDIS_HOST=redis
+      - REDIS_PASSWORD=
+      - PHP_MEMORY_LIMIT=1G
+      - PHP_UPLOAD_LIMIT=12G
+    devices:
+      - /dev/dri:/dev/dri # VA-API (omit for NVENC)
+
+
+  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
+
+
+  duplicati:
+    container_name: ${CONTAINER_NAME}_duplicati 
+    image: duplicati/duplicati:latest
+    environment:
+      PUID: 0 
+      PGID: 0 
+      TZ: Asia/Hong_Kong
+      CLI_ARGS: "" # optional
+      SETTINGS_ENCRYPTION_KEY: "secret1234"
+      DUPLICATI__WEBSERVICE_PASSWORD: "123456" #optional
+    volumes:
+      - ./duplicati/appdata/config:/config
+      - duplicati_backups:/backups
+      - db:/source/db
+      - redis:/source/redis
+      - es_index:/source/es_index 
+      - files:/source/data
+    ports:
+      - 8200:8200
+    restart: "no"
+
+  go-vod:
+    container_name: ${CONTAINER_NAME}_govod
+    image: radialapps/go-vod
+    restart: "no" 
+    init: true
+    depends_on:
+      - app 
+    environment:
+      - NEXTCLOUD_HOST=${NEXTCLOUD_HOST}
+      # - NEXTCLOUD_ALLOW_INSECURE=1 # (self-signed certs or no HTTPS)
+      - NVIDIA_VISIBLE_DEVICES=all
+    devices:
+      - /dev/dri:/dev/dri # VA-API (omit for NVENC)
+    volumes:
+      - files:/var/www/html:ro

+ 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