Бывают случаи когда на новом сервере необходимо установить старую версию MySQL 5.7. Не всегда можно перевести работающий ресурс на работу с новой версией или перевод требует больших трудов в изменении кода ресурса.
Можно одновременно установить несколько версий и трудностей с этим не возникнет. Важно указывать правильно пути и названия команд управления. Например, в нашем случае используется mysql-5.7. Кроме того, на одном из серверов мне необходима была только одна версия и всю настройку я сделал с учетом что будет использоваться только mysql.
При выполнении резервной копии базы данных и востановлении не забываем указывать правильное имя сервиса.
Переходим в папку и создаем папку под данные с назначением необходимых прав:
cd /opt/mysql-5.7
mkdir ./data
chown mysql:mysql ./data
chmod 755 ./data
Произведем начальную настройку сервера MySQL:
/opt/mysql-5.7 # ./bin/mysqld --initialize --user=mysql --basedir=./ --character-set-server=utf8
= вывод команды =
2022-02-02T06:37:58.431193Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp
server option (see documentation for more details).
2022-02-02T06:38:00.706137Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-02-02T06:38:01.541332Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-02-02T06:38:01.967699Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: ab3a127b-83f2-11ec-a16b-0e4799458f07.
2022-02-02T06:38:02.022913Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-02-02T06:38:03.275737Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-02-02T06:38:03.275828Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-02-02T06:38:03.276874Z 0 [Warning] CA certificate ca.pem is self signed.
2022-02-02T06:38:03.592321Z 1 [Note] A temporary password is generated for root@localhost: zRD?OXe,5NsfvfgTI
В выводе присутствует пароль который потребуется нам позже.
Открываем и приводим к коду указанному ниже в спойлере:
vim /etc/init.d/mysql-5.7
Необходимый код файла /etc/init.d/mysql-5.7
#!/bin/sh# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB# This file is public domain and comes with NO WARRANTY of any kind# MySQL daemon start/stop script.# Usually this is put in /etc/init.d (at least on machines SYSV R4 based# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.# When this is done the mysql server will be started when the machine is# started and shut down when the systems goes down.# Comments to support chkconfig on RedHat Linux# chkconfig: 2345 64 36# description: A very fast and reliable SQL database engine.# Comments to support LSB init script conventions### BEGIN INIT INFO# Provides: mysql-5.7# Required-Start: $local_fs $network $remote_fs# Should-Start: ypbind nscd ldap ntpd xntpd# Required-Stop: $local_fs $network $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: start and stop MySQL# Description: MySQL is a very fast and reliable SQL database engine.### END INIT INFO# If you install MySQL on some other places than /usr/local/mysql, then you# have to do one of the following things for this script to work:## - Run this script from within the MySQL installation directory# - Create a /etc/my.cnf file with the following information:# [mysqld]# basedir=<path-to-mysql-installation-directory># - Add the above to any other configuration file (for example ~/.my.ini)# and copy my_print_defaults to /usr/bin# - Add the path to the mysql-installation-directory to the basedir variable# below.## If you want to affect other MySQL variables, you should make your changes# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.# If you change base dir, you must also change datadir. These may get# overwritten by settings in the MySQL configuration files.basedir=/opt/mysql-5.7datadir=
mycnf=/etc/mysql/5.7/my.cnf# Default value, in seconds, afterwhich the script should timeout waiting# for server start. # Value here is overriden by value in my.cnf. # 0 means don't wait at all# Negative numbers mean to wait indefinitelyservice_startup_timeout=900# Lock directory for RedHat / SuSE.lockdir='/var/lock/subsys'lock_file_path="$lockdir/mysql"# The following variables are only set for letting mysql.server find things.# Set some defaultsmysqld_pid_file_path=
iftest-z"$basedir"thenbasedir=/usr/local/mysql
bindir=/usr/local/mysql/bin
iftest-z"$datadir"thendatadir=/usr/local/mysql/data
fisbindir=/usr/local/mysql/bin
libexecdir=/usr/local/mysql/bin
elsebindir="$basedir/bin"iftest-z"$datadir"thendatadir="$basedir/data"fisbindir="$basedir/sbin"libexecdir="$basedir/libexec"fi# datadir_set is used to determine if datadir was set (and so should be# *not* set inside of the --basedir= handler.)datadir_set=
## Use LSB init script functions for printing messages, if possible#lsb_functions="/lib/lsb/init-functions"iftest-f$lsb_functions ; then
. $lsb_functionselse
log_success_msg(){echo" SUCCESS! $@"}
log_failure_msg(){echo" ERROR! $@"}fiPATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"export PATH
mode=$1# start or stop[$#-ge1]&&shiftother_args="$*"# uncommon, but needed when called from an RPM upgrade action# Expected: "--skip-networking --skip-grant-tables"# They are not checked here, intentionally, as it is the resposibility# of the "spec" file author to give correct arguments only.case`echo"testing\c"`,`echo-n testing`in*c*,-n*)echo_n= echo_c= ;;*c*,*)echo_n=-n echo_c= ;;*)echo_n= echo_c='\c';;esac
parse_server_arguments(){for arg docase"$arg"in--basedir=*)basedir=`echo"$arg"|sed-e's/^[^=]*=//'`bindir="$basedir/bin"iftest-z"$datadir_set"; thendatadir="$basedir/data"fisbindir="$basedir/sbin"libexecdir="$basedir/libexec";;--datadir=*)datadir=`echo"$arg"|sed-e's/^[^=]*=//'`datadir_set=1;;--pid-file=*)mysqld_pid_file_path=`echo"$arg"|sed-e's/^[^=]*=//'`;;--service-startup-timeout=*)service_startup_timeout=`echo"$arg"|sed-e's/^[^=]*=//'`;;esacdone}
wait_for_pid (){verb="$1"# created | removedpid="$2"# process ID of the program operating on the pid-filepid_file_path="$3"# path to the PID file.i=0avoid_race_condition="by checking again"whiletest$i-ne$service_startup_timeout ; docase"$verb"in'created')# wait for a PID-file to pop into existence.test-s"$pid_file_path"&&i=''&&break;;'removed')# wait for this PID-file to disappeartest!-s"$pid_file_path"&&i=''&&break;;*)echo"wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"exit1;;esac# if server isn't running, then pid-file will never be updatediftest-n"$pid"; thenifkill-0"$pid"2>/dev/null; then
: # the server still runselse# The server may have exited between the last pid-file check and now. iftest-n"$avoid_race_condition"; thenavoid_race_condition=""continue# Check again.fi# there's nothing that will affect the file.
log_failure_msg "The server quit without updating PID file ($pid_file_path)."return1# not waiting any more.fifiecho$echo_n".$echo_c"i=`expr$i + 1`sleep1doneiftest-z"$i" ; then
log_success_msg
return0else
log_failure_msg
return1fi}# Get arguments from the my.cnf file,# the only group, which is read from now on is [mysqld]iftest-x"$bindir/my_print_defaults"; thenprint_defaults="$bindir/my_print_defaults"else# Try to find basedir in /etc/my.cnfconf=/etc/my.cnf
print_defaults=
iftest-r$confthensubpat='^[^=]*basedir[^=]*=\(.*\)$'dirs=`sed-e"/$subpat/!d"-e's//\1/'$conf`for d in$dirsdod=`echo$d|sed-e's/[ ]//g'`iftest-x"$d/bin/my_print_defaults"thenprint_defaults="$d/bin/my_print_defaults"breakfidonefi# Hope it's in the PATH ... but I doubt ittest-z"$print_defaults"&&print_defaults="my_print_defaults"fi## Read defaults file from 'basedir'. If there is no defaults file there# check if it's in the old (depricated) place (datadir) and read it from there#extra_args=""iftest-r"$basedir/my.cnf"thenextra_args="-e $basedir/my.cnf"fi
parse_server_arguments `$print_defaults$extra_args mysqld server mysql_server mysql.server`## Set pid file if not given#iftest-z"$mysqld_pid_file_path"thenmysqld_pid_file_path=$datadir/`hostname`.pid
elsecase"$mysqld_pid_file_path"in/*);;*)mysqld_pid_file_path="$datadir/$mysqld_pid_file_path";;esacficase"$mode"in'start')# Start daemon# Safeguard (relative paths, core dumps..)cd$basedirecho$echo_n"Starting MySQL"iftest-x$bindir/mysqld_safe
then# Give extra arguments to mysqld with the my.cnf file. This script# may be overwritten at next upgrade.$bindir/mysqld_safe --defaults-file="$mycnf"--datadir="$datadir"--pid-file="$mysqld_pid_file_path"$other_args>/dev/null &
wait_for_pid created "$!""$mysqld_pid_file_path"; return_value=$?# Make lock for RedHat / SuSEiftest-w"$lockdir"thentouch"$lock_file_path"fiexit$return_valueelse
log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"fi;;'stop')# Stop daemon. We use a signal here to avoid having to know the# root password.iftest-s"$mysqld_pid_file_path"then# signal mysqld_safe that it needs to stoptouch"$mysqld_pid_file_path.shutdown"mysqld_pid=`cat"$mysqld_pid_file_path"`if(kill-0$mysqld_pid2>/dev/null)thenecho$echo_n"Shutting down MySQL"kill$mysqld_pid# mysqld should remove the pid file when it exits, so wait for it.
wait_for_pid removed "$mysqld_pid""$mysqld_pid_file_path"; return_value=$?else
log_failure_msg "MySQL server process #$mysqld_pid is not running!"rm"$mysqld_pid_file_path"fi# Delete lock for RedHat / SuSEiftest-f"$lock_file_path"thenrm-f"$lock_file_path"fiexit$return_valueelse
log_failure_msg "MySQL server PID file could not be found!"fi;;'restart')# Stop the service and regardless of whether it was# running or not, start it again.if$0 stop $other_args; then$0 start $other_argselse
log_failure_msg "Failed to stop running server, so refusing to try to start."exit1fi;;'reload'|'force-reload')iftest-s"$mysqld_pid_file_path" ; thenread mysqld_pid <"$mysqld_pid_file_path"kill-HUP$mysqld_pid&& log_success_msg "Reloading service MySQL"touch"$mysqld_pid_file_path"else
log_failure_msg "MySQL PID file could not be found!"exit1fi;;'status')# First, check to see if pid file existsiftest-s"$mysqld_pid_file_path" ; thenread mysqld_pid <"$mysqld_pid_file_path"ifkill-0$mysqld_pid2>/dev/null ; then
log_success_msg "MySQL running ($mysqld_pid)"exit0else
log_failure_msg "MySQL is not running, but PID file exists"exit1fielse# Try to find appropriate mysqld processmysqld_pid=`pidof$libexecdir/mysqld`# test if multiple pids existpid_count=`echo$mysqld_pid|wc -w`iftest$pid_count-gt1 ; then
log_failure_msg "Multiple MySQL running but PID file could not be found ($mysqld_pid)"exit5eliftest-z$mysqld_pid ; theniftest-f"$lock_file_path" ; then
log_failure_msg "MySQL is not running, but lock file ($lock_file_path) exists"exit2fi
log_failure_msg "MySQL is not running"exit3else
log_failure_msg "MySQL is running but PID file could not be found"exit4fifi;;*)# usagebasename=`basename"$0"`echo"Usage: $basename {start|stop|restart|reload|force-reload|status} [ MySQL server options ]"exit1;;esacexit0
[свернуть]
Назначаем необходимые права:
chmod +x /etc/init.d/mysql-5.7
Создаем папку для конфигурации сервера и создаём файл конфигурации:
Обращаю внимание что указывается не стандартный порт для работы сервиса. Можете указать стандартный порт 3306 для работы MySQL.
Добавляем в автозагрузку и запускаем:
systemctl enable mysql-5.7
systemctl start mysql-5.7
= или одной командой =
systemctl enable --now mysql-5.7
Авторизуемся, меняем пароль и смотрим статус работы сервера MySQL:
/opt/mysql-5.7# mysql-5.7 --defaults-file=/etc/mysql/5.7/my.cnf -u root -p
Enter password: вводим пароль от root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37
Copyright (c)2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h'for help. Type '\c' to clear the current input statement.
mysql>STATUS;
ERROR 1820(HY000): You must reset your password using ALTER USER statement before executing this statement.
= вывод нам говорит что необходимо сменить пароль и мы его меняем =
mysql>SET PASSWORD = PASSWORD('пароль');
Query OK, 0 rows affected, 1 warning (0,00 sec)= выходим =
mysql>\q
Bye
= авторизуемся с новым паролем =/opt/mysql-5.7# mysql-5.7 --defaults-file=/etc/mysql/5.7/my.cnf -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c)2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h'for help. Type '\c' to clear the current input statement.
mysql>STATUS;
= вывод команды =--------------
mysql-5.7 Ver 14.14 Distrib 5.7.37, for linux-glibc2.12 (x86_64) using EditLine wrapper
Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.37 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql-5.7.sock
Uptime: 2 min 15 sec
Threads: 1 Questions: 9 Slow queries: 0 Opens: 109 Flush tables: 1 Open tables: 102 Queries per second avg: 0.066--------------
mysql> \q
Bye
Заключение
Поддерживать систему в актуальном состоянии важно и нужно. Все необходимые старые версии программного обеспечения вы всегда сможете установить с небольшими усилиями.
Установим и настроим 1С:Предприятие 8.3 на OC Astra Linux. Работать программа может на свободном терминальном сервере XRDP для удобного подключения по протоколу RDP. Из всех вариантов этот вариант меня порадовала больше всего.
Введение
Произведём установку и настройку программы «1С:Предприятие 8.3» c конфигурацией «Бухгалтерия предприятия (базовая)» с программной и аппаратной лицензией. Установка будет производиться на сервер работающий под управлением Astra Linux Common Edition 2.12.44. Сделаем удаленный доступ с помощью XRDP который позволит одновременно сидеть на сервере нескольким пользователям по протоколу RDP.
Требования, которые предъявляет разработчик к системам на которых может работать их продукты, вы можете найти на странице Системные требования «1С:Предприятия 8».
После установки программы, в справке по пути: «1С:Предприятие» — «Работа пользователя» — «Особенности работы в Linux», можно ознакомиться с нюансами работы системы.
Многие компании, занимающиеся 1С, будут советовать вам приобрести для работы в системе именно систему Windows, обосновывая это большей надежностью и удобством. Имейте в виду, что при продаже Windows продавец, согласно политике компании, получает приличное вознаграждение, что вызывает у многих естественное желание продать побольше. В ряде случаев действительно придется использовать систему Windows, но не факт, что она подойдёт именно вам.
Платформа и конфигурация 1С:Предприятие для Linux
В документах, которые вы получили после приобретения программного продукта семейства 1С, вы найдете регистрационные данные которые необходимы для регистрации на портале поддержки 1C:Портал поддержки. После регистрации и активации своего продукта, вы получите доступ для скачивания всего необходимого.
Иногда компании, в которых вы приобретаете продукт, может зарегистрировать продукт за вас. Уточните этот момент перед тем, как зарегистрируетесь сами.
Различие Базовой и Проф конфигурации
К выбору версии надо подходить очень аккуратно и четко понимать, что и в каком виде нужно именно вам. Не стоит идти на уловки компаний — дилеров, не спешить с приобретением ПРОФ версии и подписки ИТС.
Рассмотрим кратко основные отличия:
Базовая версия — при этом выборе вы можете вести только одну организацию в одной базе. Таких баз можно вести сколько угодно, но для каждой организации будет своя база. Плюс заключается в том, что вы всегда сможете сами обновляться с официального сайта поддержки, не прибегая к помощи сторонних специалистов. Но есть и минус — работать сможет только один пользователь. Ни о какой совместной работе в базе нескольких человек, не может быть и речи.
Если вы не планируйте вносить изменения в конфигурацию, то и нет необходимости работать с базой одновременно нескольким пользователям. В этом случае базовая версия именно то, что вам и нужно.
ПРОФ версия — как только вы перешли на эту версию, обновления будут доступны только при подписке ИТС. Появится возможность вносить изменения в конфигурацию, работать нескольким пользователям и вести несколько фирм в одной базе.
Важно иметь в виду, что при переходе на ПРОФ версию, вы полностью будете зависеть от той компании, в которой оформили подписку ИТС. Таких компаний много, важно выбрать хорошую и надёжную. Лучше, если эту компанию вам порекомендуют те, которым вы доверяете.
Вот вопрос-ответ службы поддержки 1С на два моих вопроса.
Версию ПРОФ в отличии от БАЗОВОЙ можно обновлять только при активной подписке на ИТС? — Да.
В моем случае, для тестирования без приобретения подписки ИТС, я не смогу обновлять версию ПРОФ легальными способами? — Да.
В практике мне приходилось сталкиваться с тем, что иногда компания использует старую версию программы (например 8.1) и хочет перейти и обновиться до новой версии 8.3, но продавец у которого они приобретали продукт говорит, что надо купить новую версию. Каково же было их удивление, когда я обновлял им программу до последней версии и показывал, как надо обновляться в дальнейшем.
Программная и аппаратная лицензия 1С:Предприятие
Это, пожалуй, один из самых важных моментов, который нужно учесть сразу. Программная лицензия стоит дешевле, но вызывает много проблем при смене оборудования. Как правило, отдел лицензирования всегда идёт на встречу и может предоставить даже большее количество активаций при определенных условиях, но это не всегда удобно. Использование USB ключей всё упрощает и развязывает руки при обновлении оборудования.
В практике встречался случай, когда компания приобрела программную лицензию на 5 пользователей и активировала её не для сервера, а для каждого пользовательского компьютера. Поначалу все было нормально, но когда база увеличилась, начались проблемы со скоростью. Использование скоростного диска SSD и перевода сети на 1 Gbit сильно улучшило ситуацию.
Варианты разворачивания сети 1С:Предприятие
Все хотят работать в программе 1С быстро, как на предприятии, так и дома. Все это возможно оптимально настроить различными способами.
Существует два вида работы базы данных:
Файловая база данных — самый простой вариант и подходит для небольших организаций идеально. Этот вариант мы и рассмотрим в данной статье.
База данных SQL — более сложный вариант и ориентирован на большое количество пользователей. При небольшом количестве пользователей нет смысла использовать такой вариант. Для работы будет нужна серверная лицензия, она стоит около 80 000 рублей.
Внимание!
Сервер 1С:Предприятия 8.3 под Linux может запуститься и без лицензии, при этом он позволяет иметь в кластере только один рабочий процесс, который допускает не более 12 клиентских соединений. Однако такая работа сервера не дает права использования программного обеспечения сервера 1С:Предприятия без покупки продукта «1С:Предприятие 8.3 Лицензия на сервер». Об этом сказано в лицензионном соглашении любой основной поставки 1С:Предприятия.
Оптимальное использование файловой базы данных 1C:Предприятие
Когда вы используйте файловую базу данных, расположенную в локальной сети, и клиенты подключаются к ней, скорость работы в программе будет зависеть от скорости локальной сети и от мощности самого компьютера. Для небольших баз такой вариант приемлем, но очень быстро базы увеличиваются и работа в программе становится все медленней и медленней, за исключением компьютера на котором расположена сама база.
Существует два варианта улучшения скорости работы в файловой базе данных:
Использование локальной сети 1 Gbit и диска SSD для базы данных — на какой-то момент это улучшит положение, но как показывает практика -ненадолго.
Использование терминального сервера — при таком варианте приобретается один мощный компьютер, на котором устанавливается программа, а все пользователи удалено подключаются к компьютеру используя свой профиль. Получится, что на одном компьютере будет одновременно несколько пользователей, не видя друг друга. По сети передается только картинка, а вся работа производится на сервере. Можно настроить удаленный доступ из интернета, и тогда избранные пользователи смогут используя медленный интернет спокойно работать в программе с домашнего компьютера.
Конечно, вы можете приобрести серверную версию Windows, так как только там легально можно использовать терминальный режим. Некоторые, по многочисленным советам в сети, переводят обычные версии Windows в терминальный режим, используя нелегальные варианты. Мой выбор — терминальный сервер Linux, который удовлетворил все мои требования и пожелания.
Установка терминального сервера XRDP
Устанавливаем сервер для возможности удаленного доступа к серверу несколькими пользователями:
apt install xrdp xorgxrdp
Проверяем статус:
# systemctl status xrdp
● xrdp.service - xrdp daemon
Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-04-19 20:59:44 MSK; 2min 27s ago
Docs: man:xrdp(8)
man:xrdp.ini(5)
Main PID: 2443 (xrdp)
CGroup: /system.slice/xrdp.service
└─2443 /usr/sbin/xrdp --nodaemon
апр 19 20:59:44 1c systemd[1]: Starting xrdp daemon...
апр 19 20:59:44 1c systemd[1]: Started xrdp daemon.
апр 19 20:59:44 1c xrdp[2443]: [INFO ] starting xrdp with pid 2443
апр 19 20:59:44 1c xrdp[2443]: [INFO ] address [0.0.0.0] port [3389] mode 1
апр 19 20:59:44 1c xrdp[2443]: [INFO ] listening to port 3389 on 0.0.0.0
апр 19 20:59:44 1c xrdp[2443]: [INFO ] xrdp_listen_pp done
Всё работает и добавлено на автозагрузку при запуске системы.
Используя протокол RDP подключаемся к серверу и работаем.
Так быстро я еще никогда не разворачивал XRDP. Всё работает из коробки и не требует никаких дополнительных действий.
Установка 1С Предприятие 8.3 на Astra Linux
Пошагово пройдем путь установки программы на систему Astra Linux.
Предварительная подготовка
Для установки необходимо в консоли зайти под пользователем root:
sevo44@orel-astra:~$ su -
Пароль:
root@orel-astra:~#
В случае если вы забыли пароль или его просто нет, необходимо выполнить в консоли команду которая создаст новый пароль:
passwd root
Создадим папки на сервере, в которую разместим файлы для установки платформы, программного обеспечения для работы с Hasp ключами USB и папку баз данных:
mkdir /root/srv1cv83-install
mkdir /home/base1c
Установим пакеты, которые необходимы для установки и корректной работы программы:
Скачиваем с сайта поддержки 1С «Технологическая платформа 1С:Предприятия (64-bit) для Linux».
Распаковываем архив в папку srv1cv83-install с помощью консоли:
cd /root/srv1cv83-install
tar xvzf server64_8_3_20_1789.tar.gz
ls
= вывод команды =
LibericaJDK-8-9-10-licenses.pdf Liberica-Notice.txt setup-full-8.3.20.1789-x86_64.run server64_8_3_20_1789.tar.gz
В активировании программной лицензии есть один нюанс. Когда вы запустите программу, она сообщит вам о необходимости её активировать, если вы начнете вводить пин-код ,то он окажется на 1 знак больше, чем требуемое количество.
Для активации однопользовательской программной лицензии, необходимо запустить программу 1С:Предприятие под пользователем root, только тогда при активации появится необходимое поле.
Установка HASP для работы с USB ключом
Программное обеспечение для работы с USB ключом будем использовать от компании Etersoft.
cd /root/srv1cv83-install
wget http://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/AstraLinux/orel/haspd_8.23-eter2astra_amd64.deb
Установим:
dpkg -i haspd_*.deb
= вывод команды =
Выбор ранее невыбранного пакета haspd.
(Чтение базы данных … на данный момент установлено 217439 файлов и каталогов.)
Подготовка к распаковке haspd_8.23-eter2astra_amd64.deb …
Распаковывается haspd (8.23-eter2astra) …
Настраивается пакет haspd (8.23-eter2astra) …
Обрабатываются триггеры для systemd (232-25+deb9u12astra.ce9) …
В системе Proxmox проброс нужного порта в виртуальную машину делается очень просто:
Для проверки работы ключа откроем браузер по ссылке http://127.0.0.1:1947 и смотрим появление нашего ключа в списке:
Создание файловой базы данных 1C:Предприятие
В Linux для создания баз из шаблона вначале необходимо установить шаблон в необходимую папку, а потом указать в настройке откуда брать шаблоны.
Для этих действий необходимо чтобы в системе была установлена Wine. К сожалению, без этого нельзя запустить файлы exe. Других способов установки базы из шаблона в системе Linux я не нашел.
В моем случае, я скопировал папку с базой в нужное место и выдал необходимые права:
chmod -R 777 /home/base1c
Права надо выдавать только после того, как скопируете все необходимые базы 1С!
Запуск 1C:Предприятие
В меню появилась ссылка на запуск программы:
При первом запуске появляется сообщение о необходимости установки шрифтов. В моем случае все шрифты уже были и отображались корректно, но при сохранении документов в PDF были проблемы с отображением шрифтов.
Переходим в необходимое место и смотрим информацию которая там указывается.
Проблемы со шрифтами
Не сразу заметил проблему со шрифтами при экспорте в pdf файл. Часть текста обрезалась, и информация была не полной. Можно ставить пакеты со шрифтами, но достаточно иметь шрифты по пути /usr/share/fonts/msttcorefonts.
Скачиваем и распаковываем архив в нужное место под пользователем root:
cd /usr/share/fonts
wget https://sevo44.ru/sevo44/download/msttcorefonts.tar.gz
tar xvzf msttcorefonts.tar.gz
Можно установить специальный пакет, который установит необходимые шрифты:
Какой вариант выбрать, решать вам. Надеюсь, разработчики рано или поздно для версии Linux перестанут использовать эти шрифты.
Вот так это выглядит, когда мы еще не установили необходимые шрифты:
С установленными шрифтами видно, что шрифт стал другой, но это малозаметно:
Обновление платформы 1С:Предприятие в Linux
Обновление производится по тому же принципу установки программы, описанному выше. Скачиваем новые пакеты и заново устанавливаем.
Обновление базовой конфигурации 1C:Предприятие в Linux
Обновление для ПРОФ — это совсем другая история.
Обновлять конфигурацию необходимо в режиме конфигуратора базы. Конфигурация — Обновить конфигурацию — Поиск доступных обновлений указываем наш логин и пароль от личного кабинета пользователя, и обновляемся.
Обязательно перед обновлением конфигурации нужно знать, какая необходима минимальная версия платформы. В противном случае, вы не зайдете в базу пока не обновите платформу.
Резервное копирование
Механизм резервного копирования в самой программе не работает.
Общий план резервного копирования следующий:
Останавливаем все запущенные процессы 1С;
Делаем резервную копию методом архивирования папки с базой.
Обычно я держу на сервере только 3 последние резервных копии, так как другой сервер забирает резервные копии и хранит их за гораздо больший период.
Создаем скрипт, который будет выполнять все необходимые действия:
vim /root/bin/backup1c.sh
= необходимый код =
#!/bin/sh
# Дата в формате 2015-09-29_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Путь сохранения копии
bk_dir='/root/backup1c'
# Вначале смотрим в Диспетчер задач название приложения
# затем смотрим вывод -> ps aux | grep 1cv8c
# Выполняем команду, которая завершит все процессы
# Если не писать никакого сигнала, то команда выполнит
# SIGTERM - немедленно завершает процесс, но обрабатывается программой,
# поэтому позволяет ей завершить дочерние процессы и освободить все ресурсы.
# killall - завершит все имеющиеся процессы с таким именем
# Закрываем 1с
killall 1cv8c
# Создаем файл с датой создания базы
echo `date +"%Y-%m-%d_%H-%M"` > /root/backup1c/timestamp
# Создаем базу через 10 секунд
sleep 10/bin/tar -cvzf $bk_dir/dolotov1cbase_$date_time.tar.gz /home/base1c/dolotov1cbase/*
# Удаляем копии старше 3-x дней
/usr/bin/find $bk_dir -type f -mtime +1 -exec rm {} \;
После создания скрипта делаем его исполнительным:
chmod +x /root/bin/backup1c.sh
Для проверки обязательно запустим и проверим, как он отработает:
После успешной проверки добавляем скрипт на автоматическое выполнение по расписанию.
Открываем необходимый файл и добавляем нужный код:
vim /etc/crontab
= необходимый код =
### Backup1С
# ежедневно в 3 часа
00 3 * * * root /root/bin/backup1c.sh >/dev/null 2>&1
Согласно команде каждый день в 3:00 будет выполняться скрипт для создания ежедневного бэкапа.
Заключение
Установку и настройку 1С:Предприятие я выполнял на разных системах, но установка на Astra Linux была самая простая. Настройка терминального сервера XRDP для подключения пользователей по протоколу RDP оказалась беспроблемной, так как всё заработало без дополнительного вмешательства в настройку.
Может быть в системе Astra Linux из коробки и не так много программ в репозиториях, но то, что они все работают и стабильные — это факт. Графическая оболочку Fly, которая используется только в этом дистрибутиве, очень хорошо сделана, и все продумано максимально, но самое главное в этом то, что куда бы я не заходил, всё работает и нет ошибок.
Считаю, что использование Astra Linux под 1C:Предприятие — самый лучший вариант.
Несколько версий PHP на сервере Linux удобно в работе и последующем обслуживании. В статье пример на базе Rocky Linux , но вы можете использовать его и для других систем использующих репозиторий RHEL.
Введение
Для любого системного администратора обновление версий PHP является задачей не простой и очень ответственной. При использовании на сервере одной версии php в процессе перехода на новую версию приходиться делать много действий необходимых для безотказной работы ресурса на период обновления. Сюрпризы могут подстерегать на любом моменте и спрогнозировать их крайне сложно.
В этой статье я описал механизм того как можно совершенно спокойно обновлять версии PHP не создавая проблем в работе пользователей с рабочим ресурсом.
Предварительная подготовка
Для работы с разными версиями php на одном сервере нам необходимо произвести предварительную настройку системы.
Перед началом использования репозитория Remi (на базе которого мы и будем устанавливать разные версии PHP) необходимо подключить репозиторий Epel созданный группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Установка Epel для дистрибутивов на базе RHEL производится командой:
dnf install epel-release
dnf update
Установка и настройка Nginx
При написании статьи учитывается что настройка Nginx была произведена согласно статьи NGINX установка и настройка.
Посмотрим какие варианты присутствуют в базовой версии:
# dnf module list php
Последняя проверка окончания срока действия метаданных: 1:27:39 назад, Ср 10 ноя 2021 11:34:45.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
Подсказка: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Видим что в базовой версии по умолчанию находится версия 7.2 её и будем устанавливать.
Установим php и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
Проверим установленную версию выполнив команду в консоли сервера:
php -v
= вывод команды =
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.24, Copyright (c) 1999-2018, by Zend Technologies
Для того чтобы связать nginx и php будем использовать мост php-fpm. Основной файл настройки находится по пути /etc/php-fpm.conf и там должен быть параметр include=/etc/php-fpm.d/*.conf говорящий о том где лежат настройки пулов.
Запускаем php-fpm и добавляем в автозагрузку:
systemctl enable --now php-fpm
Проверяем, запустился ли он.
systemctl status php-fpm
= вывод команды =
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-11-10 13:51:24 EST; 16s ago
Main PID: 7567 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 23681)
Memory: 17.3M
CGroup: /system.slice/php-fpm.service
├─7567 php-fpm: master process (/etc/php-fpm.conf)
├─7568 php-fpm: pool www
├─7569 php-fpm: pool www
├─7570 php-fpm: pool www
├─7571 php-fpm: pool www
└─7572 php-fpm: pool www
ноя 10 13:51:24 localhost.localdomain systemd[1]: Starting The PHP FastCGI Process Manager...
ноя 10 13:51:24 localhost.localdomain systemd[1]: Started The PHP FastCGI Process Manager.
Из вывода видно сервис успешно работает.
Настройки php находятся по стандартному пути /etc/php.ini а настройки пулов лежат в папке /etc/php-fpm.d/.
Использовать порт или сокет решать вам, но говорят что сокет использовать лучше. Запустим php-fpm через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Вы можете для каждого сайта создать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp. Более подробно про настройку доступа по SFTP прочтите в статье SFTP настройка для веб хостинга.
В настройках nginx для сайта необходимо указать требуемый пул.
Например, прописать код fastcgi_pass unix:/run/php-fpm/www.sock; в секции location ~ \.php$
Настройка базовой версии закончена и приступаем к установке других версий php.
Версии PHP от Remi
Есть замечательный человек Remi Collet, который создал репозиторий пользующийся огромной популярностью у пользователей операционных систем на базе RHEL. Познакомится с новостями репозитория можно на блоге Remi Collet.
Посмотрим список всех доступных вариантов установки php:
dnf module list php
= вывод команды =
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64 1.6 MB/s | 2.0 MB 00:01
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
Подсказка: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Из вывода выше видно что появилась возможность установить версии от 7.2 до 8.1 из реппозитрия Remi.
В выводе нет информации о возможности установить PHP версии 5.6, но сделать это можно по аналогии как мы будем устанавливать версии ниже. Достаточно указать код #dnf install php56 php56-php-fpm
Для чистоты эксперимента и наглядности установим две версии 7.4 и 8.1
В результате мы получим на сервере 3 разных версии php.
Установка версий PHP от Remi
Активируем репу php remi-7.4, для этого выполняем команды:
Обращаю особое внимание на указание именно php74 перед требуемыми пакетами. Только при таком названии пакетов установятся необходимые и не возникнет путаницы.
Сразу установим версию php 8.1 из репозитория Remi и выключим активную версию:
В случае если вы не хотите смотреть всю информацию можете использовать такой код файла info.php в котором выбрано отображение информации только о загруженных модулях:
<?php
// Показывать всю информацию, по умолчанию INFO_ALL
//phpinfo();
// Показывать информацию только о загруженных модулях.
phpinfo(INFO_MODULES);
?>
Конфигурации NGIN для сайтов
Создадим для для каждого сайта свои конфигурационные файлы:
Используя этот код можно использовать различные ресурсы с разными параметрами php использующими одну версию php.
Проверка работы
Для проверки нам необходимо или прописать для каждого тестируемого ресурса DNS или на компьютере с которого производим проверку внести необходимые правки. В нашем случае система с которой проводится проверка работает на базе Linux и там необходимо внести следующие правки:
vim /etc/hosts
= необходимые добавления =
192.168.0.206 php72.loc
192.168.0.206 php74.loc
192.168.0.206 php81.loc
Для проверки необходимо в строке браузера вписать путь http://ДОМЕН/info.php.
Вот так выглядит вывод для разных сайтов:
Обновление версий PHP
Обновление версий происходит обычным механизмом обновления и последующим перезапуском необходимых сервисов.
Для нашего случая команды будут иметь такую последовательность:
Используя разные версии php на одном ресурсе можно спокойно перевести работу ресурса на новую версию и в случае проблем в работе оперативно вернутся на старую.
При использовании не сервере одной версии при переходе на другую версию необходимо было выполнять следующие действия:
Остановка php-fpm,
Вывод и удаление всех имеющихся пакетов php,
Удаление старого и активирование нового репозитория требуемой версии php,
Установка новой версии,
Проверка настрое из старой версии,
Запуск php-fpm и проверка сервиса.
Если ресурс рабочий выполнять все действия приходится оперативно и очень аккуратно для минимизирования простоя в работе ресурса.
Заключение
Данный вариант работы с разными версиями меня вполне устраивает и не вызывает проблем. В статье я специально сделал установку версии как с базовых репозиториев так и с репозитория Remi. На практике использовать базовый репозиторий не удобно, так как не удобно просматривать какие именно пакеты установлены в базовой версии. Запрос # rpm -qa | grep php выведет все имеющиеся версии.
Рекомендую использовать версии PHP от Remi это удобно и вызывает меньше путаницы.
В любом случае какие версии использовать и с какими параметрами использовать необходимо смотреть в каждом конкретном случае. Нормальные разработчики ресурсов всегда указывают какие необходимо использовать версии php и с какими параметрами.
Рассмотрим установку Rocky Linux 8 и последующую настройку исходя из практики использования этой операционной системы. Данная система для меня является основной для использования на серверах. Стабильность работы гарантированна. Поддержка до 2029 года.
Введение
В данной статье собраны все основные моменты базовой настройки сервера Rocky Linux 8 которые я использую на практике. Rocky Linux это полностью бинарно совместимый дистрибутив с RHEL.
Собирается дистрибутив силами сообщества и Rocky Enterprise Software Foundation. Развитием системы занимается Gregory Kurtzer, являющийся автором Centos. Лично я отдаю предпочтение именно Rocky Linux, потому что организация вокруг него строится только для развития самой системы.
К сожалению дальнейшее стабильное использование CentOS стало не возможно. Версия CentOS Stream конечно имеет более новые версии, но при использовании я стал получать неожиданные сюрпризы которых на стабильной ветке раньше не было.
Установка Rocky Linux 8
Создания USB носителя для установки
Существует множество программ для записи iso образа на устройство. Например, у меня два варианта для создания носителя для установки:
Rufus — использую эту программа для создание загрузочных USB-дисков в системе Windows;
ROSA ImageWriter — использую эту программу для любой системы Linux.
Варианты установки
Рассмотрим два самых популярных варианта установки Rocky Linux 8.
Образы iso Rocky Linux 8
Образы можно скачать c официального сайта по ссылке Download Rocky Linux. Существует три варианта:
Rocky-8.4-x86_64-boot.iso — загрузочный образ 755M;
Rocky-8.4-x86_64-minimal.iso — минимальный образ 2G;
Rocky-8.4-x86_64-dvd1.iso — полный образ 9.9G.
Какой вариант использовать решать вам. Например, мне нравится устанавливать загрузочный образ и дальше настраивать руками, так и опыт приходит и понимаешь как что работает.
Минимальный образ не такой уж и маленький, но радует что есть загрузочный при установке с которого надо только руками внести требуемый репозиторий и выбрать нужные параметры установки.
Указывать надо путь к той папке, где лежит каталог repodata http://download.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/
В выборе программ выбираем базовое окружение «Минимальная установка» а в дополнительных параметрах «Гостевые агенты» и «Стандарт».
Шаблоны
Шаблоны используются как правило для установки на VDS и предоставляются компаниями предоставляющие такие услуги. Удобно, но тем не менее я пару раз попадал в дурацкие ситуации.
Вот моменты почему я советую использовать установку на VDS систем с iso образа:
Разбивка диска порой не учитывает конфигурацию тарифа или требований вашей системы — например, на одном хостинге при 2 G оперативной памяти был создал SWAP раздел в 512 М в результате пришлось переустанавливать систему дабы не терять место на и так небольшом диске;
Локализация как правило Английская — мне приятней работать на своем родном языке хотя и на английском если надо всё настрою;
Присутствие в шаблоне каких-то изменений отличающихся от стандартных минимальных параметров установки — порой не понимаешь откуда взялись какие то настройки которых раньше не видел. Кроме того, можно потратить кучу времени не понимая почему не работает то что всегда работало как часы. В итоге выясняется что в шаблоне установки нет пакета который всегда ставился в стандартном минимальном образе.
Все компании предоставляющие услуги VDS могут предоставить возможность установки системы с ISO образа системы. При установке надо правильно указать сетевые параметры исходя из предоставленных сетевых параметров настроек выбранного тарифа!
Разбивка диска для установки
Вариантов разбивки диска для Rocky Linux 8 может быть множество исходя из пожеланий и предпочтений. Например, мне нравиться придерживаться таких параметров:
Размер диска под систему Linux 50 G — этого мне хватает с запасом;
Создаю раздел boot размером 1 G — так я гарантирую что при заполнении диска система загрузится однозначно;
Создаю SWAP — согласно требованиям системы.
Можно выносить логи и кэш в отдельные разделы, но это лишняя трата времени. Лучше всегда выполнять мониторинг размера диска и в случае проблем оперативно принять необходимые меры. Прежде всего, так пропадёт головная боль о том какой размер указывать разделам ( вариант с перераспределением очень сюрпризная тема).
SWAP
Тема организации SWAP на сервере очень важная и поэтому я описал все основные моменты использования в статье SWAP для Linux
Настройка Rocky Linux 8
Пакетный менеджер DNF
Используется новый менеджер пакетов который поддерживает модульный формат пакетов.
По прежнему можно вносить команды yum вместо dnf и всё будет работать. Для yum сделан алиас для запуска dnf.
Для вывода всей информации о том какие команды можно использовать достаточно внести в консоли команду dnf и увидеть полный список возможностей.
dnf
= вывод части команды =
usage: dnf [options] COMMAND
Список основных команд:
alias List or create command aliases
autoremove удалить все ненужные пакеты, первоначально установленные по зависимостям
check поиск проблем в packagedb
check-update проверить доступные обновления для пакетов
clean удалить кэшированные данные
deplist Показывать список зависимостей пакета и какие пакеты их предоставляют
distro-sync обновить установленные пакеты до последних имеющихся версий
downgrade Откат к предыдущей версии пакета
group показать или использовать информацию о группах
help отобразить подсказку по использованию
history отобразить (или использовать) историю транзакций
info отобразить информацию о пакете или группе пакетов
install установка пакета(ов) в систему
list вывести список пакетов или групп пакетов
makecache создание кэша метаданных
mark отметить или снять отметку пользовательской установки с установленных пакетов.
module Взаимодействие с репозиторием Modules.
provides найти пакет по заданному значению
reinstall переустановка пакета
remove удалить пакет или пакеты из системы
repolist отобразить настроенные репозитории ПО
repoquery поиск пакетов по ключевому слову
repository-packages выполнить команды над всеми пакетами заданного репозитория
search поиск информации о пакете по заданной строке
shell запустить интерактивную оболочку DNF
swap запустить интерактивный вариант dnf для удаления и установки одной спецификации
updateinfo показать рекомендации к пакетам
upgrade обновить пакет или пакеты в системе
upgrade-minimal обновление, но только «новейших» пакетов, которые исправляют проблему в вашей системе
Информация об установленной системе
Узнать какая система установлена на сервере можно следующими командами:
uname -a
= вывод команды =
Linux localhost.localdomain 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Wed Sep 15 19:12:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
= вывод команды =
Rocky Linux release 8.4 (Green Obsidian)
Этой информации достаточно для понимания с какой системой предстоит работать.
Отключение SELinux
Отключаем SELinux. Его использование и настройка в системе Rocky Linux 8 отдельный разговор.
vi /etc/sysconfig/selinux
= меняем значение =
SELINUX=disabled
Перезагрузим для применения изменений. После перезагрузки проверяем статус:
sestatus
= вывод команды =
SELinux status: disabled
Надо иметь четкое понимание что SELinux система требующая хорошего понимания в том как она работает и как настраивать. Надо или отключить сразу или потратить время на изучение как она работает.
Добавление репозиториев
Для инсталляции различного софта необходимо подключить репозитории в Rocky Linux 8. Со временем пришло понимание того что относится к добавляемым репозиториям надо очень внимательно, чтобы в последствии не возникало проблем при обслуживании.
Всегда подключаю самый популярный репозиторий Epel (Extra Packages for Enterprise Linux). Epel хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
dnf -y install epel-release
Старюсь подключать репозитории которые поддерживают сами разработчики программ. Например, такие как Nginx, Zabbix, MariaDB.
Обновление Rocky Linux 8
Обновление системы очень важный момент и следует относится к нему очень внимательно. Всегда проще найти проблему когда проходит немного обновлений.
Прежде всего, всегда перед обновлениями делайте резервные копии!
Перед выполнением настройки лучше выполнить полное обновление системы:
dnf update
Автоматическое обновление системы
Для безопасности сервера его необходимо своевременно обновлять. Вариантов обновления Rocky Linux 8 несколько и это тема отдельного длинного разговора.
Например, получать сообщения на почту об появившихся обновлениях и уже на основании этого принимать решение о необходимости обновления — для меня лучший вариант.
При моих пожеланиях мне подойдёт утилита dnf-automatic. Ставится она из базового репозитория командой:
dnf install dnf-automatic
Управлением запуском по расписанию занимается systemd со своим встроенным планировщиком. Посмотреть таймеры автоматического запуска можно командой:
systemctl list-timers *dnf-*
= вывод команды =
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2021-10-24 14:36:56 MSK 5min left n/a n/a dnf-makecache.timer dnf-makecache.service
Посмотрим настройки этого таймера выполнив команду:
cat /etc/systemd/system/multi-user.target.wants/dnf-makecache.timer
= вывод команды =
[Unit]
Description=dnf makecache --timer
ConditionKernelCommandLine=!rd.live.image
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnBootSec=10min
OnUnitInactiveSec=1h
Unit=dnf-makecache.service
[Install]
WantedBy=multi-user.target
Если заданий нет, то можно добавить таймер выполнив команду:
systemctl enable --now dnf-automatic.timer
Настройка этого таймера будет по пути — /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer.
Настройка системы автоматического обновления находится по пути /etc/dnf/automatic.conf. По-умолчанию он только скачивает обновления, и отправляет сообщение на почту root.
Самый важный параметр это update_type — которой будет говорить системе какие выполнять обновления. Доступно несколько вариантов:
default — полное обновление;
security — только обновление безопасности.
Мой вариант настройки выглядит следующим образом:
vim /etc/dnf/automatic.conf
= часть вывода с пояснениями
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = security
random_sleep = 0
# To just receive updates use dnf-automatic-notifyonly.timer
# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
Согласно этих параметров будут скачаны все обновления безопасности и будет отправлено сообщение пользователю root.
В настройках можно настроить отправку почты на другой почтовый ящик, но мне больше нравится вариант когда все сообщения пользователя root пересылаются на мой почтовый ящик.
Популярные и полезные утилиты
Установим в начале основные популярные утилиты которые обычно требуются в работе.
dnf -y install net-tools bind-utils htop atop iftop lsof wget bzip2 traceroute gdisk yum-utils vim mc tmux
net-tools bind-utils — сетевые утилиты после установки которых будут работать команды # ifconfig и # nslookup,
htop atop — два интересных диспетчера задач,
iftop — показывает в режиме реального времени загрузку сетевого интерфейса,
lsof — вывода информации о том, какие файлы используются теми или иными процессами,
wget — неинтерактивная консольная программа для загрузки файлов по сети,
bzip2 — утилита командной строки с открытым исходным кодом для сжатия данных,
traceroute — утилита предназначенная для определения маршрутов следования данных в сетях TCP/IP,
gdisk — умеет работать с GPT-дисками разработано по подобию fdisk,
yum-utils — — это набор утилит для управления репозиторием, установки и отладки пакетов, поиска пакетов и много другого.
Про vim, mc и tmux расскажу ниже.
Настройка времени
Определим текущее время на сервере:
date
= вывод команды =
Ср ноя 14 12:17:34 CET 2021
Как видим временная зона не настроена.
Выполним необходимую настройку временной зоны Europe — Moscow:
= Сделать резервную копию текущей timezone =
mv /etc/localtime /etc/localtime.bak
= В папке /usr/share/zoneinfo/ ищем что надо и делаем ссылку =
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
В итоге получим:
date
= вывод команды =
Сб окт 13 02:59:46 MSK 2021
Можно использовать одну команду зная точно что эта временная зона присутствует в настройках:
timedatectl set-timezone Europe/Moscow
Синхронизация времени
В Rocky Linux 8 по-умолчанию используется утилита для синхронизации времени chrony. Если у вас её нет, то устанавливайте:
dnf install chrony
Запускаем chrony и добавляем в автозагрузку:
systemctl enable --now chronyd
Проверяем правильность работы:
systemctl status chronyd
= вывод команды =
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Ср 2021-10-03 21:55:18 MSK; 27min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 631 (chronyd)
CGroup: /system.slice/chronyd.service
└─631 /usr/sbin/chronyd
окт 03 21:55:17 lemp.sevo44.loc systemd[1]: Starting NTP client/server...
окт 03 21:55:17 lemp.sevo44.loc chronyd[631]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG)
окт 03 21:55:17 lemp.sevo44.loc chronyd[631]: Frequency 1.141 +/- 1.440 ppm read from /var/lib/chrony/drift
окт 03 21:55:18 lemp.sevo44.loc systemd[1]: Started NTP client/server.
окт 03 21:55:35 lemp.sevo44.loc chronyd[631]: Selected source 89.109.251.23
окт 03 21:55:35 lemp.sevo44.loc chronyd[631]: System clock wrong by 1.035954 seconds, adjustment started
окт 03 21:55:36 lemp.sevo44.loc chronyd[631]: System clock was stepped by 1.035954 seconds
Сетевые параметры
При установке Rocky Linux 8 уделяю особое внимание настройки сетевых параметров. Кроме того, на странице настройки сетевых параметров указывается название хоста.
Всегда отключаю ipv6 так как в большинстве случаев он не используется а вот проблемы при работе с системой может создать.
Для управления сетевыми настройками в Rocky Linux 8 после установки можно воспользоваться графической утилитой nmtui:
nmtui
= вывод команды =
-bash: nmtui: команда не найдена
= команда установки необходимого пакета для работы nmtui =
yum install NetworkManager-tui
В Rocky Linux 8, сеть управляется только через Network Manager. Сетевые настройки лучше выполнять с помощью утилиты nmtui.
Руками вся настройка сводится к редактированию файлов в паке /etc/sysconfig/network-scripts/. Для определения интерфейсов необходимо предварительно выполнить команду ip addr которая покажет название всех имеющихся интерфейсов.
Например, мой файл настройки сетевого интерфейса ens18:
Для применения изменений необходимо перезагрузить Network Manager выполнив команду:
= или командой =
systemctl restart NetworkManager
= предварительно поняв название необходимого сервиса =
systemctl list-units | grep -i network
Смена пароля root
Смена пароля производится командой:
passwd
= вывод команды =
Изменяется пароль пользователя root.
Новый пароль :
Повторите ввод нового пароля :
passwd: все данные аутентификации успешно обновлены.
Брандмауэр FirewallD
По умолчанию в системе Rocky Linux 8 используется брандмауэр FirewallD.
Ниже я выполню необходимые действия не описывая всё подробно.
Вывод информации об активных зонах:
firewall-cmd --get-active-zones
= вывод команды =
public
interfaces: ens18
Выведем информацию о конкретной зоне:
firewall-cmd --list-all --zone=public
= вывод команды =
public (active)
target: default
icmp-block-inversion: no
interfaces: ens18
sources:
services: cockpit ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Для безопасности порт ssh лучше поменять на нестандартный.
Добавим разрешение подключаться по этому порту:
firewall-cmd --permanent --zone=public --add-port=35555/tcp
= вывод команды =
success
Кроме того, сразу удалим ненужный сервис:
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
= вывод команды =
success
Применим изменения и посмотрим результат сделанных действий:
firewall-cmd --reload
= вывод команды =
success
firewall-cmd --list-all --zone=public
= вывод команды =
public (active)
target: default
icmp-block-inversion: no
interfaces: ens18
sources:
services: cockpit ssh
ports: 35555/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Только после настройки ssh для работы по новому порту удаляйте сервис ssh из FirewallD! Иначе в случае ошибки настройки можете потерять доступ к серверу.
Смена порта SSH
Укажем порт в настройках ssh открыв конфигурационный файл командой:
vi /etc/ssh/sshd_config
= необходимые изменения =
Раскоментируем строку Port 22 и заменим на наш 35555
Перезапускаем сервис ssh командой:
systemctl restart sshd
Проверяем какой порт слушает sshd (для работы нужен установленный пакет net-tools):
Подключение производится с указанием необходимого порта командой:
ssh -p 35555 root@193.124.180.195
Авторизация SSH по ключу
Вводить каждый раз пароль не удобно да и не помешает добавить безопасности.
После настройки можно отключить в параметрах ssh авторизацию по паролю, но иногда подключение по паролю просто необходимо. Обычно я создаю 16 злачный пароль и меняю его если давал временный доступ специалистам любого уровня и моего доверия. Безопасность лишней не бывает!
Установим самый популярный файловых менеджеров с текстовым интерфейсом командой если не установили ранее:
dnf -y install mc
Включаем подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax. Этот универсальный синтаксис подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса. Перезаписываем файл unknown.syntax:
cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
= вывод команды =
cp: переписать «/usr/share/mc/syntax/unknown.syntax»? y
В случае отказа от использования встроенного редактора MC необходимо в настройках «Настройки — Конфигурация» снять галки у параметров «Встроенный редактор» и «Встроенный просмотр»
Установка редактора Vim
По умолчанию в системе работает редактор vim и это вполне оправдано.
Обоснование использования редактора VIM и как с ним работать можно в статье Vim текстовый редактор
В случае отсутствия редактора его можно установить без вопросов командой:
dnf -y install vim
Отображение приглашения в консоли bash
При появлении большого количества серверов на обслуживании я сразу столкнулся с плохой информативностью о том с каким я сервером работаю.
Стандартный вариант отображения приветствия после установки Rocky Linux 8:
[root@vds-micro ~]#
В представленном виде при работе одновременно с разными серверами я путался и порой выполнял команды не там где надо. Изменение цвета приглашения, вывода полного имени машины и пути где мы находимся позволило мне избежать таких ошибок.
Выведем имеющиеся параметры:
echo $PS1
= вывод команды =
[\u@\h \W]\$
Изменим для текущей сессии:
export PS1='\[\033[01;31m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '
= в результате =
root@vds-micro.sevo44.ru ~ #
Для постоянного применения настроек необходимо в папке пользователя в файл .bashrc добавить необходимый код:
vim .bashrc
= необходимые дополнения =
# bash
PS1='\[\033[01;31m\]\u@\H\[\033[01;34m\] \w \$\[\033[00m\] '
Для применения подобных настроек для всех пользователей с обычными правами сделаем приглашение зеленым. Добавим необходимые параметры в имеющийся файл или создадим новый и добавим туда необходимые параметры:
Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть.
По умолчанию вывод команды history в консоли нам покажет:
history
= вывод команды =
1 yum update
2 reboot
3 htop
4 df -h
Как видим вывод не информативный. Кроме того, покажет только последние 1000 команд.
Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:
history | grep yum
Изменим эту ситуацию добавив в файл .bashrc находящийся в папке пользователя необходимые параметры:
vim .bashrc
= необходимые дополнения =
# history
export HISTSIZE=50000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w"
Расшифруем параметры:
Первый параметр увеличивает размер файла до 50000 строк;
Второй параметр указывает, что необходимо сохранять дату и время выполнения команды;
Третья строка вынуждает сразу же после выполнения команды сохранять ее в историю;
В последней строке мы создаем список исключений для тех команд, запись которых в историю не требуется.
Для применения изменений необходимо выполнить команду:
Можно применить эту настройку для всех пользователей указав параметр в файле /etc/profile.d/bash_completion.sh.
В таком варианте получаем гораздо большую информативность.
Установка Tmux
Установим пожалуй один из самых необходимых и удобных программ для удаленной работы с сервером. Tmux терминальный оконный менеджер при использовании дает возможность при обрыве связи с сервером по ssh не терять информацию о выполняемых действиях.
Cockpit: Веб-интерфейс управления сервером Rocky Linux 8
Возможность видеть наглядно все основные параметры системы и иметь возможность ими управлять пожалуй самая приятна новость которая меня порадовала в выпуске Rocky Linux 8.
При авторизации по ssh вы увидите следующее сообщение:
Activate the web console with: systemctl enable --now cockpit.socket
Достаточно выполнить команду в консоли systemctl enable —now cockpit.socket и при следующей авторизации вы увидите следующее сообщение:
Web console: https://localhost:9090/ or https://192.168.0.23:9090/
Порт 9090 должен быть открыт. Работающий по умолчанию сервис cockpit в FirewallD открывает этот порт.
При вводе в браузере https://192.168.0.23:9090 увидите приглашение ввести данные авторизации.
После входа вы увидите главную страницу с выводом графиков нагрузки основных параметров сервера.
Далеко не все конечно можно видеть и настраивать в этой панели но определенное удобство есть явно. Пользоваться панелью просто, понятно и не вызывает никаких сюрпризов, так что описывать по большому счету нечего. Попробуйте и вы сами всё поймете.
Единственное что я делаю это то что не держу её включенной. Убираю из автозагрузки в самой панели управления или командой:
systemctl disable cockpit.socket
В случае необходимости мне не сложно включить при необходимости и отключить после использования следующими командами:
Установим и настроим децентрализованную платформу для организации видеохостинга и видеовещания под названием PeerTube на системe Rocky Linux. Лучший вариант для организации хранения и использования своих видеофайлов. Сети распространения контента на базе P2P-коммуникаций.
Предисловие
В современном мире сделать видеозапись не составляет никакого труда. Все сложности возникают когда надо поделится видео и выбрать место где хранить видеофайлы. Вариант с выгрузкой видео на «бесплатные» ресурсы я исключил сразу. Мне необходима 100% гарантия сохранности данных и удобное использование ресурса без сюрпризов.
Не знаю как вы, но я не могу больше смотреть этот рекламный бред который размещают в видеороликах.
Мои требования для организации базы видеофайлов были следующие:
Общий сервер куда пользователи могут загружать и просматривать видеофайлы,
Система администрирования как самой системы так и прав пользователей,
Удобный поиск нужных видео,
Обработка видеофайлов на самом сервере,
Загрузка видео по прямой ссылке на видео,
Добавление видео используя торрент-файл.
Все эти требования с легкостью осуществляет PeerTube.
Мне не надо теперь сидеть и часами обрабатывать видео для получения нужного качества и размера видеофайла. Например, при загрузке фидеофайла снятого на мобильном телефоне и имеющего общий размер в районе 8 Гиб я получаю на выходе видеофайл размером в районе 1,5 Гиб без потери качества видео.
Система активно развивается и с каждым выпуском возможности только расширяются.
Становитесь пользователями PeerTube и вы никогда об этом не пожалеете.
Системные требования
Почти сразу после публикации статьи сразу в комментариях появился вопрос о системных требованиях данного сервиса.
Почему я сразу не написал про параметры системы не могу сказать, но мысль проскакивала. Коментарии важны так как получаешь обратную связь и это вызывает желание дополнять или редактировать статью в будущем.
Для работы системы в режиме просмотра много ресурсов не надо, но вот когда происходит загрузка видео и идет последующее транскодирование в другие разрешения время обработки сильно зависит от ресурсов железа.
Исходные данные тестирования:
Система работает в виртуальной машине под управлением Proxmox c процессором Intel(R) Xeon(R) CPU E5620 @ 2.40GHz, DDR3, обычные HDD;
Во время всего тестирования пользователи активно пользовались системой в режиме просмотра ( 3-5 );
Для тестирования был выбран видеофайл размером 7.8 Гиб с разрешением 1920х816.
Никаких проблем с работой в системе пользователи не заметили на протяжении всего периода тестов.
Сводная таблица времени транскодирования:
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz, DDR3
Время транскодирования 816p
Время транскодирования 480p
2 ядра и 4 Гиб памяти
2 часа 45 минут
1 час
8 ядер и 8 Гиб памяти
1 час 10 минут
30 минут
Вот такие параметры были в системе мониторинга Zabbix:
Самое приятное видеть как уменьшился размер видеофайла без потери качества. Вместо 7.8 Гиб стал 1.7 Гиб!
Раньше лежал у меня фильм и занимал места 7.8 Гиб и не важно в каком разрешении и на чем я его смотрел он качался всегда целиком. Теперь у меня два файл которые в сумме дают примерно 2.5 Гиб что почти в три раза меньше чем было. Смотрю на большом экране качается 1.7 Гиб, смотрю на мобильном телефоне качает 950 Миб. Можно транскадировать ещё в другие форматы и это все равно будет меньше чем был оригинал. Чудеса да и только 🙂
Предварительная подготовка
Написание статьи базировалось на официальной документации PeerTube в которой всё хорошо изложено и описано.
Установка Rocky Linux 8
Политика поддержки CentOS 8 поменялась и пока не могу однозначно сказать хорошо это или плохо, но лично у меня с ней стали возникать некоторые сложности. Хорошо что основатель CentOS взялся за разработку Rocky Linux которая будет развиваться в лучших традициях CentOS до момента перехода на Stream.
Не спешим выходить из под пользователя postgres. Создадим пароль для главного администратора базы данных иначе в последствии при смене прав доступа к базе система будет просить внести пароль которого у нас нет.
\password
Выходим на пользователя root
postgres=# \q
[postgres@video ~]$ exit
выход
root@video.sevo44.loc ~ #
Проверяем подключение к базе данных из под пользователя root
psql -U peertube -d peertube_prod
=== вывод команды ===
psql: ВАЖНО: пользователь "peertube" не прошёл проверку подлинности (Peer)
Подключение не прошло. Необходимо настроит права доступа к базам данных.
Выполняем настройку доступа к SQL-серверу, разрешив доступ только с localhost по паролю
vim/var/lib/pgsql/data/pg_hba.conf
=== необходимые изменения ===
# TYPE DATABASE USER ADDRESS METHOD# "local" is for Unix domain socket connections onlylocal all all password# IPv4 local connections:host all all 127.0.0.1/32 password# Настройка необходимая для обновления PeerTube используя скрипт обновленияhost all all ::1/128 password# IPv6 local connections:#host all all ::1/128 ident# Allow replication connections from localhost, by a user with the# replication privilege.#local replication all peer#host replication all 127.0.0.1/32 ident#host replication all ::1/128 ident
Перегружаем сервис и проверяем подключение к базе данных
systemctl restart postgresql
psql -U peertube -d peertube_prod
=== вывод команды ===
Пароль пользователя peertube: ПАРОЛЬ
psql (10.14)
Введите "help", чтобы получить справку.
peertube_prod=> \q ВЫХОДИМ
root@video.sevo44.loc ~ #
Соединение по паролю прошло успешно.
Настройка FirewallD
Откроем необходимые порты для доступа к серверу, удалим ненужные и применим правила
Вот перевод ответа: «Если вы имеете в виду все предупреждения Yarn, вы можете их игнорировать. Насколько я понимаю, это проблема Yarn, и она будет исправлена в следующей версии.»
Конфигурация PeerTube
Создаем файл конфигурации с шаблона
cd /var/www/peertube && sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
Произведем настройку указав свои параметры
vim/var/www/peertube/config/production.yaml
=== необходимые блоки для настройки ===
# Correspond to your reverse proxy server_name/listen configuration
webserver:
https: truehostname: 'video.sevo44.ru'# sevo44
port: 443# Your database name will be database.name OR "peertube"+database.suffix
database:
hostname: 'localhost'
port: 5432
ssl: false
suffix: '_prod'
username: 'peertube'password: 'password'# sevo44
pool:
max: 5# SMTP server to send emails
smtp:
# smtp or sendmail
transport: smtp
# Path to sendmail command. Required if you use sendmail transport
sendmail: null
hostname: smtp.yandex.ru # sevo44
port: 465# If you use StartTLS: 587username: 'video@sevo44.ru'# sevo44
password: 'password'# sevo44
tls: true# If you use StartTLS: false
disable_starttls: false
ca_file: null # Used for self signed certificatesfrom_address: 'video@sevo44.ru'# sevo44
В настройках мы указали доменное имя на котором будет работать ресурс, параметры для работы почты через сторонний smtp.
Остальные параметры можно не править, так как при работе будет создан файл /var/www/peertube/config/local-production.json в котором будут указаны все параметры которые делаются в панели администратора.
Настройка Nginx
Как правило все инструкции пишутся с учетом того что у вас на статическом внешнем ip адресе работает сервер только с этим ресурсом. На практике такое случается крайне редко и на одном IP может работать разное количество ресурсов работающих как веб север.
Приведу пример как производится проксирования сигнала до PeerTube средствами Nginx.
Ни в коем случае не пытайтесь настроить работу PeerTube на http так как будут глюки в работе как в отображении информации так и задержка при просмотре видео. Сервис заточен под работу на https и адаптировать его под работу http нет смысла. Проще добавить сертификат ssl. О том как это сделать узнаете ниже.
Подключаем официальный стабильный репозиторий разработчиков Nginx и устанавливаем
vim /etc/yum.repos.d/nginx.repo
=== необходимый код ===
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
dnf install nginx
Сделаем копию и изменим главный файл настройки Nginx
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_orig
vim/etc/nginx/nginx.conf
=== необходимый код ===
# Пользователь и группа, от имени которых будет запущен процесс
user peertube;
# Число воркеров в новых версиях рекомендовано устанавливать параметр auto
worker_processes auto;
# Уровни лога debug, info, notice, warn, error, crit, alert или emerg# перечислены в порядке возрастания важности. При установке определённого уровня# в лог попадают все сообщения указанного уровня и уровней большей важности. # Например, при стандартном уровне error в лог попадают сообщения уровней error, crit, alert и emerg. # Если параметр не задан, используется error.
error_log /var/log/nginx/error.log warn;
# Файл в котором будет храниться идентификатор основного процесса
pid /var/run/nginx.pid;
events {# Максимальное количество соединений одного воркера
worker_connections 1024;
# Метод выбора соединений (для FreeBSD будет kqueue)
use epoll;
# Принимать максимально возможное количество соединений
multi_accept on;
}
http {# Отключить вывод версии nginx в ответе
server_tokens off;
# Указываем файл с mime-типами и указываем тип данных по-умолчанию
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Формат для лога доступа и путь к файлу
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
# Метод отправки данных sendfile эффективнее чем read+write
sendfile on;
# Ограничивает объём данных, который может передан за один вызов sendfile(). # Нужно для исключения ситуации когда одно соединение может целиком захватить воркер
sendfile_max_chunk 128k;
# Отправлять заголовки и начало файла в одном пакете
tcp_nopush on;
tcp_nodelay on;
# Параметр задаёт тайм аут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 65;
# Сбрасывать соединение если клиент перестал читать ответ
reset_timedout_connection on;
# Разрывать соединение по истечению тайм аута при получении заголовка и тела запроса
client_header_timeout 3;
client_body_timeout 5;
# Разрывать соединение, если клиент не отвечает в течение 3 секунд
send_timeout 3;
# Задание буфера для заголовка и тела запроса
client_header_buffer_size 2k;
client_body_buffer_size 256k;
# Ограничение на размер тела запроса
client_max_body_size 8G;
# Подключение дополнительных конфигов
include /etc/nginx/conf.d/*.conf;
}
Мы специально указали пользователя peertube так как сервер создан для работы одного ресурса.
Добавим в автозагрузку и запустим сервис Nginx
systemctl enable --now nginx
Производители рекомендуют выполнить оптимизацию и мы не будем игнорировать этим советом
Посмотреть с какими настройками создалась служба можно выполнив команду
cat /etc/systemd/system/peertube.service
=== Вывод команды ===
[Unit]
Description=PeerTube daemon
After=network.target postgresql.service redis-server.service
[Service]
Type=simple
Environment=NODE_ENV=production
Environment=NODE_CONFIG_DIR=/var/www/peertube/config
User=peertube
Group=peertube
ExecStart=/usr/bin/npm start
WorkingDirectory=/var/www/peertube/peertube-latest
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=peertube
Restart=always
; Some security directives.
; Mount /usr, /boot, and /etc as read-only for processes invoked by this service.
ProtectSystem=full
; Sets up a new /dev mount for the process and only adds API pseudo devices
; like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled
; by default because it may not work on devices like the Raspberry Pi.
PrivateDevices=false
; Ensures that the service process and all its children can never gain new
; privileges through execve().
NoNewPrivileges=true
; This makes /home, /root, and /run/user inaccessible and empty for processes invoked
; by this unit. Make sure that you do not depend on data inside these folders.
ProtectHome=true
; Drops the sys admin capability from the daemon.
CapabilityBoundingSet=~CAP_SYS_ADMIN
[Install]
WantedBy=multi-user.target
В выводе кода вы видите пароль от администратора сервиса! User password: xelurocikokuyave и больше его вывод никогда не покажет. Запишите его или потом сможете создать другой.
В выводе всё хорошо расписано и в случае ошибок сможете увидеть подсказки что не так настроено.
Настройка PeerTube
Настроек множество и описывать все не имеет смысла. Покажу те моменты на которые имеет смысл обратить особое внимание.
Настоятельно рекомендую для безопасности оставить главным администратором только пользователя root. Все главные параметры нет смысла менять часто а для обычного администрирования роли «Модератор» вполне достаточно.
Выбираем варианты как можно загружать видеофайлы. Импорт с URL-адреса или торрент-файла очень удобен и отключать такую возможность не надо.
К настройке транскодирования отнеситесь очень внимательно, так как от этого будет зависеть как скорость работы ресурса так и объем занятого пространства видеофайлами.
В моем случае выбраны разрешения для транскодирования 480p и 1080p мне этого хватает. В случае если происходит загрузка видеофайла разрешением менее 480р транскодирования производится не будет и в системе будет только этот видеофайла. При загрузке видеофайла разрешением больше 1080р будет произведено транскодирование в форматы 480p и 1080р.
Чем больше форматов тем системе легче работать, но платить за это приходится размером дисков для видеофалов.
Главный параметр PeerTube
Спустя какое то время я стал замечать что объем хранилища видео стал сильно увеличиваться когда я стал более активно добавлять видео. Как влияет на объём выбор вариантов разрешения все понятно а вот с выбором формата я сразу не разобрался и включал оба параметра.
Теперь мои параметры выглядят так:
При выводе информации понятно почему этот вариант гораздо предпочтительней.
Расскажу что происходит на сервере когда включено оба параметра:
После обработки видеофайл попадает в папку /var/www/peertube/storage/videos и имеет столько вариантов сколько вариантов разрешения вы выбрали;
Потом видеофайлы попадают в папку /var/www/peertube/storage/streaming-playlists/hls и для каждого видео создаётся своя папка в которой помимо самих видеофайлов присутствуют технические файлы для работы с этой технологией.
Вот откуда идет двойное увеличение хранилища. В случае когда параметр «WebTorrent» выключен файлы всё равно во время транскодирования попадают в папку videos, но лишь временно на момент обработки файла. После окончания обработки файлы в папке videos удаляются.
Если после отключения параметра «WebTorrent» зайти и просто удалить файлы в папке videos то вы не сможете скачать видео которое было загружено с включением обоих параметров.
Обзор PeerTube
Особо расписывать нет смысла как работать в системе по причине понятного и дружественного интерфейса. Добавляйте пользователей создавайте каналы, закачивайте видео, подписывайтесь и получайте удовольствие от того что все ваше видео теперь находится в одном месте.
На фотках ниже вы увидите как система выглядит у меня.
Обновление PeerTube
В случае проблем в работе с некоторыми функциями PeerTube обновляйте если вышла новая версия.
Например, в какой то момент у меня перестала работать загрузка видео по адресу. После обновления все заработало.
Для обновления достаточно запустить скрипт который всё сделает автоматически.
Останавливаем сервис, переходим в нужное место и запускаем скрипт обновления
systemctl stop peertube
cd /var/www/peertube/peertube-latest/scripts
sudo -H -u peertube ./upgrade.sh
В конце выдаст информацию об изменениях сделанных в файле конфигурации по отношению к базовому.
В папке /var/www/peertube/config находится 3 файла:
default.yaml — базовая конфигурация. Обновляется после каждого обновления и имеет все настройки для новой версии;
local-production.json — настройки которые делаются в панели администратора и не меняются при обновлении версии;
production.yaml — настройки действующей версии.
Создадим копию файла из настроек что действуют на данный момент:
Обновим из базовой новой конфигурации файл с настройками:
cp /var/www/peertube/config/default.yaml /var/www/peertube/config/production.yaml
= при вопросе пишем yes =
Обычно надо внести необходимые правки в следующих блоках:
# Correspond to your reverse proxy server_name/listen configuration (i.e., your public PeerTube instance URL)
webserver:
https: truehostname: 'video.sevo44.ru'port: 443
# Your database name will be database.name OR 'peertube'+database.suffix
database:hostname: 'localhost'port: 5432ssl: falsesuffix: '_prod'username: 'peertube'password: 'Sdthdfhdfhhf'
pool:
max: 5
# SMTP server to send emails
smtp:
# smtp or sendmail
transport: smtp
# Path to sendmail command. Required if you use sendmail transport
sendmail: null
hostname: smtp.yandex.ruport: 465 # If you use StartTLS: 587username: 'video@sevo44.ru'password: 'tzZqAeu656ddsdfg2s6'
tls: true # If you use StartTLS: false
disable_starttls: false
ca_file: null # Used for self signed certificates
from_address: 'video@sevo44.ru'
# From the project root directory
storage:
tmp: '/var/www/peertube/storage/tmp/' # Use to download data (imports etc), store uploaded files before and during processing...
bin: '/var/www/peertube/storage/bin/'
avatars: '/var/www/peertube/storage/avatars/'
videos: '/var/www/peertube/storage/videos/'
streaming_playlists: '/var/www/peertube/storage/streaming-playlists/'
redundancy: '/var/www/peertube/storage/redundancy/'
logs: '/var/www/peertube/storage/logs/'
previews: '/var/www/peertube/storage/previews/'
thumbnails: '/var/www/peertube/storage/thumbnails/'
torrents: '/var/www/peertube/storage/torrents/'
captions: '/var/www/peertube/storage/captions/'
cache: '/var/www/peertube/storage/cache/'
plugins: '/var/www/peertube/storage/plugins/'
# Overridable client files in client/dist/assets/images:
# - logo.svg
# - favicon.png
# - default-playlist.jpg
# - default-avatar-account.png
# - default-avatar-video-channel.png
# - and icons/*.png (PWA)
# Could contain for example assets/images/favicon.png
# If the file exists, peertube will serve it
# If not, peertube will fallback to the default file
client_overrides: '/var/www/peertube/storage/client-overrides/'
Запускаем и смотрим информацию о сервисе
systemctl start peertube
journalctl -feu peertube
Без проблем прошли обновления 2.4.0 -> 3.0.0 -> 3.1.0 -> 3.2.1 -> 3.3.0 -> 3.4.0 -> 4.0.0 -> 4.1.0 -> 4.1.1
Переезд PeerTube
На новом сервере устанавливаем последнюю версию и переносим необходимые данные.
Обновлять версию на сервере с которого переезжаем нет необходимости. После переезда запускается скрипт обновления и всё обновится до необходимой версии.
При переносе на другой сервер нам необходимо перенести следующие данные:
Каталог /var/www/peertube/storage, в котором содержатся видео, миниатюры, предварительные просмотры и так далее,
Переходим в нужное место и запускаем скрипт обновления
cd /var/www/peertube/peertube-latest/scripts
sudo -H -u peertube ./upgrade.sh
После выполнения команды запускаем сервис и смотрим что происходит
systemctl start peertube
journalctl -feu peertube
При переносе для того чтобы не потерять данные которые появились во время переноса так же необходимо остановить сервис PeerTube.
Именинно поэтому я рекомендую вначале сделать тестовый переезд. Если все прошло хорошо останавливаем сервис с которого переезжаем, синхронизируем папку с данными, переносим заново базу данных и запускаем сервис после выполнения скрипта обновления.
Смена доменного имени PeerTube
При желании можно сменить доменное имя. После того как внесете правки в файл настройки PeerTube и поправите настройки Nginx необходимо выполнить следующие команды
cd /var/www/peertube/peertube-latest && su peertube[peertube@video peertube-latest]$ NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run update-host
=== вывод команды ===
> peertube@2.4.0 update-host /var/www/peertube/versions/peertube-v2.4.0
> node ./dist/scripts/update-host.js
Updating actors.
Updating actor http://video.sevo44.ru/video-channels/root_channel
Updating actor http://video.sevo44.ru/video-channels/sevo44_all
Updating actor http://video.sevo44.ru/accounts/root
Updating actor http://video.sevo44.ru/accounts/sevo44
Updating actor http://video.sevo44.ru/accounts/peertube
Updating video shares.
Updating video share http://video.sevo44.ru/videos/watch/9c178338-fa10-47b0-b2d1-f41af08179cc/announces/5
Updating video share http://video.sevo44.ru/videos/watch/9c178338-fa10-47b0-b2d1-f41af08179cc/announces/1
Updating video share http://video.sevo44.ru/videos/watch/c8dfa17f-ad7a-478a-83d0-6c53767f778a/announces/5
Updating video share http://video.sevo44.ru/videos/watch/c8dfa17f-ad7a-478a-83d0-6c53767f778a/announces/1
Updating video share http://video.sevo44.ru/videos/watch/2ef17574-dbc8-4111-936c-773c755141db/announces/5
Updating video share http://video.sevo44.ru/videos/watch/2ef17574-dbc8-4111-936c-773c755141db/announces/1
Updating video share http://video.sevo44.ru/videos/watch/753df8df-5bae-4bef-8d3c-5bb688a8c0fb/announces/5
Updating video share http://video.sevo44.ru/videos/watch/753df8df-5bae-4bef-8d3c-5bb688a8c0fb/announces/1
Updating video comments.
Updating video and torrent files.
Updating video 9c178338-fa10-47b0-b2d1-f41af08179cc
Updating torrent file720 of video 9c178338-fa10-47b0-b2d1-f41af08179cc.
[video.sevo44.ru:443]2020-12-28 00:35:39.659 info: Creating torrent /var/www/peertube/storage/torrents/9c178338-fa10-47b0-b2d1-f41af08179cc-720.torrent.
Updating video c8dfa17f-ad7a-478a-83d0-6c53767f778a
Updating torrent file720 of video c8dfa17f-ad7a-478a-83d0-6c53767f778a.
[video.sevo44.ru:443]2020-12-28 00:35:42.519 info: Creating torrent /var/www/peertube/storage/torrents/c8dfa17f-ad7a-478a-83d0-6c53767f778a-720.torrent.
Updating video 2ef17574-dbc8-4111-936c-773c755141db
Updating torrent file720 of video 2ef17574-dbc8-4111-936c-773c755141db.
[video.sevo44.ru:443]2020-12-28 00:35:45.303 info: Creating torrent /var/www/peertube/storage/torrents/2ef17574-dbc8-4111-936c-773c755141db-720.torrent.
Updating video 753df8df-5bae-4bef-8d3c-5bb688a8c0fb
Updating torrent file304 of video 753df8df-5bae-4bef-8d3c-5bb688a8c0fb.
[video.sevo44.ru:443]2020-12-28 00:35:51.759 info: Creating torrent /var/www/peertube/storage/torrents/753df8df-5bae-4bef-8d3c-5bb688a8c0fb-304.torrent.
[peertube@video peertube-latest]$
После успешного выполнения перезагрузите Nginx и PeerTube
nginx -s reload
systemctl start peertube
Смена пароля администратора PeerTube
Пароль администратора генерируется автоматически, его можно найти в журналах. Вы можете установить другой пароль с помощью следующей команды
cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root
Заключение
Долго лежала эта статья в черновиках и только после того как я все проверил и произвел несколько обновлений совесть позволила мне опубликовать статью.
Однозначно делайте резервную копию системы перед обновлением и тогда вам не страшны любые сюрпризы при обновлениях.
К сожалению обновление системы необходимо если вы хотите пользоваться всеми прелестями системы. В случае если вы планируйте производить простой вариант загрузки файлов и не использовать сеть P2P систему можно не обновлять.
За время использования много раз слышал спасибо от родни за то что теперь они могут без проблем смотреть семейное видео и делится им.
Больше всего ушло на то чтобы вытащить со всех щелей семейное видео и загрузит в одно место.
Ошибка в работе Континент АП одна из самый неприятных, так как с помощью этой программы организация осуществляет финансовые операции. Расскажу как я решил эту постоянно появляющуюся проблему после каждого обновления системы Windows.
Введение
Обслуживая государственные конторы всегда получаю больше всего сюрпризов. Только в этих конторах видишь программные продукты которые больше нигде не встретишь.
Решил рассказать о работе с такой замечательной программой как Континент АП. Программа предназначена для создания канала VPN по сертификату.
Работала эта программа без нареканий, но после того проходило обновление Windows программа стала выдавать ошибку.
Ошибка говорит о том что в файлах программы найдены изменения и она не может работать дальше. Выглядит сообщение следующим образом:
Когда ошибка стала появляться часто и пользователи стали сильно нервничать задавая вопрос: «Почему раньше работал а теперь постоянные сбои?» решил вникнуть и разобраться в сути проблемы.
Системные требования Континент АП
На одном из компьютеров установлена Windows 10 Домашняя и в одной из контор, прочитав рекомендации на сайте, сказали что проблема в версии Windows.
В свое время я сильно озадачился версиями Windows и пришел к выводу что отличия версий только в доменом управлении, некоторыми функциями и элементами внешнего вида. В организации где не планируется и не будет использован Windows Server покупать профессиональные версии нет смысла. За название «Домашняя» отдельное спасибо маркетологам Windows, так как народ действительно думает что использовать такую версию можно только дома 🙂
На странице разработчика есть системные требования которые вы можете посмотреть. Лично у меня такие требования вызывают улыбку.
Отключение антивируса
Пробовал отключать антивирус и добавлять папку с программой в белый список, но дело это совершенно бесполезное и дальше поймете почему.
Временное решение проблемы
Всегда хочется думать что разработчики продумали программу и она будет работать без сбоев. При проблемах начинаешь искать проблемы в системе, делаешь проверки на вирусы, и только в последнюю очередь ищешь проблему в программе.
Исправление программы Континент АП
Исправление программы это первое что всегда приходило в голову и помогало решить проблему. Достаточно было запустить файл установки, указать исправление и выполнив требуемые действия программа опять работала до следующего обновления Windows.
Такой вариант решения проблемы мне не подходит, хотя в большинстве случаев народ просто отключал обновления и радовался работе без ошибок дальше. К сожалению в Windows 10 отключить обновления нельзя (по крайней мере все способы что я пробовал не позволяют полностью отключить механизм обновления).
Отключение обновлений излюбленная тема тех кто не хочет разбираться в проблемах возникающих после обновлений. Чаще всего проблема с обновлениями у тех кто не любит ждать и не дождавшись окончания процедуры жестко выключает компьютер.
Никогда не отключаю обновления и никому не советую, так как без обновлений Windows шансов поймать вирус гораздо больше.
Решение проблемы
Решение оказалось немного не обычным и не логичным. Главное что это работает и как мне показалось единственное верное на данный момент решение.
Суть контроля целостности Континент АП
При установке программа в специальном файле запоминает все параметры своих файлов и файлов что использует в системе Windows. При запуске происходит сравнение параметров с этого файла и реальными файлами в системе. В случае отличия выдает грозное предупреждение «Тест контроля целостности не пройден».
Примерно так будет выглядеть контроль целостности:
Вроде все правильно и выглядит как забота о нашей безопасности от разработчиков программы. Программу выдают в отделении ФСБ а значит есть предположение что курируют её именно они.
По факту получается что программа контролирует системные файлы Windows которые система обновляет когда ей необходимо для своего улучшения. Для меня это кажется крайне не логично. Оставим на совести разработчиков такой механизм. Возможно они уже принимают меры а может нет. В любом случае они прекрасно знают что такая проблема есть. Тематические форумы завалены криками о помощи.
Моя задача сделать так чтобы программа работала и не вызывала проблем.
Выключение функции проверки
Для того что бы не видеть больше ошибки «Тест контроля целостности не пройден» и не отключать обновление Windows в версии Континент АП 3.7 необходимо изменить файл integrity.xml. Именно в этом файле занесена информация о файлах при установке.
Необходимо сделать следующее:
Перейдите на диск С в папку Program Files -> Security Code -> Terminal Station;
Скопировать файл integrity.xml на рабочий стол;
Открыть данный файл в текстовым редакторе «Блокнот»;
или убрать все разделы кроме первого —> catalog name="common";
Вернуть файл назад с подтверждением замены.
После выполненных действий запускайте программу и радуйтесь возможности совершать финансовые действия в организации.
Заключение
Всегда надо думать и анализировать ситуацию в каждом конкретном случае. Бездумное использование советов что попадаются в интернете частенько не дает результата. Было желание написать разработчикам, но решил не лезть к ним со своими пожеланиями и замечаниями.
Возможно это вообще хохма реального разработчика. Такие конторы иногда являются только заказчиками программного обеспечения и не имеют отношения к разработке. Разработчики не сильно вдаваясь в задание делают так как сказано. Возможно даже видя глупость заказа выполняют его а потом тихонько хихикают.
Интересно увидеть ваши комментарии по этому поводу.
Расскажу про установку системы GLPI на операционную систему CentOS. Удобней системы для ведения ИТ-инфраструктуры я не встречал. Кроме ведения заявок можно контролировать рабочие станции, вести справочную документацию и много чего ещё делать.
Введение
Практически сразу начав заниматься обслуживанием компьютерной техники я столкнулся с необходимостью вести учет всех поступивших заявок по обслуживанию в удобном виде.
Основные причины по которым я пришел к выводу что такая система необходима следующие:
Удобное ведение поступивших заявок — заявки поступившие в систему не забываются и не надо вести дополнительных блокнотов;
Хронология каждой заявки — в процессе решения собирается вся необходимая информация в одном месте;
История заявок — в случае проблем с заказчиком всегда можно посмотреть все события по заявке и освежить в памяти события которые со временем забываются.
Требования к системе предъявлялись следующие:
Свободная система работающая на свободных операционных системах;
Система должна активно развиваться и иметь возможность простого обновления;
Система должна работать на популярном языке программирования;
Возможность удобной подачи заявки и последующего ведения;
Ведение в одной системе разных организаций;
Гибкое администрирование уровня доступа пользователей;
Создание базы знаний для пользователей;
Использование доменных пользователей;
Личный планировщик заданий.
Перепробовал большое количество разных систем, но остановился на GLPI, так как эта система максимально удовлетворяет всем моим требованиям и позиционирует себя как свободный менеджер ИТ-инфраструктуры.
Основное что меня порадовало в системе GLPI это:
Систему GLPI можно установить на простой хостинг как обычный сайт так как он написан на PHP (при условии что можно сделать некоторые специфические настройки);
Настроек очень много и это позволяет реализовать практические любые пожелания;
Простота и продуманность обновления;
Информативность по выполняемым действиям очень радует, так как можно посмотреть подробную историю как действий пользователей так и автоматических заданий;
Расширение возможностей с помощью большого количества дополнений;
Почти во всех настройках есть история изменений где можно посмотреть кто и что делал;
Делать резервные копии базы данных перед серьезными настройками в системе GLPI.
Если сравнить по функционалу и подходу разработчиков, то система похожа на популярную систему мониторинга Zabbix.
Еще один из главных аргументов которые меня склонили к окончательному выбору системы это то что в разработке принимает активное участие Remi Collet и ведет поддержку GLPI в своем репозитории.
В статье вы узнаете полную версию установки на операционную систему CentOS c нуля.
Добавляем пользователя nginx в группу support.sevo44.ru:
usermod -aG support.sevo44.ru nginx
Открываем конфигурационный файл ssh находящийся по пути /etc/ssh/sshd_config. Комментируем один параметр и добавим необходимый код:
vim /etc/ssh/sshd_config
= необходимые изменения и добавления =
# Закоментируем параметр
#Subsystem sftp /usr/lib64/misc/sftp-server
# Для работы sftp
Subsystem sftp internal-sftp
# Для support.sevo44.ru
Match User support.sevo44.ru
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory /var/www/support.sevo44.ru
# /support.sevo44.ru
Перезапускаем службу sshd:
systemctl restart sshd
Назначаем владельцем содержимого сайта пользователя которого мы создали выше:
С репозитория Remi можно установить GLPI, но настроен он будет для работы с Apache.
Установим Php версии 7.2 со всеми необходимыми пакетами. Возможно их больше чем необходимо, но именно они устанавливаются если устанавливать используя репозиторий Remi:
Внесем необходимые изменения в файл настроек php.ini:
vim /etc/php.ini
= необходимые изменения =
# Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла.
cgi.fix_pathinfo=0
# Необходимая временная зона
date.timezone = "Europe/Moscow"
Запускаем php-fpm и добавляем в автозагрузку:
systemctl enable --now php-fpm
Запускать php-fpm будем через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Создадим отдельный пул для php-fpm, который будет обслуживать сайт support.sevo44.ru на котором и будет работать GLPI. Удобно когда для каждого сайта используется независимый пул в котором можно выставить необходимые значения.
Переходим в нужную папку, копируем существующий конфигурационный файл и делаем необходимые изменения:
vim /etc/yum.repos.d/nginx.repo
= необходимый код =
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Устанавливаем:
dnf install nginx
Добавляем в автозагрузку и запускаем:
systemctl enable --now nginx
Проверяем работу:
curl http://localhost
= вывод команды =
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Для удобства всегда правлю файл сайта по умолчанию для понимания к какому серверу подключился:
vim /usr/share/nginx/html/index.html
= необходимый код =
<!DOCTYPE html>
<html>
<head>
<title>Welcome!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working.</p>
<p><em>lemp.sevo44.loc</em></p>
</body>
</html>
Переименуем главный конфигурационный файл Nginx и создадим новый с нужными параметрами:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf_orig
vim /etc/nginx/nginx.conf
= необходимый код c пояснениями=
# Пользователь и группа, от имени которых будет запущен процесс
user nginx nginx;
# Число воркеров в новых версиях рекомендовано устанавливать параметр auto
worker_processes auto;
# Уровни лога debug, info, notice, warn, error, crit, alert или emerg
# перечислены в порядке возрастания важности. При установке определённого уровня
# в лог попадают все сообщения указанного уровня и уровней большей важности.
# Например, при стандартном уровне error в лог попадают сообщения уровней error, crit, alert и emerg.
# Если параметр не задан, используется error.
error_log /var/log/nginx/error.log warn;
# Файл в котором будет храниться идентификатор основного процесса
pid /var/run/nginx.pid;
events {
# Максимальное количество соединений одного воркера
worker_connections 1024;
# Метод выбора соединений (для FreeBSD будет kqueue)
use epoll;
# Принимать максимально возможное количество соединений
multi_accept on;
}
http {
# Отключить вывод версии nginx в ответе
server_tokens off;
# Указываем файл с mime-типами и указываем тип данных по-умолчанию
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Формат для лога доступа и путь к файлу
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
# Метод отправки данных sendfile эффективнее чем read+write
sendfile on;
# Ограничивает объём данных, который может передан за один вызов sendfile().
# Нужно для исключения ситуации когда одно соединение может целиком захватить воркер
sendfile_max_chunk 128k;
# Отправлять заголовки и начало файла в одном пакете
tcp_nopush on;
tcp_nodelay on;
# Параметр задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 65;
# Сбрасывать соединение если клиент перестал читать ответ
reset_timedout_connection on;
# Разрывать соединение по истечению таймаута при получении заголовка и тела запроса
client_header_timeout 3;
client_body_timeout 5;
# Разрывать соединение, если клиент не отвечает в течение 3 секунд
send_timeout 3;
# Задание буфера для заголовка и тела запроса
client_header_buffer_size 2k;
client_body_buffer_size 256k;
# Ограничение на размер тела запроса
client_max_body_size 12m;
# Подключение дополнительных конфигов
include /etc/nginx/conf.d/*.conf;
}
Проверяем правильность настроек Nginx:
nginx -t
= вывод команды =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Всё хорошо. Выполняем обновление правил без перезагрузки Nginx:
nginx -s reload
Конфигурационный файл Nginx для GLPI
Создаем фал Nginx для работы GLPI:
vim /etc/nginx/conf.d/support.sevo44.ru.conf
= необходимый код =
### support.sevo44.ru
server {
listen 80;
server_name support.sevo44.ru www.support.sevo44.ru;
root /var/www/support.sevo44.ru/www/;
index index.php index.html index.htm;
access_log /var/www/support.sevo44.ru/log/support.sevo44.ru-access.log;
error_log /var/www/support.sevo44.ru/log/support.sevo44.ru-error.log;
# Для записи в log реальных ip при использовании прокси nginx
set_real_ip_from 10.10.0.1;
real_ip_header X-Real-IP;
# Без него не грузит файлы больше 1 метра
client_max_body_size 10m;
keepalive_timeout 60;
add_header Strict-Transport-Security 'max-age=604800';
location / {
try_files $uri $uri/ =404;
autoindex on;
}
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
access_log off;
expires max;
}
location /api {
rewrite ^/api/(.*)$ /apirest.php/$1 last;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm/support.sevo44.ru.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $host;
fastcgi_param HTTPS on;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param PHP_VALUE "
memory_limit = 64M
file_uploads = on
max_execution_time = 600
session.auto_start = off
session.use_trans_sid = 0
";
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
#allow all;
deny all;
log_not_found off;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
В моем варианте сигнал проксируется с помощью Nginx прокси. Сертификат получаем на проксирующем сервере.
nginx -t
= вывод команды =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
Добавим необходимый репозиторий создав файл с кодом:
vim /etc/yum.repos.d/mariadb.repo
= необходимый код =
# MariaDB 10.4 CentOS repository list - created 2019-10-24 18:16 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos8-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Сам процесс установки и начальной настройке прост и понятен. Все дальнейшие «сюрпризы» и нюансы будут при настройке системы для работы.
Система настолько гибкая что порой начинаешь путаться во всех её возможных схемах работы.
Главное делайте бэкап базы данных средствами самой GLPI и тогда сможете сэкономить много своего времени.
Установка GLPI
Разработчики для безопасности рекомендуют вынести некоторые папки за рамки веб сервера для безопасности и об это рассказано тут.
В данном примере я не выношу папки за пределы веб сервера, хотя на практике это использую. Лишняя безопасность еще никому не вредила.
Запускаем установку введя в браузере адрес сайта.
Выбираем язык:
Соглашаемся с лицензией:
Выбираем вариант установить:
Смотрим результат проверок:
На предупреждение не обращаем внимания так как мы не вынесли некоторые папки за пределы веб сервера по рекомендации разработчиков.
Вводим данные от базы данных:
Выбираем созданную ранее базу данных:
Проверка подключения к базе данных прошла успешно:
Соглашаемся с отправкой статистики использования если уважаем свободное программное обеспечение:
Если посмотрите по ссылке какие данные отправятся то увидите что ничего секретного там нет.
Продолжаем и при желании открываем страницу на которой сказано как можно помочь материально проекту:
В результате увидим сообщение об удачной установке и список всех пользователей по умолчанию с паролями:
Вот таким видом нас встретит страница авторизации GLPI:
Вот так выглядит главная страница при авторизации GLPI:
По рекомендации удаляем указанный файл и меняем пароль у пользователя glpi. У остальных пользователей или меняем пароль или просто отключаем их.
Настройка CRON для GLPI
Добавление в cron правильной команды один из главных моментов в GLPI, так как он будет обрабатывать все автоматические задачи.
Добавим файл с необходимым кодом:
vim /etc/cron.d/glpi
= необходимый код =
# GLPI core
# Run cron to execute task even when no user connected
*/5 * * * * root /usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php
Где указаны следующие параметры:
*/5 * * * * — задание выполняется каждые 5 минут;
support.sevo44.ru — пользователь которому принадлежит файл;
/usr/bin/php — с помощью чего обрабатывать файл;
/var/www/support.sevo44.ru/www/front/cron.php — путь до необходимого файла.
После добавления обязательно нужно проверить как он выполняется. Посмотрим логи cron:
cat /var/log/cron
= часть вывода кода =
Nov 10 21:57:01 support.sevo44.loc CROND[527]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Nov 10 21:58:01 support.sevo44.loc CROND[540]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Nov 10 21:59:01 support.sevo44.loc CROND[556]: (root) CMD (/usr/bin/php /var/www/support.sevo44.ru/www/front/cron.php)
Из вывода видно что задачи успешно выполняются каждую минуту.
Ротация логов
В системе GLPI присутствует свой хороший механизм логирования, но держать логи на уровне сайта не помешает.
Настроим сразу ротацию логов что бы при необходимости было удобно их просматривать.
Создадим необходимый файл:
vim /etc/logrotate.d/sites
= необходимый код =
/var/www/support.sevo44.ru/log/*.log
{
daily
missingok
rotate 52compress
delaycompress
notifempty
create 644 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Согласно кода ротация будет проводится раз в день, и хранить архивы будет 52 дня. Файлы будут сжиматься и иметь права 644.
Backup сайта GLPI
После настройки настоятельно рекомендую настроить резервное копирование файлов и базы данных. Посмотреть о том как я произвожу резервное копирование в подобных случаях можно из статьи Backup надежный и безопасный.
Изменения в файлах GLPI
Обычно я сторонник не вносить изменения в файлы разработчика, но в данном случае мне они кажутся разумными и снимают ненужные вопросы от пользователей системы.
Произведем изменении графики:
pics/favicon.ico — иконка сайта;
pics/fd_logo.png — логотип справа после авторизации;
pics/login_logo_glpi.png — логотип при авторизации.
Берем оригинальные файлы и не меняя разрешения делаем новые картинки. Для создания иконки сайта существуют куча онлайн сайтов и Вы можете воспользоваться ими.
Изменим заголовок сайта до авторизации:
index.php
=== примерно 76 строка ===
echo '<head><title>'.__('CЭВО:Техподдержка - Аутентификация').'</title>'."\n";
Убираем внизу сообщений информацию Automatically generated by GLPI:
inc/notificationtemplate.class.php
=== По поиску в 2 местах меняем ===
Automatically generated by GLPI ---> Сгенерировано автоматически
Обновление GLPI
Механизм обновления разработчиками продуман и хорошо документируется. При правильном подходе проблем с обновлением не возникнет. Например, мне без проблем удается обновлять уже в течении трех лет.
Перед обновление обязательно посмотрите какие у Вас установлены плагины и проверьте будут ли они работать в новой версии. В случае если плагина для новой версии еще нет Вам необходимо отказаться от его использования или повременить с обновлением GLPI.
Перед обновление обязательно делайте резервную копию файлов и базы данных.
Перед началом обновления всегда ставлю пароль на открытие сайта средствами Nginx. Это позволит вам избежать случая когда пользователь который хочет зайти на портал увидит там страницу с обновлением и начнет выполнять действия за вас 🙂
О том как сделать доступ к сайту по паролю средствами Nginx Вы можете посмотреть тут.
Посмотреть какая последняя версия и сохранить себе путь можно на странице Downloads сайта разработчика.
Переходим в корневую папку, скачиваем туда новую версию и распаковываем:
cd /var/www/support.sevo44.ru
wget https://github.com/glpi-project/glpi/releases/download/9.5.3/glpi-9.5.3.tgz
tar zxvf glpi-9.5.3.tgz
В результате у вас появиться папка glpi.
В папке www удаляем всё кроме нескольких папок:
files — все файлы что загружали;
plugins — все плагины;
config — настройки db.
Теперь всё что есть в папке glpi переносим в папку www. Например, я для подобных целей использую MC.
После того как всё перенесено необходимо выставить правильного пользователя и правильные права на файлы с папками:
Переходим на сайт и видим информацию об обновлении.
В данном обновление необходимо настроить работу с временными зонами и в документации про это сказано.
Инициализируем данные часовых поясов из часовых поясов нашей системы:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -p -u root mysql
Enter password: пароль пользователя root mariadb
Дадим необходимые права на чтение:
mysql -u root -p
Enter password: пароль пользователя root mariadb
GRANT SELECT (`Name`) ON `mysql`.`time_zone_name` TO 'support.sevo44.ru'@'%';
Query OK, 0 rows affected (0.082 sec)
FLUSH PRIVILEGES;
\q
Перезапустим сервис баз данных:
systemctl restart mariadb
Больше ошибок нет и переходим к обновлению базы данных.
Нажимаем кнопку «Обновление» и получим примерно такую картину:
Мы видим что обновление произошло с 9.4.4 до 9.5.3 и указало какие действия необходимо сделать.
В данном случае нам сказано что необходимо выполнить консольную команду которая преобразует в базе данных все необходимые поля относящиеся к временным зонам.
Произведем необходимые действия:
cd /var/www/support.sevo44.ru/www/bin
php console glpi:migration:timestamps
=== вывод команды ===
Found 185 table(s) requiring migration.
Do you want to continue ? [Yes/no]y
185/185 [============================] 100%
Migration done.
Возможно после обновления расширений необходимо будет повторить действие которое описано выше.
В заключении, необходимо обновить плагины, если это необходимо, и зайти на страницу с автоматическими заданиями. Возможно какие то задания будут в зависшем состоянии и их необходимо перезапустить на странице настроек конкретного задания.
Не забываем произвести изменения в файлах GLPI если это делалось ранее.
Заключение
Надеюсь статья оказалась понятной и информативной. Рассмотрены все основные моменты по установке, начальной настойке и последующего обновления системы GLPI. В следующей статье я обязательно поделюсь нюансами с которыми столкнулся при настройке системы. Некоторые моменты не логичны возможно по причине не правильного перевода, но в целом система очень удобна в работе.
Версии PHP от Remi являются самыми популярными и стабильными при использовании на Web серверах. Расскажу основные моменты работы с репозиторием. Рассмотрим как сменить версию PHP. Один из самых популярных репозиториев для CentOS.
Введение
Есть замечательный человек Remi Collet, который создал репозиторий пользующийся огромной популярностью у пользователей операционной системы CentOS. Познакомится с новостями репозитория можно на блоге Remi Collet.
В статье будет рассказано про использование репозитория на системах CentOS 7 и 8.
Les RPM de Remi repository поддерживает последние версии MySQL и PHP (бэкпорты федоровских rpm). Пакеты этого репозитория необходимо использовать с осторожностью, так как они заменяют базовые пакеты.
В другой статье вы можете узнать как использовать репозиторий WebtaticEL для CentOS 7. В нем так же используются последние версии PHP, но к сожалению там нет многих удобств которые есть у Remi. Например, используя репозиторий Remi можно всегда иметь последнюю версию phpMyAdmin.
Предварительная подготовка
Перед началом использования репозитория Remi необходимо подключить репозиторий Epel созданный группой специалистов операционной системы Fedora. Пакеты из Epel репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.
Установка Epel в CetnOS 7 производится командой:
yum install epel-release
Установка Epel в CetnOS 8 производится командой:
dnf install epel-release
Подключение репозитория от Remi
для CentOS 7
Для установки репозитория Remi в CentOS 7 достаточно выполнить команду:
Посмотреть активные репозитории можно следующей командой:
yum repolist
= вывод части команды =
Загружены модули: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.corbina.net
* epel: mirror.logol.ru
* extras: mirror.reconn.ru
* remi-safe: mirror.reconn.ru
* updates: mirror.corbina.net
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 3 144
По умолчанию установлен репозиторий remi-safe который имеет только дополнительные пакеты для базового хранилища и коллекций программного обеспечения. Например, при попытке установить phpMyAdmin будет установлена старая версии. Для установки последних версий надо активировать репозиторий remi.
Посмотрим репозитории что у нас есть в системе выполнив команду:
GLPI — это программный инструмент ITSM, который помогает вам легко планировать и управлять изменениями в ИТ структуре предприятия, эффективно решать возникающие проблемы используя систему заявок, так же позволяет вам получить контроль над ИТ-бюджетом и расходами вашей компании. В будущем я расскажу как работать с этим замечательным проектом. Кроме того, то что Remi Collet поддерживает репозиторий меня очень радует.
Перед работой с репозиториями Remi необходимо установите пакет yum-utils, что бы не получать ошибку «bash: yum-config-manager: command not found». Установим yum-utils выполнив необходимую команду:
yum install yum-utils
Сейчас у нас активирован remi-safe. Для активации remi надо вначале отключить remi-safe а потом активировать remi выполнив команды:
Перед тем как определится какую версию PHP использовать я всегда смотрю на сайте Supported Versions PHP.
В списке имеющихся репозиториев нет версии php5.6, так как он входит в состав remi.repo. Для установки достаточно в команде указать remi-php56.
для CentOS 8
В 8 версии CentOS используется версия php 7.2 которая уже может удовлетворять требования множества новых сайтов, но если вам нужны версии новее подключайте Remi.
Посмотрим список всех доступных вариантов установки php:
dnf module list php
= вывод команды =
Последняя проверка окончания срока действия метаданных: 1:41:10 назад, Пн 28 окт 2019 08:05:09.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Из вывода выше видно что по умолчанию стоит базовая версия CentOS 7.2 и имена она будет установлена.
Установка версии PHP от Remi
для CentOS 7
Активируем репу remi-php72, для этого выполняем команду:
# yum-config-manager --enable remi-php72
Устанавливаем php7.2 выполнив команду:
yum install php72
Лучше указывать php72 и тогда пакеты будут установлены только из репозитория remi. Например, я всегда внимательно смотрю какая версия php будет установлена в списке устанавливаемых пакетов.
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
Последняя проверка окончания срока действия метаданных: 1:53:36 назад, Пн 28 окт 2019 08:05:09.
Зависимости разрешены.
====================================================================================================
Пакет Архитектура Версия Репозиторий Размер
====================================================================================================
Enabling module streams:
httpd 2.4
php remi-7.2
Результат транзакции
====================================================================================================
Продолжить? [д/Н]: д
Выполнено!
Switching module streams does not alter installed packages (see 'module enable' in dnf(8) for details)
Убедимся что версия выбрана правильно:
dnf module list php
= вывод команды =
Последняя проверка окончания срока действия метаданных: 1:55:03 назад, Пн 28 окт 2019 08:05:09.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 [e] common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Всё правильно.
Установим php remi-7.2 и все популярные модули следующей командой:
Внесем необходимые изменения в файл настроек php.ini:
vim /etc/php.ini
= необходимые изменения =
# Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла.
cgi.fix_pathinfo=0
# Необходимая временная зона
date.timezone = "Europe/Moscow"
Настройка Php-fpm для Nginx
Для того чтобы связать nginx и php будем использовать мост php-fpm. Основной файл настройки находится по пути /etc/php-fpm.conf и там должен быть параметр include=/etc/php-fpm.d/*.conf говорящий о том где лежат настройки пулов.
Запускаем php-fpm и добавляем в автозагрузку:
systemctl start php-fpm
systemctl enable php-fpm
=== Для CentOS 8 можно выполнить одну команду ===
systemctl enable --now php-fpm
Проверяем, запустился ли он.
systemctl status php-fpm
= вывод команды =
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-10-28 10:09:25 MSK; 1min 1s ago
Main PID: 463 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 11524)
Memory: 25.7M
CGroup: /system.slice/php-fpm.service
├─463 php-fpm: master process (/etc/php-fpm.conf)
├─464 php-fpm: pool www
├─465 php-fpm: pool www
├─466 php-fpm: pool www
├─467 php-fpm: pool www
└─468 php-fpm: pool www
окт 28 10:09:24 wp-lxc_pro-php7_sevo44_loc systemd[1]: Starting The PHP FastCGI Process Manager...
окт 28 10:09:25 wp-lxc_pro-php7_sevo44_loc systemd[1]: Started The PHP FastCGI Process Manager.
Все в порядке, сервис работает и находится в автозагрузке.
Использовать порт или сокет решать вам, но говорят что сокет использовать лучше. Запустим php-fpm через unix сокет. Для этого переименуем конфиг /etc/php-fpm.d/www.conf, создадим новый и приводим к следующему виду:
Вы можете для каждого сайта созать свой пул и указать там все необходимые параметры. Например, для каждого сайта я создаю свой пул для гибкости настройки и благодаря этому я настраиваю корректный доступ к файлам по sftp.
В настройках nginx для сайта необходимо указать требуемый пул. Например, прописать код fastcgi_pass unix:/run/php-fpm/www.sock; в секции location ~ \.php$
Обновление версий PHP от Remi
Схема обновления универсальна и подойдет как для всех версий CentOS. В примере ниже расмотрен вариант обновления для версии 7.
Обновление состоит из нескольких действий:
Остановка php-fpm,
Вывод и удаление всех имеющихся пакетов php,
Удаление старого и активирование нового репозитория требуемой версии php,
Установка новой версии,
Проверка настрое из старой версии,
Запуск php-fpm и проверка сервиса.
Выполним обновление PHP до версии 7.3 в системе CentOS 7.
Обязательно смотрим версию и репозиторий откуда будут ставится пакеты.
Осталось проверить файлы что выдала команда при удалении старой версии php:
предупреждение: /etc/php-fpm.d/www.conf сохранен как /etc/php-fpm.d/www.conf.rpmsave
предупреждение: /etc/php.ini сохранен как /etc/php.ini.rpmsave
В заключение, запустим сервис php-fpm и проверим статус:
systemctl start php-fpm
systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since Ср 2019-03-13 21:16:12 MSK; 7s ago
Main PID: 1392 (php-fpm)
Status: "Ready to handle connections"
CGroup: /lxc/php7-lxc/system.slice/php-fpm.service
├─1392 php-fpm: master process (/etc/php-fpm.conf)
├─1393 php-fpm: pool www
├─1394 php-fpm: pool www
├─1395 php-fpm: pool www
├─1396 php-fpm: pool www
└─1397 php-fpm: pool www
мар 13 21:16:11 php7-lxc-lemp.sevo44.loc systemd[1]: Starting The PHP FastCGI Process Manager...
мар 13 21:16:12 php7-lxc-lemp.sevo44.loc systemd[1]: Started The PHP FastCGI Process Manager.
Из вывода видно что сервис не стартует при загрузке. Добавим сервис в автозагрузку выполнив команду:
systemctl enable php-fpm
Вывод
В статье рассказано про основные моменты работы с репозиторием Remi Collet. Репозиторий активно обновляется и мой выбор остановился на использовании именно его при работе с PHP.
Обслуживание компьютеров, ремонт, лечение вирусов, модернизация. Системы на ОС Linux. Создание и продвижение Интернет проектов. Бесплатные консультации. Офисные АТС. Видеонаблюдение.