Files
HomeServerServices/Services.md
2026-02-12 18:46:13 +04:00

257 lines
9.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# ⚙️ Настройка сервисов
> Этот гайд описывает настройку и запуск всех сервисов в контейнерах.
---
## 1⃣ Portainer — WebUI для управления контейнерами
> Для запуска Portainer требуется активный Docker сокет. В Podman по умолчанию его нет, так как это является потенциальным вектором атаки. Запускайте сокет только для конкретного пользователя (не root!)
```bash
cd portainer
cp .env.example .env && vim .env
systemctl --user enable --now podman.socket
podman-compose up -d
```
---
## 2⃣ Grafana — Dashboard со статистикой загруженности сервера
> Proxmox предоставляет достаточно информации об использовании ресурсов системы, но если вы ставите Debian как контейнер сервисов отдельно, вам может потребоваться Grafana
```bash
cd grafana
cp .env.example .env && vim .env
podman-compose up -d
```
---
## 3⃣ AutoSSH — SSH туннель, проброс портов
```bash
cd autossh
cp .env.example .env && vim .env
podman-compose up -d --build
```
---
## 4⃣ Samba — сетевой диск в локальной сети
```bash
cd samba
cp .env.example .env && vim .env
podman-compose up -d
```
> Samba работает на 139 и 445 порту, для доступа к ним нужны root права. Чтобы не запускать контейнер от имени root, пробросим порты из контейнера на 1139 и 1445 порты соответственно, и добавим правила в iptables для переадресации трафика:
```bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 139 -j REDIRECT --to-ports 1139
sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-ports 1445
sudo iptables -t nat -L -n -v # Посмотреть список правил
# Для сохранения правил iptables после перезагрузки
sudo apt install iptables-persistent
sudo netfilter-persistent save # сохранить текущие iptables
```
---
## 5⃣ Transmission — BitTorrent клиент
```bash
cd transmission
cp .env.example .env && vim .env
podman-compose up -d
```
> В настройках клиента указанная в `.env` папка доступна по пути `/downloads`. Можно подключиться с помощью [Transmission Remote GUI](https://github.com/transmission-remote-gui/transgui) или [Transmission Qt](https://transmissionbt.com/download.html)
---
## 6⃣ Syncthing — синхронизация файлов между устройствами
```bash
cd syncthing
cp .env.example .env && vim .env
mkdir config && podman unshare chown -R 1000:1000 config
podman-compose up -d
```
---
## 7⃣ Gitea — Git-сервер
```bash
cd gitea
cp .env.example .env && vim .env
mkdir config && podman unshare chown -R 1000:1000 config
mkdir data && podman unshare chown -R 1000:1000 data
mkdir db && podman unshare chown -R 1000:1000 db
podman-compose up -d
```
> Gitea конфигурируется позже, уже в веб-форме. Обязательно **отключаем самостоятельную регистрацию** и создаём администратора (пользователя по умолчанию). Остальное не трогаем, уже сконфигурировано в `.env`
---
## 8⃣ FileBrowser — простой веб-интерфейс для управления файлами
```bash
cd disk
cp .env.example .env && vim .env
touch filebrowser.db && podman unshare chown -R 1000:1000 filebrowser.db
podman-compose up -d
```
---
## 9⃣ Memos — быстрые заметки
> Memos — это простой и быстрый способ создавать и управлять заметками через веб-интерфейс.
```bash
cd memos
cp .env.example .env && vim .env
podman-compose up -d
```
---
## 🔟 Matrix — собственный сервер для мессенджера Matrix
```bash
cd matrix
mkdir data && podman unshare chown -R 1000:1000 data
podman run -it --rm -v "$(pwd)/data:/data" -e SYNAPSE_SERVER_NAME=MATRIX.DOMAIN.ru -e SYNAPSE_REPORT_STATS=no docker.io/matrixdotorg/synapse:latest generate
```
> ⚠️ Замените `MATRIX.DOMAIN.ru` на ваш домен для Matrix сервера.
Меняем базу данных на PostgreSQL и прописываем БД, пользователя, пароль:
```yaml
database:
name: psycopg2
args:
user: user
password: passw0rd
database: db
host: matrix-db
cp_min: 5
cp_max: 10
```
```bash
mkdir db && podman unshare chown -R 1000:1000 db
cp .env.example .env && vim .env
podman-compose up -d
```
Создаём пользователя:
```bash
podman exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
```
---
## 1⃣1⃣ NextCloud — личное многофункциональное облако
> NextCloud — полнофункциональное облачное хранилище с возможностью синхронизации файлов, календарем, контактами, задачами и многими другими функциями.
```bash
cd cloud
cp .env.example .env && vim .env
mkdir db
mkdir config && podman unshare chown -R 33:33 config
mkdir data && podman unshare chown -R 33:33 data
mkdir apps && podman unshare chown -R 33:33 apps
podman-compose up -d
```
> ⚠️ В docker-compose.yml есть переменные, которые можно указать при первом запуске, но они мешают если пересоздавать контейнер не с нуля.
Настраиваем NextCloud через веб-форму после запуска Nginx. Выбираем пользователя по умолчанию, БД. В разделе приложений можем установить дополнительные модули:
**Базовые модули:**
- Calendar — календарь
- Contacts — контакты
- Deck — доски задач
- Whiteboard — виртуальная доска
- Forms — формы
**Комплексные модули:**
- **NextCloud Office** — конфигурируется с Collabora Office, которая запускается на отдельном домене, его нужно указать в настройках
- **NextCloud Talk** — видеоконференции. Для доступа извне сети нужен модуль CoTurn, он запускается на отдельном домене
> ⚠️ Для этого модуля нужно открыть UDP порты с SSL, что проблематично. Это я пока не настраивал
> Для работы NextCloud Office в `config/config.php` нужно добавить:
> ```php
> 'trusted_proxies' => ['10.89.0.1'],
> 'overwrite.cli.url' => 'https://cloud.domain.ru',
> 'overwriteprotocol' => 'https',
> 'overwritehost' => 'cloud.domain.ru',
> ```
>
> `10.89.0.1` — это Gateway для Podman
> `cloud.domain.ru` меняем на наш домен
**Настройка внешнего хранилища:**
Также устанавливаем модуль **External Storage Support** и в его настройках добавляем диск локального типа по пути `/var/www/external_storage` (это внешний диск, указанный в `.env`).
---
## 1⃣2⃣ Nginx Reverse Proxy (Entrypoint)
```bash
cd proxy
cp .env.example .env && vim .env
```
### Создание конфига для DynDNS
```bash
cp ddns/domains.txt.example ddns/domains.txt && vim ddns/domains.txt
```
> Нужно указать ресурсные записи `@` и `www` для доступа к домену второго уровня напрямую. Также нужно добавить домены 3-го уровня для: gitea, cloud (filebrowser), matrix server (synapse), matrix client (element).
### Первоначальная настройка SSL
В первый раз SSL сертификаты нужно создать вручную.
Запускаем DDNS скрипт и HTTP сервер для Let's Encrypt:
```bash
podman-compose -f init-compose.yml up -d --build
```
Проверяем по логам в portainer и в личном кабинете рег.ру, что ресурсные записи обновились. Ожидаем, пока DNS обновит информацию о наших поддоменах (занимает от 15 минут до 24 часов).
Затем создаём SSL сертификаты на каждый домен(-ы) с помощью команды:
```bash
podman-compose run --rm --entrypoint "certbot" certbot certonly --webroot --webroot-path=/var/www/certbot --email your-email@gmail.com --agree-tos --no-eff-email -d domain.com -d domain2.com
```
> ⚠️ Замените `your-email@gmail.com` на ваш email и `domain.com`, `domain2.com` на ваши домены.
### Настройка Nginx
```bash
cd nginx/conf.d
cp default.conf.example default.conf
vim default.conf
```
### Запуск основного контейнера
```bash
podman-compose -f init-compose.yml down
podman-compose up -d --build
```