Compare commits
6 Commits
45b466be25
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 646de9a1fe | |||
| 520af29279 | |||
| 035bae4fca | |||
| bd620e77eb | |||
| 4f3b2ad52a | |||
| 90f7ea0064 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
site/
|
site/
|
||||||
.obsidian/
|
.obsidian/
|
||||||
|
*.pyc
|
||||||
@@ -98,6 +98,36 @@ cd gitea-backup
|
|||||||
|
|
||||||
### Gitea установлена с Docker
|
### Gitea установлена с Docker
|
||||||
|
|
||||||
|
!!! info "Есть вариант проще"
|
||||||
|
|
||||||
|
Если Gitea запускается через Docker Compose, как показано в инструкции [выше](#установка-с-docker) и в качестве базы данных используется SQLite, то для создания полного бэкапа достаточно сохранить папку `data`. Её же достаточно перенести на другую машину при переезде.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Предварительно нужно остановить Gitea
|
||||||
|
sudo su - gitea
|
||||||
|
docker compose stop
|
||||||
|
exit
|
||||||
|
|
||||||
|
mkdir gitea-backup
|
||||||
|
cd gitea-backup
|
||||||
|
|
||||||
|
# Запускать надо с root правами, потому что некоторые файлы
|
||||||
|
# внутри волюма создаются из-под root
|
||||||
|
sudo tar -czf gitea-backup.tar.gz -C /home/gitea data
|
||||||
|
sudo chown $USER:$USER gitea-backup.tar.gz
|
||||||
|
|
||||||
|
# Опционально: можно зашифровать бэкап хотя бы просто паролем
|
||||||
|
gpg -c gitea-backup.tar.gz
|
||||||
|
rm gitea-backup.tar.gz
|
||||||
|
|
||||||
|
# Команда для расшифровки
|
||||||
|
# gpg -d gitea-backup.tar.gz.gpg > gitea-backup.tar.gz
|
||||||
|
|
||||||
|
# Перезапускаем Gitea
|
||||||
|
sudo su - gitea
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
Предполагается, что Gitea развёрнута с помощью Docker Compose как описано в инструкции [выше](#установка-с-docker).
|
Предполагается, что Gitea развёрнута с помощью Docker Compose как описано в инструкции [выше](#установка-с-docker).
|
||||||
|
|
||||||
Подключаемся к контейнеру.
|
Подключаемся к контейнеру.
|
||||||
@@ -145,6 +175,11 @@ curl -O http://<IP>:8080/gitea-dump-1760203345.zip
|
|||||||
|
|
||||||
## Восстановление из бэкапа в Docker
|
## Восстановление из бэкапа в Docker
|
||||||
|
|
||||||
|
!!! info "Есть вариант проще"
|
||||||
|
|
||||||
|
Если в качестве бэкапа Gitea была сохранена папка `data`. То для восстановления Gitea на другой машине достаточно просто пройти по инструкции [установки Gitea с Docker](#установка-с-docker), но перед запуском просто скопировать папку `data` по пути, указанном в `docker-compose.yml`.
|
||||||
|
|
||||||
|
|
||||||
Предполагается, что Gitea разворачивается из [бэкапа](#создание-бэкапа) с помощью Docker Compose как описано в инструкции [выше](#установка-с-docker). В [документации](https://docs.gitea.com/1.24/administration/backup-and-restore#using-docker-restore) есть соответствующая инструкция, однако она не полная и содержит ошибки.
|
Предполагается, что Gitea разворачивается из [бэкапа](#создание-бэкапа) с помощью Docker Compose как описано в инструкции [выше](#установка-с-docker). В [документации](https://docs.gitea.com/1.24/administration/backup-and-restore#using-docker-restore) есть соответствующая инструкция, однако она не полная и содержит ошибки.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -165,17 +200,23 @@ cp -r dump/data/ data/gitea/
|
|||||||
mkdir data/git/
|
mkdir data/git/
|
||||||
cp -r dump/repos/ data/git/repositories/
|
cp -r dump/repos/ data/git/repositories/
|
||||||
|
|
||||||
|
# Копируем SSH ключи, если есть
|
||||||
|
mkdir data/ssh
|
||||||
|
cp -r dump/ssh/ data/ssh/
|
||||||
|
|
||||||
# Копируем кастомные стили и шаблоны
|
# Копируем кастомные стили и шаблоны
|
||||||
cp -r dump/custom/. data/gitea/
|
# Актуально, если $GITEA_CUSTOM не совпадала с data/gitea
|
||||||
|
# cp -r dump/custom/. data/gitea/
|
||||||
|
|
||||||
# Если Gitea в Docker будет работать с SQLite,
|
# Если Gitea в Docker будет работать с SQLite,
|
||||||
# то восстановить базу данных можно так.
|
# то восстановить базу данных можно так.
|
||||||
|
# sqlite3 data/gitea/gitea.db < dump/gitea-db.sql
|
||||||
|
# Если файл data/gitea/gitea.db уже есть, то и восстанавливать ничего не нужно
|
||||||
# Команды для других баз данныех есть в документации
|
# Команды для других баз данныех есть в документации
|
||||||
sqlite3 data/gitea/gitea.db < dump/gitea-db.sql
|
|
||||||
|
|
||||||
# Копируем конфиг
|
# Копируем конфиг, если изначально он был в другом месте
|
||||||
mkdir data/gitea/conf
|
# mkdir data/gitea/conf
|
||||||
cp dump/app.ini data/gitea/conf/app.ini
|
# cp dump/app.ini data/gitea/conf/app.ini
|
||||||
```
|
```
|
||||||
|
|
||||||
Если до этого Gitea была запущена не через Docker, то нужно отредактировать конфиг.
|
Если до этого Gitea была запущена не через Docker, то нужно отредактировать конфиг.
|
||||||
|
|||||||
@@ -244,3 +244,33 @@ p10k configure
|
|||||||
# Type Path Mode UID GID Age Argument
|
# Type Path Mode UID GID Age Argument
|
||||||
d /home/USERNAME/Downloads 0755 USER USER 7d
|
d /home/USERNAME/Downloads 0755 USER USER 7d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Настройка zram
|
||||||
|
|
||||||
|
[zram-tools](https://packages.debian.org/sid/zram-tools) позволяет оптимизировать использование памяти, сжимая редко используемые данные в RAM.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install zram-tools
|
||||||
|
reboot
|
||||||
|
|
||||||
|
# Проверить, что swap работает
|
||||||
|
swapon --show
|
||||||
|
```
|
||||||
|
|
||||||
|
По умолчанию под swap выделяется 50% памяти, можно изменить:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo nano /etc/default/zramswap
|
||||||
|
sudo systemctl restart zramswap
|
||||||
|
sudo systemctl status zramswap
|
||||||
|
```
|
||||||
|
|
||||||
|
Также при использовании zram рекомендуют уменьшать swappiness. Этот параметр говорит системе, насколько часто ей стоит использовать swap файл.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
echo "vm.swappiness=10" | sudo tee /etc/sysctl.d/99-swappiness.conf
|
||||||
|
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
|
||||||
|
|
||||||
|
# Проверка
|
||||||
|
cat /proc/sys/vm/swappiness
|
||||||
|
```
|
||||||
@@ -280,3 +280,81 @@ DNS-записи распространяются не мгновенно, но
|
|||||||
```sh
|
```sh
|
||||||
./run-and-backup.sh -h
|
./run-and-backup.sh -h
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Загрузка карт
|
||||||
|
|
||||||
|
Карту нужно загрузить на сервер и разместить в папке `./data/`. Название папки с картой нужно будет указать в переменной `LEVEL` в файле `docker-compose.yml`. Также, почти все карты требуют включения командных блоков, это делается с помощью переменной `ENABLE_COMMAND_BLOCK`.
|
||||||
|
|
||||||
|
=== "Терминал"
|
||||||
|
```sh
|
||||||
|
nano docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "docker-compose.yml"
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
LEVEL: "MapName"
|
||||||
|
ENABLE_COMMAND_BLOCK: "true"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Загрузка ресурспаков
|
||||||
|
|
||||||
|
Многие карты предоставляют свои ресурспаки. Игроки, конечно, могут сами загрузить ресурспак и выбрать его в настройках, но можно настроить автоматическую загрузку при входе на сервер. Для этого ресурспак должен быть доступен для скачивания по публичной ссылке.
|
||||||
|
|
||||||
|
=== "Терминал"
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo mkdir -p /var/www/minecraft/packs/
|
||||||
|
sudo mv pack.zip /var/www/minecraft/packs/
|
||||||
|
sudo chmod -R 755 /var/www/minecraft/
|
||||||
|
|
||||||
|
# Настройка nginx
|
||||||
|
sudo nano /etc/nginx/sites-available/minecraft.tishenko.dev
|
||||||
|
sudo ln -s /etc/nginx/sites-available/minecraft.tishenko.dev /etc/nginx/sites-enabled/
|
||||||
|
sudo certbot --nginx -d minecraft.tishenko.dev -d www.minecraft.tishenko.dev
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Пример конфига Nginx"
|
||||||
|
|
||||||
|
В этом примере ресурспаки будут доступны для скачивания по ссылке вида `https://minecraft.tishenko.dev/packs/pack.zip`. `https` будет работать после получения [SSL сертификата](../servers/nginx.md#ssl-сертификат-с-certbot).
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name minecraft.tishenko.dev www.minecraft.tishenko.dev;
|
||||||
|
|
||||||
|
location = /packs {
|
||||||
|
return 301 /packs/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /packs/ {
|
||||||
|
alias /var/www/minecraft/packs/;
|
||||||
|
autoindex on;
|
||||||
|
limit_conn conn_limit 2;
|
||||||
|
limit_rate_after 1m;
|
||||||
|
limit_rate 2560k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Название файла ресурспака нужно будет указать в переменной `RESOURCE_PACK` в файле `docker-compose.yml`. Опционально можно указать SHA1 хэш файла ресурспака в переменной `RESOURCE_PACK_SHA1`. Можно сделать загрузку ресурспака обязательной при подключении к серверу с помощью переменной `RESOURCE_PACK_ENFORCE`.
|
||||||
|
|
||||||
|
=== "Терминал"
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Опционально
|
||||||
|
# sha1sum /var/www/minecraft/packs/pack.zip
|
||||||
|
|
||||||
|
nano docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "docker-compose.yml"
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
RESOURCE_PACK: "https://.../yourpack.zip"
|
||||||
|
RESOURCE_PACK_SHA1: "0123abcd... (40 hex)"
|
||||||
|
RESOURCE_PACK_ENFORCE: "true"
|
||||||
|
```
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ nc -vz smtp.gmail.com 587
|
|||||||
Если порты закрыты, то можно обратиться в поддержку хостинг провайдера с запросом на открытие портов.
|
Если порты закрыты, то можно обратиться в поддержку хостинг провайдера с запросом на открытие портов.
|
||||||
|
|
||||||
??? abstract "Пример обращения в поддержку"
|
??? abstract "Пример обращения в поддержку"
|
||||||
|
|
||||||
```
|
```
|
||||||
Добрый день!
|
Добрый день!
|
||||||
|
|
||||||
@@ -27,6 +28,11 @@ nc -vz smtp.gmail.com 587
|
|||||||
Спасибо!
|
Спасибо!
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? question "Если нельзя открыть исходящие на 25/tcp?"
|
||||||
|
|
||||||
|
Не все хостинги позволяют открывать исходящие соединения на порт 25, даже через поддержку.
|
||||||
|
В этом случае можно использовать SMTP Relay, например, [Cloud Postbox](https://yandex.cloud/ru/services/postbox). Инструкция по его настройке приведена [ниже](#smtp-relay).
|
||||||
|
|
||||||
## Настройка DNS
|
## Настройка DNS
|
||||||
|
|
||||||
Настройка DNS на примере домена `tishenko.dev` (почта `@tishenko.dev`). Более подробное описание всех настроек можно прочитать в документации Docker Mailserver: [[1]](https://docker-mailserver.github.io/docker-mailserver/latest/usage/#minimal-dns-setup) и [[2]](https://docker-mailserver.github.io/docker-mailserver/latest/config/best-practices/dkim_dmarc_spf/).
|
Настройка DNS на примере домена `tishenko.dev` (почта `@tishenko.dev`). Более подробное описание всех настроек можно прочитать в документации Docker Mailserver: [[1]](https://docker-mailserver.github.io/docker-mailserver/latest/usage/#minimal-dns-setup) и [[2]](https://docker-mailserver.github.io/docker-mailserver/latest/config/best-practices/dkim_dmarc_spf/).
|
||||||
@@ -369,7 +375,7 @@ sudo certbot --nginx -d mail.tishenko.dev -d www.mail.tishenko.dev
|
|||||||
|
|
||||||
### Конфиг
|
### Конфиг
|
||||||
|
|
||||||
Некоторые настройки Roundcube нельзя задать через переменные окружения, они задаются в файле `config.inc.php`. Например, "название продукта", оно отображается в заголовке страницы, на странице входа и в других местах. По умолчанию это `Roundcube Webmail`. Его можно изменить в `config/config.inc.php`.
|
Некоторые настройки Roundcube нельзя задать через переменные окружения, они задаются в файле `config.inc.php`. Например, "название продукта", оно отображается в заголовке страницы, на странице входа и в других местах. По умолчанию это `Roundcube Webmail`. Также по умолчанию в Roundcube очень короткое время сессии, всего 10 минут, после которых нужно логиниться заново. Эти параметры можно изменить в `config/config.inc.php`.
|
||||||
|
|
||||||
=== "Терминал"
|
=== "Терминал"
|
||||||
|
|
||||||
@@ -382,6 +388,13 @@ sudo certbot --nginx -d mail.tishenko.dev -d www.mail.tishenko.dev
|
|||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
$config['product_name'] = 'Tish\'s Mail';
|
$config['product_name'] = 'Tish\'s Mail';
|
||||||
|
$config['session_lifetime'] = 60 * 24;
|
||||||
|
```
|
||||||
|
|
||||||
|
После изменения конфига нужно перезапустить Roundcube.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker compose restart roundcube
|
||||||
```
|
```
|
||||||
|
|
||||||
### Настройки аккаунта
|
### Настройки аккаунта
|
||||||
@@ -452,3 +465,32 @@ v=BIMI1; l=https://tishenko.dev/logo.svg;
|
|||||||
```
|
```
|
||||||
|
|
||||||
Однако в gmail и некоторых других почтовых клиентах он всё равно не будет отображаться, так как они требуют для этого платные VMC сертификаты.
|
Однако в gmail и некоторых других почтовых клиентах он всё равно не будет отображаться, так как они требуют для этого платные VMC сертификаты.
|
||||||
|
|
||||||
|
## SMTP Relay
|
||||||
|
|
||||||
|
Не всегда есть возможность открыть исходящие соединения на порт 25. Для этого можно использовать SMTP Relay. Это отдельный сервис, у которого есть свои сервера с открытыми почтовыми портами. Бонусом является то, что при использовании подобных сервисов обычно требуется меньше настроек DNS, а также письма с IP адресов таких сервисов практически не попадают в спам. [Yandex Cloud Postbox](https://yandex.cloud/ru/services/postbox) это пример подобного сервиса. Вообще говоря, он предназначен для транзакционных рассылок, то есть сообщений с подтверждением разных действий, но его можно использовать и для отправки писем с личной почты.
|
||||||
|
|
||||||
|
1. После регистрации, нужно создать почтовый адрес для отправки писем. При создании нужно указать домен, например, `tishenko.dev` и выбрать простой вариант настройки DKIM.
|
||||||
|
2. Подтверждаем принадлежность домена. Для этого нужно добавить две CNAME записи в DNS. Для каждого адреса генерируются уникальные ключи, ниже пример для домена `tishenko.dev`.
|
||||||
|
```dns
|
||||||
|
egt9mf1fnu9td07bs857-1._domainkey IN CNAME egt9mf1fnu9td07bs857-1.dkim.pstbx.ru.
|
||||||
|
egt9mf1fnu9td07bs857-2._domainkey IN CNAME egt9mf1fnu9td07bs857-2.dkim.pstbx.ru.
|
||||||
|
```
|
||||||
|
Затем нужно подождать пока записи появятся в DNS, затем запустить проверку в Cloud Postbox. Посмотреть процесс распространения записей можно с помощью сайта [DNS Checker](egt9mf1fnu9td07bs857-1._domainkey.tishenko.dev).
|
||||||
|
3. Добавляем TXT запись для домена `tishenko.dev`.
|
||||||
|
```dns
|
||||||
|
v=spf1 include:_spf.yandex.net -all
|
||||||
|
```
|
||||||
|
|
||||||
|
Дальше настраиваем Docker Mailserver для работы с SMTP Relay. [Документация DMS](https://docker-mailserver.github.io/docker-mailserver/latest/config/advanced/mail-forwarding/relay-hosts) по настройке SMTP Relay и [документация Yandex Cloud Postbox](https://yandex.cloud/en/docs/tutorials/serverless/postfix-integration) в помощь. В `mailserver.env` нужно добавить следующие переменные:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Отправка всей исходящей почты через Postbox
|
||||||
|
DEFAULT_RELAY_HOST=[postbox.cloud.yandex.net]:587
|
||||||
|
|
||||||
|
# SMTP-учётка Postbox:
|
||||||
|
RELAY_USER=SMTP_USERNAME
|
||||||
|
RELAY_PASSWORD=SMTP_PASSWORD
|
||||||
|
```
|
||||||
|
|
||||||
|
Для получения паролей надо создать [сервисный аккаунт](https://yandex.cloud/ru/docs/iam/operations/sa/create), назначить ему роль [`postbox.sender`](https://yandex.cloud/ru/docs/tutorials/serverless/postfix-integration#infrastructure), а затем создать API-ключ с областью действия `yc.postbox.send`. Идентификатор ключа можно использовать как `RELAY_USER`, а сам секретный ключ как `RELAY_PASSWORD`.
|
||||||
6
hooks.py
Normal file
6
hooks.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# https://github.com/squidfunk/mkdocs-material/discussions/4969#discussioncomment-7290363
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
def on_config(config, **kwargs):
|
||||||
|
config.copyright = config.copyright.format(year=datetime.now().year)
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
site_name: Tish Knowledge Base
|
site_name: Tish Knowledge Base
|
||||||
site_url: https://kb.tishenko.dev
|
site_url: https://kb.tishenko.dev
|
||||||
copyright: Copyright © 2025
|
copyright: Copyright © {year}
|
||||||
repo_url: https://github.com/Arity-T/knowledge-base
|
repo_url: https://github.com/Arity-T/knowledge-base
|
||||||
repo_name: Arity-T/knowledge-base
|
repo_name: Arity-T/knowledge-base
|
||||||
edit_uri: edit/main/docs/
|
edit_uri: edit/main/docs/
|
||||||
|
hooks:
|
||||||
|
- hooks.py
|
||||||
theme:
|
theme:
|
||||||
name: material
|
name: material
|
||||||
language: ru
|
language: ru
|
||||||
|
|||||||
Reference in New Issue
Block a user