Remove deprecated files related to homelab architecture, container context, and various scripts. This cleanup includes the removal of configuration files for Nextcloud, Gitea, and VPN setups, as well as documentation files that are no longer relevant. This helps streamline the project and eliminate outdated references.
This commit is contained in:
164
docs/containers/container-101.md
Normal file
164
docs/containers/container-101.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# Контейнер 101 (nextcloud): Nextcloud, PostgreSQL, Redis
|
||||
|
||||
Подробное описание LXC-контейнера **101** на Proxmox (192.168.1.101): облачное хранилище Nextcloud за NPM (https://cloud.katykhin.ru), PostgreSQL 16, Redis для кэша и блокировок, внешнее хранилище «Игры».
|
||||
|
||||
---
|
||||
|
||||
## Общие сведения
|
||||
|
||||
- **Хостнейм:** nextcloud
|
||||
- **IP:** 192.168.1.101/24
|
||||
- **ОС:** Debian 12 (bookworm)
|
||||
- **Ресурсы:** 2 core, 3 GB RAM (из [архитектуры](../architecture/architecture.md))
|
||||
- **Доступ:** с Proxmox — `pct exec 101 -- bash` или по SSH на 192.168.1.101, если настроен.
|
||||
|
||||
Диск контейнера: ~10 GB, занято ~3.8 GB. Основной объём данных — в смонтированных каталогах хоста: `/mnt/nextcloud-data/` (приложение + БД) и `/mnt/nextcloud-extra/` (внешнее хранилище «Игры», порядка нескольких TB). Следить за местом на корне и за логами (см. раздел «Логи» и TODO).
|
||||
|
||||
---
|
||||
|
||||
## Доступ и логины
|
||||
|
||||
- **Debian (CT 101):** логин `root` (пароль — в менеджере паролей или как настраивал при установке).
|
||||
- **Nextcloud (веб):** https://cloud.katykhin.ru (через NPM). Логины пользователей — учётные записи Nextcloud (в т.ч. админ); пароли в менеджере паролей или задаются при первом входе.
|
||||
|
||||
---
|
||||
|
||||
## Сервисы (Docker Compose)
|
||||
|
||||
Один проект: `/opt/nextcloud/docker-compose.yml`. Сеть: **nextcloud_default** (bridge).
|
||||
|
||||
| Сервис | Образ | Порты (хост) | Назначение |
|
||||
|-----------|--------------------|--------------|------------|
|
||||
| nextcloud | nextcloud:latest | 8080→80 | Nextcloud (Apache), доступ по https://cloud.katykhin.ru через NPM |
|
||||
| db | postgres:16 | — | PostgreSQL 16, БД nextcloud |
|
||||
| redis | redis:7-alpine | — | Redis (кэш, блокировки), appendonly |
|
||||
|
||||
---
|
||||
|
||||
## 1. Nextcloud
|
||||
|
||||
**Образ:** `nextcloud:latest` (на момент проверки — Nextcloud 32.0.6).
|
||||
**Порты:** 8080 (хост) → 80 (контейнер). Снаружи доступ только через NPM: https://cloud.katykhin.ru → proxy на 192.168.1.101:8080.
|
||||
|
||||
**Тома:**
|
||||
- `/mnt/nextcloud-data/html` → `/var/www/html` (код, `config/`, `data/`, приложения).
|
||||
- `/mnt/nextcloud-extra` → `/mnt/nextcloud-extra` (внутри контейнера; используется для внешнего хранилища «Игры»).
|
||||
- `/opt/nextcloud/php-uploads.ini` → `/usr/local/etc/php/conf.d/zz-uploads.ini` (лимиты загрузки).
|
||||
|
||||
**Переменные окружения (compose):**
|
||||
- `NEXTCLOUD_TRUSTED_DOMAINS`: cloud.katykhin.ru 192.168.1.101
|
||||
- `OVERWRITEPROTOCOL`, `OVERWRITEHOST`, `OVERWRITECLIURL`: https и cloud.katykhin.ru
|
||||
- `REDIS_HOST`: redis
|
||||
- `POSTGRES_*`: хост db, БД nextcloud, пользователь и пароль БД (в compose заданы `nextcloud` / `nextcloud`; в `config.php` приложения может быть другой пользователь БД, заданный при установке).
|
||||
|
||||
**Конфиг приложения:** `/var/www/html/config/config.php` (внутри контейнера; на хосте путь — `/mnt/nextcloud-data/html/config/config.php`). В нём: trusted_domains, overwrite*, redis, datadirectory (`/var/www/html/data`), dbtype pgsql, dbhost/dbname/dbuser/dbpassword, instanceid, passwordsalt, secret и др. Редактировать при необходимости через `occ config:system:set` или правку файла с последующим перезапуском контейнера.
|
||||
|
||||
**PHP (загрузки):** `/opt/nextcloud/php-uploads.ini` на хосте:
|
||||
- `upload_max_filesize = 64G`, `post_max_size = 64G`
|
||||
- `memory_limit = 2G`, `max_execution_time = 7200`, `max_input_time = 7200`
|
||||
- `upload_max_chunk_size` задаётся в config.php (67108864).
|
||||
|
||||
**Внешнее хранилище:** В Nextcloud настроено локальное внешнее хранилище «Игры» (Local): точка монтирования в интерфейсе — «/Игры», каталог на диске — `/mnt/nextcloud-extra/games`. Данные лежат на хосте в `/mnt/nextcloud-extra/` (в т.ч. каталог `games`); объём порядка нескольких TB.
|
||||
|
||||
**Команды:**
|
||||
```bash
|
||||
docker exec nextcloud-nextcloud-1 php /var/www/html/occ status
|
||||
docker exec nextcloud-nextcloud-1 php /var/www/html/occ config:list system
|
||||
docker exec nextcloud-nextcloud-1 php /var/www/html/occ files_external:list
|
||||
docker logs nextcloud-nextcloud-1
|
||||
docker restart nextcloud-nextcloud-1
|
||||
```
|
||||
|
||||
Обновление приложения (если нужно): через `occ upgrade` или официальную инструкцию Nextcloud; перед этим — бэкап данных и БД.
|
||||
|
||||
---
|
||||
|
||||
## 2. PostgreSQL (db)
|
||||
|
||||
**Образ:** postgres:16.
|
||||
**Том:** `/mnt/nextcloud-data/pgdata` → `/var/lib/postgresql/data`.
|
||||
**Переменные:** `POSTGRES_DB=nextcloud`, `POSTGRES_USER=nextcloud`, `POSTGRES_PASSWORD=nextcloud` (в compose; приложение может подключаться под другим пользователем из config.php).
|
||||
**Healthcheck:** `pg_isready -U nextcloud`.
|
||||
|
||||
Подключение к БД с хоста CT 101 (для администрирования):
|
||||
```bash
|
||||
docker exec -it nextcloud-db-1 psql -U nextcloud -d nextcloud
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Redis
|
||||
|
||||
**Образ:** redis:7-alpine.
|
||||
**Команда:** `redis-server --appendonly yes`.
|
||||
**Том:** анонимный Docker volume (данные Redis в `/var/lib/docker/volumes/...` на хосте CT 101). Используется Nextcloud для memcache.distributed и memcache.locking; пароль не задан (доступ только внутри сети контейнеров).
|
||||
|
||||
---
|
||||
|
||||
## Порты
|
||||
|
||||
| Порт | Сервис | Примечание |
|
||||
|------|----------|------------|
|
||||
| 8080 | Nextcloud| HTTP внутри LAN; снаружи доступ через NPM (HTTPS cloud.katykhin.ru). |
|
||||
|
||||
PostgreSQL и Redis не проброшены на хост — доступ только из сети nextcloud_default.
|
||||
|
||||
---
|
||||
|
||||
## Логи и ротация
|
||||
|
||||
- **Nextcloud:** основной лог приложения — `/var/www/html/data/nextcloud.log` (в контейнере; на хосте — `/mnt/nextcloud-data/html/data/nextcloud.log`). На момент проверки файл уже порядка **сотен MB**. Встроенной ротации по размеру/времени в Nextcloud нет; в контейнере и на хосте **logrotate для этого файла не настроен** — риск разрастания и заполнения раздела (см. TODO).
|
||||
- **PostgreSQL:** логи по умолчанию в stdout (видны через `docker logs nextcloud-db-1`). Отдельного файлового лога и logrotate не проверялось.
|
||||
- **Docker:** вывод контейнеров — `docker logs`. Ротация логов Docker (json-file) зависит от настроек демона; при необходимости задать max-size/max-file в `/etc/docker/daemon.json`.
|
||||
|
||||
Рекомендуется добавить правило logrotate для `nextcloud.log` (по размеру или по дням) и при необходимости ограничить уровень логирования в Nextcloud.
|
||||
|
||||
---
|
||||
|
||||
## Запуск и обновление
|
||||
|
||||
Рабочий каталог: `/opt/nextcloud/`.
|
||||
|
||||
```bash
|
||||
cd /opt/nextcloud
|
||||
docker compose up -d
|
||||
docker compose ps
|
||||
docker compose logs -f nextcloud
|
||||
```
|
||||
|
||||
Перед обновлением образов — сделать бэкап БД и каталога данных:
|
||||
- БД: `docker exec nextcloud-db-1 pg_dump -U nextcloud nextcloud`
|
||||
- Данные: `/mnt/nextcloud-data/html` (в т.ч. `config/`, `data/`), при необходимости `/mnt/nextcloud-extra`.
|
||||
|
||||
---
|
||||
|
||||
## Уязвимости и риски
|
||||
|
||||
1. **Пароли в compose:** В `docker-compose.yml` заданы `POSTGRES_PASSWORD: nextcloud` и те же учётные данные в блоке nextcloud. Файл лежит на сервере; не коммитить в публичный репозиторий. При необходимости вынести секреты в `.env`.
|
||||
2. **Пароль БД в config.php:** В `config/config.php` хранится пароль подключения к PostgreSQL (и другие секреты). Права на файл должны ограничивать чтение (владелец www-data, режим 640 или строже).
|
||||
3. **Nextcloud доступ по 8080:** Порт 8080 открыт на 0.0.0.0 внутри CT 101. Доступ из интернета только через NPM (HTTPS). Убедиться, что на роутере/фаерволе не пробрасывается 8080 на 192.168.1.101.
|
||||
4. **Redis без пароля:** Приемлемо, так как Redis не проброшен наружу и доступен только контейнерам в одной сети. При добавлении других стеков в тот же Docker-сеть — учитывать, что Redis доступен без аутентификации.
|
||||
5. **Логи:** Отсутствие ротации для `nextcloud.log` может привести к заполнению диска (см. TODO).
|
||||
6. **Квота и внешнее хранилище «Игры»:** после переноса данных с SSD на HDD и смены пути внешнего хранилища (`/mnt/nextcloud-extra/games`) в БД могли остаться старые записи `storage` и кэша (oc_storages/oc_filecache) для прежнего пути. Это приводит к завышенному «Использовано» и постоянному статусу «Ожидается» у «Игры». При будущих переносах хранилища важно очищать устаревшие storages и запускать пересканирование (occ files:scan и files_external:scan), чтобы квота считалась корректно.
|
||||
|
||||
---
|
||||
|
||||
## TODO по контейнеру 101
|
||||
|
||||
- [ ] **Ротация nextcloud.log:** Настроить logrotate для `/mnt/nextcloud-data/html/data/nextcloud.log` (или пути на хосте CT 101): ротация по размеру (например 100–200 MB) или по дням, сжатие, ограничение числа копий. Либо включить в Nextcloud логирование в syslog и ротировать его.
|
||||
- [ ] **Уровень логирования:** В Nextcloud при необходимости снизить уровень лога (loglevel) в config.php или через `occ config:system:set loglevel --value 1` (1 = только ошибки), чтобы уменьшить рост лога.
|
||||
- [ ] **Резервное копирование:** Регулярный бэкап:
|
||||
- дамп PostgreSQL (данные в `/mnt/nextcloud-data/pgdata`, сейчас ~2.3 GB);
|
||||
- каталог `/mnt/nextcloud-data/html` (код, `config/`, `data/` — сейчас ~2.3 GB);
|
||||
- при необходимости внешнее хранилище `/mnt/nextcloud-extra` (в т.ч. `games` — сейчас ~5.9 TB).
|
||||
Проверить, что бэкап включает конфиг и что восстановление из дампа и данных проверено.
|
||||
- [ ] **Мониторинг диска:** Следить за занятостью корня контейнера и раздела, на котором лежат `/mnt/nextcloud-data` и `/mnt/nextcloud-extra`. При необходимости — алерты при достижении порога (например 85%).
|
||||
- [ ] **Trusted domains:** В config.php на момент проверки указан только `cloud.katykhin.ru`. В compose задан также `192.168.1.101` — при необходимости доступа по IP добавить его в trusted_domains через `occ config:system:set trusted_domains 1 --value 192.168.1.101` (индексы по необходимости скорректировать).
|
||||
- [ ] **Cron Nextcloud:** Убедиться, что фоновые задачи выполняются (режим cron или AJAX). Проверить: `docker exec nextcloud-nextcloud-1 php /var/www/html/occ background:job:list` или настройки в разделе «Основные» веб-интерфейса. При использовании cron на хосте — добавить задачу вида `*/5 * * * * docker exec nextcloud-nextcloud-1 php /var/www/html/cron.php`.
|
||||
|
||||
---
|
||||
|
||||
## Связь с другими документами
|
||||
|
||||
- [Архитектура и подключение](../architecture/architecture.md) — таблица контейнеров, домен cloud.katykhin.ru, NPM.
|
||||
- [Контейнер 100](container-100.md) — NPM, через который открыт доступ к Nextcloud по HTTPS.
|
||||
Reference in New Issue
Block a user