mirror of
https://github.com/StepanovPlaton/HomeServerServices.git
synced 2026-04-03 12:20:43 +04:00
Compare commits
13 Commits
34e37707d6
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f38d28019 | |||
| 2b6e9d0061 | |||
| c61c1ba072 | |||
| 1b6527cedd | |||
| 95cd3c441c | |||
| a150d7fddd | |||
| ec5fb34b03 | |||
| f3d947db93 | |||
| 696321ecb8 | |||
| b139c26ad6 | |||
| 10876634ec | |||
| 396ef88209 | |||
| 2fb783d327 |
12
.gitignore
vendored
12
.gitignore
vendored
@@ -18,8 +18,16 @@ gitea/config/*
|
||||
matrix/data/*
|
||||
matrix/db
|
||||
|
||||
cloud/filebrowser.db
|
||||
cloud/db
|
||||
cloud/data
|
||||
cloud/config
|
||||
cloud/apps
|
||||
|
||||
memos
|
||||
disk/filebrowser.db
|
||||
|
||||
memos/memos/*.db
|
||||
memos/memos/*.db-wal
|
||||
memos/memos/*.db-shm
|
||||
memos/memos/.thumbnail_cache
|
||||
|
||||
!.keep
|
||||
|
||||
16
README.md
16
README.md
@@ -46,11 +46,15 @@
|
||||
- Автоматическое обновление DNS записей у регистратора [рег.ру](https://www.reg.ru)
|
||||
- **Git-сервер Gitea** для хостинга репозиториев
|
||||
- **FileBrowser** — веб-интерфейс для управления файлами через браузер
|
||||
- **Matrix Synapse** — собственный сервер для мессенджера Matrix с веб-клиентом Element
|
||||
- **Memos** — быстрые заметки через веб-интерфейс
|
||||
- **Matrix Synapse** — собственный сервер для мессенджера Matrix с веб-клиентом Element и административной панелью
|
||||
- **NextCloud** — полнофункциональное облачное хранилище с синхронизацией файлов, календарем, контактами, задачами и многими другими функциями
|
||||
- Блокировка рекламы, нежелательной слежки, частичная защита от атак с помощью **AdGuard Home**
|
||||
- Управление контейнерами через **Portainer**
|
||||
- Все **сервисы используют переменные окружения** для гибкой настройки и примеры конфигурации
|
||||
|
||||
> 💡 **Важно:** Все сервисы модульные и независимые. Вы можете устанавливать только те, которые вам действительно нужны. Подробные инструкции по установке каждого сервиса находятся в файле [Services.md](./Services.md).
|
||||
|
||||
---
|
||||
|
||||
## 📝 Подготовка
|
||||
@@ -108,4 +112,12 @@
|
||||
|
||||
#### FileBrowser
|
||||
|
||||

|
||||

|
||||
|
||||
#### Memos
|
||||
|
||||

|
||||
|
||||
#### NextCloud
|
||||
|
||||

|
||||
|
||||
67
Services.md
67
Services.md
@@ -99,10 +99,10 @@ podman-compose up -d
|
||||
|
||||
---
|
||||
|
||||
## 8️⃣ Cloud (FileBrowser) — веб-интерфейс для управления файлами
|
||||
## 8️⃣ FileBrowser — простой веб-интерфейс для управления файлами
|
||||
|
||||
```bash
|
||||
cd cloud
|
||||
cd disk
|
||||
cp .env.example .env && vim .env
|
||||
touch filebrowser.db && podman unshare chown -R 1000:1000 filebrowser.db
|
||||
podman-compose up -d
|
||||
@@ -110,7 +110,19 @@ podman-compose up -d
|
||||
|
||||
---
|
||||
|
||||
## 9️⃣ Matrix — собственный сервер для мессенджера Matrix
|
||||
## 9️⃣ Memos — быстрые заметки
|
||||
|
||||
> Memos — это простой и быстрый способ создавать и управлять заметками через веб-интерфейс.
|
||||
|
||||
```bash
|
||||
cd memos
|
||||
cp .env.example .env && vim .env
|
||||
podman-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔟 Matrix — собственный сервер для мессенджера Matrix
|
||||
|
||||
```bash
|
||||
cd matrix
|
||||
@@ -147,7 +159,54 @@ podman exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml
|
||||
|
||||
---
|
||||
|
||||
## 🔟 Nginx Reverse Proxy (Entrypoint)
|
||||
## 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
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
SHARED_FOLDER=/path/to/folder
|
||||
USER_ID=1000
|
||||
GROUP_ID=1000
|
||||
ADMIN_USER=admin
|
||||
ADMIN_PASSWORD=password # Минимальная длинна 12 символов
|
||||
NEXTCLOUD_DATABASE=nextcloud-db
|
||||
DATABASE_USER=nextcloud
|
||||
DATABASE_PASSWORD=password
|
||||
DATABASE_ROOT_PASSWORD=another_password
|
||||
PATH_TO_FOLDER=/path/to/folder/
|
||||
|
||||
NEXTCLOUD_ADMIN=admin
|
||||
NEXTCLOUD_PASSWORD=password
|
||||
NEXTCLOUD_DOMAIN=cloud.domain.ru
|
||||
|
||||
COLLABORA_ADMIN=admin
|
||||
COLLABORA_PASSWORD=password
|
||||
COLLABORA_DOMAIN=office.domain.ru
|
||||
|
||||
@@ -1,40 +1,71 @@
|
||||
services:
|
||||
filebrowser:
|
||||
image: docker.io/filebrowser/filebrowser:latest
|
||||
container_name: filebrowser
|
||||
nextcloud-db:
|
||||
image: docker.io/library/mariadb:11
|
||||
restart: always
|
||||
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
|
||||
container_name: nextcloud-db
|
||||
volumes:
|
||||
# Папка с вашими файлами (замените /path/to/your/files на реальный путь)
|
||||
- ${SHARED_FOLDER}:/srv
|
||||
# База данных настроек и пользователей
|
||||
- ./filebrowser.db:/database/filebrowser.db
|
||||
# (Опционально) Конфигурационный файл
|
||||
# - ./settings.json:/config/settings.json
|
||||
- ./db:/var/lib/mysql:z
|
||||
environment:
|
||||
- PUID=${USER_ID:?}
|
||||
- PGID=${GROUP_ID:?}
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
command:
|
||||
- |
|
||||
if [ ! -s /database/filebrowser.db ]; then
|
||||
filebrowser config init --database /database/filebrowser.db
|
||||
filebrowser config set --auth.method=json --database /database/filebrowser.db
|
||||
fi
|
||||
filebrowser config set --root /srv --database /database/filebrowser.db
|
||||
filebrowser users add ${ADMIN_USER:?} ${ADMIN_PASSWORD:?} --perm.admin --scope "." --database /database/filebrowser.db || \
|
||||
filebrowser users update ${ADMIN_USER:?} --password ${ADMIN_PASSWORD:?} --scope "." --database /database/filebrowser.db
|
||||
filebrowser --database /database/filebrowser.db --address 0.0.0.0 --port 8080 --root /srv
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '1.0'
|
||||
memory: 512M
|
||||
reservations:
|
||||
memory: 256M
|
||||
- MARIADB_DATABASE=${NEXTCLOUD_DATABASE:?}
|
||||
- MARIADB_USER=${DATABASE_USER:?}
|
||||
- MARIADB_PASSWORD=${DATABASE_PASSWORD:?}
|
||||
- MARIADB_ROOT_PASSWORD=${DATABASE_ROOT_PASSWORD:?}
|
||||
networks:
|
||||
- private_cloud_network
|
||||
|
||||
nextcloud-redis:
|
||||
image: docker.io/library/redis:alpine
|
||||
restart: always
|
||||
container_name: nextcloud-redis
|
||||
networks:
|
||||
- private_cloud_network
|
||||
|
||||
nextcloud:
|
||||
image: docker.io/library/nextcloud:latest
|
||||
restart: always
|
||||
container_name: nextcloud
|
||||
volumes:
|
||||
- ${PATH_TO_FOLDER:?}:/var/www/external_storage:z
|
||||
- ./data:/var/www/html/data:z
|
||||
- ./config:/var/www/html/config:z
|
||||
- ./apps:/var/www/html/custom_apps:z
|
||||
#environment:
|
||||
# - MYSQL_PASSWORD=${DATABASE_PASSWORD:?}
|
||||
# - MYSQL_DATABASE=${NEXTCLOUD_DATABASE:?}
|
||||
# - MYSQL_USER=${DATABASE_USER:?}
|
||||
# - MYSQL_HOST=nextcloud-db
|
||||
# - REDIS_HOST=nextcloud-redis
|
||||
#
|
||||
# - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN:?}
|
||||
# - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_PASSWORD:?}
|
||||
# - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_DOMAIN:?}
|
||||
depends_on:
|
||||
- nextcloud-db
|
||||
- nextcloud-redis
|
||||
networks:
|
||||
- cloud_network
|
||||
- private_cloud_network
|
||||
|
||||
nextcloud-collabora:
|
||||
image: docker.io/collabora/code:latest
|
||||
container_name: nextcloud-collabora
|
||||
restart: always
|
||||
environment:
|
||||
- aliasgroup1=https://${NEXTCLOUD_DOMAIN:?}
|
||||
- DONT_GEN_SSL_CERT=true
|
||||
- server_name=${COLLABORA_DOMAIN:?}
|
||||
- extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:net.post_allow.host[0]=.*
|
||||
- username=${COLLABORA_ADMIN:?}
|
||||
- password=${COLLABORA_PASSWORD:?}
|
||||
networks:
|
||||
- cloud_network
|
||||
- private_cloud_network
|
||||
|
||||
networks:
|
||||
cloud_network:
|
||||
name: cloud_network
|
||||
driver: bridge
|
||||
private_cloud_network:
|
||||
name: private_cloud_network
|
||||
driver: bridge
|
||||
|
||||
5
disk/.env.example
Normal file
5
disk/.env.example
Normal file
@@ -0,0 +1,5 @@
|
||||
SHARED_FOLDER=/path/to/folder
|
||||
USER_ID=1000
|
||||
GROUP_ID=1000
|
||||
ADMIN_USER=admin
|
||||
ADMIN_PASSWORD=password # Минимальная длинна 12 символов
|
||||
40
disk/docker-compose.yml
Normal file
40
disk/docker-compose.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
services:
|
||||
filebrowser:
|
||||
image: docker.io/filebrowser/filebrowser:latest
|
||||
container_name: filebrowser
|
||||
restart: always
|
||||
volumes:
|
||||
# Папка с вашими файлами (замените /path/to/your/files на реальный путь)
|
||||
- ${SHARED_FOLDER}:/srv
|
||||
# База данных настроек и пользователей
|
||||
- ./filebrowser.db:/database/filebrowser.db
|
||||
# (Опционально) Конфигурационный файл
|
||||
# - ./settings.json:/config/settings.json
|
||||
environment:
|
||||
- PUID=${USER_ID:?}
|
||||
- PGID=${GROUP_ID:?}
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
command:
|
||||
- |
|
||||
if [ ! -s /database/filebrowser.db ]; then
|
||||
filebrowser config init --database /database/filebrowser.db
|
||||
filebrowser config set --auth.method=json --database /database/filebrowser.db
|
||||
fi
|
||||
filebrowser config set --root /srv --database /database/filebrowser.db
|
||||
filebrowser users add ${ADMIN_USER:?} ${ADMIN_PASSWORD:?} --perm.admin --scope "." --database /database/filebrowser.db || \
|
||||
filebrowser users update ${ADMIN_USER:?} --password ${ADMIN_PASSWORD:?} --scope "." --database /database/filebrowser.db
|
||||
filebrowser --database /database/filebrowser.db --address 0.0.0.0 --port 8080 --root /srv
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '1.0'
|
||||
memory: 512M
|
||||
reservations:
|
||||
memory: 256M
|
||||
networks:
|
||||
- disk_network
|
||||
|
||||
networks:
|
||||
disk_network:
|
||||
name: disk_network
|
||||
driver: bridge
|
||||
Submodule homepage/src updated: 865f7b5315...4f76ca5601
Binary file not shown.
Binary file not shown.
@@ -23,10 +23,11 @@ services:
|
||||
networks:
|
||||
- proxy_network
|
||||
- gitea_network
|
||||
- cloud_network
|
||||
- disk_network
|
||||
- matrix_network
|
||||
- memos_network
|
||||
- homepage_network
|
||||
- cloud_network
|
||||
|
||||
certbot:
|
||||
image: docker.io/certbot/certbot
|
||||
@@ -73,9 +74,9 @@ networks:
|
||||
gitea_network:
|
||||
external: true
|
||||
name: gitea_network
|
||||
cloud_network:
|
||||
disk_network:
|
||||
external: true
|
||||
name: cloud_network
|
||||
name: disk_network
|
||||
matrix_network:
|
||||
external: true
|
||||
name: matrix_network
|
||||
@@ -85,3 +86,6 @@ networks:
|
||||
homepage_network:
|
||||
external: true
|
||||
name: homepage_network
|
||||
cloud_network:
|
||||
external: true
|
||||
name: cloud_network
|
||||
|
||||
BIN
proxy/nginx/conf.d/.default.conf.swp
Normal file
BIN
proxy/nginx/conf.d/.default.conf.swp
Normal file
Binary file not shown.
@@ -2,7 +2,7 @@
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
server_name domain.ru www.domain.ru git.domain.ru cloud.domain.ru m.domain.ru chat.domain.ru;
|
||||
server_name domain.ru www.domain.ru git.domain.ru disk.domain.ru cloud.domain.ru m.domain.ru chat.domain.ru todo.domain.ru draw.domain.ru;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
@@ -55,13 +55,13 @@ server {
|
||||
}
|
||||
}
|
||||
|
||||
# 4. Cloud
|
||||
# 4. Disk
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name cloud.domain.ru;
|
||||
server_name disk.domain.ru;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/cloud.domain.ru/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/cloud.domain.ru/privkey.pem;
|
||||
ssl_certificate /etc/letsencrypt/live/disk.domain.ru/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/disk.domain.ru/privkey.pem;
|
||||
|
||||
client_max_body_size 0;
|
||||
|
||||
@@ -74,7 +74,77 @@ server {
|
||||
}
|
||||
}
|
||||
|
||||
# 4. Matrix
|
||||
# 5. Cloud
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name cloud.stepanovplaton.ru;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/cloud.stepanovplaton.ru/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/cloud.stepanovplaton.ru/privkey.pem;
|
||||
|
||||
client_max_body_size 0;
|
||||
|
||||
location / {
|
||||
proxy_pass http://nextcloud;
|
||||
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-Proto $scheme;
|
||||
}
|
||||
}
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name office.stepanovplaton.ru;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/office.stepanovplaton.ru/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/office.stepanovplaton.ru/privkey.pem;
|
||||
|
||||
location ^~ /browser {
|
||||
proxy_pass http://nextcloud-collabora:9980;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
location ^~ /hosting/discovery {
|
||||
proxy_pass http://nextcloud-collabora:9980;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
location ^~ /hosting/capabilities {
|
||||
proxy_pass http://nextcloud-collabora:9980;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
location ~ ^/cool/(.*)/ws$ {
|
||||
proxy_pass http://nextcloud-collabora:9980;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade"; # Явно указываем Upgrade
|
||||
proxy_set_header Host $host;
|
||||
proxy_read_timeout 36000s;
|
||||
}
|
||||
location ^~ /cool/adminws {
|
||||
proxy_pass http://nextcloud-collabora:9980;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_read_timeout 36000s;
|
||||
}
|
||||
location / {
|
||||
proxy_pass http://nextcloud-collabora:9980;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
}
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name talk.stepanovplaton.ru;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/talk.stepanovplaton.ru/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/talk.stepanovplaton.ru/privkey.pem;
|
||||
|
||||
location / {
|
||||
return 200 "Nextcloud Talk TURN server not configured";
|
||||
add_header Content-Type text/plain;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# 6. Matrix
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name m.domain.ru;
|
||||
@@ -110,7 +180,7 @@ server {
|
||||
}
|
||||
}
|
||||
|
||||
# Memos
|
||||
# 7. Memos
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name todo.domain.ru;
|
||||
|
||||
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
BIN
screenshots/memos.png
Normal file
BIN
screenshots/memos.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
BIN
screenshots/nextcloud.png
Normal file
BIN
screenshots/nextcloud.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
Reference in New Issue
Block a user