Изменения в структуре хранения заметок

This commit is contained in:
2023-12-04 17:13:48 +03:00
parent cbb41babd7
commit 3e2249dbc1
7 changed files with 9 additions and 6 deletions

View File

@@ -0,0 +1,30 @@
# Тюнинг расположения образов Docker
Указать в какой папке (на каком томе/диске) размещать образы (images) контейнеров можно:
* для Linix: отредактировав `/etc/docker/daemon.json`.
* для Windows: отредактировав файл настроек (Запускаем Docker, кликаем на него в трее правой кнопкой `Settings → Daemon`).
В конфигурационный json надо добавить настроку `"graph": "путь-к-папке-с-контейнерами"`. Например, может получиться вот так:
```json
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": true,
"graph": "d:/dockers-file/"
}
```
После следует перезагрузить docker.
Проверить расположение файлов контейнеров можно командой:
```bash
docker info
```
Будут отображены текущие настройки Docker, в том числе:
```txt
Docker Root Dir: D:\dockers-file
```

76
docker/docker-mariadb.md Normal file
View File

@@ -0,0 +1,76 @@
# Развертывание MariaDB (MySQL) в контейнере Docker
Создаем и запускаем контейнер с MariaDB. Т.к. при перезапуске контейнера данные из базы уничтожаются, то
пробросим из нее том с данными наружу во внешний каталог (том), в данном случае `/home/[user]/docker-data/maria-db/` :
```shell
sudo docker run --name MariaDB_11.1.2 --restart=always \
-e MYSQL_ROOT_PASSWORD=qwaseR12 \
-e TZ=Europe/Moscow \
-p 127.0.0.1:3306:3306 \
-v /home/[user]/docker-data/maria-db/:/var/lib/mysql \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-d mariadb:11.1.2
```
Для docker-compose это будет вот такой `docker-compose.ym`:
```yaml
version: "3.1"
services:
mariadb:
container_name: MariaDB_11.1.2
image: mariadb:11.1.2
volumes:
- /home/[user]/docker-data/maria-db:/var/lib/mysql
# ↓↓↓ это устанавливает часовой пояс как в системе, но сработает только под Linux:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- MARIADB_ROOT_PASSWORD=***
# - MARIADB_AUTO_UPGRADE=yes
# ↓↓↓ это устанавливает часовой пояс принудительно, и сработает и под MacOS, и под Windows
- TZ=Europe/Moscow
# ↓↓↓ всякие оптимизационные параметры устанавливаем вот так:
- sql-mode=""
- ft_min_word_len=1
- wait_timeout=600
- max_allowed_packet=1G
- innodb_buffer_pool_size=100M
- net_read_timeout=3600
- net_write_timeout=3600
ports:
- 127.0.0.1:3306:3306
command:
--bind-address=0.0.0.0
--skip_ssl=true
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
restart: always
```
Далее надо создать суперпользователя в базе данных. Для этого надо зайти в CLI (командную строку)
нашего контейнера, выполнив команду (в Docker Desktop под Windows или MacOS -- просто выбираем
контейнер в списке и нажимаем кнопку `CLI` или в новых версиях вкладка `exec`):
```shell
docker exec -it MariaDB_11.1.2 bash
```
После этого внутри контейнера войти в MariaDB:
```shell
mariadb -u root -p
```
Спросит пароль -- просто жмем `Enter`. Создаём супер-пользователя (например: `superdb_user`) командами:
```sql
CREATE USER 'superdb_user'@'%' IDENTIFIED BY 'secret-password';
GRANT ALL PRIVILEGES ON *.* TO 'superdb_user'@'%';
FLUSH PRIVILEGES;
exit;
```
После этого можно выйти из контейнера:
```shell
exit
```
Теперь можно коннектится к базе внутри контейнера точно так же как к базе установленным обычным образом.

View File

@@ -0,0 +1,114 @@
# Контейнер MySQL под Windows 10
Сначала надо перенастроить Dockers в _advansed_ режим и разрешить использовать experimental-контенеры. Для этого
* Щелкнуть в трее на значок **Docker** правой кнопокй мыши.
* Выбрать пункт _Settings_
* В блоке _Docker Engine_ в конфигурационный файл добавить `"experimental": true` (в старых версиях вкладка называется _Deamon_). Например получится вот так:
```json
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": true
}
```
* Во вкладке _Command line_ включить _Enable experimental features_ (в старых версиях, ту же настроку включаем во вкладке _Deamon_, надо включить _Advanced_)
## MySQL внутри docker-контейнера
```bash
docker run --name mysql -d \
-e MYSQL_ROOT_PASSWORD=this_is_password \
-e MYSQL_ROOT_HOST=1.1.1.1 \
-p 3306:3306 \
mysql:latest
```
Вместо `1.1.1.1` надо указать действительный **ip** хоста на котором работает dockers, иначе невозможно
будет коннектиться в MySQL снаружи контейнера.
```bash
docker inspect mysql
```
Останавливать, удалить контейнер и удалить образ контейнера:
```bash
docker stop mysql
docker rm mysql
docker rmi mysql
```
### Сохраняем данные базы при перезапуске контейнера
Чтобы при перезапуске контейнера данные из базы сохранялись, а не уничтожались вместе
с контейнером, их нужно хранить во внешнем для контенера каталоге хост-машины, и заставить
контейнер монтировать эту внешнюю для него папку внутрь себя. Каталог можно
создать эту папку вручную:
```bash
mkdir mysql_data
```
или командой doсker:
```bash
docker volume create --name mysql_data
```
Запуск контейнера с монтированием этой папки выглядит так:
```bash
docker run --name mysql -d \
-e MYSQL_ROOT_PASSWORD=this_is_password \
-e MYSQL_ROOT_HOST=1.1.1.1 \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
mysql:latest
```
## MySQL внутри сборки docker-compose
В последних сборках MySQL Server (8.0.20) изменена процедура авторизации и подключение клиентов
осуществятся через SSL-шифрование (SHA2 или SHA256). Это может затруднить работу старых приложений
(или просто лень создавать и обмениваться ключами шифрования). Для того чтобы переключить механизм
авторизации в режим предыдущих версий (_native_mysql_password_) в конфигурационный файл MySQL
`/etc/mysql/my.cnf`, в блок `[mysqld]` нужно добавить строчки:
```buildoutcfg
bind-address = 0.0.0.0
skip_ssl = true
```
Внутри контейнера эти настройки можно менять через yml-файлы для **docker-compose**. Например:
```yaml
version: "2.1"
services:
database:
container_name: mysql8_v1
image: mysql:latest
volumes:
# - "d:/docker-compose/mysql/cfg:/etc/mysql"
- "d:/docker-compose/mysql/data:/var/lib/mysql"
environment:
- "MYSQL_ROOT_PASSWORD=this_is_password"
- "MYSQL_ROOT_HOST=1.1.1.1"
ports:
- "3306:3306"
command: --bind-address="0.0.0.0" --skip_ssl="true"
```
Обратите внимание, данные базы внутри контейнера будут хранится в примонтированном
каталоге `d:/docker-compose/mysql/data` (каталог надо создать заранее)
Запуск docker-compose (контейнерной сборки):
```bash
docker-compose up -d
```
ключ `-d` -- detached mode, т.е. запуск в фоновом режиме (терминал хост-машины не получает
информацию на вход и не отображает вывод).
Остановка docker-compose:
```bash
docker-compose down
```

View File

@@ -0,0 +1,157 @@
# Развертывание прокси базе Shadowsocks (сервер и клиент)
Shadowsocks -- это не VPN, это -- защищенный прокси-сервер Socks5, он перенаправляет трафик через сервер, но
не предоставляют полную анонимность, не защищает весь интернет-трафик, а только трафик приложений настроенных
на этот прокси.
Несмотря на то, что Shadowsocks это приложение с открытым кодом и его просмотрело много людей, он не проходил
официального аудита безопасности, а значит гарантий полной безопасности при его использовании нет.
Документация по Shadowsocks [в репозитории GitHub](https://github.com/shadowsocks/shadowsocks-libev/).
## Сервер
Загружаем образ shadowsocks с DockerHub:
```bash
docker pull shadowsocks/shadowsocks-libev
```
Запускаем контейнер:
```bash
sudo docker run \
-e PASSWORD=very#knotty^password! \
-e TZ=Europe/Istanbul
-e METHOD=aes-256-cfb \
-p 8391:8388/tcp \
-p 8391:8388/udp \
-d --restart=always --name=ss01-server shadowsocks/shadowsocks-libev:latest
```
Проверим, что контейнер запустился:
```bash
sudo docker ps
```
Вывод должен быть примерно таким:
```bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61edf1fca166 shadowsocks/shadowsocks-libev:latest "/bin/sh -c 'exec ss…" 8 hours ago Up 8 hours 0.0.0.0:8391->8388/tcp, 0.0.0.0:8391->8388/udp, :::8391->8388/tcp, :::8391->8388/udp ss01-server
```
Для docker-compose это будет примерно вот такой `docker-compose.yml`:
```yaml
version: "3.7"
services:
ss-server:
image: shadowsocks/shadowsocks-libev:latest
container_name: 'ss02-server'
environment:
- TZ=Europe/Moscow
- PASSWORD=another~yet#knotty^password!
- METHOD=aes-256-cfb
- ARGS=--fast-open
ports:
- "8390:8388/tcp"
- "8390:8388/udp"
restart: unless-stopped
```
Запускаем docker-compose:
```bash
sudo docker-compose up -d
```
Важными при развёртывании является, пожалуй, только параметр `PASSWORD` и порты (в нашем случае сервер shadowsocks будет
виден в интернет по порту `8391`) . Также можно определить следующие параметры:
* `SERVER_ADDR` -- IP или домен для привязки, по умолчанию `0.0.0.0`.
* `SERVER_ADDR_IPV6` -- адрес IPv6 для привязки, по умолчанию `::0`.
* `METHOD` -- метод шифрования, по умолчанию `aes-256-gcm`. Так же поддерживаются `c4-md5`, `aes-128-gcm`,
`aes-192-gcm`, `aes-128-cfb`, `aes-192-cfb`, `aes-256-cfb`, `aes-128-ctr`, `aes-192-ctr`, `aes-256-ctr`,
`camellia-128-cfb`, `camellia-192-cfb`, `camellia-256-cfb`, `bf-cfb`, `chacha20-ietf-poly1305`,
`xchacha20-ietf-poly1305`, `salsa20`, `chacha20` и `chacha20-ietf`. Из этого списка особого внимание
заслуживает **chacha20-ietf-poly1305**, так как это шифрование поддерживает
[Outline VPN](https://getoutline.org/).
* `TIMEOUT` -- по умолчанию `300`.
* `DNS_ADDRS` -- DNS-серверы для перенаправления запросов поиска NS, по умолчанию: `8.8.8.8,8.8.4.4`.
* `TZ` -- часовой пояс, по умолчанию `UTC`.
* `ARGS` -- дополнительные аргументы, поддерживаемые, `ss-server`, например, для запуска в режиме `--fast-open` или
с подключёнными плагинами, типа relay-сервера `2ray`.
## Клиент
Ссылки на загрузку различных клиентов Shadowsocks с графическим интерфейсом можно [на сайте Shadowsocks](https://shadowsocks.org/doc/getting-started.html#gui-clients).
Ему нужно будет указать IP-адрес сервера, порт, пароль и метод шифрования. Например, вот такой конфиг для клиента:
```json
{
"server": "11.22.33.44",
"server_port": 8391,
"local_address": "0.0.0.0",
"local_port": 1080,
"password": "very#knotty^password!",
"timeout": 600,
"method": "aes-256-gcm"
}
```
Но можно и воспользоваться Docker, развернуть клиент в контейнере и работать с ним как локальным Socks5-прокси (другие
пользователи локальной сети тоже могут работать через этот Socks5).
Загружаем образ shadowsocks-клиента:
```bash
docker pull littleqz/shadowsocks-client
```
Запускаем контейнер:
```bash
sudo docker run \
-e SERVER=11.22.33.44 \
-e SERVER_PORT=8391 \
-e LOCAL_PORT=1080 \
-e PASSWORD=very#knotty^password! \
-e METHOD=aes-256-cfb \
-p 1080:1080 \
-d --restart=always --name=ss_proxy_izmir littleqz/shadowsocks-client
```
Теперь если в настройках браузера или другого приложения указать в качестве прокси-сервера `localhost` и порт `1080`,
то весь трафик будет перенаправляться через прокси-сервер. Так же можно указать в качестве прокси-сервера IP-адрес
компьютера, где запущен контейнер с прокси-сервером, и тогда другие пользователи локальной сети тоже смогут
использовать этот прокси-сервер.
Подобным образом можно запустить несколько контейнеров с shadowsocks-клиентами, например, для разных стран, настроив
их на разные порты и переключаться между ними.
Для docker-compose это будет примерно вот такой `docker-compose.yml` (настроено сразу на два клиента):
```yaml
version: "3.7"
services:
ss_proxy_izmir:
image: littleqz/shadowsocks-client
container_name: ss_proxy_izmir
environment:
- SERVER=11.22.33.44
- SERVER_PORT=8391
- LOCAL_PORT=1080
- PASSWORD=another~yet#knotty^password!
- TIMEOUT=60
- METHOD=aes-256-cfb
# expose:
# - 1080
ports:
- 1080:1080
restart: always
ss_proxy_msk:
image: littleqz/shadowsocks-client
container_name: ss_proxy_msk
environment:
- SERVER=55.66.77.88
- SERVER_PORT=8391
- LOCAL_PORT=1081
- PASSWORD=very#knotty^password!
- TIMEOUT=60
- METHOD=aes-256-cfb
ports:
- 1081:1081
restart: always
```

128
docker/docker-sstp-vpn.md Normal file
View File

@@ -0,0 +1,128 @@
# Развертывание сервера VPN на базе MS SSTP в контейнере Docker
SSTP (Secure Socket Tunneling Protocol) - это VPN-туннель, обеспечивающий механизм передачи трафика PPP через SSL/TLS.
Это довольно простой VPN (а значит прост в обнаружении), но его преимуществом является то, что он разработан Microsoft,
и его клиент встроен в Windows поддерживается прямо из коробки в AltLinux. SSTP использует TCP-порт 443 (можно
переназначить если на сервере уже работают сайты, использующие SSL по порту 443) и обеспечивает безопасность на
транспортном уровне с согласованием ключей, шифрованием и проверкой целостности трафика.
## Выпуск ключей (сертификата)
Для начала нужно выдать сертификат, который будет использован для шифрования соединения. Нам также понадобится
**домен**, через который мы будем подключаться к серверу. Домен должен быть обязательно направлен на ip адрес сервера
в DNS,
Создадим на сервере пару ключей `server_key.pem` и `server_cert.pem` (необходимо заменить слово **[MYDOMAIN]** в команде
на наш домен, а **[EMAIL]** на наш, или вообще произвольный, email):
```bash
openssl req -x509 -nodes \
-newkey rsa:4096 \
-keyout server_key.pem \
-out server_cert.pem \
-days 1825 \
-subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=[MYDOMAIN]/emailAddress=[EMAIL]"
```
В текущем каталоге появятся два файла: `server_key.pem` и `server_cert.pem`. Первый из них -- это закрытый ключ,
второй -- сертификат, который мы будем использовать для шифрования трафика.
## Запуск сервера
Загружаем образ softethervpn с DockerHub:
```bash
docker pull fernandezcuesta/softethervpn
```
Это контейнер сделанный из [официального мастер-репозитория SoftEtherVPN](https://github.com/SoftEtherVPN/SoftEtherVPN)
-- универсального VPN поддерживающего помимо `MS-SSTP` протоколы `SSL-VPN (HTTPS)`, `WireGuard`, `OpenVPN`,
`IPsec`, `L2TP`, `L2TPv3` и `EtherIP`.
Запускаем контейнер сконфигурировав его под **SSTP** и передавая ранее созданные сертификаты.:
```bash
sudo docker run \
--cap-add NET_ADMIN \
-p 22:443/tcp \
-e SSTP_ENABLED=1 \
-e USERNAME=[USER] \
-e PASSWORD=[USER_PASS] \
-e SERVER_PWD=[SERVER_PASS] \
-e CERT="$(cat server_cert.pem)" \
-e KEY="$(cat server_key.pem)" \
-d --name=sstp-vpn --restart=always fernandezcuesta/softethervpn
```
Обратите внимание, что так как в нашем случае на сервере работают сайты использующие SSL, то порт `443` занят
и мы переназначаем его на `22`. Наш VPN-тоннель будет мимикрировать не под SSL а под SSH. И, конечно, SSH не должен
использовать 22 порт, а тоже должен быть переназначен (впрочем перевести SSH по порт со значением больше 1024 полезно
и с точки зрения безопасности).
Так же замените:
* `[SERVER_PASS]` -- пароль сервера, должен быть минимум 12 символов, включающий цифры, большие и маленькие буквы.
* `[USER]` -- имя пользователя, которое будет использоваться для подключения к VPN-серверу.
* `[USER_PASS]` -- пароль пользователя, должен быть минимум 12 символов, включающий цифры, большие и маленькие буквы.
Проверим, что наш контейнер запущен и работает:
```bash
docker ps
```
Вывод должен быть примерно таким:
```bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
...
...
d00d6f42694e fernandezcuesta/softethervpn "/entrypoint.sh /usr…" 8 hours ago Up 8 hours 500/udp, 1194/udp, 4500/udp, 1701/tcp, 0.0.0.0:22->443/tcp, :::22->443/tcp sstp-server
...
```
Для docker-compose это будет примерно вот такой `docker-compose.yml`:
```yaml
ersion: "3.7"
services:
sstp-vpn:
image: fernandezcuesta/softethervpn
container_name: 'sstp-server'
restart: 'always'
ports:
- 22:443/tcp
cap_add:
- NET_ADMIN
environment:
- SSTP_ENABLED=1
- USERNAME=[USER]
- PASSWORD=[USER_PASS]
- SERVER_PWD=[SERVER_PASS]
- CERT=-----BEGIN CERTIFICATE-----MIIF2zCCA8OgAwIBAgIU.....ZnOLc-----END CERTIFICATE-----
- KEY=-----BEGIN PRIVATE KEY-----MIIJQgIBADANBg...6i4xupFQ==-----END PRIVATE KEY-----
```
Обратите внимание, что придется вставить сертификат и ключ из файла... и вставить в одну строку, иначе docker-compose будет ругаться.
Запускаем docker-compose:
```bash
sudo docker-compose up -d
```
### Создание дополнительного пользователя (не обязательно)
Если понадобится создать несколько подключений к серверу, то нужно выполнить следующие две команды для каждого пользователя (подключения):
```bash
docker exec -it sstp-vpn ./vpncmd [MYDOMAIN] /SERVER /PASSWORD:"$SERVER_PASS" /ADMINHUB:DEFAULT /CSV /CMD UserCreate [USER2] /GROUP:none /REALNAME:none /NOTE:none
docker exec -it sstp-vpn ./vpncmd [MYDOMAIN] /SERVER /PASSWORD:"$SERVER_PASS" /ADMINHUB:DEFAULT /CSV /CMD UserPasswordSet [USER2] /PASSWORD:[USER2_PASS]
```
Где:
* `[MYDOMAIN]` -- заменить на доменное имя, которе указывали ранее при выдаче сертификата.
* `[USER2]` -- имя нового соединения (пользователя)
* `[USER2_PASS]` -- пароль нового соединения (пользователя)
### Дополнительные настройки (не обязательно)
Рекомендуется увеличить максимальный размер буфера. Эта команда увеличит максимальный размер буфера приема примерно до 2.5МБ:
```bash
sudo sysctl -w net.core.rmem_max=2500000
```
## Подключение клиента