crazy-max/docker-nextcloud

Direct access to the database (set up from docker compose example)

enchained opened this issue · 3 comments

I need direct access to the database to fix timestamps after a scan, but noticed that the usual place is empty:

docker exec -it -u root compose_mariadb_1 sh
# mysql -u nextcloud -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.2.20-MariaDB-1:10.2.20+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nextcloud          |
+--------------------+
2 rows in set (0.00 sec)

MariaDB [(none)]> use nextcloud
Database changed
MariaDB [nextcloud]> show tables;
Empty set (0.01 sec)

MariaDB [nextcloud]>

my docker-compose is same as example regarding the database:

 mariadb:
    image: mariadb:10.2
    volumes:
      - "db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE=nextcloud"
      - "MYSQL_USER=nextcloud"
      - "MYSQL_PASSWORD=****"
    restart: always

nextcloud.env:

DB_TYPE=mysql
DB_HOST=db
DB_NAME=nextcloud
DB_USER=nextcloud
DB_PASSWORD=****

Any way I can access it to perform the UPDATE action on a table?

I noticed that if on the web I go to Administration - Monitoring (settings/admin/serverinfo), it says:
Database
Type: sqlite3
Version: 3.24.0
Size: 4.1 MB

Should it be that way with my env vars? And where to look for that sqlite3 db instead?

@enchained Can you post your docker-compose file please, your host OS (Debian 9 for example) and tell me if it's a first/clean install.

@crazy-max Hi. Back then I decided to continue using sqlite db instead, but currently I'm experiencing performance issues on webdav, and decided to either convert the db as a temp solution, or do a clean install of a new nextcloud version when I'll find the time. However now I am afraid that if I'm going to setup reusing my old compose, I'll end up with sqlite once more. Could you please tell me what was possibly wrong with my old compose file, what could cause defaulting to an sqlite db?

It was a first install. Host os is Arch Linux, Kernel: Linux 4.19.4-arch1-1-ARCH.

cat docker-compose.yml

version: "3.2"

services:
  traefik:
    image: traefik:1.6-alpine
    command:
      - "--logLevel=INFO"
      - "--defaultentrypoints=http,https"
      - "--entryPoints=Name:http Address::80 Redirect.EntryPoint:https"
      - "--entryPoints=Name:https Address::443 TLS"
      - "--docker"
      - "--docker.exposedbydefault=false"
      - "--docker.domain=mydomain.com"
      - "--acme=false"
      - "--acme.acmelogging=true"
      - "--acme.email=myemail@gmail.com"
      - "--acme.storage=acme.json"
      - "--acme.entryPoint=https"
      - "--acme.onhostrule=true"
      - "--acme.httpchallenge=true"
      - "--acme.httpchallenge.entrypoint=http"
      - "--api"
    ports:
      - target: 80
        published: 80
        protocol: tcp
      - target: 443
        published: 443
        protocol: tcp
      - target: 8080
        published: 8080
        protocol: tcp
    volumes:
      - "./acme.json:/acme.json"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always

  db:
    image: mariadb:10.2
    volumes:
      - "db:/var/lib/mysql"
    environment:
      - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
      - "MYSQL_DATABASE=nextcloud"
      - "MYSQL_USER=nextcloud"
      - "MYSQL_PASSWORD=****"
    restart: always

  redis:
    image: redis:4.0-alpine
    restart: always

  nextcloud:
    image: crazymax/nextcloud:latest
    depends_on:
      - db
      - redis
    volumes:
      - "/data/docker/nextcloud-crazy-max:/data"
      - "/data:/ext-data"
      - "/data/docker/nextcloud-crazy-max/nginx.conf:/etc/nginx/nginx.conf:ro"
    labels:
      - "traefik.enable=true"
      - "traefik.backend=nextcloud"
      - "traefik.port=80"
      - "traefik.frontend.redirect.regex=^(.*)/nextcloud$$"
      - "traefik.frontend.redirect.replacement=$$1/nextcloud/"
      - "traefik.frontend.rule=Host: mydomain.com; PathPrefix: /nextcloud; ReplacePathRegex: ^/nextcloud/(.*) /$$1"
    env_file:
      - "./nextcloud.env"
    restart: always

  cron:
    image: crazymax/nextcloud:latest
    depends_on:
      - nextcloud
    volumes:
      - "/data/docker/nextcloud-crazy-max:/data"
    command: "/usr/local/bin/cron"
    env_file:
      - "./nextcloud.env"
    environment:
      - "CRON_PERIOD=*/10 * * * *"
    restart: always

volumes:
  db:

cat nextcloud.env

TZ=Europe/Berlin

MEMORY_LIMIT=512M
UPLOAD_MAX_SIZE=20G
OPCACHE_MEM_SIZE=128
APC_SHM_SIZE=128M

HSTS_HEADER=max-age=0; includeSubDomains
RP_HEADER=strict-origin

DB_TYPE=mysql
DB_HOST=db
DB_NAME=nextcloud
DB_USER=nextcloud
DB_PASSWORD=****

And another question: I noticed that you've added a SUBDIR var later here #7 while I was still using modifications suggested by @Numline1. Does starting using SUBDIR= in nextcloud.env means I would no longer need to modify nginx.conf location $schemes myself and mounting that as a volume in compose anymore?