Updates
This commit is contained in:
@@ -1,23 +0,0 @@
|
|||||||
# Backend
|
|
||||||
API_BASE_URL=http://localhost:3000/api/v1
|
|
||||||
APP_NAME=Caddy Manager
|
|
||||||
DARK_MODE=true
|
|
||||||
# Frontend
|
|
||||||
PORT=3000
|
|
||||||
# Database Engine Configuration
|
|
||||||
DB_ENGINE=sqlite # Options: 'sqlite' or 'mongodb'
|
|
||||||
# SQLite Configuration (used when DB_ENGINE=sqlite)
|
|
||||||
SQLITE_DB_PATH=./caddymanager.sqlite
|
|
||||||
# MongoDB Configuration (used when DB_ENGINE=mongodb)
|
|
||||||
MONGO_USERNAME=mongoadmin
|
|
||||||
MONGO_PASSWORD=QaG33feoWfL2W7F9AuRYTS2N4Bm94hEA
|
|
||||||
MONGODB_URI=mongodb://mongoadmin:QaG33feoWfL2W7F9AuRYTS2N4Bm94hEA@localhost:27017/caddymanager?authSource=admin
|
|
||||||
CORS_ORIGIN=http://localhost:5173
|
|
||||||
LOG_LEVEL=debug
|
|
||||||
CADDY_SANDBOX_URL=http://localhost:2019
|
|
||||||
PING_INTERVAL=30000
|
|
||||||
PING_TIMEOUT=2000
|
|
||||||
AUDIT_LOG_MAX_SIZE_MB=100
|
|
||||||
AUDIT_LOG_RETENTION_DAYS=90
|
|
||||||
JWT_SECRET=YPKCVW8qEEshVN6BHPb6tq4YdhQpdQrR
|
|
||||||
JWT_EXPIRATION=24h
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
# bob
|
|
||||||
# https://github.com/caddymanager
|
|
||||||
---
|
|
||||||
name: caddymanager
|
|
||||||
|
|
||||||
networks:
|
|
||||||
caddymanager:
|
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
mongodb_data: # Only used when MongoDB profile is active
|
|
||||||
sqlite_data: # SQLite database storage
|
|
||||||
|
|
||||||
services:
|
|
||||||
# MongoDB database for persistent storage (optional - SQLite is used by default)
|
|
||||||
mongodb:
|
|
||||||
image: mongo:8.0
|
|
||||||
container_name: caddymanager-mongodb
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USERNAME:-mongoadmin}
|
|
||||||
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD:-someSecretPassword} # Change for production!
|
|
||||||
ports:
|
|
||||||
- "27017:27017" # Expose for local dev, remove for production
|
|
||||||
volumes:
|
|
||||||
- mongodb_data:/data/db
|
|
||||||
networks:
|
|
||||||
- caddymanager
|
|
||||||
profiles:
|
|
||||||
- mongodb # Use 'docker-compose --profile mongodb up' to include MongoDB
|
|
||||||
|
|
||||||
# Backend API server
|
|
||||||
backend:
|
|
||||||
image: caddymanager/caddymanager-backend:latest
|
|
||||||
container_name: caddymanager-backend
|
|
||||||
restart: unless-stopped
|
|
||||||
environment:
|
|
||||||
- PORT=3000
|
|
||||||
# Database Engine Configuration (defaults to SQLite)
|
|
||||||
- DB_ENGINE=sqlite # Options: 'sqlite' or 'mongodb'
|
|
||||||
# SQLite Configuration (used when DB_ENGINE=sqlite)
|
|
||||||
- SQLITE_DB_PATH=/app/data/caddymanager.sqlite
|
|
||||||
# MongoDB Configuration (used when DB_ENGINE=mongodb)
|
|
||||||
- MONGODB_URI=mongodb://$${MONGO_USERNAME:-mongoadmin}:$${MONGO_PASSWORD:-someSecretPassword}@mongodb:27017/caddymanager?authSource=admin
|
|
||||||
- CORS_ORIGIN=http://localhost:80
|
|
||||||
- LOG_LEVEL=debug
|
|
||||||
- CADDY_SANDBOX_URL=http://localhost:2019
|
|
||||||
- PING_INTERVAL=30000
|
|
||||||
- PING_TIMEOUT=2000
|
|
||||||
- AUDIT_LOG_MAX_SIZE_MB=100
|
|
||||||
- AUDIT_LOG_RETENTION_DAYS=90
|
|
||||||
- METRICS_HISTORY_MAX=1000 # Optional: max number of in-memory metric history snapshots to keep
|
|
||||||
- JWT_SECRET=YPKCVW8qEEshVN6BHPb6tq4YdhQpdQrR
|
|
||||||
- JWT_EXPIRATION=24h
|
|
||||||
# Backend is now only accessible through frontend proxy
|
|
||||||
volumes:
|
|
||||||
- sqlite_data:/app/data # SQLite database storage
|
|
||||||
networks:
|
|
||||||
- caddymanager
|
|
||||||
|
|
||||||
# Frontend web UI
|
|
||||||
frontend:
|
|
||||||
image: caddymanager/caddymanager-frontend:latest
|
|
||||||
container_name: caddymanager-frontend
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
- backend
|
|
||||||
environment:
|
|
||||||
- BACKEND_HOST=backend:3000
|
|
||||||
- APP_NAME=Caddy Manager
|
|
||||||
- DARK_MODE=true
|
|
||||||
ports:
|
|
||||||
# - "80:80" # Expose web UI
|
|
||||||
- 20125:80
|
|
||||||
networks:
|
|
||||||
- caddymanager
|
|
||||||
|
|
||||||
# Notes:
|
|
||||||
# - SQLite is the default database engine - no additional setup required!
|
|
||||||
# - To use MongoDB instead, set DB_ENGINE=mongodb and start with: docker-compose --profile mongodb up
|
|
||||||
# - For production, use strong passwords and consider secrets management.
|
|
||||||
# - The backend uses SQLite by default, storing data in a persistent volume.
|
|
||||||
# - The frontend proxies all /api/* requests to the backend service.
|
|
||||||
# - Backend is not directly exposed - all API access goes through the frontend proxy.
|
|
||||||
Binary file not shown.
@@ -1,2 +0,0 @@
|
|||||||
FROM nextcloud:latest
|
|
||||||
RUN apt-get update -y --quiet && apt-get install -y --quiet ffmpeg php-imagick imagemagick libmagickcore-6.q16-6-extra
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
import json
|
|
||||||
import requests
|
|
||||||
|
|
||||||
# Authentik API credentials and endpoints
|
|
||||||
authentik_url = 'https://auth.delmar.bzh'
|
|
||||||
authentik_api_key = 'wsH0RN4wHs6cgsTKRrOPUTpZkXXSr8NwDyhBSMDjNFCjSMiyoOXjSfjjRE2t'
|
|
||||||
authentik_username = 'akadmin'
|
|
||||||
|
|
||||||
# Read the contents of nextcloud_user_info.json
|
|
||||||
print("Reading nextcloud_user_info.json...")
|
|
||||||
with open('nextcloud_user_info.json', 'r') as file:
|
|
||||||
user_info = json.load(file)
|
|
||||||
|
|
||||||
# Extract all groups from user records
|
|
||||||
all_groups = set()
|
|
||||||
for user_record in user_info:
|
|
||||||
all_groups.update(user_record["groups"])
|
|
||||||
|
|
||||||
# Create a session
|
|
||||||
session = requests.Session()
|
|
||||||
|
|
||||||
# Define headers
|
|
||||||
headers = {
|
|
||||||
'Accept': 'application/json',
|
|
||||||
'Authorization': 'Bearer ' + authentik_api_key,
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fetch existing groups from Authentik
|
|
||||||
print("Fetching existing groups from Authentik...")
|
|
||||||
authentik_groups_url = f'{authentik_url}/api/v3/core/groups/' # Updated API endpoint
|
|
||||||
response = session.get(authentik_groups_url, headers=headers)
|
|
||||||
print(f"Groups URL ({authentik_groups_url}")
|
|
||||||
|
|
||||||
# Check for successful response and decode JSON if present
|
|
||||||
if response.status_code == 200:
|
|
||||||
try:
|
|
||||||
authentik_groups = response.json()
|
|
||||||
print("Existing groups fetched successfully.")
|
|
||||||
except json.JSONDecodeError as e:
|
|
||||||
print(f"Failed to decode JSON response: {e}")
|
|
||||||
authentik_groups = []
|
|
||||||
elif response.status_code == 404:
|
|
||||||
print("The requested resource could not be found. Please check the URL or the resource.")
|
|
||||||
else:
|
|
||||||
print(f"Failed to fetch existing groups. Status Code: {response.status_code}")
|
|
||||||
authentik_groups = []
|
|
||||||
|
|
||||||
# Check if groups from Nextcloud exist in Authentik, create missing groups
|
|
||||||
missing_groups = all_groups - set(authentik_groups)
|
|
||||||
for group in missing_groups:
|
|
||||||
group_data = {"name": group}
|
|
||||||
create_group_response = session.post(authentik_groups_url, json=group_data, headers=headers)
|
|
||||||
if create_group_response.status_code == 201:
|
|
||||||
print(f"Group '{group}' created successfully.")
|
|
||||||
else:
|
|
||||||
print(f"Failed to create group '{group}'. Status Code: {create_group_response.status_code}")
|
|
||||||
|
|
||||||
# Fetch existing groups from Authentik
|
|
||||||
print("Fetching existing groups from Authentik...")
|
|
||||||
response = session.get(authentik_groups_url, headers=headers)
|
|
||||||
authentik_groups = response.json()
|
|
||||||
#print(authentik_groups)
|
|
||||||
|
|
||||||
# Create a dictionary mapping group names to group UUIDs
|
|
||||||
group_name_to_uuid = {group['name']: group['pk'] for group in authentik_groups['results']}
|
|
||||||
print(group_name_to_uuid)
|
|
||||||
|
|
||||||
# Import users to Authentik
|
|
||||||
print(f"Importing users to Authentik ({authentik_url})...")
|
|
||||||
for idx, user_record in enumerate(user_info, start=1):
|
|
||||||
print(f"Processing user {idx}/{len(user_info)} - ID: {user_record['user_id']}")
|
|
||||||
|
|
||||||
# Map Nextcloud groups to Authentik group UUIDs
|
|
||||||
authentik_group_uuids = [group_name_to_uuid[group] for group in user_record['groups'] if group in group_name_to_uuid]
|
|
||||||
|
|
||||||
|
|
||||||
# Format the user record according to Authentik's requirements
|
|
||||||
formatted_user = {
|
|
||||||
"username": user_record["user_id"],
|
|
||||||
"name": user_record["display_name"],
|
|
||||||
"email": user_record["email"],
|
|
||||||
"groups": authentik_group_uuids,
|
|
||||||
"is_active": True, # Assuming all users are active
|
|
||||||
"type": "internal", # Assuming all users are internal
|
|
||||||
# Add other fields as required by Authentik's API
|
|
||||||
# Map or transform data fields according to Authentik's expected format
|
|
||||||
}
|
|
||||||
|
|
||||||
# Send the formatted user data to Authentik's API endpoint for user import
|
|
||||||
user_import_url = f"{authentik_url}/api/v3/core/users/" # Updated API endpoint
|
|
||||||
user_import_response = session.post(user_import_url, json=formatted_user, headers=headers )
|
|
||||||
|
|
||||||
# Check response status or handle errors based on the API response
|
|
||||||
if user_import_response.status_code == 201:
|
|
||||||
print(f"User {formatted_user['username']} imported successfully.")
|
|
||||||
elif user_import_response.status_code == 400 and user_import_response.json().get('username') == ["This field must be unique."]:
|
|
||||||
print(f"User {formatted_user['username']} already exists. Skipping.")
|
|
||||||
else:
|
|
||||||
print(f"Failed to import user {formatted_user['username']}. Status Code: {user_import_response.status_code}")
|
|
||||||
# Print response content for debugging (if needed)
|
|
||||||
print(user_import_response.content)
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
NEXTCLOUD_ROOT=/mnt/data/docker/nextcloud
|
|
||||||
NEXTCLOUD_DATA=/nfs/cloud
|
|
||||||
NEXTCLOUD_IPADDRESS=192.168.1.14
|
|
||||||
NEXTCLOUD_FQDN=cloud.delmar.bzh
|
|
||||||
MYSQL_ROOT_PASSWORD=transatlantique
|
|
||||||
MYSQL_PASSWORD=rehire-thrill-curtain
|
|
||||||
COTURN_SECRET=rehire-thrill-curtain
|
|
||||||
COLLABORA_FQDN=office.delmar.bzh
|
|
||||||
COLLABORA_USERNAME=admin
|
|
||||||
COLLABORA_PASSWORD=rehire-thrill-curtain
|
|
||||||
TURN_SECRET=eb2bd48deae8d4a0b9c6b72604efe7b13c69205dca8fb1bba4ff0c15aa7efcb3
|
|
||||||
SIGNALING_SECRET=ab71e9aa794d39c8eaa3f0e999b216de4262ab2fdf0947ff50848a3c4a21463b
|
|
||||||
INTERNAL_SECRET=9382487232e79ea3968c3a61ee8bea4bf03b135fc1567797eab7471749ab3b03
|
|
||||||
@@ -1,157 +0,0 @@
|
|||||||
# sandy (cloud.delmar.bzh)
|
|
||||||
---
|
|
||||||
networks:
|
|
||||||
nextcloud:
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
html:
|
|
||||||
name: nextcloud_html
|
|
||||||
external: true
|
|
||||||
mariadb:
|
|
||||||
name: nextcloud_mariadb
|
|
||||||
external: true
|
|
||||||
redis:
|
|
||||||
name: nextcloud_redis
|
|
||||||
|
|
||||||
services:
|
|
||||||
app:
|
|
||||||
container_name: nextcloud
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
depends_on:
|
|
||||||
- mariadb
|
|
||||||
- redis
|
|
||||||
devices:
|
|
||||||
- /dev/dri:/dev/dri
|
|
||||||
environment:
|
|
||||||
NEXTCLOUD_TRUSTED_DOMAINS: cloud.delmar.bzh
|
|
||||||
NEXTCLOUD_DATA_DIR: /srv/nextcloud/data
|
|
||||||
MYSQL_DATABASE: nextcloud
|
|
||||||
MYSQL_USER: nextcloud
|
|
||||||
MYSQL_PASSWORD: rehire-thrill-curtain
|
|
||||||
MYSQL_HOST: nextcloud-mariadb
|
|
||||||
REDIS_HOST: nextcloud-redis
|
|
||||||
NEXTCLOUD_ENABLE_DRI_DEVICE: true
|
|
||||||
PHP_MEMORY_LIMIT: 4G
|
|
||||||
PHP_MAX_EXECUTION_TIME: 7200
|
|
||||||
PHP_OPCACHE_MEMORY_CONSUMPTION: 256
|
|
||||||
UPLOAD_LIMIT: 10G
|
|
||||||
PHP_POST_MAX_SIZE: 10G
|
|
||||||
TZ: Europe/Paris
|
|
||||||
extra_hosts:
|
|
||||||
- cloud.delmar.bzh:192.168.1.14
|
|
||||||
- office.delmar.bzh:192.168.1.14
|
|
||||||
volumes:
|
|
||||||
- html:/var/www/html
|
|
||||||
- /nfs/cloud:/srv/nextcloud/data
|
|
||||||
- type: tmpfs
|
|
||||||
target: /tmp:exec
|
|
||||||
ports:
|
|
||||||
- 35771:80
|
|
||||||
networks:
|
|
||||||
- nextcloud
|
|
||||||
restart: unless-stopped
|
|
||||||
labels:
|
|
||||||
- "dockpeek.link=https://cloud.delmar.bzh"
|
|
||||||
- "dockpeek.tags=frontend,production"
|
|
||||||
|
|
||||||
nextcloud-cron:
|
|
||||||
container_name: nextcloud-cron
|
|
||||||
image: nextcloud
|
|
||||||
depends_on:
|
|
||||||
- app
|
|
||||||
entrypoint: /cron.sh
|
|
||||||
environment:
|
|
||||||
NEXTCLOUD_TRUSTED_DOMAINS: cloud.delmar.bzh
|
|
||||||
NEXTCLOUD_DATA_DIR: /srv/nextcloud/data
|
|
||||||
MYSQL_DATABASE: nextcloud
|
|
||||||
MYSQL_USER: nextcloud
|
|
||||||
MYSQL_PASSWORD: rehire-thrill-curtain
|
|
||||||
MYSQL_HOST: nextcloud-mariadb
|
|
||||||
REDIS_HOST: nextcloud-redis
|
|
||||||
TZ: Europe/Paris
|
|
||||||
volumes:
|
|
||||||
- html:/var/www/html
|
|
||||||
- /nfs/cloud:/srv/nextcloud/data
|
|
||||||
networks:
|
|
||||||
- nextcloud
|
|
||||||
restart: unless-stopped
|
|
||||||
labels:
|
|
||||||
- "dockpeek.tags=backend,maintenance,production"
|
|
||||||
|
|
||||||
mariadb:
|
|
||||||
container_name: nextcloud-mariadb
|
|
||||||
image: mariadb:11.4-ubi
|
|
||||||
environment:
|
|
||||||
MYSQL_ROOT_PASSWORD: transatlantique
|
|
||||||
MYSQL_PASSWORD: rehire-thrill-curtain
|
|
||||||
MYSQL_DATABASE: nextcloud
|
|
||||||
MYSQL_USER: nextcloud
|
|
||||||
TZ: Europe/Paris
|
|
||||||
volumes:
|
|
||||||
- mariadb:/var/lib/mysql
|
|
||||||
networks:
|
|
||||||
- nextcloud
|
|
||||||
restart: unless-stopped
|
|
||||||
labels:
|
|
||||||
- "dockpeek.tags=backend,database,production"
|
|
||||||
|
|
||||||
adminer:
|
|
||||||
container_name: nextcloud-adminer
|
|
||||||
image: adminer
|
|
||||||
environment:
|
|
||||||
ADMINER_DEFAULT_SERVER: mariadb
|
|
||||||
depends_on:
|
|
||||||
- mariadb
|
|
||||||
ports:
|
|
||||||
- 62764:8080
|
|
||||||
networks:
|
|
||||||
- nextcloud
|
|
||||||
restart: unless-stopped
|
|
||||||
labels:
|
|
||||||
- "dockpeek.tags=backend,database,administration,production"
|
|
||||||
|
|
||||||
redis:
|
|
||||||
container_name: nextcloud-redis
|
|
||||||
image: valkey/valkey
|
|
||||||
volumes:
|
|
||||||
- redis:/data
|
|
||||||
networks:
|
|
||||||
- nextcloud
|
|
||||||
restart: unless-stopped
|
|
||||||
labels:
|
|
||||||
- "dockpeek.tags=backend,broker,production"
|
|
||||||
|
|
||||||
coturn:
|
|
||||||
container_name: nextcloud-coturn
|
|
||||||
image: coturn/coturn
|
|
||||||
command:
|
|
||||||
- "--realm"
|
|
||||||
- "cloud.delmar.bzh"
|
|
||||||
- "--static-auth-secret"
|
|
||||||
- "rehire-thrill-curtain"
|
|
||||||
- "--no-stdout-log"
|
|
||||||
- "--log-file"
|
|
||||||
- "stdout"
|
|
||||||
- "--stale-nonce=600"
|
|
||||||
- "--use-auth-secret"
|
|
||||||
- "--server-name=nextcloud-coturn "
|
|
||||||
- "--lt-cred-mech"
|
|
||||||
- "--fingerprint"
|
|
||||||
- "--no-software-attribute"
|
|
||||||
- "--no-multicast-peers"
|
|
||||||
# - "--listening-ip=0.0.0.0 "
|
|
||||||
# - "--external-ip=192.168.1.14"
|
|
||||||
# - "--listening-port=3478"
|
|
||||||
# - "--min-port=49160"
|
|
||||||
# - "--max-port=49200"
|
|
||||||
ports:
|
|
||||||
- 3478:3478
|
|
||||||
- 49160-49200:49160-49200/udp
|
|
||||||
# network_mode: host
|
|
||||||
networks:
|
|
||||||
- nextcloud
|
|
||||||
restart: unless-stopped
|
|
||||||
labels:
|
|
||||||
- "dockpeek.tags=backend,gateway,production"
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# sheldon (cloud.delmar.bzh)
|
|
||||||
# https://github.com/nextcloud/all-in-one
|
|
||||||
---
|
|
||||||
name: nextcloud-aio
|
|
||||||
|
|
||||||
volumes: # If you want to store the data on a different drive, see https://github.com/nextcloud/all-in-one#how-to-store-the-filesinstallation-on-a-separate-drive
|
|
||||||
nextcloud_aio_mastercontainer:
|
|
||||||
name: nextcloud_aio_mastercontainer # This line is not allowed to be changed as otherwise the built-in backup solution will not work
|
|
||||||
|
|
||||||
networks:
|
|
||||||
nextcloud-aio:
|
|
||||||
name: nextcloud-aio
|
|
||||||
driver_opts:
|
|
||||||
com.docker.network.driver.mtu: 1440
|
|
||||||
|
|
||||||
services:
|
|
||||||
nextcloud-aio-mastercontainer:
|
|
||||||
image: ghcr.io/nextcloud-releases/all-in-one:latest
|
|
||||||
init: true
|
|
||||||
restart: always
|
|
||||||
container_name: nextcloud-aio-mastercontainer
|
|
||||||
volumes:
|
|
||||||
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
network_mode: bridge
|
|
||||||
networks: ["nextcloud-aio"]
|
|
||||||
ports:
|
|
||||||
# - 80:80
|
|
||||||
- 35771:8080 # This is the AIO interface, served via https and self-signed certificate. See https://github.com/nextcloud/all-in-one#explanation-of-used-ports
|
|
||||||
# - 8443:8443 # Can be removed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
|
||||||
environment:
|
|
||||||
# AIO_DISABLE_BACKUP_SECTION: false # Setting this to true allows to hide the backup section in the AIO interface. See https://github.com/nextcloud/all-in-one#how-to-disable-the-backup-section
|
|
||||||
# APACHE_PORT: 11000 # Is needed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
|
||||||
# APACHE_IP_BINDING: 127.0.0.1 # Should be set when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
|
||||||
# APACHE_ADDITIONAL_NETWORK: frontend_net # (Optional) Connect the apache container to an additional docker network. Needed when behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) running in a different docker network on same server. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
|
|
||||||
BORG_RETENTION_POLICY: --keep-within=7d --keep-weekly=4 --keep-monthly=6
|
|
||||||
# COLLABORA_SECCOMP_DISABLED: false # Setting this to true allows to disable Collabora's Seccomp feature. See https://github.com/nextcloud/all-in-one#how-to-disable-collaboras-seccomp-feature
|
|
||||||
# FULLTEXTSEARCH_JAVA_OPTIONS: "-Xms1024M -Xmx1024M" # Allows to adjust the fulltextsearch java options. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-fulltextsearch-java-options
|
|
||||||
NEXTCLOUD_DATADIR: /mnt/data/ncdata
|
|
||||||
NEXTCLOUD_MOUNT: /mnt/data/
|
|
||||||
NEXTCLOUD_UPLOAD_LIMIT: 16G # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-upload-limit-for-nextcloud
|
|
||||||
NEXTCLOUD_MAX_TIME: 3600 # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-max-execution-time-for-nextcloud
|
|
||||||
NEXTCLOUD_MEMORY_LIMIT: 512M # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-php-memory-limit-for-nextcloud
|
|
||||||
# NEXTCLOUD_TRUSTED_CACERTS_DIR: /path/to/my/cacerts # CA certificates in this directory will be trusted by the OS of the nextcloud container (Useful e.g. for LDAPS) See https://github.com/nextcloud/all-in-one#how-to-trust-user-defined-certification-authorities-ca
|
|
||||||
# NEXTCLOUD_STARTUP_APPS: deck twofactor_totp tasks calendar contacts notes # Allows to modify the Nextcloud apps that are installed on starting AIO the first time. See https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup
|
|
||||||
NEXTCLOUD_ADDITIONAL_APKS: ffmpeg imagemagick libmagickcore-6.q16-6-extra
|
|
||||||
NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS: imagick # php-imagick
|
|
||||||
NEXTCLOUD_ENABLE_DRI_DEVICE: true
|
|
||||||
# NEXTCLOUD_ENABLE_NVIDIA_GPU: true # This allows to enable the NVIDIA runtime and GPU access for containers that profit from it. ⚠️⚠️⚠️ Warning: this only works if an NVIDIA gpu is installed on the server. See https://github.com/nextcloud/all-in-one#how-to-enable-hardware-acceleration-for-nextcloud.
|
|
||||||
NEXTCLOUD_KEEP_DISABLED_APPS: false
|
|
||||||
# SKIP_DOMAIN_VALIDATION: false # This should only be set to true if things are correctly configured. See https://github.com/nextcloud/all-in-one?tab=readme-ov-file#how-to-skip-the-domain-validation
|
|
||||||
TALK_PORT: 3478 # This allows to adjust the port that the talk container is using which is exposed on the host. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-talk-port
|
|
||||||
# WATCHTOWER_DOCKER_SOCKET_PATH: /var/run/docker.sock # Needs to be specified if the docker socket on the host is not located in the default '/var/run/docker.sock'. Otherwise mastercontainer updates will fail. For macos it needs to be '/var/run/docker.sock'
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Run nextcloud occ command to get user list
|
|
||||||
user_list=$(docker exec -it nextcloud php occ user:list --output=json)
|
|
||||||
|
|
||||||
# Print the user list content for verification
|
|
||||||
echo "$user_list"
|
|
||||||
|
|
||||||
# Create an empty array to store user details
|
|
||||||
user_details=()
|
|
||||||
|
|
||||||
# Extract usernames and nicknames using jq
|
|
||||||
usernames=$(echo "$user_list" | jq -r 'to_entries[] | "\(.key):\(.value)"')
|
|
||||||
|
|
||||||
# Fetch user information for each username
|
|
||||||
while IFS= read -r entry; do
|
|
||||||
username=$(echo "$entry" | cut -d ':' -f1)
|
|
||||||
|
|
||||||
if [ -n "$username" ]; then
|
|
||||||
echo "Fetching info for user: $username"
|
|
||||||
# Get user information using user:info for each user
|
|
||||||
info=$(docker exec -it nextcloud php occ user:info "$username" --output=json)
|
|
||||||
|
|
||||||
# Check if the info is not empty and doesn't contain an error message
|
|
||||||
if [ -n "$info" ] && ! echo "$info" | grep -q "user not found"; then
|
|
||||||
user_details+=("$info")
|
|
||||||
else
|
|
||||||
echo "Error fetching info for user: $username"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done <<< "$usernames"
|
|
||||||
|
|
||||||
# Convert the user details array to JSON format
|
|
||||||
user_details_json=$(printf '%s\n' "${user_details[@]}" | jq -s '.')
|
|
||||||
|
|
||||||
# Save the retrieved user details directly to a file
|
|
||||||
echo "$user_details_json" > nextcloud_user_info.json
|
|
||||||
|
|
||||||
echo "User details exported to nextcloud_user_info.json"
|
|
||||||
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"user_id": "admin",
|
|
||||||
"display_name": "admin",
|
|
||||||
"email": "admin@delmar.bzh",
|
|
||||||
"cloud_id": "admin@cloud.delmar.bzh",
|
|
||||||
"enabled": true,
|
|
||||||
"groups": [
|
|
||||||
"Famille",
|
|
||||||
"admin"
|
|
||||||
],
|
|
||||||
"quota": "none",
|
|
||||||
"storage": {
|
|
||||||
"free": 4576955072512,
|
|
||||||
"used": 17486479,
|
|
||||||
"total": 4576972558991,
|
|
||||||
"relative": 0,
|
|
||||||
"quota": -3
|
|
||||||
},
|
|
||||||
"first_seen": "unknown",
|
|
||||||
"last_seen": "2025-05-16T08:15:58+00:00",
|
|
||||||
"user_directory": "/srv/nextcloud/data/admin",
|
|
||||||
"backend": "Database"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"user_id": "Eliot",
|
|
||||||
"display_name": "Eliot",
|
|
||||||
"email": "eliotmarie0@gmail.com",
|
|
||||||
"cloud_id": "Eliot@cloud.delmar.bzh",
|
|
||||||
"enabled": true,
|
|
||||||
"groups": [
|
|
||||||
"Famille",
|
|
||||||
"admin"
|
|
||||||
],
|
|
||||||
"quota": "none",
|
|
||||||
"storage": {
|
|
||||||
"free": 4576955072512,
|
|
||||||
"used": 1177221802,
|
|
||||||
"total": 4578132294314,
|
|
||||||
"relative": 0.03,
|
|
||||||
"quota": -3
|
|
||||||
},
|
|
||||||
"first_seen": "unknown",
|
|
||||||
"last_seen": "2025-05-16T08:25:13+00:00",
|
|
||||||
"user_directory": "/srv/nextcloud/data/Eliot",
|
|
||||||
"backend": "Database"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"user_id": "julien",
|
|
||||||
"display_name": "Julieñ",
|
|
||||||
"email": "jme69@delmar.bzh",
|
|
||||||
"cloud_id": "julien@cloud.delmar.bzh",
|
|
||||||
"enabled": true,
|
|
||||||
"groups": [
|
|
||||||
"Famille",
|
|
||||||
"admin"
|
|
||||||
],
|
|
||||||
"quota": "none",
|
|
||||||
"storage": {
|
|
||||||
"free": 4576955072512,
|
|
||||||
"used": 15910061096,
|
|
||||||
"total": 4592865133608,
|
|
||||||
"relative": 0.35,
|
|
||||||
"quota": -3
|
|
||||||
},
|
|
||||||
"first_seen": "unknown",
|
|
||||||
"last_seen": "2025-05-16T09:10:12+00:00",
|
|
||||||
"user_directory": "/srv/nextcloud/data/julien",
|
|
||||||
"backend": "Database"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"user_id": "Sabine",
|
|
||||||
"display_name": "Sabine",
|
|
||||||
"email": "sabine.dbm@gmail.com",
|
|
||||||
"cloud_id": "Sabine@cloud.delmar.bzh",
|
|
||||||
"enabled": true,
|
|
||||||
"groups": [
|
|
||||||
"Famille"
|
|
||||||
],
|
|
||||||
"quota": "none",
|
|
||||||
"storage": {
|
|
||||||
"free": 4576955072512,
|
|
||||||
"used": 62926115,
|
|
||||||
"total": 4577017998627,
|
|
||||||
"relative": 0,
|
|
||||||
"quota": -3
|
|
||||||
},
|
|
||||||
"first_seen": "unknown",
|
|
||||||
"last_seen": "2025-05-16T07:17:06+00:00",
|
|
||||||
"user_directory": "/srv/nextcloud/data/Sabine",
|
|
||||||
"backend": "Database"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"user_id": "Ugo",
|
|
||||||
"display_name": "Ugo",
|
|
||||||
"email": "ugomarie22@gmail.com",
|
|
||||||
"cloud_id": "Ugo@cloud.delmar.bzh",
|
|
||||||
"enabled": true,
|
|
||||||
"groups": [
|
|
||||||
"Famille"
|
|
||||||
],
|
|
||||||
"quota": "none",
|
|
||||||
"storage": {
|
|
||||||
"free": 4576955072512,
|
|
||||||
"used": 1019952437,
|
|
||||||
"total": 4577975024949,
|
|
||||||
"relative": 0.02,
|
|
||||||
"quota": -3
|
|
||||||
},
|
|
||||||
"first_seen": "unknown",
|
|
||||||
"last_seen": "2025-05-16T08:05:27+00:00",
|
|
||||||
"user_directory": "/srv/nextcloud/data/Ugo",
|
|
||||||
"backend": "Database"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# SECRETS
|
|
||||||
SECRET=AN9r5OOcid00yyW1AcYL0GIr6YS9o01p
|
|
||||||
SALT=1AvwZUDNL0fAFkEg
|
|
||||||
VAULT_PWD=KVfvVh052dt7uzxQwyOL6cFHelS8uyO6
|
|
||||||
# MONGO
|
|
||||||
DB_HOST=mongo
|
|
||||||
DB_NAME=ssm
|
|
||||||
DB_PORT=27017
|
|
||||||
# REDIS
|
|
||||||
REDIS_HOST=redis
|
|
||||||
REDIS_PORT=6379
|
|
||||||
#SSM CONFIG
|
|
||||||
#SSM_INSTALL_PATH=/opt/squirrelserversmanager
|
|
||||||
#SSM_DATA_PATH=/data
|
|
||||||
TELEMETRY_ENABLED=true
|
|
||||||
# PROMETHEUS
|
|
||||||
PROMETHEUS_USERNAME=2wjvpf0zFJpvdCRq
|
|
||||||
PROMETHEUS_PASSWORD=kODab3yU9njlHM6qwkyeaPs4JQYk9Mkc
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
---
|
|
||||||
name: ssm
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
prometheus:
|
|
||||||
mongo:
|
|
||||||
valkey:
|
|
||||||
server:
|
|
||||||
|
|
||||||
services:
|
|
||||||
proxy:
|
|
||||||
restart: unless-stopped
|
|
||||||
image: "ghcr.io/squirrelcorporation/squirrelserversmanager-proxy:latest"
|
|
||||||
container_name: ssm-proxy
|
|
||||||
ports:
|
|
||||||
- "32520:8000"
|
|
||||||
depends_on:
|
|
||||||
- client
|
|
||||||
- mongo
|
|
||||||
- server
|
|
||||||
- redis
|
|
||||||
- prometheus
|
|
||||||
labels:
|
|
||||||
wud.display.name: "SSM - Proxy"
|
|
||||||
wud.watch.digest: false
|
|
||||||
|
|
||||||
prometheus:
|
|
||||||
image: "ghcr.io/squirrelcorporation/squirrelserversmanager-prometheus:latest"
|
|
||||||
container_name: ssm-prometheus
|
|
||||||
restart: unless-stopped
|
|
||||||
env_file: .env
|
|
||||||
volumes:
|
|
||||||
- prometheus:/prometheus
|
|
||||||
labels:
|
|
||||||
wud.display.name: "SSM - Prometheus"
|
|
||||||
|
|
||||||
mongo:
|
|
||||||
container_name: ssm-mongo
|
|
||||||
image: mongo
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- mongo:/data/db
|
|
||||||
command: --quiet
|
|
||||||
labels:
|
|
||||||
wud.display.name: "SSM - MongoDB"
|
|
||||||
|
|
||||||
redis:
|
|
||||||
container_name: ssm-cache
|
|
||||||
image: valkey/valkey
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- valkey:/data
|
|
||||||
command: --save 60 1
|
|
||||||
labels:
|
|
||||||
wud.display.name: "SSM - Redis"
|
|
||||||
|
|
||||||
server:
|
|
||||||
image: "ghcr.io/squirrelcorporation/squirrelserversmanager-server:latest"
|
|
||||||
container_name: ssm-server
|
|
||||||
restart: unless-stopped
|
|
||||||
healthcheck:
|
|
||||||
test: curl --fail http://localhost:3000/ping || exit 1
|
|
||||||
interval: 40s
|
|
||||||
timeout: 30s
|
|
||||||
retries: 3
|
|
||||||
start_period: 60s
|
|
||||||
external_links:
|
|
||||||
- mongo
|
|
||||||
- redis
|
|
||||||
- prometheus
|
|
||||||
depends_on:
|
|
||||||
- mongo
|
|
||||||
- redis
|
|
||||||
- prometheus
|
|
||||||
env_file: .env
|
|
||||||
environment:
|
|
||||||
NODE_ENV: production
|
|
||||||
volumes:
|
|
||||||
- server:/data
|
|
||||||
labels:
|
|
||||||
wud.display.name: "SSM - Server"
|
|
||||||
wud.watch.digest: false
|
|
||||||
|
|
||||||
client:
|
|
||||||
image: "ghcr.io/squirrelcorporation/squirrelserversmanager-client:latest"
|
|
||||||
container_name: ssm-client
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
- server
|
|
||||||
labels:
|
|
||||||
wud.display.name: "SSM - Client"
|
|
||||||
wud.watch.digest: false
|
|
||||||
Reference in New Issue
Block a user