Инструменты пользователя

Инструменты сайта


how-to:nextcloud

Nextcloud

Запуск docker-compose

Настроить параметры ядра:

sysctl -w net.core.somaxconn = 65535 #Максимальное число открытых сокетов, ждущих соединения.
sysctl -w vm.overcommit_memory = 1   #Cтратегия выделения памяти

Подготовить директории:

mkdir db nextcloud_data
sudo chown www-data nextcloud_data

Создать compose файлы:

.env

.env

MYSQL_ROOT_PASSWORD=root_password
MYSQL_PASSWORD=db_password
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
DOMAIN_NAME=cloud.domain.com
ADMIN_USER=admin
ADMIN_PASSWORD=admin_password

docker-compose.yaml

docker-compose.yaml

version: '2'

volumes:
  db:
    driver: local
    driver_opts:
      type: none
      device: ./db
      o: bind

services:
  db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
    healthcheck:
      test: /usr/bin/mysql --host=127.0.0.1 --user=$MYSQL_USER --password=$MYSQL_PASSWORD $MYSQL_DATABASE --silent --execute "SELECT 1;" && exit 0 || exit 1
      interval: 30s
      timeout: 10s
      retries: 3
  nextcloud:
    image: nextcloud:23-apache
    restart: always
    ports:
      - 8080:80
    volumes:
      - /data/docker/nextcloud/data:/var/www/html/data
      - /data/docker/nextcloud/config:/var/www/html/config
      - /data/docker/nextcloud/apps:/var/www/html/custom_apps
      - /data/cloud_drive/files:/files
      - /data/cloud_drive/software:/software
    environment:
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - NEXTCLOUD_TRUSTED_DOMAINS=${DOMAIN_NAME}
      - OVERWRITEHOST=${DOMAIN_NAME}
      - OVERWRITEPROTOCOL=https
      - NEXTCLOUD_ADMIN_USER=${ADMIN_USER}
      - NEXTCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD}
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
      clamav:
        condition: service_started
  redis:
    image: redis:alpine
    restart: always
    sysctls:
    - net.core.somaxconn=65535
  clamav:
    image: "clamav/clamav:stable"
    restart: always
  onlyoffice:
    image: onlyoffice/documentserver
    restart: always
    ports:
      - "8081:80"


Запустить:

docker-compose up -d

Настроить:

#Проверить и показать статус
docker exec --user www-data nextcloud_nextcloud_1 ./occ check
docker exec --user www-data nextcloud_nextcloud_1 ./occ status
#Добавить доверенный адрес для reverse peoxy:
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set trusted_proxies 0 --value=172.0.0.1
#Установить телефонный код поумолчанию
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set default_phone_region --value="RUS"
#Настроить почту для уведомлений
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtpmode --value=smtp
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtpauthtype --value=LOGIN
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_sendmailmode --value=smtp
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_from_address --value=noreply_cloud
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_domain --value=domain.com
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtpauth --value=1
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtphost --value=smtp.sendgrid.net
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtpport --value=587
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtpsecure --value=tls
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtpname --value=apikey
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set mail_smtppassword --value='password'
#Не создавать файлы по умолчанию в домашней директории и запретить её редактировать
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set skeletondirectory --value=''
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set files default_quota --value="0 B"
#Политика паролей
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set password_policy enforceNumericCharacters --value=1
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set password_policy enforceSpecialCharacters --value=1
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set password_policy maximumLoginAttempts --value=5
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set password_policy enforceNonCommonPassword --value=1
#Ссылка в логотипе
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set theming url --value=https://cloud.domain.com
#Добавить внешнее хранилище, разрешить создавать ссылки
docker exec --user www-data nextcloud_nextcloud_1 ./occ app:enable files_external
docker exec --user www-data nextcloud_nextcloud_1 ./occ files_external:create ExtFiles local null::null --config datadir=/files
docker exec --user www-data nextcloud_nextcloud_1 ./occ files_external:option 1 enable_sharing true
#Добавить группу и пользователя в группу
docker exec --user www-data nextcloud_nextcloud_1 ./occ group:add software
docker exec --user www-data nextcloud_nextcloud_1 ./occ group:adduser software uploader
#Включить групповую директорию
docker exec --user www-data nextcloud_nextcloud_1 ./occ app:enable groupfolders
docker exec --user www-data nextcloud_nextcloud_1 ./occ groupfolders:create Software
#Определить ID для групповой директории
SoftwareID=$(docker exec --user www-data nextcloud_nextcloud_1 ./occ groupfolders:list --output=json | jq '.[]|select(."mount_point"=="Software")|."id"')
#Разрешить все операции группе software в групповой директории
docker exec --user www-data nextcloud_nextcloud_1 ./occ groupfolders:group $SoftwareID software write share delete
#Разрешить только чтение и создание ссылок группе google в групповой директории
docker exec --user www-data nextcloud_nextcloud_1 ./occ groupfolders:group $SoftwareID google read share
#Установить ограниченный срок действия ссылок через API в 30 дней
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set core shareapi_default_internal_expire_date --value=yes
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set core shareapi_enforce_internal_expire_date --value=yes
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set core shareapi_internal_expire_after_n_days --value=30
#Установить ограниченный срок действия ссылок пользователям в 30 дней
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set core shareapi_default_expire_date --value=yes
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set core shareapi_enforce_expire_date --value=yes
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set core shareapi_expire_after_n_days --value=30
#Очищать файлы в корзине старше 7 дней
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set trashbin_retention_obligation --value='auto,7'
#Отключить профиль по умолчанию для новых пользователей
docker exec --user www-data nextcloud-nextcloud-1 ./occ config:app:set settings profile_enabled_by_default --value=0
#Настроить аутентификацию OAuth 2.0 Google, скрыть аутентификациую по умолчанию
docker exec --user www-data nextcloud_nextcloud_1 ./occ app:enable sociallogin
docker exec --user www-data nextcloud_nextcloud_1 ./occ group:add google
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set sociallogin oauth_providers --value="{\"google\":{\"appid\":\"idsecr.apps.googleusercontent.com\",\"secret\":\"sERKrET\",\"defaultGroup\":\"google\",\"auth_params\":{\"hd\":\"domain.net, domain.com\"}},\"amazon\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"facebook\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"twitter\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"GitHub\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"discord\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"QQ\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"slack\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"},\"telegram\":{\"appid\":\"\",\"secret\":\"\",\"defaultGroup\":\"\"}}"
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set sociallogin hide_default_login --value=1
#Настроить антивирус
docker exec --user www-data nextcloud_nextcloud_1 ./occ app:enable files_antivirus
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set files_antivirus av_host --value=clamav
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set files_antivirus av_mode --value=daemon
docker exec --user www-data nextcloud_nextcloud_1 ./occ config:app:set files_antivirus av_port --value=3310
#Исправить пропущенные индексы
docker exec --user www-data nextcloud_nextcloud_1 ./occ db:add-missing-indices

Добавить в crontab:

*/5 * * * * bash -c "docker ps -f name=cloud.nextcloud -q | wc -l | grep 1 &>/dev/null && docker exec -u www-data $(docker ps -f name=cloud.nextcloud -q) php -f /var/www/html/cron.php"

Nginx

https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html

Конфигурация reverse proxy:

nextcloud.conf

nextcloud.conf

server {
  listen 443 ssl;
  server_name cloud.domain.com;

  client_max_body_size 0;
  chunked_transfer_encoding on;

  ssl_protocols	SSLv3 TLSv1.2 TLSv1.3;
  ssl_certificate	/ssl/domain.com.crt;
  ssl_certificate_key	/ssl/domain.com.key;
  ssl_dhparam		/ssl/dhparam.pem;
  add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always; #hsts

  location /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
  }

  location /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
  }

  location / {
    proxy_pass         http://172.17.0.1:8080;
    proxy_redirect     off;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;

  }
}


Добавить в доверенные:

docker exec --user www-data nextcloud_nextcloud_1 ./occ config:system:set trusted_proxies 0 --value=172.0.0.1

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html

Обновление

После обновления контейнера, запустить:

docker exec --user www-data nextcloud_nextcloud_1 ./occ maintenance:mode --on
docker exec --user www-data nextcloud_nextcloud_1 ./occ upgrade
docker exec --user www-data nextcloud_nextcloud_1 ./occ maintenance:mode --off

Команды

Показать значение memory_limit в php:

docker exec --user www-data nextcloud_nextcloud_1 php -i | grep memory_limit

Отключить пользователя:

docker exec --user www-data nextcloud_nextcloud_1 ./occ user:disable admin

Ошибки

Module php-imagick in this instance has no SVG support

Решение:

docker exec --user root nextcloud_nextcloud_1 apt update && apt install -y libmagickcore-6.q16-3-extra

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/theming.html#theming-of-icons
https://help.nextcloud.com/t/how-to-enable-svg-for-php-imagick/108646/2

Ссылки

how-to/nextcloud.txt · Последнее изменение: 127.0.0.1