226 lines
9.4 KiB
Markdown
226 lines
9.4 KiB
Markdown
# 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/)
|