среда, 11 марта 2020 г.

Перестал работать бэкап и восстановление средствами PostgreSQL

Прочее → 1С:Молокозавод 1.3.112.4 - не работает бэкап средствами PostgreSQL
Позиция 1С:
Причиной возникновения ошибки является ограничение PostgreSQL на работу со значениями, размер которых превышает 1Гб.
Ошибка может воспроизводиться, если конфигурация находится на поддержке и при этом отличается (значительно) от конфигурации поставщика (в режиме совместимости 8.2). В этом случае в таблице config может находиться запись с информацией об изменениях основной конфигурации относительно конфигурации поставщика, размер которой при выводе (например, pg_dump) превышает 1Гб (составляет порядка 500Мб при хранении).
Можем рекомендовать в качестве обхода:
-- снять конфигурацию с поддержки, после этого проблемы не будет.
При необходимости ее можно будет вновь вернуть.
-- настроить резервное копирование с помощью утилиты  pg_basebackup:

Отдельно:
lxd debian 10 сборка PostgreSQL 11.6 (По Олегу Харину)
lxd debian 10 сборка PostgreSQL 11.7 (По Олегу Харину)


Там есть патч 999-pg_dump_bin.patch. Если его применить, то можно делать pg_dump с бинарным COPY указав в командной строке опцию --binary-copy. Пример если выгружать на самом сервере:
pg_dump --binary-copy -j 4 -h /var/run/postgresql/ -U postgres -Fd uvadrev -f 1C-uvadrev-2019-12-12.backup



Для выгрузки/загрузки используются дополнительные утилиты pg_dumpbinary/pg_restorebinary
pg_dumpbinary

$ lxc delete srv1c
$ lxc copy srv1c-cop srv1c
$ lxc start srv1c
$ lxc exec srv1c -- sudo --user ubuntu --login
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libdbd-pg-perl
$ git clone https://github.com/lzlabs/pg_dumpbinary.git
$ cd pg_dumpbinary$ perl Makefile.PL
$ make
$ sudo make install
$ perl -MCPAN -e shell install DateTime


$ sudo su postgres
$ psql -l
$ pg_dumpbinary -d dbname postgres backup_postgres


воскресенье, 8 марта 2020 г.

Установка 1С + postgresql под windows

Установка PostgreSQL, версия 10.5-24.1C windows 10

1. PostgreSQL. Версия 11.5-12.1C. Дистрибутив СУБД PostgreSQL для Windows (64-bit) одним архивом

Обратить внимание, что если PostgreSQL установлен не по умолчанию, нужно добавить права
полный доступ для NETWORK SERVICE для папки установки (если изменен) или на папку с данными. Иначе после reboot PostgreSQL не будет запускаться.

 
2. Database location на SSD диске
если пути установки не по умолчанию, нужно добавить права
полный доступ для NETWORK SERVICE для папки установки (если изменен) или на папку с данными. Иначе после reboot PostgreSQL не будет запускаться.

3. Ставим  Cервер 1С:Предприятия (64-bit) для Windows 8.3.15.1830 или
старше.

4. IP 6 отключаем

5. Технологический журнал не настраиваем.

6. При последней установке служба агента не запускалась
Удалить службу
sc delete "1C:Enterprise 8.3 Server Agent (x86-64)"

1C:Enterprise 8.3 Server Agent (x86-64) пока вход в систему не был переделан с системной учетной записью.


7.  Настроить  postgresql.conf  Добавить в конец файла postgresql.conf
как в статье:

PostgreSQL, версия 10.5-24.1C windows 10 postgresql.conf 

Перезапустить сервер PostgreSQL


8. Если планируем ставить pg_probackup нужно пересоздать кластер  PostgreSQL с контрольными суммами.

9. Настраиваем  pg_probackup

pg_probackup настройка автономного резервного копирования windows

Если не использум pg_probackup, нужно настроить pg_basebackup

PostgreSQL 10.5-24 настройка WAL архивирования windows
Резервное копирование кластера PostgreSQL pg_basebackup Windows
 
10. Настроить vacuum

Windows обслуживание баз PostgreSQL

В скрипте настроить путь и пароль:

REM Установка переменных окружения
SET PGBIN=C:\Program Files\PostgreSQL\10.5-24.1C\bin
SET PGUSER=postgres
SET PGPASSWORD=pass

11. Настроить backup в dump
Из статьи ниже просто взять скрипт
Резервное копирование базы PostgreSQL pg_dump под windows
Сделать свой скрипт на каждую базу в скрипте настроить:
Имя базы:
SET PGDATABASE=demo

SET PGBIN=C:\Program Files\PostgreSQL\10.5-24.1C\bin
SET PGHOST=localhost
SET PGPORT=5432
SET PGUSER=postgres
SET PGPASSWORD=pass

12. Сделать общий скрипт в планировщике

Вообще хорошо перед pg_dump
Остановить сервер 1С
"C:\Program Files\1cv8\8.3.13.1690\bin\ragent.exe" -stop
скрипт vacuum
скрипт dump на каждую базу ...
скрипт dump на каждую базу ...
После pg_dump
Запуск сервера 1С
"C:\Program Files\1cv8\8.3.13.1690\bin\ragent.exe" -start

Целесообразно настроить удаление старых копий
forfiles /P "d:\demo" /D -30 /C "cmd /c del @path /q"


13. Настройка web доступа
Установка Apache HTTP Server 64 on Microsoft Windows

суббота, 7 марта 2020 г.

Установка Apache HTTP Server 64 on Microsoft Windows

Скачиваем windows версии
или
Скачиваем с SSL
Описание
Установка Apache на Windows
Установка php на apache. Установка и настройка сервера Apache
Настройка Apache для работы 1С через HTTPS (SSL)


Серверный вариант (предполагаем что сервер 64 уже установлен и при установке выбраны Модули расширения веб-сервера):

1. Устанавливаем VC_redist.x64.exe 

2. Разархивируем httpd-2.4.41-win64-VS16.zip в c:\Apache24

3. PATH добавить c:\Apache24\bin



4. Задать host или ip (нужно на момент установки службы, потом можно убрать)

c:\Apache24\conf\httpd.conf

ServerName localhost


5. Установим службу

c:\Apache24\bin\httpd.exe -k install

6. Опубликуем базу:


7. Если сервер 64 бит,  а публиковали на платформе 32 бит, правим

 c:\Apache24\conf\httpd.conf

#LoadModule _1cws_module "C:/Program Files (x86)/1cv8/8.3.16.1148/bin/wsap24.dll"
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.16.1148/bin/wsap24.dll"

Править нужно после каждого обновления публикации !!!


8. Проверить брандмауэр windows, для работы через OpenVPN должны быть разрешены публичные сети:



9.Файловый вариант устанавливаем 64 битный сервер (серверный ключ не нужен).
Дополнительно установить модули расширения веб-сервера, пользователя не создавать, службу сервера не запускать.

Для файлового варианта, следует учитывать
8.10.2.1. Общие особенности

c:\Apache24\conf\httpd.conf

Добавить в конец:

<IfModule mpm_winnt_module>
    ThreadStackSize 8388608
</IfModule>


10. Целесообразно поставить в автозагрузку или в планировщик

c:\Apache24\bin\ApacheMonitor.exe

для управления apache







воскресенье, 1 марта 2020 г.

lxd debian 10 сборка PostgreSQL 11.7 (По Олегу Харину)

Платформа 8.3 → Решение проблем производительности PostgreSQL при расчёте себестоимости в ERP

$ lxc image list images: > 1.txt
$ lxc launch images:debian/10 deb10h
#$ lxc list
#$ lxc config set deb10h security.privileged true
#$ lxc restart deb10h
$ lxc exec deb10h /bin/bash
# adduser builder
# usermod -aG sudo builder

# apt update
# apt upgrade
## apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y

# poweroff
#$ lxc stop deb10h
$ lxc copy deb10h harin117

$ lxc start harin117
$ lxc list

Соединяемся по ssh builder@192.168.1.156

Последовательность сборки по шагам (работаем под пользователем не root):
  1. Ставим необходимые общие пакеты для сборки:
    $ sudo apt-get install build-essential fakeroot devscripts -y
    $ wget https://apt.postgresql.org/pub/repos/apt/pool/main/p/postgresql-11/postgresql-11_11.7.orig.tar.bz2
  2. Распаковываем приложенный архив для сборки PostgreSQL:
    $ mkdir postgresql-11_11.7-1.1C
    $ cd postgresql-11_11.7-1.1C
  3. Копируем:
    $ cp ~/postgresql-11_11.7-1.1C.opt.dsc .
    $ cp ~/postgresql-11_11.7-1.1C.opt.debian.tar.xz .
    $ cp ~/postgresql-11_11.7.orig.tar.bz2 .
    $ ls
    postgresql-11_11.7-1.1C.opt.debian.tar.xz  postgresql-11_11.7-1.1C.opt.dsc  postgresql-11_11.7.orig.tar.bz2
     
  4. Распаковываем и накладываем патчи:
    $ dpkg-source -x postgresql-11_11.7-1.1C.opt.dsc
  5. Переходим в каталог сборки:
    $ cd postgresql-11-11.7
  6. Устанавливаем пакеты, необходимые для сборки PostgreSQL:
    $ sudo mk-build-deps -i
    1. - для Ubuntu-сервер потребовалось ещё предварительно установить пакет equivs (для Debian нет надобности):
        $ sudo apt-get install equivs
  7. Запускаем сборку:
    $ debuild -b -uc -us
На хорошем компьютере сборка примерно 20-45 минут.
Если всё проходит нормально, то получаем в каталоге postgresql-11_11.7-1.1C файлы *.deb.

Для работы 1С достаточно установить:

 libpq5_11.7-1.1C.opt_amd64.deb
postgresql-11_11.7-1.1C.opt_amd64.deb
postgresql-client-11_11.7-1.1C.opt_amd64.deb


Пакуем в postgresql-11_11.7-1.1C.tar.gz

Установка в контейнер debian

Можно создать новый контейнер:
 

$ lxc launch images:debian/10 dpg
#$ lxc config set dpg security.privileged true
#$ lxc restart dpg
$ lxc exec dpg /bin/bash
# adduser user
# usermod -aG sudo user
# apt update
# apt upgrade
## apt install qemu-user-static -y
# apt install mc samba sudo ssh wget -y
# dpkg-reconfigure locales
## Выбираем ru_RU.UTF-8
# locale -a  
## timedatectl set-timezone Europe/Moscow
# dpkg-reconfigure tzdata
## apt install keyboard-configuration
## dpkg-reconfigure keyboard-configuration
Сохранить.
# poweroff
$ lxc copy dpg pgh117
$ lxc start pgh117


$ lxc list
| pgh116     | RUNNING | 192.168.0.173 (eth0) |


В контейнере со сборкой
$ scp postgresql-11_11.6-1.1C.tar.gz user@192.168.0.173:/home/user


Соединяемся по ssh user@192.168.0.173

$ ssh user@192.168.0.173
#$ sudo apt search postgresql-common
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt libllvm7 libxslt1.1
$ sudo apt install postgresql-common
$ tar xvzf postgresql-11_11.7-1.1C.tar.gz
$ cd postgresql-11_11.7-1.1C
$ sudo dpkg -i libpq5_11.7-1.1C.opt_amd64.deb
$ sudo dpkg -i postgresql-client-11_11.7-1.1C.opt_amd64.deb
$ sudo dpkg -i postgresql-11_11.7-1.1C.opt_amd64.deb
$ dpkg -l | grep 11.7-1.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold

$ sudo pg_dropcluster --stop 11 main
$ sudo pg_createcluster --locale ru_RU.utf8 11 main --  --data-checksums
$ sudo pg_ctlcluster 11 main start
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo pg_ctlcluster 11 main stop 
$ sudo apt install nano
$ sudo nano /etc/postgresql/11/main/postgresql.conf

Добавить в конец

# DB Version: 11
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

Сохранить.

$ sudo pg_ctlcluster 11 main start 

Выход.
$ sudo poweroff

#$ lxc stop pgh117
$ lxc copy pgh117 pgh117-cop
$ lxc start pgh117

$ mkdir ~/backup/
$ nano ~/backup_pgh117.sh


#!/usr/bin/env bash
set -ex
lxc stop pgh117
BACKUP_DIR=/home/user/backup
#HOSTS=$(lxc list -c n --format csv)
HOSTS=pgh117
for HOST in ${HOSTS}

do
    BACKUP_NAME=${HOST}-$(date +"%Y-%m-%d")

    lxc snapshot ${HOST} auto-backup
    lxc publish ${HOST}/auto-backup --alias ${BACKUP_NAME}
    #lxc image export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz
    lxc image export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done
lxc start pgh117

Сохранить.


$ chmod +x ~/backup_pgh117.sh
$ ./backup_pgh117.sh

+ lxc stop pgh117
+ BACKUP_DIR=/home/user/backup
+ HOSTS=pgh117
+ for HOST in ${HOSTS}
++ date +%Y-%m-%d
+ BACKUP_NAME=pgh117-2020-03-01
+ lxc snapshot pgh117 auto-backup
+ lxc publish pgh117/auto-backup --alias pgh117-2020-03-01
Контейнер публикуется с отпечатком: 51bb790f417f919264fa95f8ef1c8dd6d0cfdbcb9dc7af639187526e2236b64b
+ lxc image export pgh117-2020-03-01 /home/user/backup/pgh117-2020-03-01
Image exported successfully!
+ lxc image delete pgh117-2020-03-01
+ lxc delete pgh117/auto-backup
+ lxc start pgh117

pgh117-2020-03-01.tar.gz

Начинаем испытания.

суббота, 29 февраля 2020 г.

LetsEncrypt with HAProxy

LetsEncrypt with HAProxy
lxc launch ubuntu:18.04 haprx
lxc config device add haprx myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:localhost:80
#lxc config device remove haprx myport80
lxc config device add haprx myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:localhost:443
#lxc config device remove haprx myport443
lxc exec haprx -- sudo --user ubuntu --login
sudo apt update && sudo apt upgrade
sudo apt install haproxy
sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo nano /etc/hosts

Добавить

127.0.0.1 localhost
10.91.211.107 web1.lxd
10.91.211.95 web2.lxd
10.91.211.176 gitlab.lxd
10.91.211.10 wordpress.lxd
10.91.211.37 wiki.lxd

Сохранить.


sudo nano /etc/haproxy/haproxy.cfg


-----


Сохранить.

sudo add-apt-repository -y ppa:certbot/certbot
sudo apt-get update
sudo apt-get install -y certbot
sudo systemctl stop haproxy

Первый раз создаем сертификаты вручную используя порт 80 (stop haproxy)

sudo certbot certonly --standalone -d web1.vt.info -d web2.vt.info -d gitlab.vt.info -d wordpress.vt.info -d wiki.vt.info --non-interactive --agree-tos --email admin@vt.info --http-01-port=80

Ниже обратить внимание что путь к папке сертификатами
/etc/letsencrypt/live/web1.vt.info/

Задан в первом  -d web1.vt.info !!!

HAProxy нужен ssl-сертификат, чтобы быть одним файлом в определенном формате:

sudo su -c "cat /etc/letsencrypt/live/web1.vt.info/fullchain.pem /etc/letsencrypt/live/web1.vt.info/privkey.pem > /etc/letsencrypt/live/web1.vt.info/vt.info.pem"

sudo systemctl start haproxy


Далее будем обновляться (можно попробовать):

sudo certbot renew --tls-sni-01-port=8888

Для автоматизации сделаем скрипт:

sudo nano /opt/update-certs.sh

#!/usr/bin/env bash

# Renew the certificate
certbot renew --force-renewal --tls-sni-01-port=8888
#certbot renew --tls-sni-01-port=8888

# Concatenate new cert files, with less output (avoiding the use tee and its output to stdout)
bash -c "cat /etc/letsencrypt/live/web1.vesuchet.info/fullchain.pem /etc/letsencrypt/live/web1.vesuchet.info/privkey.pem > /etc/letsencrypt/live/web1.vesuchet.info/vesuchet.info.pem"

# Reload  HAProxy
service haproxy reload

Сохранить.

четверг, 27 февраля 2020 г.

Накопитель Samsung SSD 960GB PM983 M.2 PCIe 3.0 x4 TLC MZ1LB960HAJQ-00007

Formatting NVME Partition on CentOS 7
$ sudo fdisk -l
[sudo] пароль для user:
Диск /dev/nvme0n1: 894,3 GiB, 960197124096 байт, 1875385008 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт


$ sudo fdisk /dev/nvme0n1

Добро пожаловать в fdisk (util-linux 2.31.1).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.

Устройство не содержит стандартной таблицы разделов.
Создана новая метка DOS с идентификатором 0x02bacde5.

Команда (m для справки): n
Тип раздела
   p   основной (0 первичный, 0 расширеный, 4 свободно)
   e   расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый сектор (2048-1875385007, по умолчанию 2048):
Последний сектор + число секторов или + размер{K,M,G,T,P} (2048-1875385007, по умол▒

Создан новый раздел 1 с типом 'Linux' и размером 894,3 GiB.

Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

$ sudo mkfs -t ext4 /dev/nvme0n1p1

$ ls -l /dev/disk/by-uuid
итого 0
lrwxrwxrwx 1 root root 10 фев 27 11:30 203e2e29-6980-4253-b0cf-b0774d53e6f9 -> ../../sda1
lrwxrwxrwx 1 root root 10 фев 27 11:30 5238c225-69c3-4c28-a633-5177867f0696 -> ../../sdb1
lrwxrwxrwx 1 root root 15 фев 27 13:50 83921134-e8a0-4faa-8d85-12ac671c0094 -> ../../nvme0n1p1

$ sudo mkdir /mnt/nvme
$ sudo mount /dev/nvme0n1p1 /mnt/nvme

Синтетический тест скриптом от сюда
$ sudo sh testssd.sh
 Warning: df is not installed, this script relies on df to display certain information, some information may be missing.
What drive do you want to test? (Default: /home/user on /dev/sda1 )
 Only directory paths (e.g. /home/user/) are valid targets. Use bash if you want autocomplete.
 /mnt/nvme

How many times to run the test? (Default: 5)

How large should each test be in MiB? (Default: 1024)
 Only multiples of 32 are permitted!

Do you want to write only zeroes to your test files to imitate dd benchmarks? (Default: 0)
 Enabling this setting may drastically alter your results, not recommended unless you know what you're doing.

Would you like to include legacy tests (512kb & Q1T1 Sequential Read/Write)? [Y/N]
Y

    Settings are as follows:
    Target Directory: /mnt/nvme
    Size Of Test: 1024 MiB
    Number Of Loops: 5
    Write Zeroes: 0
    Legacy Tests: Y

Are you sure these are correct? [Y/N]
Y

Running Benchmark,  please wait...


Results:

Sequential Read: 2793MB/s [   2 IOPS]
Sequential Write: 1259MB/s [   1 IOPS]

512KB Read: 1689MB/s [   3298 IOPS]
512KB Write: 1321MB/s [   2580 IOPS]

Sequential Q32T1 Read: 2830MB/s [   86 IOPS]
Sequential Q32T1 Write: 1285MB/s [   39 IOPS]

4KB Q8T8 Read: 1375MB/s [   343932 IOPS]
4KB Q8T8 Write: 1294MB/s [   323515 IOPS]

4KB Q32T1 Read: 1024MB/s [   256000 IOPS]
4KB Q32T1 Write: 1070MB/s [   267712 IOPS]

4KB Read: 50MB/s [   12506 IOPS]
4KB Write: 247MB/s [   61966 IOPS]


Would you like to save these results? [Y/N]
Y

Saving at /home/user/2020-02-27031940.txt


-----------------------------------------------------------------------
Flexible I/O Tester - fio-3.1 (C) axboe
                          Fio Github : https://github.com/axboe/fio
                       Script Source : https://unix.stackexchange.com/a/480191/72554
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s
* KB = 1000 bytes, KiB = 1024 bytes

   Legacy Seq Read (Q=  1,T= 1) :   2793MB/s [   2 IOPS]
  Legacy Seq Write (Q=  1,T= 1) :   1259MB/s [   1 IOPS]
   512KiB Seq Read (Q=  1,T= 1) :   1689MB/s [   3298 IOPS]
  512KiB Seq Write (Q=  1,T= 1) :   1321MB/s [   2580 IOPS]
   Sequential Read (Q= 32,T= 1) :   2830MB/s [   86 IOPS]
  Sequential Write (Q= 32,T= 1) :   1285MB/s [   39 IOPS]
  Random Read 4KiB (Q=  8,T= 8) :   1375MB/s [   343932 IOPS]
 Random Write 4KiB (Q=  8,T= 8) :   1294MB/s [   323515 IOPS]
  Random Read 4KiB (Q= 32,T= 1) :   1024MB/s [   256000 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :   1070MB/s [   267712 IOPS]
  Random Read 4KiB (Q=  1,T= 1) :   50MB/s [   12506 IOPS]
 Random Write 4KiB (Q=  1,T= 1) :   247MB/s [   61966 IOPS]

  Test : 1024 MiB [,   (/ GiB] (x5)  [Interval=0 sec]
  Date : 2020/02/27 15:19:40
    OS : Linux 4.15.0-74-generic x86_64





суббота, 22 февраля 2020 г.

Перенос OpenVPN в lxd

Настройка OpenVPN c stunnel Ubuntu 16.04 хостера DO  
 
lxc launch ubuntu:16.04 ovpn 
lxc stop ovpn 
 
lxc config device add ovpn myport2194 proxy listen=tcp:0.0.0.0:2194 \
connect=tcp:localhost:2194 
 
lxc config set ovpn raw.lxc 'lxc.cgroup.devices.allow = c 10:200 rwm' 
lxc config device add ovpn tun unix-char path=/dev/net/tun 
lxc start ovpn 
lxc exec ovpn -- sudo --user ubuntu --login 
 
sudo nano /etc/hosts
Изменить:
127.0.0.1 localhost ovpn
Сохранить. 
 
mknod /dev/net/tun c 10 200 
sudo apt update 
sudo apt upgrade -y 
sudo apt install mc cadaver -y 
sudo locale-gen en_US ru_RU en_US.UTF-8 ru_RU.UTF-8 
sudo timedatectl set-timezone Europe/Moscow 
sudo apt install openvpn -y 
 
#Центр сертификации ставить не будем, но поскольку не переносим старый
#больше сертификатов мы выпустить тоже не сможем
#sudo apt install openvpn easy-rsa -y
 
 
Скачать настройки OpenVPN
  
cadaver https://web2.domen.info/remote.php/webdav/
dav:/remote.php/webdav/> get openvpn.tar.gz
dav:/remote.php/webdav/> get openvpn.tar.gz
dav:/remote.php/webdav/> quit 
 
Скопируем из архива:


ccd ca.crt  ca.key  ccd  dh2048.pem  ipp.txt
server.conf  server.crt  server.key  ta.key  update-resolv-conf


в /etc/openvpn/
 
 
sudo nano /lib/systemd/system/openvpn@.service
Закомментируем:
#LimitNPROC=10
Сохранить.
sudo systemctl daemon-reload
sudo systemctl enable openvpn@server.service
sudo systemctl start openvpn@server.service
 
 
nano start.sh
#!/bin/bash
#Небольшой тюнинг:
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo  /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
sudo sysctl -p
sudo  systemctl restart networking.service
Сохранить.

sudo sh start.sh

Делаем сеть 10.8.20.0/24 
 
Если нужна маршрутизация интернета делаем nat 
sudo nano /etc/rc.local

добавляем строки до exit 0

iptables -A FORWARD -s 10.8.20.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.20.0/24 -o eth0 -j MASQUERADE

сохраняем

sudo nano/etc/openvpn/server.conf

Заменить:
port 2194
server 10.8.20.0 255.255.255.0

Для проброса интернета:

Раскомментировать:
push "redirect-gateway def1"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Сохранить.

Для задания статического ip
в файлах клиентов:
sudo nano /etc/openvpn/ccd/client1
заменить ip
ifconfig-push 10.8.20.2 255.255.255.0
Сохранить.

sudo poweroff

lxc start ovpn

В файле клиента
remote 188.130.240.10 2194
dev-node 'Ethernet 5' 


mkdir ~/backup/
nano ~/backup_ovpn_lxd.sh 

Добавить:

#!/usr/bin/env bash
set -ex
lxc stop ovpn
BACKUP_DIR=/home/user/backup
#HOSTS=$(lxc list -c n --format csv)
HOSTS=ovpn
for HOST in ${HOSTS}

do
    BACKUP_NAME=${HOST}-$(date +"%Y-%m-%d")

    lxc snapshot ${HOST} auto-backup
    lxc publish ${HOST}/auto-backup --alias ${BACKUP_NAME}
    #lxc image export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz
    lxc image export ${BACKUP_NAME} ${BACKUP_DIR}/${BACKUP_NAME}
    lxc image delete ${BACKUP_NAME}
    lxc delete ${HOST}/auto-backup
done
lxc start ovpn

Сохранить.

chmod +x ~/backup_ovpn_lxd.sh
./backup_ovpn_lxd.sh


backup контейнера
ovpn-2020-02-22.tar.gz
 
Теперь на другой сервер будет переноситься очень просто:
 
Перенос на другой сервер
lxc image import ovpn-2020-02-22.tar.gz --alias ovpn-ip
lxc launch ovpn-ip ovpn-ip
lxc image delete ovpn-ip
lxc stop ovpn-ip
lxc config device add ovpn-ip myport2194 proxy listen=tcp:0.0.0.0:2194 connect=tcp:localhost:2194
lxc config set ovpn-ip raw.lxc 'lxc.cgroup.devices.allow = c 10:200 rwm'
lxc config device add ovpn-ip tun unix-char path=/dev/net/tun
lxc start ovpn-ip
 

Установка и настройка Pure-FTPD (Pure FTP) внутри контейнера

 
sudo apt install pure-ftpd -y
sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
sudo passwd ftpuser
12345
12345
sudo mkdir /home/ftpuser/
sudo chown -R ftpuser:ftpgroup /home/ftpuser
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
sudo mkdir -p /home/ftpuser/test/client
sudo mkdir -p /home/ftpuser/test/buh
sudo mkdir -p /home/ftpuser/test1
sudo chown -R ftpuser:ftpgroup /home/ftpuser
sudo pure-pw useradd test -u ftpuser -d /home/ftpuser/test
sudo pure-pw useradd test1 -u ftpuser -d /home/ftpuser/test1
#FTP, порты пассивного режима (иначе случайные):
#указать два порта на одного клиента. 
sudo su -c 'echo "50000 50010" > /etc/pure-ftpd/conf/PassivePortRange'
#Порты открываются независимо от ufw! (и iptables? )
#Работаем только по ip4
sudo su -c 'echo "yes" > /etc/pure-ftpd/conf/IPV4Only'
#"Человеческий лог после отладки убрать"
sudo su -c 'echo "yes" > /etc/pure-ftpd/conf/VerboseLog'
#В логе ip адреса вместо имен.
sudo su -c 'echo yes > /etc/pure-ftpd/conf/DontResolve'
!!! # echo "YOUR_EXTERNAL_IP_HERE" > /etc/pure-ftpd/conf/ForcePassiveIP 
sudo pure-pw mkdb
sudo service pure-ftpd restart
netstat -ln | grep :21
#копируем файлы на ftp
sudo chown -R ftpuser:ftpgroup /home/ftpuser