Настройте nextcloud с postgres через докер

Я хотел бы настроить nextcloud локально с помощью postgres через докер. Я могу сделать это, не пытаясь использовать postgres (т. е. с sqllite по умолчанию), но у меня возникают проблемы при использовании докера postgres в сочетании с образом nc.

Мой ноутбук Ubuntu 18.04.

Цель: я хотел бы иметь локально настроенный контейнер, который я мог бы легко (или, по крайней мере, несколько легко) переместить к облачному провайдеру, когда захочу. Я настраиваю тома для postgres, а также для nc, чтобы я мог перенести все на удаленный компьютер, как когда захочу.

Вот мой репозиторий, который включает Dockerfile и docker-compose:

Dockerfile: (Обратите внимание, что я добавляю smbclient, так как на собственном горьком опыте узнал, что мне это нужно для установки приложения для внешнего хранилища, которое я хотел бы использовать)

FROM nextcloud:production-apache
RUN apt-get update && apt-get install -y \
   smbclient

Мой файл docker-compose:

version: "3.5"
services:
  nextcloud:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - "8080:80"
    volumes:
      - $PROJECTS_DIR/Personal/mc1/nextcloud:/var/www/html
      - $PROJECTS_DIR/Personal/mc1/apps:/var/www/html/custom_apps
      - $PROJECTS_DIR/Personal/mc1/config:/var/www/html/config 
      - $PROJECTS_DIR/Personal/mc1/data:/var/www/html/data
    environment:
      - POSTGRES_HOST=nextcloud_db_1 # service name for postgres as assigned by Docker
      - POSTGRES_DB=nextcloud_db
      - POSTGRES_USER=postgres # will access postgres over 5432
      - POSTGRES_PASSWORD=testing123
    depends_on:
      - db

  db:
    image: postgres
    restart: always
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=nextcloud_db
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=testing123

Я не был очень уверен, как это настроить, и позаимствовал из другого сообщения здесь.

Исход:

С терминалом в репо:

docker-compose build
docker-compose up -d

Затем я могу получить доступ к nc по адресу http://localhost:8080/index.php, где я выбираю «postgres» и ввожу данные postgres из моего docker-compose: введите здесь описание изображения

После ввода всех данных на скриншоте выше, когда я нажимаю «Завершить настройку», я получаю этот экран с ошибкой: введите здесь описание изображения

Я искал файл с именем «журнал» в любом месте томов и нашел data/nextcloud.log. Вот что он показывает:

{"reqId":"WqeSp92UPr935aMdZ0XY","level":2,"time":"2021-01-17T23:32:25+00:00","remoteAddr":"192.168.32.1","user":"--","app":"no app in context","method":"POST","url":"/index.php","message":"Host localhost was not connected to because it violates local access rules","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0","version":""}
{"reqId":"WqeSp92UPr935aMdZ0XY","level":2,"time":"2021-01-17T23:32:25+00:00","remoteAddr":"192.168.32.1","user":"--","app":"no app in context","method":"POST","url":"/index.php","message":"Host localhost was not connected to because it violates local access rules","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0","version":""}
{"reqId":"WqeSp92UPr935aMdZ0XY","level":3,"time":"2021-01-17T23:32:26+00:00","remoteAddr":"192.168.32.1","user":"--","app":"no app in context","method":"POST","url":"/index.php","message":{"Exception":"Doctrine\\DBAL\\DBALException","Message":"Failed to connect to the database: An exception occurred in driver: SQLSTATE[08006] [7] could not translate host name \"nextcloud_db_1\" to address: Temporary failure in name resolution","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php","line":428,"function":"connect","class":"OC\\DB\\Connection","type":"->","args":[]},{"file":"/var/www/html/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php","line":388,"function":"getDatabasePlatformVersion","class":"Doctrine\\DBAL\\Connection","type":"->","args":[]},{"file":"/var/www/html/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php","line":330,"function":"detectDatabasePlatform","class":"Doctrine\\DBAL\\Connection","type":"->","args":[]},{"file":"/var/www/html/lib/private/DB/QueryBuilder/QueryBuilder.php","line":119,"function":"getDatabasePlatform","class":"Doctrine\\DBAL\\Connection","type":"->","args":[]},{"file":"/var/www/html/lib/private/Setup/PostgreSQL.php","line":54,"function":"expr","class":"OC\\DB\\QueryBuilder\\QueryBuilder","type":"->","args":[]},{"file":"/var/www/html/lib/private/Setup.php","line":359,"function":"setupDatabase","class":"OC\\Setup\\PostgreSQL","type":"->","args":["rstudio"]},{"file":"/var/www/html/core/Controller/SetupController.php","line":75,"function":"install","class":"OC\\Setup","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/lib/base.php","line":946,"function":"run","class":"OC\\Core\\Controller\\SetupController","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/html/lib/private/DB/Connection.php","Line":72,"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0","version":"20.0.4.0"}
{"reqId":"WqeSp92UPr935aMdZ0XY","level":2,"time":"2021-01-17T23:32:26+00:00","remoteAddr":"192.168.32.1","user":"--","app":"no app in context","method":"POST","url":"/index.php","message":"Error trying to connect as \"postgres\", assuming database is setup and tables need to be created","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0","version":"20.0.4.0"}
{"reqId":"WqeSp92UPr935aMdZ0XY","level":3,"time":"2021-01-17T23:32:26+00:00","remoteAddr":"192.168.32.1","user":"--","app":"no app in context","method":"POST","url":"/index.php","message":{"Exception":"Doctrine\\DBAL\\DBALException","Message":"Failed to connect to the database: An exception occurred in driver: SQLSTATE[08006] [7] could not translate host name \"nextcloud_db_1\" to address: Temporary failure in name resolution","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Setup/PostgreSQL.php","line":98,"function":"connect","class":"OC\\DB\\Connection","type":"->","args":[]},{"file":"/var/www/html/lib/private/Setup.php","line":359,"function":"setupDatabase","class":"OC\\Setup\\PostgreSQL","type":"->","args":["rstudio"]},{"file":"/var/www/html/core/Controller/SetupController.php","line":75,"function":"install","class":"OC\\Setup","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/lib/base.php","line":946,"function":"run","class":"OC\\Core\\Controller\\SetupController","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/html/lib/private/DB/Connection.php","Line":72,"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0","version":"20.0.4.0"}
{"reqId":"webBnsoANvgRaansmKbZ","level":3,"time":"2021-01-17T23:32:41+00:00","remoteAddr":"192.168.32.1","user":"--","app":"index","method":"POST","url":"/index.php","message":{"Exception":"OC\\DatabaseException","Message":"An exception occurred while executing 'SHOW SERVER_VERSION':\n\nFailed to connect to the database: An exception occurred in driver: SQLSTATE[08006] [7] could not translate host name \"nextcloud_db_1\" to address: Temporary failure in name resolution","Code":0,"Trace":[{"file":"/var/www/html/lib/private/legacy/OC_DB.php","line":143,"function":"prepare","class":"OC_DB","type":"::","args":["SHOW SERVER_VERSION",null,null]},{"file":"/var/www/html/lib/private/legacy/OC_Util.php","line":984,"function":"executeAudited","class":"OC_DB","type":"::","args":[{"sql":"SHOW SERVER_VERSION","limit":null,"offset":null}]},{"file":"/var/www/html/lib/private/legacy/OC_Util.php","line":964,"function":"checkDatabaseVersion","class":"OC_Util","type":"::","args":[]},{"file":"/var/www/html/lib/base.php","line":660,"function":"checkServer","class":"OC_Util","type":"::","args":[{"__class__":"OC\\SystemConfig"}]},{"file":"/var/www/html/lib/base.php","line":1091,"function":"init","class":"OC","type":"::","args":[]},{"file":"/var/www/html/index.php","line":35,"args":["/var/www/html/lib/base.php"],"function":"require_once"}],"File":"/var/www/html/lib/private/legacy/OC_DB.php","Line":73,"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0","version":"20.0.4.0"}

Звук у меня настроен или это баг? Я не уверен в своем добавлении postgres в docker-compose или правильно ли я это сделал?

Как я могу настроить nextcloud локально с postgres, используя докер и тома, чтобы я мог перенести всю свою настройку nextcloud от облачного провайдера к облачному провайдеру по своему выбору?


person Doug Fir    schedule 17.01.2021    source источник


Ответы (1)


Я почти уверен, что проблема в этой строке:

- POSTGRES_HOST=nextcloud_db_1 # service name for postgres as assigned by Docker

Если каталог, в котором вы делаете docker-compose up, не вызывает nextcloud, он не будет работать.

Пример: если вы находитесь в каталоге nc, вам нужно будет установить хост на nc_db_1

НО есть и другой вариант:

Вы можете настроить имя хоста, чтобы избежать подобных проблем.

Пример docker-compose.yml

version: "3.5"
services:
  nextcloud:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - "8080:80"
    environment:
      - POSTGRES_HOST=nc-postgres  # HERE
      - POSTGRES_DB=nextcloud_db
      - POSTGRES_USER=postgres 
      - POSTGRES_PASSWORD=testing123
    depends_on:
      - db

  db:
    image: postgres
    restart: always
    hostname: 'nc-postgres'  # AND HERE 
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=nextcloud_db
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=testing123

Результат:

введите здесь описание изображения

person Dr Claw    schedule 18.01.2021
comment
Спасибо, кажется, это привело к успеху, так как теперь я получаю доступ к панели инструментов nc. Есть ли способ проверить, что он использует postgres, а не sqlite по умолчанию? Я попытался подключиться к БД с помощью моего SQL-клиента, Dbeaver, используя хост: localhost (также пробовал nextcloud_db), пользовательский postgres и pw для составления докеров выше, testing123. Соединение не удалось. Итак, похоже, что он работает, но я не знаю, как проверить, что он использует postgres! - person Doug Fir; 18.01.2021
comment
Вы можете нажать на свой аватар (вверху справа), затем нажать настройки, а слева перейти в систему, затем прокрутить вниз до базы данных ... - person Dr Claw; 18.01.2021
comment
если вы хотите подключиться к БД, вам нужно привязать порт или вы можете выполнить в контейнере с docker exec -it <postgres container id> psql -U postgres nextcloud_db - person Dr Claw; 18.01.2021
comment
Спасибо, похоже, теперь я подключен к pgsql. Когда вы говорите привязать порты, вы просто имеете в виду, например. ports: \ - "5432:5432" в докер-композиции? - person Doug Fir; 18.01.2021
comment
неважно, я проверил это, проверив это, и я смог подключиться к базе данных через мой клиент. Благодарю вас! - person Doug Fir; 18.01.2021
comment
пожалуйста. - person Dr Claw; 18.01.2021