Новости:

SMF - Just Installed!

Главное меню

Последние сообщения

#61
Когда пишешь даже минимальный скриптик, часто используешь echo — подсказки.
Согласитесь "цветной man" ведь намного приятнее читать, так почему бы не раскрасить вывод echo?
это достаточно легко.
Итак...

Задача:
Раскрасить текстовую строку выводимую на экран через команду echo
т.е. раскрасить эти самые подсказки

Что нужно:
1) man echo
www.opennet.ru/man.shtml?topic=echo&category=1

Из него нам пригодится точно

Цитироватьecho -e   # ключ -e в комманде echo включает отображение "backslash escapes"; например \n - переход на следующую строку, \t -табуляция
echo -n   # ключ -n в команде echo сигнализирует, что после вывода информации не нужно переходить на следующую строку.
echo -en   # в нашем случае поможет раскрасить вывод текста.



2) Хорошая статья с примерами «Управление консолью Linux» RUS
c-reaction.net/content/204

Хорошая статья с примерами «Colorizing Scripts» ENG
www.faqs.org/docs/abs/HTML/colorizing.html

Поехали:

Для начала одним глазом хотябы посмотрим на man echo rus, а потом рассмотрим как использовать цвет
www.opennet.ru/man.shtml?topic=echo&category=1

Переходим к Управлению цветом:

Цитироватьtput sgr0    Возврат цвета в "нормальное" состояние

\033[0m    все атрибуты по умолчанию
\033[1m    жирный шрифт (интенсивный цвет)
\033[2m    полу яркий цвет (тёмно-серый, независимо от цвета)
\033[4m    подчеркивание
\033[5m    мигающий
\033[7m    реверсия (знаки приобретают цвет фона, а фон -- цвет знаков)

\033[22m    установить нормальную интенсивность
\033[24m    отменить подчеркивание
\033[25m    отменить мигание
\033[27m    отменить реверсию

\033[30    чёрный цвет знаков
\033[31    красный цвет знаков
\033[32    зелёный цвет знаков
\033[33    желтый цвет знаков
\033[34    синий цвет знаков
\033[35    фиолетовый цвет знаков
\033[36    цвет морской волны знаков
\033[37    серый цвет знаков

\033[40    чёрный цвет фона
\033[41    красный цвет фона
\033[42    зелёный цвет фона
\033[43    желтый цвет фона
\033[44    синий цвет фона
\033[45    фиолетовый цвет фона
\033[46    цвет морской волны фона
\033[47    серый цвет фона


Таблица цветов и фонов:
Цвет        код       код фона

Цитироватьblack        30  40    \033[30m  \033[40m
red        31  41    \033[31m  \033[41m
green      32  42    \033[32m  \033[42m
yellow      33  43    \033[33m  \033[43m
blue        34  44    \033[34m  \033[44m
magenta      35  45    \033[35m  \033[45m
cyan        36  46    \033[36m  \033[46m
grey        37  47    \033[37m  \033[47m


Допускается объединение этих управляющих последовательностей.
Например \033[1m\033[5m\033[36m может быть заменено эквивалентной последовательностью \033[1;5;36m.

Пример:
Код: bash
#!/bin/sh
#
# скрипт выводит на экран сообщение с использованием цвета
#
echo -en "\033[37;1;41m Внимание \033[0m"



Еще пример:
Код: bash
#!/bin/sh
#
# скрипт запускает копию командного интерпретатора sh
# с цветным приглашением
#
export PS1="\[\033[1;30m\][\[\033[0m\]\t\[\033[1;30m\];\
\[\033[0m\]\W\[\033[1;30m\]]\[\033[36;1m\]|\[\033[0m\] "
echo "Now runing a new copy of shell width color prompt"
echo -en "use \033[1;36mexit\033[0m command or"
echo -e "\033[1;36m^D\033[0m to return back"
sh
#
# обратите внимание на то, что управляющие последовательности
# заключены в скобки "\[" и "\]"
# Это сделано для того, чтобы shell не учитывал их при
# оценке длины строки.
# В противном случае длинные строки будут переноситься неверно.
#



Для удобства пользвания можно цвет и доп. свойства назначить переменным:
Код: bash
RED='\033[0;31m'         #  ${RED}
GREEN='\033[0;32m'      #  ${GREEN}



Файл .sh должен быть в формате UNIX и с кодировкой UTF-8

Ну и напоследок — один хороший пример со всеми плюшками:
Код: bash
#!/bin/sh
# echo подсветка
# echo color
# Скрипт выводит на экран список меню

clear    # Очистка экрана

#Памятка, Таблица цветов и фонов
#Цвет           код       код фона

#black    30  40    \033[30m  \033[40m
#red      31  41    \033[31m  \033[41m
#green    32  42    \033[32m  \033[42m
#yellow    33  43    \033[33m  \033[43m
#blue    34  44    \033[34m  \033[44m
#magenta    35  45    \033[35m  \033[45m
#cyan    36  46    \033[36m  \033[46m
#white    37  47    \033[37m  \033[47m

# Дополнительные свойства для текта:
BOLD='\033[1m'       #  ${BOLD}      # жирный шрифт (интенсивный цвет)
DBOLD='\033[2m'      #  ${DBOLD}    # полу яркий цвет (тёмно-серый, независимо от цвета)
NBOLD='\033[22m'      #  ${NBOLD}    # установить нормальную интенсивность
UNDERLINE='\033[4m'     #  ${UNDERLINE}  # подчеркивание
NUNDERLINE='\033[4m'     #  ${NUNDERLINE}  # отменить подчеркивание
BLINK='\033[5m'       #  ${BLINK}    # мигающий
NBLINK='\033[5m'       #  ${NBLINK}    # отменить мигание
INVERSE='\033[7m'     #  ${INVERSE}    # реверсия (знаки приобретают цвет фона, а фон -- цвет знаков)
NINVERSE='\033[7m'     #  ${NINVERSE}    # отменить реверсию
BREAK='\033[m'       #  ${BREAK}    # все атрибуты по умолчанию
NORMAL='\033[0m'      #  ${NORMAL}    # все атрибуты по умолчанию

# Цвет текста:
BLACK='\033[0;30m'     #  ${BLACK}    # чёрный цвет знаков
RED='\033[0;31m'       #  ${RED}      # красный цвет знаков
GREEN='\033[0;32m'     #  ${GREEN}    # зелёный цвет знаков
YELLOW='\033[0;33m'     #  ${YELLOW}    # желтый цвет знаков
BLUE='\033[0;34m'       #  ${BLUE}      # синий цвет знаков
MAGENTA='\033[0;35m'     #  ${MAGENTA}    # фиолетовый цвет знаков
CYAN='\033[0;36m'       #  ${CYAN}      # цвет морской волны знаков
GRAY='\033[0;37m'       #  ${GRAY}      # серый цвет знаков

# Цветом текста (жирным) (bold) :
DEF='\033[0;39m'       #  ${DEF}
DGRAY='\033[1;30m'     #  ${DGRAY}
LRED='\033[1;31m'       #  ${LRED}
LGREEN='\033[1;32m'     #  ${LGREEN}
LYELLOW='\033[1;33m'     #  ${LYELLOW}
LBLUE='\033[1;34m'     #  ${LBLUE}
LMAGENTA='\033[1;35m'   #  ${LMAGENTA}
LCYAN='\033[1;36m'     #  ${LCYAN}
WHITE='\033[1;37m'     #  ${WHITE}

# Цвет фона
BGBLACK='\033[40m'     #  ${BGBLACK}
BGRED='\033[41m'       #  ${BGRED}
BGGREEN='\033[42m'     #  ${BGGREEN}
BGBROWN='\033[43m'     #  ${BGBROWN}
BGBLUE='\033[44m'     #  ${BGBLUE}
BGMAGENTA='\033[45m'     #  ${BGMAGENTA}
BGCYAN='\033[46m'     #  ${BGCYAN}
BGGRAY='\033[47m'     #  ${BGGRAY}
BGDEF='\033[49m'      #  ${BGDEF}

tput sgr0     # Возврат цвета в "нормальное" состояние

#Начало меню
echo ""
echo -n "     "
echo -e "${BOLD}${BGMAGENTA}${LGREEN} Меню DNS323 ${NORMAL}"
echo ""
echo -en "${LYELLOW} 1 ${LGREEN} Комманды для удобной работы в telnet ${GRAY}(Выполнить?)${NORMAL}\n" 
echo ""
echo -en "${LYELLOW} 2 ${LGREEN} Пути к папкам & Изменение прав доступа ${GRAY}(Комманды)${NORMAL}\n" 
echo ""
echo -en "${LYELLOW} 3 ${LGREEN} Transmission (${GREEN}Start${NORMAL}, ${LRED}Stop${NORMAL}, ${CYAN}Upgrade${NORMAL}) ${GRAY}(Меню)${NORMAL}\n" 
echo ""
echo -en "${LYELLOW} 4 ${LGREEN} Копирование (cp & rsync) ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 5 ${LGREEN} Создание ссылки на файл или папку ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 6 ${LGREEN} Установка из fun-plug & IPKG ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 7 ${LGREEN} Показать Трафик (${LYELLOW} n${LGREEN}load) ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 8 ${LGREEN} Диспетчер задач (${LYELLOW} h${LGREEN}top) ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 9 ${LGREEN} Midnight Commander (${LYELLOW} m${LGREEN}c) ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LMAGENTA} q ${LGREEN} Выход ${NORMAL}\n"
echo ""
echo "(Введите пожалуйта номер пункта, чтобы выполнить комманды этого пункта, любой другой ввод, Выход)"
echo ""
tput sgr0

#62
Код: bash
#!/bin/bash
DATE=$(date +%Y-%m-%d-t-%H-%M-%S) 

if [[ $1 = --help ]]; then
echo USAGE:
echo './zip.sh /<fromdir> <to-subdir> - subdir will be not zipped'
echo './zip.sh /<fromdir> /<to-dir> - zipping <fromdir> to /<full_path_to_dir>'
else
arch_fld=$1
#if [$arch_fld = '--help']; then

if ! [ -z $1 ] && ! [ -z $2 ] ; then
	for folder in $arch_fld/*
	do
	    if [[ $2 = /* ]]; then
	      if ! `file $folder  | grep -i  -P $2'|'$RECYCLE.BIN'|System' > /dev/null 2>&1`; then
                save_path=${folder//$arch_fld/$2"/"$DATE}
                echo -'*Achiving folder - ' $folder ' to '$save_path'.zip *-'
                7z a -tzip -ssw -mx7 "$save_path.zip" "$folder"
              fi

	    else
	      if ! `file $folder  | grep -i  -P $2'|'$RECYCLE.BIN'|System' > /dev/null 2>&1`; then 
		save_path=${folder//$arch_fld/$arch_fld"/"$2"/"$DATE}
		echo -'*Achiving folder - ' $folder ' to '$save_path'.zip *-'
		7z a -tzip -ssw -mx7 "$save_path.zip" "$folder"
	      fi
	    fi
	done
else
echo Not enouth parametrs! Try --help 
fi
#63
В windows файл хранится по пути %systemdrive%\Users\<username>\.ssh\
Если пользователь с административными правами в файле sshd_config надо в конце поправить:

Код: bash
Match Group administrators
       AuthorizedKeysFile .ssh\administrators_authorized_keys

В один файл можно добавлять несколько ключей, в зависимости от числа пользователей *nix из-под которых будет проводиться запуск (мне надо доя rsync)
#64
Первая инструкция, наверное, которую я пишу полностью сам, все инструкции не рабочие (в обратную сторону, из вин в Lin)

Итак, пакет openssh мы установили, теперь надо настроить "прозрачную" авторизацию, чтоб забирать с windows машины, например, бэкапы. В 2020 году у меня был неприятный опыт, когда вирус шифровальщик, не только побил систему, на которой стоял сервер MSSQL, но и уничтожил все бэкапы этой базы... Поэтому забрать на linux машину бэкапы, и при этом не открывать доступ по SMB очень правильное решение  ;)

Код: bash
ssh-keygen
Код: bash
 rsync /root/.ssh/id_rsa.pub  sshuser@winserver:/cygdrive/%USERPROFILE%/.ssh/authorized_keys

Копируем полученный файл в %userprofile%\.ssh

наслаждается)
#65
Пакет OpenSSH Server включен в современные версии Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в виде Feature on Demand (FoD). Для установки сервера OpenSSH достаточно выполнить PowerShell команду:

Код: powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' | Add-WindowsCapability –Online

Или при помощи команды DISM:

Код: powershell
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

Если ваш компьютер подключен к интернету, пакет OpenSSH.Server будет скачан и установлен в Windows.

Также вы можете установить сервер OpenSSH в Windows через современную панель Параметры (Settings -> Apps and features -> Optional features -> Add a feature, Приложения -> Управление дополнительными компонентами -> Добавить компонент. Найдите в списке OpenSSH Server и нажмите кнопку Install).

Установка openssh сервера из панели параметры windows 10

Здесь также можно установить набор инструментов администратора Remote Server Administration Tools (RSAT).
На изолированных от интернета компьютерах вы можете установить компонент с ISO образа Features On Demand (доступен в личном кабинете на сайте Microsoft: MSDN или my.visualstudio.com). Скачайте диск, извлеките его содержимое в папку c:\FOD (достаточно распаковать извлечь файл OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab), выполните установку из локального репозитория:

Код: powershell
Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source c:\FOD

Также доступен MSI установщик OpenSSH для Windows в официальном репозитории Microsoft на GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). Например, для Windows 10 x64 нужно скачать и установить пакет OpenSSH-Win64-v8.9.1.0.msi. Следующая PowerShell команда скачает MSI файл и установит клиент и сервер OpenSSH:

Код: powershell
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
Код: powershell
msiexec /i c:\users\root\downloads\OpenSSH-Win64-v8.9.1.0.msi

установочный msi файл openssh server для windows

Также вы можете вручную установить OpenSSH сервер в предыдущих версиях Windows (Windows 8.1, Windows Server 2016/2012R2). Пример установки Win32-OpenSSH есть в статье "Настройка SFTP сервера (SSH FTP) в Windows".
Чтобы проверить, что OpenSSH сервер установлен, выполните:

Код: powershell
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'

State : Installed
проверить что установлен OpenSSH сервер в windows 10

Настройка SSH сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:

ssh-agent (OpenSSH Authentication Agent) – можно использовать для управления закрытыми ключами если вы настроили SSH аутентификацию по ключам;
sshd (OpenSSH SSH Server) – собственно сам SSH сервер.
Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:

Код: powershell
Set-Service -Name sshd -StartupType 'Automatic'
Код: powershell
Start-Service sshd

Start-Service sshd - запустить openssh

С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на порту TCP:22 :

Код: powershell
netstat -na| find ":22"

nestat - порт 22 ssh сервера windows

Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.

Код: powershell
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled

Name DisplayName Description Enabled
---- ----------- ----------- -------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True
правило firewall для доступа к windows через ssh

Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:

Код: powershell
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Рассмотрим, где храниться основные компоненты OpenSSH:

Исполняемые файлы OpenSSH Server находятся в каталоге C:\Windows\System32\OpenSSH\  (sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe и т.д.)
Конфигурационный файл sshd_config (создается после первого запуска службы): C:\ProgramData\ssh
Файлы authorized_keys и ssh ключи можно хранить в профиле пользователей: %USERPROFILE%\.ssh\
Sshd_config: Конфигурационный файл сервера OpenSSH
Настройки сервере OpenSSH хранятся в конфигурационном файле %programdata%\ssh\sshd_config. Это обычный текстовый файл с набором директив. Для редактирования можно использовать любой текстовый редактор (я предпочитаю notepad++). Можно открыть с помощью обычного блокнота:

Код: powershell
start-process notepad C:\Programdata\ssh\sshd_config

Например, чтобы запретить SSH подключение для определенного доменного пользователя (и всех пользователей указанного домена), добавьте в конце файле директивы:

Код: powershell
DenyUsers winitpro\admin@192.168.1.10
Код: powershell
DenyUsers corp\*
Чтобы разрешить подключение только для определенной доменной группы:

Код: powershell
AllowGroups winitpro\sshadmins
Либо можете разрешить доступ для локальной группы:

Код: powershell
AllowGroups sshadmins
По умолчанию могут к openssh могут подключаться все пользователи Windows. Директивы обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups,AllowGroups.

Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.

Код: powershell
DenyGroups Administrators
Следующие директивы разрешают SSH доступ по ключам (SSH аутентификации в Windows с помощью ключей описана в отдельной статье) и по паролю:

ЦитироватьPubkeyAuthentication yes
PasswordAuthentication yes
Вы можете изменить стандартный SSH порт TCP/22, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.

sshd - смена порта ssh 22

После любых изменений в конфигурационном файле sshd_config нужно перезапускать службу sshd:

Код: powershell
restart-service sshd

Подключение по SSH к Windows компьютеру
Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (в этом примере я использую putty).

Вы можете использовать встроенный SSH клиентом Windows для подключения к удаленному хосту. Для этого нужно в командной строке выполнить команду:
ssh alexbel@192.168.31.102

В этом примере alexbel – имя пользователя на удаленном Windows компьютере, и 192.168.31.102 – IP адрес или DNS имя компьютера.

Обратите внимание что можно использовать следующие форматы имен пользователей Windows при подключении через SSH:

alex@server1 – локальный пользователь Windows
alex@winitpro.ru@server1 –пользователь Active Directory (в виде UPN) или аккаунт Microsoft/ Azure(Microsoft 365)
winitpro\alex@server1 – NetBIOS формат имени
В домене Active Directory можно использовать Kerberos аутентификацию в SSH. Для этого в sshd_config нужно включить параметр:

ЦитироватьGSSAPIAuthentication yes
После этого можно прозрачно подключать к SSH сервер с Windows компьютера в домене из сессии доменного подключается. В этом случае пароль пользователя не указывается и выполняется SSO аутентификация через Kerberos:

ssh -K server1

При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.

putty сохранить ключ

Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.

ssh сессия в win 10 на базе openssh

При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.

Цитироватьadmin@win10tst C:\Users\admin>
В командной строке вы можете выполнять различные команды, запускать скрипты и программы.

подключение к windows 10 через ssh

Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:

Код: powershell
powershell.exe

powershell.exe в ssh сессии windows

Чтобы изменить командную оболочку (Shell) по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:

Код: powershell
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force

openssh - изменить shell по умолчанию на powershell

Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение PS C:\Users\admin>).

powershell cli в windows 10 через ssh

В SSH сессии запустилась командная строка PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.

OpenSSH сервер в Windows можно использовать в различных сценариях SSH туннелирования.
Логи SSH подключений в Windows
В Windows логи подключений к SSH серверу по-умолчанию пишутся не в текстовые файлы, а в отдельный журнал событий через Event Tracing for Windows (ETW). Откройте консоль Event Viewer (eventvwr.msc>) и перейдите в раздел Application and services logs -> OpenSSH -> Operational.

При успешном подключении с помощью к SSH серверу с помощью пароля в журнале появится событие:

EventID: 4
sshd: Accepted password for root from 192.168.31.53 port 65479 ssh2
события подключения к openssh сервер windows в event viewer

Если была выполнена аутентификация с помощью SSH ключа, событие будет выглядеть так:

sshd: Accepted publickey for locadm from 192.168.31.53 port 55772 ssh2: ED25519 SHA256:FEHDEC/J72Fb2zC2oJNb45678967kghH43h3bBl31ldPs
Если вы хотите, чтобы логи писались в локальный текстовый файл, нужно в файле sshd_config включить параметры:

SyslogFacility LOCAL0
LogLevel INFO
Перезапустите службу sshd и провеьте, что теперь логи SSH сервера пишутся в файл C:\ProgramData\ssh\logs\sshd.log

текстовый sshd.log в windows
#66
mikroTik / Настройка IKEv2 mikrotik
Последний ответ от George - Фев. 07, 2023, 06:06
Настраиваем часовой пояс, NTP-клиента.

Код: bash
/system clock set time-zone-autodetect=no time-zone-name=Europe/Moscow
/system ntp client set enabled=yes servers=0.ru.pool.ntp.org,1.ru.pool.ntp.org

Добавляем бридж и вешаем пул адресов на него же

Код: bash
/interface bridge add name=IKE2-loopback
/ip address add address=10.0.100.1/24 interface=IKE2-loopback network=10.0.100.0
/ip pool add name="IKE2" ranges=10.0.100.100-10.0.100.200

Настройку DNS вам нужно провести самостоятельно в зависимости от вашей специфики, но в итоге нам нужно, чтобы по адресу cloud-life.site пинговался IP-адрес настраиваемого VPN-сервера 66.66.66.66.

Следующий шаг - генерация сертификатов. Я разбил команды на блоки не случайно. Ошибки при генерации сертификатов нам не нужны. Выполняем по порядку, дожидаясь завершения процесса подписания, не прерывать!!!!

Генерируем корневой сертификат:

Код: bash
/certificate
Код: bash
    add name=CA.cloud-life.site country=RU state=MO \
    locality="Moscow region" organization=Cloud-life \
    common-name=CA.cloud-life.site subject-alt-name=IP:66.66.66.66 \
    key-size=2048 days-valid=3650 trusted=yes \
    key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign
   
Код: bash
sign CA.cloud-life.site

Генерируем сертификат VPN-сервера:

Код: bash
add name=ikev2@cloud-life.site country=RU state=MO locality="Moscow region" \
organization=Cloud-life common-name=ikev2@cloud-life.site subject-alt-name=DNS:cloud-life.site \
key-size=2048 days-valid=3560 trusted=yes key-usage=tls-server
Код: bash
sign ikev2@cloud-life.site ca=CA.cloud-life.site

Создаём шаблон для дальнейшего создания сертификатов через копирование с шаблона:
Код: bash
add name=~clienttemplate@cloud-life.site country=RU state=MO    locality="Moscow region" \
organization=Cloud-life common-name=~client-template@cloud-life.site \
subject-alt-name=email:~clienttemplate@cloud-life.site key-size=2048 days-valid=3650 \
trusted=yes key-usage=tls-client

Сертификат для схемы Site 2 Site (для микротика Site-2):

Код: bash
add copy-from=~clienttemplate@cloud-life.site name=s2s@cloud-life.site \
common-name=s2s@cloud-life.site subject-alt-name=email:s2s@cloud-life.site
Код: bash
sign s2s@cloud-life.site ca=CA.cloud-life.site

Для первого клиента:

Код: bash
add copy-from=~clienttemplate@cloud-life.site name=client-1@cloud-life.site \
common-name=client-1@cloud-life.site subject-alt-name=email:client-1@cloud-life.site
Код: bash
sign client-1@cloud-life.site ca=CA.cloud-life.site

Для второго клиента, а остальные по той же схеме:

Код: bash
add copy-from=~clienttemplate@cloud-life.site name=client-2@cloud-life.site \
common-name=client-2@cloud-life.site subject-alt-name=email:client-2@cloud-life.site
Код: bash
sign client-2@cloud-life.site ca=CA.cloud-life.site

Далее экспортируем сгенерированные ключи, но обратите внимание, что сертификаты экспортируются в разных форматах (pem и pkcs12). Обязательно установите пароль при экспорте, т.к. при его отсутствии ошибок не будет, но работать VPN тоже не будет. Ни в коем случае не экспортируйте CA-сертификат с паролем, т.к. тогда экспортируется и закрытый ключ.

Код: bash
/certificate export-certificate CA.cloud-life.site type=pem
Код: bash
/certificate export-certificate ikev2@cloud-life.site type=pem  export-passphrase=passwordforexport
Код: bash
/certificate export-certificate s2s@cloud-life.site type=pem  export-passphrase=passwordforexport
Код: bash
/certificate export-certificate client-1@cloud-life.site type=pkcs12  export-passphrase=passwordforexport
Код: bash
/certificate export-certificate client-2@cloud-life.site type=pkcs12  export-passphrase=passwordforexport

Скачиваем экспортированные сертификаты и сохраняем в одну папку. Я еще и переименовал скаченные сертификаты для удобства, удалив начало cert_export_.

Чуть настроим FireWall и изменим MSS. Правила размещайте перед запрещающими!!!! Я расположу их в самом начале списка (place-before=0)

Код: bash
/ip firewall filter
Код: bash
add action=accept chain=input comment="IKE2 - Accept UDP 500,4500 IPSec" \
    dst-address=66.66.66.66 dst-port=500,4500 protocol=udp place-before=0
Код: bash
add action=accept chain=input comment="IKE2 - Accept IPSec-esp" dst-address=\
    66.66.66.66 protocol=ipsec-esp place-before=0
Код: bash
add action=accept chain=input comment="Accept - In Ipsec" ipsec-policy=\
    in,ipsec src-address=10.0.100.0/24 place-before=0
Код: bash
add action=accept chain=forward comment=\
    "Accept - All Traffic from VPN to ANY" dst-address=192.168.0.0/22 \
    ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
Код: bash
add action=accept chain=forward comment=\
    "Accept - All Traffic from VPN to ANY" dst-address=0.0.0.0/0 \
    ipsec-policy=in,ipsec src-address=10.0.100.0/24 place-before=0
Код: bash
/ip firewall mangle
Код: bash
add action=change-mss chain=forward dst-address=10.0.100.0/24 ipsec-policy=\
    in,ipsec new-mss=1360 passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=\
    !0-1360  place-before=0

Добавим правила NAT и поместим их над правилом основного маскарада:

Код: bash
/ip firewall nat
Код: bash
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
    ipsec-policy=out,none out-interface-list="WAN interfaces" place-before=0
Код: bash
add action=masquerade chain=srcnat comment="ike2 masq non ipsec" \
    ipsec-policy=out,none out-interface-list="WAN interfaces" src-address=\
    10.0.100.0/24 place-before=0
Код: bash
add action=src-nat chain=srcnat comment="ike2 masq non ipsec" ipsec-policy=\
    out,none out-interface=WAN src-address=10.0.100.0/24 to-addresses=\
    66.66.66.66 place-before=0
Настраиваем параметры IPSec. Настройка едина как для конфигурации Client 2 Site, так и для Site 2 Site:
Код: bash
/ip ipsec policy group
Код: bash
add name="clients"
add name="s2s
"
Код: bash
/ip ipsec profile
Код: bash
add dh-group=modp2048,modp1536,modp1024 enc-algorithm=aes-256,aes-192,aes-128 \
    hash-algorithm=sha256 name="cloud-life.site"
Код: bash
/ip ipsec peer
Код: bash
    add exchange-mode=ike2 local-address=66.66.66.66 name=\
    "peer VPN" passive=yes profile="cloud-life.site"
Код: bash
/ip ipsec proposal
Код: bash
add auth-algorithms=sha512,sha256,sha1 enc-algorithms="aes-256-cbc,aes-256-ctr\
    ,aes-256-gcm,aes-192-ctr,aes-192-gcm,aes-128-cbc,aes-128-ctr,aes-128-gcm" \
    lifetime=8h name="cloud-life.site" pfs-group=none
Код: bash
/ip ipsec mode-config
Код: bash
add address-pool=IKE2 address-prefix-length=32 name=clients.cloud-life.site split-include=\
    0.0.0.0/0 static-dns=10.0.100.1 system-dns=no
Код: bash
add address=10.0.100.2 name=s2s.cloud-life.site split-include=10.0.100.1 static-dns=10.0.100.1 \
    system-dns=no
Код: bash
/ip ipsec identity
    add auth-method=digital-signature certificate=ikev2@cloud-life.site \
    generate-policy=port-strict match-by=certificate mode-config=clients.cloud-life.site \
    peer="peer VPN" policy-template-group="clients" \
    remote-certificate=client-1@cloud-life.site remote-id=user-fqdn:client-1@cloud-life.site
Код: bash
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
    generate-policy=port-strict match-by=certificate mode-config=clients.cloud-life.site \
    peer="peer VPN" policy-template-group="clients" \
    remote-certificate=client-2@cloud-life.site remote-id=user-fqdn:client-2@cloud-life.site
Код: bash
add auth-method=digital-signature certificate=ikev2@cloud-life.site \
    generate-policy=port-strict match-by=certificate mode-config=s2s.cloud-life.site \
    peer="peer VPN" policy-template-group="s2s" \
    remote-certificate=s2s@cloud-life.site remote-id=user-fqdn:s2s@cloud-life.site
Код: bash
/ip ipsec policy
   
Код: bash
add dst-address=10.0.100.2/32 group=s2s proposal=cloud-life.site src-address=10.0.100.1/32 template=yes
    add dst-address=10.0.100.0/24 group=clients proposal=cloud-life.site src-address=0.0.0.0/0 template=yes

Сразу добавим GRE-туннель, который в дальнейшем позволит нам легко настроить маршрутизацию между офисами:

Код: bash
/interface gre add local-address=10.0.100.1 name="IKEv2-GRE-Tunnel" remote-address=10.0.100.2
Код: bash
/ip route add distance=1 dst-address=10.10.10.0/24 gateway="IKEv2-GRE-Tunnel"

На этом настройку VPN-сервера можно считать законченной и пора переходить на сторону клиента.
#67
Код: powershell
# Проверка
Get-VMHost | SELECT -Property EnableEnhancedSessionMode

# Включение
Set-VMHost -EnableEnhancedSessionMode $True -Passthru
Настройка расширенного сеанса Hyper V (ESM) устанавливается только на уровне сервера, но что бы у нас работала возможность копирования нужно включить и пакет интеграции Hyper V, который по умолчанию отключен. Эта служба интеграции называется Guest services (Гостевая служба), и она включается у каждой виртуально машины отдельно. Для ее включения зайдем в настройки виртуально машины:.......

Код: powershell
# Просмотр включенных пакетов интеграций у ВМ с именем Win10
Get-VMIntegrationService -VMName 'Win10'

# Включение гостевого пакета интеграции
Enable-VMIntegrationService -VMName "Win10" -Name "Guest Service Interface"

# Включение на всех виртуальных машинах
Get-VM | Enable-VMIntegrationService -Name "Guest Service Interface"
#68
mikroTik / Настройка openvpn mikrotik
Последний ответ от George - Фев. 04, 2023, 08:43
Важно. Для корректной работы надо настроить синхронизацию времени. Как я понял, настройка из консоли изменилась, и ни ожно руководство в инете не верно

Код: bash
/system ntp client set enabled=yes servers=0.ru.pool.ntp.org,1.ru.pool.ntp.org


Настраиваем OVPN-сервер на ROS

1. Настройка PKI

1.1. Сертификат CA:

Код: bash
/certificate add name=tmpl-cloud-CA country="RU" state="MO" locality="ODN" organization="Cloud-life" unit="IT" common-name="cloud-CA" key-size=4096 days-valid=3650 key-usage=crl-sign,key-cert-sign


Код: bash
/certificate sign tmpl-cloud-CA ca-crl-host=127.0.0.1 name="cloud-CA"


Примечание: ca-crl-host= — обязательный параметр, иначе список отзыва не будет создан; полный путь к списку отзыва будет указан в параметрах сертификата, графа "[1]Точка распределения списка отзыва (CRL)"; в принципе, можно указать любой из ip-адресов нашего микротика, тот что укажем — и будет прописан в сертификате. Доменные имена параметром не поддерживаются, к сожалению.

1.2. Сертификат сервера:

Код: bash
/certificate add name=OVPN-SRV country="RU" state="MO" locality="ODN" organization="Cloud-life" unit="IT" common-name="srv-OVPN" key-size=4096 days-valid=1095 key-usage=digital-signature,key-encipherment,tls-server


Код: bash
/certificate sign OVPN ca="cloud-CA" name="srv-OVPN"


Примечание: для сертификата сервера key-usage лучше не менять, почему так — описано здесь (а если очень хотим поменять — то там же написано что нужно прописать в конфиге клиента для этого).

Примечание: в отличие от SSTP — OVPN не проверяет соответствие common-name сертификата сервера fqdn'у этого сервера.

1.3. Шаблон для сертификатов клиентов:

Код: bash
/certificate add name=templ-CL country="RU" state="MO" locality="ODN" organization="Cloud-life" unit="IT" common-name="client-vpn-templ" key-size=4096 days-valid=365 key-usage=tls-client


1.3.1 Сертификат первого клиента:

Код: bash
/certificate add name=user1 copy-from="templ-CL" common-name="test-client-ovpn-1"


Код: bash
/certificate sign user1 ca="cloud-CA" name="test-client-ovpn-1"


1.3.2. Сертификат второго и последующих клиентов:

См. п. 3.1, но меняем значение параметров.

common-name="test-client-ovpn-1"


Для первой команды, это значение должно быть уникальным в пределах одного CA.

name="test-client-ovpn-1"

Для второй команды, это значение должно быть уникальным в пределах одного микротика.

1.4 В будущем, для отзыва сертификатов используем команду:

Код: bash
certificate issued-revoke %cert-name%


Где %cert-name% — поле name= подписанного сертификата, то есть отображаемое PKI микротика.

2. Настройка OVPN сервера

Примечание: можно настроить в режиме tun («ip» в ROS), а можно в режиме tap («ethernet» в ROS). Режим tun — обычный туннель. Режим tap — эмуляция полноценного ethernet, в частности в режиме tap клиентов можно объединить в режим моста и они будут прекрасно друг друга видеть. В теории в режиме tap можно запустить DHCP-сервер, но в текущей версии ROS это не реализовано.

2tun. Режим tun

2tun.1. Задаём пул адресов для OVPN-клиентов (можно задать непосредственно в PPP-profile):

Код: bash
/ip pool add name=OVPN_srv_pool ranges=192.168.100.2-192.168.254


2tun.2. Создаём PPP-profile для OVPN-сервера:

Код: bash
/ppp profile add name=OVPN_server local-address=192.168.100.1 remote-address=OVPN_srv_pool


Опционально! Остальные параметры по вашему вкусу и в соответствии с вашими целями. Например:
Код: bash
dns=192.168.100.1 use-ipv6=no

2tun.3. Настраиваем режим аутентификации пользователей:

Код: bash
/ppp aaa set accounting=yes


2tun.4. Добавляем пользователей:

Код: bash
/ppp secret add name=test-user-1 password=P@ssword1 service=ovpn profile=OVPN_server


Код: bash
/ppp secret add name=test-user-2 password=P@ssword2 service=ovpn profile=OVPN_server


2tun.5. Включаем OVPN-сервер:

Код: bash
/interface ovpn-server server set auth=sha1 cipher=blowfish128 default-profile=OVPN_server mode=ip netmask=24 require-client-certificate=yes certificate=srv-OVPN enabled=yes


2tap. Режим tap

2tap.1. Задаём пул адресов для OVPN-клиентов (можно задать непосредственно в PPP-profile):

Код: bash
/ip pool add name=OVPN_srv_pool ranges=192.168.100.2-192.168.254


2tap.1+. Создаём мост для OVPN-подключений:

Код: bash
/interface bridge add name=OVPN_bridge arp=enabled


Примечание: IP для моста назначать совершенно не обязательно, он и так имеется в PPP-profile (кроме того если указать адрес для моста, но не указать local-address= в PPP-profile, то клиент не подключится).

Примечание: arp должен быть включён, иначе клиенты друг-друга не увидят.

2tun.2. Создаём PPP-profile для OVPN-сервера:

Код: bash
/ppp profile add name=OVPN_server local-address=192.168.100.1 remote-address=OVPN_srv_pool bridge=OVPN_bridge


Опционально! Остальные параметры по вашему вкусу и в соответствии с вашими целями. Например: dns=192.168.100.1 use-ipv6=no

2tap.3. Настраиваем режим аутентификации пользователей:

Код: bash
/ppp aaa set accounting=yes


2tap.4. Добавляем пользователей:

Код: bash
/ppp secret add name=test-user-1 password=P@ssword1 service=ovpn profile=OVPN_server


Код: bash
/ppp secret add name=test-user-2 password=P@ssword2 service=ovpn profile=OVPN_server


2tap.5. Включаем OVPN-сервер:
Код: bash
/interface ovpn-server server set auth=sha1 cipher=blowfish128 default-profile=OVPN_server mode=ethernet netmask=24 require-client-certificate=yes certificate=srv-OVPN enabled=yes


Примечания для обоих режимов:

1. Наличие пользователя является обязательным, даже не смотря на авторизацию по сертификатам; можно создать одного пользователя на всех клиентов и прописать один и тот же логин/пароль в конфигах клиентов, но это лишает возможности отследить подключение и действия конкретного пользователя — неудобно, несколько небезопасно.

2. RADIUS-аутентификацию я не рассматриваю просто потому, что не тестировал. Могу лишь предположить, что работать она будет только для username/password, а сертификаты будут всё так же проверяться на микротике.

3. Следите за тем, что бы пул адресов соответствовал подсети, указываемой в настройках OVPN-сервера. ROS'овский OVPN-сервер не будет разбираться принадлежат ли одной сети local-address= сервера и назначаемый из пула адрес клиента, более того, если, к примеру, использовать маску 29, а в качестве пула прописать ranges=192.168.100.0/29, клиенту может быть в лёгкую назначен броадкастовый 192.168.100.7, как это было у меня. Точно такая же ситуация может возникнуть, если указанный пул больше, чем подразумевает маска — только проблема выявится не сразу, а чуть погодя.

3. Экспорт сертификатов для настройки клиентов

3.1. Экспорт сертификата CA:

Код: bash
/certificate export-certificate cloud-CA export-passphrase=""


Примечание: Нам нужен только сам сертификат, закрытый ключ НЕ нужен, поэтому параметр export-passphrase="" должен быть пустым.

3.2. Экспорт сертификатов клиентов:

Код: bash
/certificate export-certificate test-client-ovpn-1 export-passphrase=private-key-password1


Код: bash
/certificate export-certificate test-client-ovpn-2 export-passphrase=private-key-password2


Примечание: export-passphrase= — обязательный параметр для экспорта закрытых ключей; используем для каждого клиента свой пароль; НЕ используем тот же самый пароль, который указывали в пунктах 2.4 для пользователей!

3.3. Извлекаем полученные файлы сертификатов и ключей из микротика любым удобным способом (как правило, я таскаю туда-сюда файлы прямо из винбокса).

Настройка Windows-клиента

1. Получаем OVPN-дистрибутив с openvpn.net.
2. Устанавливаем, все опции оставляем по-умолчанию, в том числе tap-интерфейс, который понадобится для любого режима настройки.
3. Идём в OpenVPN\config (по-умолчанию C:\Program Files\OpenVPN\config) и создаём там файл client.ovpn (или копируем из OpenVPN\sample-config).
4. Создаём конфигурацию клиента, или вносим правки с sample-config.

Содержимое client.ovpn с небольшими комментариями
# Режим, в котором работает OVPN сервис
Код: bash
client

# Внимание! Указываем только один параметр из двух
# Для режима tup указываем параметр
Код: bash
dev tun
# Для режима tap указываем параметр
Код: bash
dev tap

# Этот параметр указываем только в случае использования режима tap, а вместо MyTap подставляем имя tap интерфейса в windows (ipconfig /all, или сетевые подключения в панели управления)
Код: bash
dev-node MyTap
# Используемый протокол. ROS'овский OVPN-сервер работает только в режиме tcp
Код: bash
proto tcp

# Адрес сервера, к которому будем подключаться, и порт. Вместо ovpn.my.domain — dns-имя или же ip-адрес. Можно указать несколько серверов.
Код: bash
remote ovpn.my.domain 1194
;remote my-server-2 1194

# Этот параметр нужен только в случае использования более чем одного сервера; При указании этого параметра при подключении клиент случайном образом выбирает один из указанных серверов
;remote-random

# Тайм аут между попытками определить ip-адрес по указанному DNS-имени сервера, в секундах (или бесконечность — infinite)
Код: bash
resolv-retry infinite

# Если указан этот параметр, то клиент будет использовать динамический исходящий порт для подключения
Код: bash
nobind

# Разрешают клиенту сохранять настройки туннеля при переподключении, а так же не перечитывать файлы ключей
Код: bash
persist-key
persist-tun

# Настройки прокси
;http-proxy-retry # retry on connection failures
Код: bash
;http-proxy [proxy server] [proxy port #]
# Отключает сообщения о повторяющихся пакетах
Код: bash
;mute-replay-warnings

# Пути к файлам сертификатов
# ca — сертификат CA, которым выданы сертификат клиента И сертификат сервера
# cert — сертификат клиента
# key — закрытый ключ сертификата клиента
Код: bash
ca cert_export_test-CA.crt
cert cert_export_test-client-ovpn-1.crt
key cert_export_test-client-ovpn-1.key

# auth-user-pass говорит OVPN-клиенту использовать логин и пароль (но не вместо сертификатов, а вместе с сертификатами)
# user-pwd.txt указывает на файл, в котором хранятся логин и пароль; первая строка в файле — логин, вторая — пароль; при отсутствии этого аргумента логин и пароль будут запрашиваться каждый раз при подключении
# Примечание: В случае использования сертификата с закрытым ключом, к которому и так нужно вводить ключ при каждом подключении, я не считаю необходимым заставлять пользователя помнить ещё и логин с паролем
Код: bash
--auth-user-pass user-pwd.txt

# Сообщает клиенту, что он должен проверять сертификат сервера на предмет правильности используемых key-usage
Код: bash
remote-cert-tls server

# Ключ для шифрования начала процесса аутентификации (handshake), дополнительная мера безопасности. Имеет смысл при использовании только логина/пароля, без сертификатов.
Код: bash
;tls-auth ta.key 1

# Задание особого метода шифрования, по-умолчание используется blowfish128.
Код: bash
;cipher x

# Использование lzo-сжатия. Не поддерживается OVPN на ROS.
Код: bash
;comp-lzo

# Уровень лога. Чем больше значение — тем подробнее.
Код: bash
verb 3

# Блокирование повторяющихся сообщений в логе
Код: bash
;mute 20

# Выше были приведены параметры, которые присутствуют в «родном» примере конфига для клиента + 1 необходимый нам параметр
# Ниже я приведу ещё несколько, на мой взгляд, полезных параметров.

# Маршрут, устанавливаемый при запуске подключения
# Маршрут указывает не на шлюз, а непосредственно на подключение
Код: bash
route 192.168.88.0 255.255.255.0

# Пауза перед установкой маршрутов после установления подключения (в секундах)
Код: bash
route-delay 5

# Если мы хотим задать OVPN-подключение в качестве основного шлюза
route-gateway 192.168.100.1
Код: bash
redirect-gateway def1
//Спасибо пользователю @bibliary за правку. Согласно докам этот вариант верен, но протестировать на момент редактирования не имею возможности.



Примечание: для применения параметров маршрутизации, прописанных в конфиге, сам сервис OVPN, или же OVPN GUI должны быть запущены с правами администратора.

Примечание: список большинства параметров здесь но он несколько устаревший.

Настройка MikroTik-клиента

1 Импорт сертификатов

1.1 Кладём в микротик файл сертификата CA и файл сертификата и файл ключа клиента любым удобным способом

1.2 Импортируем сертификат CA

Код: bash
/certificate import file-name=cert_export_test-CA.crt passphrase=""


1.3 Импортируем сертификат и ключ клиента
Код: bash
/certificate import file-name=cert_export_test-client-ovpn-1.crt passphrase=""


Код: bash
/certificate import file-name=cert_export_test-client-ovpn-1.key passphrase=private-key-password1


2. Настраиваем клиент

Код: bash
/interface ovpn-client add name=OVPN_client connect-to={ovpn.my.domain|xxx.xxx.xxx.xxx} port=1194 mode={ip|ethernet} user=test-user-1 password=P@ssword1 profile=default certificate=cert_32 auth=sha1 cipher=blowfish128 add-default-route={no|yes} disabled=no


Значения в {} указываете в соответствии с предыдущими настройками и вашими потребностями.
#69
Подготовка системы

Выполним предварительную настройку, прежде чем начать развертывание Nextcloud.

1. Обновляем списки пакетов.

Актуализируем списки пакетов в репозиториях, чтобы установки проходили без ошибок:

Код: bash
apt update

    При желании, мы также можем обновить пакеты:

 
Код: bash
  apt upgrade

2. Синхронизируем время.

Устанавливаем утилиту chrony:

Код: bash
apt install chrony

Выставляем нужный часовой пояс:

Код: bash
timedatectl set-timezone Europe/Moscow

* в данном примере московское время.

Разрешаем запуск демона chrony:

Код: bash
systemctl enable chrony

3. Настройка брандмауэра.

По умолчанию в системах на базе Deb нет запрещающих правил в брандмауэре и нам ничего не нужно делать дополнительно. Но если в вашем случае настроен и используется брандмауэр на сервере, необходимо открыть порты 80 и 443.

Выполняем команды:

Код: bash
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Код: bash
iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Сохраним правила с помощью netfilter-persistent:
Код: bash
apt install iptables-persistent

Код: bash
netfilter-persistent save
Настройка сервера баз данных

В качестве СУБД используем MariaDB.

Устанавливаем:

Код: bash
apt install mariadb-server

Разрешаем автозапуск и стартуем сервис:

Код: bash
systemctl enable mariadb
Код: bash
systemctl start mariadb

Задаем пароль для суперпользователя mysql:
Код: bash
mysqladmin -u root password

Подключаемся к MariaDB, создаем базу данных и пользователя:

Код: bash
mysql -uroot -p

Код: bash
CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

>
Код: bash
GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'nextcloud';

Код: bash
\q
Установка и настройка веб-сервера
PHP

Перед тем, как устанавливать php, стоит изучить системные требования Nextcloud. Для корректной работы нужно установить рекомендуемую версию PHP.

На момент последнего обновления инструкции, рекомендовалось установить PHP версии 8.1. Для дальнейшего удобства работы, мы сохраним ее в переменную:

Код: bash
export PHP_VER=8.1

Посмотреть, какая версия будет установлена из репозитория системы можно командой:

Код: bash
apt search --names-only '^php[.0-9]{3}$'

а) Если она соответствует рекомендации Nextcloud, вводим команду для установки PHP, PHP-FPM и необходимых расширений:

Код: bash
apt install php php-fpm php-common php-zip php-xml php-intl php-gd php-mysql php-mbstring php-curl php-imagick

б) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu. А для установки расширений используем команду:

Код: bash
apt install php${PHP_VER}-fpm php${PHP_VER}-common php${PHP_VER}-zip php${PHP_VER}-xml php${PHP_VER}-intl php${PHP_VER}-gd php${PHP_VER}-mysql php${PHP_VER}-mbstring php${PHP_VER}-curl php${PHP_VER}-imagick php${PHP_VER}-gmp php${PHP_VER}-bcmath libmagickcore-6.q16-6-extra

* где PHP_VER — ранее определенная нами переменная с рекомендованной версией PHP.

Установка php завершена и можно перейти к ее настройке.

Настраиваем php-fpm:

Код: bash
vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf

* путь к данной папке зависит от установленной версии php. В данном примере это 8.1 (задана через переменную PHP_VER).

Снимаем комментарии со следующей строки:

Цитироватьenv[PATH] = /usr/local/bin:/usr/bin:/bin

Настраиваем php.ini:

vi /etc/php/${PHP_VER}/fpm/php.ini

Цитироватьopcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.revalidate_freq=1

Код: bash
sed -i 's/;opcache.enable=.*/opcache.enable=1/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.enable_cli=.*/opcache.enable_cli=1/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.memory_consumption=.*/opcache.memory_consumption=128/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/' /etc/php/8.3/fpm/php.ini
Код: bash
sed -i 's/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/' /etc/php/8.3/fpm/php.ini

Разрешаем автозапуск php-fpm и перезапускаем его:

Код: bash
systemctl enable php${PHP_VER}-fpm

Код: bash
systemctl restart php${PHP_VER}-fpm
NGINX

Nextcloud можно развернуть на NGINX или Apache. В данной инструкции будем использовать первый.

Устанавливаем веб-сервер:

Код: bash
apt install nginx

Создаем виртуальный домен и настраиваем его для работы с облачным сервисом:

Код: bash
vi /etc/nginx/sites-enabled/nextcloud.conf

Код: vi
server {
        listen 80;
        listen 443 ssl;
        server_name nextcloud.yourdomain.com;

        if ($scheme = 'http') {
            return 301 https://$host$request_uri;
        }

        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/cert.key;

        root /var/www/nextcloud;

        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        client_max_body_size 10G;
        fastcgi_buffers 64 4K;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        index index.php;
        error_page 403 = /core/templates/403.php;
        error_page 404 = /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
                deny all;
        }

        location ^~ /.well-known {
                location = /.well-known/carddav { return 301 /remote.php/dav/; }
                location = /.well-known/caldav  { return 301 /remote.php/dav/; }
                location = /.well-known/webfinger  { return 301 /index.php/.well-known/webfinger; }
                location = /.well-known/nodeinfo  { return 301 /index.php/.well-known/nodeinfo; }
                location ^~ /.well-known{ return 301 /index.php/$uri; }
                try_files $uri $uri/ =404;
        }

        location / {
                rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
                rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
                try_files $uri $uri/ index.php;
                if ($request_method = OPTIONS) {
                    return 301 $scheme://$server_name/remote.php/webdav/;
                }
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                try_files $1 = 404;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_param HTTPS on;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }

        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires modified +30d;
                access_log off;
        }
}

* где:

    nextcloud.yourdomain.com — домен, на котором будет работать сервис;
    /etc/nginx/ssl — каталог, в котором будут храниться сертификаты;
    /var/www/nextcloud — каталог с порталом.
    fastcgi_pass — обработчик скриптов. В нашем примере используется php-fpm. Обратите внимание, что путь до сокетного файла будет зависить от версии PHP.

Создаем каталог для хранения сертификатов и переходим в него:

Код: bash
mkdir /etc/nginx/ssl

Код: bash
cd /etc/nginx/ssl

Генерируем сертификат:
Код: bash
openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=nextcloud.yourdomain.com/CN=nextcloud"

* данная команда создаст сертификат на 4 года для URL nextcloud.yourdomain.com или nextcloud.

В нашем примере мы запустили nextcloud с использованием самоподписанного сертификата. Для продуктивной среды рекомендуется использовать купленный сертификат или бесплатный от Let's Encrypt.

После установки php мог установиться и запуститься apache. Отключаем его:

Код: bash
systemctl stop apache2

Код: bash
systemctl disable apache2

Проверяем конфигурацию nginx и перезапускаем сервис:

Код: bash
nginx -t

Код: bash
systemctl restart nginx

Разрешаем автозапуск:

Код: bash
systemctl enable nginx
Установка Nextcloud

Устанавливаем пакет unzip:

Код: bash
apt install unzip

Imagemagik
Код: bash
apt install imagemagick

На странице nextcloud можно ознакомиться с возможными вариантами загрузки портала. Мы же возьмем последнюю версию.

Переходим во временную папку и скачиваем исходник:

Код: bash
cd /tmp

Код: bash
wget https://download.nextcloud.com/server/releases/latest.zip

Распаковываем скачанный архив:

Код: bash
unzip latest.zip

И переносим содержимое архива в каталог /var/www:

Код: bash
mv nextcloud /var/www

Задаем права доступа:

Код: bash
chown -R www-data:www-data /var/www/nextcloud

Открываем браузер и переходим по адресу https://nextcloud.yourdomain.com, где nextcloud.yourdomain.com — адрес облачного сервиса.

Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы nextcloud.

Задаем параметры для подключения к базе данных

Завершаем установку.

Оптимизируем работу базы данных:

Код: bash
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint
Тюнинг после установки

Для корректной работы системы выполним дополнительную настройку. После входа в nextcloud под администратором, переходим в настройки для пользователя:

Переходим в настройку Nextcloud

В разделе «Параметры сервера» переходим в Основные сведения:

Переходим к общим сведениям

В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем:

В разделе «Проверка безопасности и параметров» мы можем увидеть список проблем

Рассмотрим процесс решения некоторых из них.
1. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ

Открываем на редактирование файл:

Код: bash
vi /etc/php/${PHP_VER}/fpm/php.ini

Меняем настройку для memory_limit:

Код: bash
memory_limit = 512M

Перезапускаем php-fpm:

Код: bash
systemctl restart php${PHP_VER}-fpm
2. В системе не установлены рекомендуемые модули PHP

Данная ошибка устраняется в зависимости от списка модулей, которых не хватает системе. Чаще всего, подходит команда:
Цитироватьdnf install php-<название модуля>

Например:

Код: bash
apt install php-gmp php-bcmath

После перезапускаем php-fpm:
Код: bash
systemctl restart php${PHP_VER}-fpm
3. Не настроена система кеширования

Для решения проблемы мы должны установить и настроить одно из средств кэширования:

    APCu
    Redis
    Memcached

Мы рассмотрим два последних варианта.
Redis

Устанавливаем сам Redis Server и модуль php:

Код: bash
apt install redis-server php-redis

* в случае установки сервера Redis на отдельный сервер, необходимо выполнить на сервере Nextcloud только установку php-redis.

Перезапускаем php-fpm:

Код: bash
systemctl restart php${PHP_VER}-fpm

Открываем конфигурационный файл для nextcloud:

Код: bash
vi /var/www/nextcloud/config/config.php

И добавим:

Код: bash
  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
      array (
          'host' => 'localhost',
          'port' => 6379,
      ),

Готово.
Memcached

Выполняем установку модуля для php и сам сервис memcached:

Код: bash
apt install memcached php-memcached

После разрешаем его автозапуск:

Код: bash
systemctl enable memcached

Перезапускаем php-fpm:

Код: bash
systemctl restart php${PHP_VER}-fpm

После этого открываем конфигурационный файл для nextcloud:

Код: bash
vi /var/www/nextcloud/config/config.php

И добавим:

  ...
Код: bash
  'memcache.local' => '\\OC\\Memcache\\Memcached',
  'memcache.distributed' => '\\OC\\Memcache\\Memcached',
  'memcached_servers' =>
  array (
    0 =>
    array (
      0 => 'localhost',
      1 => 11211,
    ),
  ),
  ...

Готово.
4. Не указан регион размещения этого сервера Nextcloud

Для решения проблемы открываем конфигурационный файл nextcloud:

Код: bash
vi /var/www/nextcloud/config/config.php

Добавляем:

...
Код: bash
'default_phone_region' => 'RU',
Работа с пользователями из UNIX-Shell

В состав nextcloud входит php-скрипт occ, с помощью которого можно управлять сервисом из командной строки Linux.
Добавление пользователя

Создать нового пользователя можно командой:

Код: bash
sudo -u www-data php /var/www/nextcloud/occ user:add admin

* где admin — имя учетной записи.
Сброс пароля

При необходимости сбросить пароль пользователя, можно воспользоваться командой:

Код: bash
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin

* где admin — учетная запись пользователя, чей пароль хотим сбросить.
Подключение папки nextcloud по webdav

Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска или раздела. Рассмотрим процесс для Windows и Linux.
Windows

Для начала необходимо включить службу «Веб-клиент». Для этого открываем от администратора командную строку и вводим команды:

Код: bash
sc config webclient start= auto

Код: bash
net start webclient

* первая команда включит автозапуск службы; вторая — запустит ее.

После открываем командную строку от пользователя и создаем сетевой диск командой:

Код: bash
net use <Буква диска>: https://<путь до nextcloud>/remote.php/webdav /user:user password

Например, для нашей настройки:
Код: bash
net use N: https://nextcloud.yourdomain.com/remote.php/webdav /user:admin password

* где N — буква сетевого диска; nextcloud.yourdomain.com — адрес нашего сервера; admin — учетная запись, которая была создана при установке системы; password — пароль от пользователя admin.

Ограничение на копирование файла с webdav

В Windows при попытке скопировать большой файл с папки webdav, мы можем получить ошибку «Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно.»:

Ошибка при копировании большого файла с папки webdav

Для решения проблемы необходимо на клиенте разрешить больший объем для загрузки файлов. Это делается в реестре — ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters, параметр FileSizeLimitInBytes. Для примера, если задать значение 4294967295 (максимально возможное), то мы получим ограничение в 4 Гб.

Также можно воспользоваться командой:

Код: bash
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v FileSizeLimitInBytes /t REG_DWORD /d 4294967295 /f

* команду нужно запускать в консоли, запущенной от администратора. В данном примере мы задаем также ограничение в 4 Гб.
Linux

Установим клиент davfs2. Действия будут немного различаться в зависимости от дистрибутива Linux.

а) Ubuntu / Debian:

Код: bash
apt install davfs2

б) CentOS / Red Hat:

Код: bash
yum install davfs2

Теперь мы можем примонтировать

Код: bash
mount -t davfs -o noexec https://nextcloud.yourdomain.com/remote.php/webdav /mnt

* в данном примере мы запустим команду на монтирование раздела по webdav в каталог /mnt. Обращение выполняется на наш сервер nextcloud.yourdomain.com.

После ввода команды, система попросит нас ввести логин и пароль от учетной записи Nextcloud:

  Username: user
  ...
  Password: 

После каталог будет примонтирован.

Для постоянного монтирования серез fstab, открываем файл:

Код: bash
vi /etc/fstab

Добавляем строчку:

Код: bash
https://nextcloud.yourdomain.com/remote.php/webdav/    /mnt    davfs    user,rw,_netdev 0 0

После открываем файл:
Код: bash
vi /etc/davfs2/secrets

И добавляем строку:

Код: bash
/mnt user password

* где /mnt — предполагаемый каталог, куда мы будем монтировать данные; user и password — логин и пароль от учетной записи в Nextcloud.

Монтируем каталог командой:

Код: bash
mount -a
#70
Seafile может быть развернут как Docker-контейнер или при помощи готового скрипта. Но в данной инструкции мы подробно рассмотрим процесс ручной установки и настройки Seafile на собственный серер. По большей части, мы будем опираться на официальную инструкцию.

В нашем примере будут использоваться:

Linux Ubuntu 20.04.
Seafile Server версии 9.
СУБД MariaDB.
Веб-сервер NGINX.
Пошагово, мы познакомимся с требованиями, опишем предварительную настройку системы и развертывание Seafile Server со всем необходимым прикладным софтом.

Требования к системе
Подготовка к установке Seafile
Установка дополнительных компонентов
Установка Seafile
Настройка автозапуска
Читайте также

Системные требования
Рассмотрим программно-аппаратные требования для развертывания Seafile Server:

Процессор: минимум 2 ядра.
Память ОЗУ: 2 Гб.
Операционная система: Linux Ubuntu (старые и новые версии), Linux CentOS (старые версии).
СУБД: MariaDB/MySQL, SQLite.
Веб-сервер: NGINX, Apache.
Также рекомендована установка memcached для работы 50 пользователей и более.

Предварительная настройка системы
Прежде чем перейти в процессу установки и настройки сервера Seafile, выполним предварительные действия.

1. Обновление пакетов
Обновляем список пакетов:

Код: bash
apt update

На свежей системе также рекомендуется выполнить обновление установленных в системе пакетов:

Код: bash
apt upgrade -y

2. Время
Для нормального отображения времени создания и редактирования файлов, убедимся, что на нашем сервере стоит правильное время.

Установим сервис синхронизации времени и разрешим его автозапуск:

Код: bash
apt install chrony -y

Код: bash
systemctl enable chrony

Настраиваем временную зону:

Код: bash
timedatectl set-timezone Europe/Moscow

* В данном примере мы задаем зону по московскому времени.

Список всех доступных зон можно посмотреть командой

Код: bash
timedatectl list-timezones

3. Настройка брандмауэра
По умолчанию, в Ubuntu брандмауэр пропускает все сетевые пакеты и не требует настройки. В этом случае, можно пропустить выполнение данного пункта.

Если же в вашем случае брандмауэр настроен на блокировку портов, выполняем нижеописанные действия.

Для нормальной работы системы нам нужно открыть 2 порта:

Код: bash
iptables -I INPUT -p tcp --dport 8000 -j ACCEPT

Код: bash
iptables -I INPUT -p tcp --dport 8082 -j ACCEPT

* на порту 8000 работает веб-сервер seahub; на 8002 будет слушать сервер seafile.

Для сохранения правила используем утилиту iptables-persistent:

Код: bash
apt install iptables-persistent -y

Код: bash
netfilter-persistent save

Установка программных компонентов
Установим программные продукты, которые необходимы для работы Seafile.

Memcache
Начать необходимо с Memcache, так как его библиотеки нужны для установки пакетов python. Для установки вводим:

Код: bash
apt install memcached libmemcached-dev -y

Внесем небольшую корректировку в работу сервиса:

Код: bash
vi /etc/memcached.conf

Добавим памяти, которую может использовать memcached для своей работы:

Цитировать-m 512

* до 512 Мб. Но можно и больше...

Перезапускаем сервис и разрешаем его автозапуск:

Код: bash
systemctl restart memcached

Код: bash
systemctl enable memcached

Python
Для запуска и работы нашей облачной системы необходим python версии 3. Выполним его установку с дополнительными компонентами:

Код: bash
apt install python3 python3-setuptools python3-pip libmysqlclient-dev -y

* где:

python3 — интерпретатор для языка программирования python.
python3-setuptools — дополнение для python-distutils, который в свою очередь, нужен для установки дополнительных модулей.
python3-pip — менеджер установки пакетов python.
libmysqlclient-dev — набор файлов для разработки под СУБД MySQL/MariaDB.
С помощью менеджера пакетов python также установим:

Код: bash
pip3 install --timeout=3600 django==3.2.* Pillow pylibmc captcha jinja2 sqlalchemy==1.4.3 django-pylibmc django-simple-captcha python3-ldap mysqlclient pycryptodome==3.12.0 cffi==1.14.0

MariaDB
Как говорилось выше, мы будем использовать в качестве сервера баз данных MariaDB. Она может быть установлена из репозитория командой:

Код: bash
apt install mariadb-server -y

* подробнее об установке MariaDB читайте инструкцию Установка MariaDB на CentOS или Ubuntu.

Установим пароль для основной учетной записи СУБД (root):

Код: bash
mysqladmin -u root password

* система запросит новый пароль. Его нужно ввести дважды.

Чтобы пароль применился, нужно сбросить привилегии в СУБД. Для этого заходим в оболочку sql:

Код: bash
mysql -uroot -p

И вводим:

> flush privileges;

После выходим обратно:

> quit

Разрешаем автозапуск демона:

Код: bash
systemctl enable mariadb

Мы готовы переходить к установке Seafile.

Установка Seafile
Создаем учетную запись seafile, от которой будет работать наш сервис:

Код: bash
useradd seafile -r

Создаем каталог, в который загрузим установочные файлы Seafile:

Код: bash
mkdir -p /opt/seafile/bin

На странице загрузки официального сайта копируем ссылку на архив с приложением:

Копируем ссылку на архив сервера seafile

С помощью скопированной ссылки загружаем архив:

Код: bash
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_9.0.10_x86-64.tar.gz

И распаковываем его в каталог /opt/seafile/bin:

Код: bash
tar zxf seafile-server_*.tar.gz -C /opt/seafile/bin --strip-components 1

Назначим в качестве владельца каталога seafile и распакованных файлов ранее созданного пользователя:

Код: bash
chown -R seafile:seafile /opt/seafile

Заходим под пользователем seafile:

Код: bash
su seafile

Переходим в каталог с установочными файлами и запускаем скрипт:

Код: bash
cd /opt/seafile/bin

Код: bash
./setup-seafile-mysql.sh

Мы увидим приветствие мастера установки. Просто нажимаем ENTER:

-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have read seafile server manual at

        https://download.seafile.com/published/seafile-manual/home.md

Press ENTER to continue
-----------------------------------------------------------------

Вводим имя сервера, который будут видеть клиенты:

What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] dmosk_seafile

Вводим IP-адрес или имя сервера, по которому можно подключиться к серверу:

What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] seafile.dmosk.ru

Вводим порт, на котором должен слушать сервис или оставляем 8082:

Which port do you want to use for the seafile fileserver?
[ default "8082" ]

Выбираем, использовать имеющуюся базу или создать новую. Мы создадим новую:

-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases

[ 1 or 2 ] 1

Указываем настройки для подключения к СУБД — хост, порт, пароль для root:

What is the host of mysql server?
[ default "localhost" ]

What is the port of mysql server?
[ default "3306" ]

What is the password of the mysql root user?
[ root password ]

Задаем имя пользователя mysql, который будет создан для seafile (можно оставить предложенный вариант, нажав ENTER):

Enter the name for mysql user of seafile. It would be created if not exists.
[ default "seafile" ]

Задаем пароль для создаваемой учетной записи в mysql:

Enter the password for mysql user "seafile":
[ password for seafile ]

Вводим имя для базы данных для сервера ccnet:

Enter the database name for ccnet-server:
[ default "ccnet-db" ]

Вводим имя для базы данных для сервера seafile:

Enter the database name for seafile-server:
[ default "seafile-db" ]

Вводим имя для базы данных для сервера seahub:

Enter the database name for seahub:
[ default "seahub-db" ]

Смотрим на сводную информацию:

---------------------------------
This is your configuration
---------------------------------

    server name:            dmosk_seafile
    server ip/domain:      seafile.dmosk.ru

    seafile data dir:      /opt/seafile/seafile-data
    fileserver port:        8082

    database:              create new
    ccnet database:        ccnet-db
    seafile database:      seafile-db
    seahub database:        seahub-db
    database user:          seafile

---------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------

Если ошибок нет, вводим ENTER — начнется установке и конфигурирование.

Мы должны увидеть сообщение:

-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------

run seafile server:    ./seafile.sh { start | stop | restart }
run seahub  server:    ./seahub.sh  { start <port> | stop | restart <port> }

-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------

port of seafile fileserver:  8082
port of seahub:              8000

When problems occur, Refer to

        https://download.seafile.com/published/seafile-manual/home.md

for information.

Установка завершена.

Внесем изменения в конфигурационный файл:

Код: bash
vi /opt/seafile/conf/gunicorn.conf.py

Отредактируем строку

Цитироватьbind = "0.0.0.0:8000"

* в данном примере мы настроили наш сервер, чтобы он слушал на всех интерфейсах, а не только на локальном. Это нужно, чтобы он мог отвечать на сетевые запросы.

Открываем другой конфигурационный файл:

Код: bash
vi /opt/seafile/conf/seahub_settings.py

Добавим строки:

Код: bash
CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
}
* в данном примере мы говорим серверу использовать memcached.

Теперь нам нужно запустить 2 сервиса:

seafile fileserver — сервер, принимающий запросы от клиентов.
seahub — веб-сервер на python.
Стартуем первый:

Код: bash
 /opt/seafile/bin/seafile.sh start

Мы должны увидеть:

Starting seafile server, please wait ...
** Message: 16:02:58.146: seafile-controller.c(621): No seafevents.

Seafile server started

Done.

Запускаем второй сервис:

Код: bash
 /opt/seafile/bin/seahub.sh start

Система задаст несколько вопросов.

Адрес электронной почты администратора (это же будет логин администратора):

What is the email for the admin account?
[ admin email ] postmaster@dmosk.ru

Пароль, который будет использоваться для администратора (вводим дважды):

What is the password for the admin account?
[ admin password ]

Enter the password again:
[ admin password again ]

Мы должны увидеть:

ЦитироватьSeahub is started

Done.

Сервер запущен.

Попробуем открыть браузер и перейти по адресу http://<IP-адрес сервера>:8000 — должна открыться страница авторизации. Вводим логин и пароль, который создали при старте seahub (в нашем примере для пользователя postmaster@dmosk.ru). Мы должны попасть в систему с правами администратора. Теперь у нас есть возможность управлять сервисом из графического интерфейса.

Настройка автозапуска
В нашем примере были разово запущены сервисы, которые перестанут работать после перезагрузки сервера. Для решения задачи автозапуска мы создадим два юнита в systemd.

С предыдущей настройки мы вошли в консоль под пользователем seafile. Оставаясь в нем, остановим ранее запущенные сервисы:


Код: bash
/opt/seafile/bin/seahub.sh stop


Код: bash
/opt/seafile/bin/seafile.sh stop

Выходим из консоли пользователя seafile:


Код: bash
exit

Вводим команду для создания первого юнита:

Код: bash
systemctl edit --full --force seafile

Код: bash
[Unit]
Description=Seafile Service
After=network.target

[Service]
User=seafile
Group=seafile
Type=forking
ExecStart=/opt/seafile/bin/seafile.sh start
ExecStop=/opt/seafile/bin/seafile.sh stop
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target

Создаем второй юнит:

Код: bash
systemctl edit --full --force seahub

Код: bash
[Unit]
Description=Seahub Service
After=network.target

[Service]
User=seafile
Group=seafile
Type=forking
ExecStart=/opt/seafile/bin/seahub.sh start
ExecStop=/opt/seafile/bin/seahub.sh stop
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

Разрешаем запуск созданных сервисов:

Код: bash
systemctl enable seafile seahub

Стартуем их:

Код: bash
systemctl start seafile seahub

Проверяем состоянию запущенных служб:

Код: bash
systemctl status seafile seahub
🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.