nextcloud-install/README.md

226 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nextcloud — скрипты развёртывания
| Способ | Каталог | Статус |
|--------|---------|--------|
| **Docker** | [`docker/`](docker/) | Основной, отлажен и используется |
| **Нативная** | [`native/`](native/) | Экспериментальная, **не отлаживалась** |
📖 **[Recommendation.md](Recommendation.md)** — настройки, хранилище, HTTPS, приложения, переустановка.
---
## Структура репозитория
```
nextcloud_install/
├── README.md
├── Recommendation.md
├── lib/
│ └── common.sh # Общая логика Docker, config, compose, права
├── docker/ # Nextcloud в Docker (основной способ)
│ ├── install.sh # Установка стека
│ ├── setup-env.sh # Генерация .env с паролями
│ ├── install-docker.sh # Установка Docker Engine (sudo)
│ ├── start.sh / stop.sh / status.sh
│ ├── backup.sh / restore.sh
│ ├── restore-config.sh # Починка / сброс config.php
│ ├── uninstall.sh # Остановка; --purge удаляет volumes
│ ├── enable-docker-ssl.sh # HTTPS :8443 (cert в контейнере)
│ ├── disable-docker-ssl.sh
│ ├── add-user.sh # Создание пользователя через occ
│ ├── docker-compose.yml # MariaDB + Redis + app + cron
│ ├── docker-compose.ssl.yml # Overlay HTTPS (подключается автоматически)
│ ├── Dockerfile.ssl # Образ Apache + mod_ssl
│ ├── .env.example # Шаблон переменных (копируется в .env)
│ ├── config.defaults/ # Шаблоны фрагментов config (не runtime-данные)
│ ├── templates/ # Шаблон Apache SSL
│ └── certs/ # fullchain.pem, privkey.pem (не в git)
├── register-ui/ # Самoregистрация пользователей (:3001)
├── admin-ui/ # Управление пользователями (:3000)
└── native/ # Установка в ОС (LAMP) — см. ниже
```
**Важно:** каталог `nextcloud_install` содержит только скрипты и шаблоны.
Все данные Nextcloud (config, файлы, appdata) лежат **вне** репозитория — пути задаются в `docker/.env`.
---
## Docker — подкаталог `docker/`
### Сервисы (docker-compose.yml)
| Сервис | Контейнер | Назначение |
|--------|-----------|------------|
| `db` | `nextcloud-db` | MariaDB |
| `redis` | `nextcloud-redis` | Кэш и блокировки |
| `app` | `nextcloud-app` | Nextcloud (Apache + PHP) |
| `cron` | `nextcloud-cron` | Фоновые задачи |
### Порты
| Порт | Протокол | Назначение |
|------|----------|------------|
| **8080** | HTTP | `NEXTCLOUD_PORT` |
| **8443** | HTTPS | `./enable-docker-ssl.sh` + cert в `docker/certs/` |
Reverse proxy **не используется** — Nextcloud доступен напрямую на этих портах.
### Хранение данных (в `.env`, вне репозитория)
| Переменная | Назначение | По умолчанию |
|---|---|---|
| `NEXTCLOUD_CONFIG_DIR` | config.php, фрагменты config | `/var/nextcloud/config` |
| `NEXTCLOUD_DATADIR` | Файлы пользователей | `/mnt/hgfs/nextcloud_data` |
| `NEXTCLOUD_APPDATA` | App Store, превью | `/var/nextcloud/appdata` |
| `NEXTCLOUD_CUSTOM_APPS` | Приложения из магазина | `/var/nextcloud/custom_apps` |
| `NEXTCLOUD_BACKUP_DIR` | Бэкапы `./backup.sh` | `/var/nextcloud/backups` |
| `NEXTCLOUD_INSTANCEID` | ID для mount `appdata_*` | генерируется в `.env` |
Docker volumes (удаляются при `./uninstall.sh --purge`): `nextcloud_db_data`, `nextcloud_app_data`, `nextcloud_redis_data`.
### Скрипты
| Скрипт | Назначение |
|--------|------------|
| `./setup-env.sh [домен]` | Создать `.env` с паролями и trusted domains |
| `./install.sh [домен]` | Полная установка (спросит пути хранения) |
| `./start.sh` / `./stop.sh` / `./status.sh` | Управление стеком |
| `./backup.sh` / `./restore.sh` | Резервное копирование / восстановление |
| `./restore-config.sh` | Починка config; `--force` — сброс и occ install |
| `./uninstall.sh` | Остановка; `--purge` — удаление volumes |
| `./enable-docker-ssl.sh` | HTTPS на :8443 |
| `./disable-docker-ssl.sh` | Вернуть HTTP-only |
| `./add-user.sh` | Создать пользователя через CLI |
Все docker-скрипты запускайте **без `sudo`**. Скрипт сам запросит sudo только для каталогов вроде `/var/nextcloud/*`.
### Установка
```bash
cd nextcloud_install/docker
chmod +x *.sh
./install.sh your.domain
```
HTTPS (после установки):
```bash
cp /path/to/fullchain.pem certs/
cp /path/to/privkey.pem certs/
./enable-docker-ssl.sh your.domain
# https://your.domain:8443
```
Переустановка:
```bash
./uninstall.sh --purge # yes
rm -f .env
./setup-env.sh your.domain
./install.sh your.domain
./enable-docker-ssl.sh your.domain
```
Если видите ошибку про `CAN_INSTALL` или права на config:
```bash
./restore-config.sh --force
```
### Ручные команды `docker compose`
Скрипты сами подключают SSL-overlay, если есть файл `.ssl-enabled`.
При ручном запуске **обязательно** работайте из `docker/`:
```bash
cd nextcloud_install/docker
export COMPOSE_FILE="$(pwd)/docker-compose.yml:$(pwd)/docker-compose.ssl.yml" # если SSL включён
docker compose ps
docker compose exec -u www-data app php occ status
```
Без `cd` или `COMPOSE_FILE` появится ошибка: `no configuration file provided: not found`.
### config.defaults/ и certs/
- **`config.defaults/`** — шаблоны фрагментов (`redis.config.php`, `reverse-proxy.config.php` и т.д.). При установке копируются в `NEXTCLOUD_CONFIG_DIR`.
- **`certs/`** — сертификаты для `enable-docker-ssl.sh`. Файлы `*.pem` не попадают в git.
- **`.ssl-enabled`** — маркер включённого HTTPS; скрипты автоматически добавляют `docker-compose.ssl.yml`.
---
## Самoregистрация пользователей
```bash
cd nextcloud_install/register-ui
chmod +x start.sh
./start.sh
```
Откройте **http://ваш-сервер:3001** — пользователи создают аккаунт сами.
В `register-ui/.env`:
| Переменная | Пример |
|---|---|
| `NEXTCLOUD_URL` | `https://host:8443` |
| `REGISTRATION_ADMIN_USER` | `admin` |
| `REGISTRATION_ADMIN_PASSWORD` | из `docker/.env` |
| `DEFAULT_QUOTA` | `5GB` |
Отключить регистрацию: `REGISTRATION_ENABLED=false`
---
## Admin UI (для администратора)
```bash
cd nextcloud_install/admin-ui
./start.sh
```
**http://127.0.0.1:3000** — квоты, группы, удаление пользователей.
CLI: `docker/add-user.sh`
---
## Native (LAMP в системе)
> **Статус: не отлаживалось.**
> Скрипты в `native/` написаны как альтернатива Docker (Apache + MariaDB + PHP + Redis на Ubuntu/Debian), но в этом репозитории **не тестировались** на реальном окружении.
> Для production рекомендуется **`docker/`**.
Что есть в `native/`:
| Файл | Назначение |
|------|------------|
| `install.sh` | Установка пакетов, БД, Nextcloud в `/var/www/nextcloud` |
| `setup-env.sh` | Генерация `.env` |
| `start.sh` / `stop.sh` / `status.sh` | Управление сервисами |
| `backup.sh` / `restore.sh` | Бэкапы |
| `uninstall.sh` | Удаление |
| `templates/` | Шаблоны Apache, PHP, cron |
```bash
cd nextcloud_install/native
sudo ./install.sh your.domain
```
Ожидаемые отличия от Docker (могут потребовать ручной доработки):
- SSL настраивается в Apache на хосте, не через `enable-docker-ssl.sh`
- Нет встроенного Redis/MariaDB в контейнерах — всё в системе
- Пути хранения другие (`NEXTCLOUD_INSTALL_DIR`, не `NEXTCLOUD_DATADIR`)
- Collabora, Talk HPB, register-ui/admin-ui — настраиваются вручную
Подробнее см. [Recommendation.md § Native](Recommendation.md#13-native-экспериментально).
---
## Документация
- [Recommendation.md](Recommendation.md) — практические рекомендации
- [Nextcloud Admin Manual](https://docs.nextcloud.com/server/latest/admin_manual/)