**************************************************************************************************** Настройка времени и NTP сервера Устанавливаем зону sudo timedatectl set-timezone Asia/Almaty sudo date --set="2025-01-07 21:05:00.000" sudo timedatectl set-ntp on sudo apt install ntp ntpq -p **************************************************************************************************** Добавляем нового пользователя sudo adduser sabyrzhan sudo usermod -aG sudo имя_пользователя **************************************************************************************************** Установка cinamon на Ubuntu 22.04 и 24/04: sudo apt update && sudo apt upgrade -y sudo apt install cinnamon -y sudo reboot Настройка клавиатуры в cinamon удаляем: ibus sudo apt-get remove ibus Добавить в конец файла: sudo mcedit /etc/fstab /media/sf_O_DRIVE /mnt/O_DRIVE none bind 0 0 /media/sf_D_DRIVE /mnt/D_DRIVE none bind 0 0 sudo chmod 777 /mnt/O_DRIVE sudo usermod -aG vboxsf $USER **************************************************************************************************** Для монтирования O_DRIVE в VitrualBox прописывать точку монтирования: /mnt/O_DRIVE **************************************************************************************************** Авторизация на базе ключей SSH https://selectel.ru/blog/ssh-authentication/ **************************************************************************************************** Для добавления ярлыка в меню пуск cd /usr/share/applications И там создать файл: *.desktop [Desktop Entry] Encoding=UTF-8 Name=IDEA_JEE Exec=/opt/idea-IU-221.5787.30/bin/idea.sh Icon=/opt/idea-IU-221.5787.30/bin/idea.svg Type=Application Categories=TextEditor;Development;IDE; MimeType=text/html Comment=Java development Keywords=java;development; **************************************************************************************************** Linux в Windows https://winitpro.ru/index.php/2020/07/13/zapusk-linux-v-windows-wsl-2/ wsl --list --online wsl --install -d Ubuntu После чего установится Ubuntu, перезагрузил, создал пользователя igor и задал простой пароль sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install mc **************************************************************************************************** Меняем временую зону Ubuntu sudo timedatectl set-timezone UTC **************************************************************************************************** Убрать звуковые щелчки при работе в Ubuntu которые появляются из-за режима энергосбережения: Отключить режим низкого энергопотребления для зуковой карты sound sudo su echo '0' > /sys/module/snd_hda_intel/parameters/power_save Фаил авто выполнения скрипта при загрузки: sudo mcedit /etc/rc.local В начале файла поставить: #!/bin/bash sudo chmod +x /etc/rc.local sudo mcedit /etc/systemd/system/rc-local.service [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target sudo systemctl enable rc-local sudo systemctl status rc-local **************************************************************************************************** Для того чтобы консоль бястро не отключалась добавить в конец файла: sudo mcedit /etc/sysctl.conf net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes = 6 Перезагрузить: sysctl -p Проверить: cat /proc/sys/net/ipv4/tcp_keepalive_time **************************************************************************************************** Обновить ядро Ubuntu на самое новое: uname -r Выдало: 4.15.0-167-generic 5.4.0-99-generic Пытаюсь поменять на 5.13.0 или 5.16.10 ищем ядро: sudo apt-cache search linux-image | more Устанавливаем ядро: sudo apt-get install linux-image-5.13.0-1029-oem sudo apt install gdebi **************************************************************************************************** Тест памяти Ubuntu: Объем оперативной памяти: free -h sudo apt install memtester Для примера запустим проверку блока ОЗУ, размером в 100 мегабайт состоящую из двух циклов: sudo memtester 100M 2 Для более тщательного тестирования памяти можно воспользоваться утилитой memtest86+ из меню загрузчика Grub. **************************************************************************************************** Если grub загрузчик установился на флешку то так можно установать на нужный диск sudo fdisk -l sudo grub-install --root-directory=/ /dev/sda В Ubuntu server при неправильном выключениии высвечивается меню grub без времени чтобы его отключить: Для поиска Windows если он исчез: sudo os-prober sudo update-grub Или так: sudo mcedit /etc/default/grub GRUB_DISABLE_OS_PROBER=true Или так: sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update sudo apt install -y boot-repair && boot-repair **************************************************************************************************** Установка и добавление себя в sudo su -c "apt-get update" su -c "apt-get -y install sudo" su -c "addgroup ваш_логин sudo" **************************************************************************************************** Установка сервиса времени и часовой пояс apt-get -y install ntp dpkg-reconfigure tzdata **************************************************************************************************** 0) Для того чтобы архивировать и извлечь каталог: tar -cvf istransit.tar /opt/www/istransit.kz tar -xvf /opt/www/istransit.tar -C /opt/www 0)Выключить комп: shutdown -h now 1)Список процессов top или лучше установить htop Монтирование образа CD mount -o loop /some.iso /mnt/point mount -o loop -t iso9660 umount DIRECTORY umount DEVICE_NAME Посмотреть точки монтирования дисков: sudo fdisk -l 3.1) Посмотреть мак адрес по адресу /etc/udev/rules.d/z25_persistent-net.rules 4)DNS сервера в ubuntu прописываються в /etc/resolv.conf (теперь в другом месте см. инет) nameserver 212.19.149.53 nameserver 212.19.149.54 5)Список репозиториев в ubuntu расположен в nano /etc/apt/sources.list apt-get update apt-get install mc apt-get remove mc Если mc не найден то добавить в репозитории nano /etc/apt/sources.list эту строку: deb http://archive.ubuntu.com/ubuntu/ jaunty universe 6)Переменные окружения export PATH=$PATH:/usr/local/bin:/usr/local/sbin alias mc='mc -c' mc 7)Отобразить переменные окружения: export 8)Настройка PPPoE соединения комманда: pppoeconf Соединятся командой: sudo pon dsl-provider Завершить соединение: sudo poff dsl-provider **************************************************************************************************** Выполнение скрипта sh Check.sh **************************************************************************************************** Символическая ссылка Symbolic ссылка на папку: ln -s /mnt/data/ftp /var/www/html/upload ********** Настраиваю прокси сервер ********** sudo mcedit /etc/environment И в заголовок пишу: http_proxy=http://192.168.1.89:8888 https_proxy=http://192.168.1.89:8888 или http_proxy=http://192.168.0.170:7777 **************************************************************************************************** Для того чтобы посмотреть размер файлов: ncdu Для определения сколько свободного места выполнить: df -h **************************************************************************************************** Чтобы вывести информацию по ОЗУ (ram) выполните команду: sudo lshw -C memory **************************************************************************************************** Установка компилятора для разработки на c++ gcc sudo apt-get update -y sudo apt-get upgrade -y sudo apt-get install perl -y sudo apt-get install build-essential Для компиляции по 32 битный Linux (В еклипсе прописать g++ -m32 а также gcc -m32 а также g++ -m32): sudo apt-get install gcc-multilib sudo apt-get install g++-multilib Для eclipse установить: sudo apt install default-jre **************************************************************************************************** Установка кросс-компилятора Cross Compilers для Raspberry Pi на Ubuntu: https://github.com/raspberrypi/tools sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf Note: if building for Pi0/1 using --with-arch=armv6 --with-float=hard --with-fpu=vfp is recommended (and matches the default flags of the toolchains included here). /home/igor/toolchain/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf **************************************************************************************************** записать информацию о расположении загрузчика системы в фаил [root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1 **************************************************************************************************** Компиляция WIFI драйвера Для того чтобы узнать версию ядра "4.15.0-23-generic": uname -r Внмание: исходники ядра должны быть той же версии что и сейчас работают в системе! Вывести информацию о USB устройствах: lsusb -v У меня выдало: Для того чтобы посмотреть что подсоединено к pci: lspci -v Minipcie Для того чтобы посмотреть всех устройств: lsdev -v И так у меня RTL8821AE пробую скачать драйвер отсюда: Загрузка и проверка модулей: lsmod **************************************************************************************************** Подключение к wifi Настраиваемрегион командой: iw reg set CN То что мы живём в китае а то 5G WIFI не работает sudo -i echo "options cfg80211 ieee80211_regdom=CN" > /etc/modprobe.d/cfg80211.conf exit sudo ifconfig wlan0 up $ sudo iwconfig wlan0 essid Node5 $ sudo dhclient -v wlan0 http://help.ubuntu.ru/wiki/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_wifi **************************************************************************************************** Активация DHCP клиента: **************************************************************************************************** Создание нового пользователя с домашней дерикторией: sudo useradd igor -g www-data Задаём пароль: sudo passwd igor Добавляем пользователя в дополнительную группу (группы через запятую): sudo usermod -a -G www-data administrator sudo usermod -a -G tomcat administrator sudo usermod -a -G sudo igor Разрешить доступ к последовательному порту Для этого помещаем себя в группу dialout sudo usermod -a -G dialout igor Для проверки настроек: id igor groups igor Назначить sudo привилегии пользователю: mcedit /etc/sudoers igor ALL=(ALL:ALL) ALL Рекурсивно назначить вледельца папки: sudo chown tomcat:tomcat -R /opt/tomcat/geoserver/ROOT/data sudo chown tomcat:tomcat ~/CCALM.war sudo chown tomcat:tomcat ~/SoilScience.war sudo chown : -R /.blabla Выставляем права на папку: sudo chmod -R 774 /var/www/ Для удаления пользователя c домашней и mail директорией выполнить: userdel -r igor **************************************************************************************************** Монтирование USB Flash mount -t vfat /dev/sda1 /flash umount /flash Автомонтирование USB при запуске системы http://www.fight.org.ua/hdddrives/linux_disk_mount_fstab.html http://help.ubuntu.ru/wiki/fstab: Выполнить команду: sudo blkid Найти строку: /dev/sdb1: LABEL="IGOR_8GB" UUID="94D2-1374" TYPE="vfat" /dev/sdb1: LABEL="SSD_2_5" UUID="14A3BBD52CB2F1C3" TYPE="ntfs" PARTUUID="56c83443-01" /dev/sdb5: UUID="17C59CBD70BFFBA5" TYPE="ntfs" PARTUUID="f9aec734-05" Добавить в sudo mcedit /etc/fstab следующее: UUID=94D2-1374 /media/usb vfat rw,auto,user,exec,async 0 0 UUID=7086E7317C4E478E /mnt/O_DRIVE ntfs-3g defaults 0 0 /dev/sda3 /mnt/ssd ntfs-3g rw,auto,user,exec,async 0 0 /dev/sda3 /mnt/windows ntfs-3g defaults 0 0 Монтирование сетевой файловой системы: mount -t cifs //192.168.0.11/o /mnt/smb -o username=igor,password=1245,iocharset=utf8,codepage=cp866 Для автоматического монтирования в /etc/fstab записать: //192.168.0.11/o /mnt/smb cifs username=igor,password=1245,rw,auto,noexec,iocharset=utf8,codepage=cp866,uid=1000,gid=100 0 0 **************************************************************************************************** Перенос системы на другой жеский диск (также можно делать недельные бакапы системы, на атоме установленна) Создаём копию системы на флешку: sudo tar cvpzf /media/usb/backup.tgz --exclude=/var/www --exclude=/etc/fstab --exclude=/boot/grub/grub.cfg --exclude=/mnt --exclude=/media --exclude=/proc --exclude=/lost+found --exclude=/sys / Потом извлекаем на новую установленную систему командой: sudo tar xvpfz /backup.tgz -C / Можно также скопировав с диска на диск без синхронизации: **************************************************************************************************** Измененние раздела без перезагрузки сервера после увеличения размера жеского диска (на основе: https://serverspace.ru/support/help/uvelichenie-diskovogo-prostranstva-ubuntu-18/) ТОЛЬКО ДЛЯ РАЗДЕЛОВ LVM Посмотреть список дисков: df -h lsblk Выполняем сканирование конфигурации и передачу данных ядру ОС: echo 1 > /sys/block/sda/device/rescan Запускаем утилиту: parted Выводим таблицу разделов: p Результат такой (для запоминания): Model: VMware Virtual disk (scsi) Disk /dev/sda: 537GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 215GB 215GB ext4 Запускаем процедуру слияния: (parted) resizepart 2 Где «2» означает номер тома, на котором происходит изменение дискового пространства, вбиваю нужный размер: 537GB Потом: quit Информируем OC об изменениях: pvresize /dev/sda2 Меняем значение тома командой: lvextend -r -l +100%FREE /dev/mapper/vgroup1-root Проверяем результат: df –h ---------------------------------------- Вариант для не виртуальной файловой системы (https://habr.com/ru/post/450444/): Проверяем размер: sudo fdisk -l Выдало: Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 955FD603-437A-4A80-B5F6-90F1C2CCD1D0 Device Start End Sectors Size Type /dev/sda1 2048 4095 2048 1M BIOS boot /dev/sda2 4096 419921875 419917780 200,2G Linux filesystem Удаляем раздел и создаём новый командами: sudo fdisk /dev/sda p d n (Метку файловой системы не удаляем) Обновляем: sudo partprobe /dev/sda Перезаписываем метаданные файловой системы: sudo resize2fs /dev/sda2 Проверяем: sudo fdisk -l **************************************************************************************************** Добавление нового пользователя см. cat /etc/passwd и cat /etc/group sudo useradd tester -d /var/www/www.dirt.kz -g 33 -s /usr/sbin/nologin sudo passwd tester sudo userdel tester **************************************************************************************************** Настройка rsync для резервного копирования файлов в отдельную папку http://ashep.org/2010/backup-v-linux-nastraivaem-rsync-server/#.VPrB0_mQCNY 1 й командой на флешку: rsync -rlvt --modify-window=1 --delete /var/www /media/usb Меняем редактор по умолчанию на тот который от MC: export EDITOR=mcedit Для добавления в cron для дневной синхронизации: crontab -e И добавляем строчку чтоб это происходило в 3 часа ночи: 0 3 * * * rsync -rlvt --modify-window=1 --delete /var/www /media/usb **************************************************************************************************** Настройка cron: sudo update-alternatives --config editor update-alternatives --config editor export EDITOR=mcedit Или записать в "sudo mcedit /etc/environment" строку "EDITOR=mcedit" sudo crontab -e sudo crontab -e -u www-data sudo crontab -e -u tomcat В файле прописать: */5 * * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/cashier/work.php' */2 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/globalstar.php' 10 0 * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/sitemap.php' 0 * * * * wget -O /dev/null -q 'http://www.bigfoottrade.kz/shop/tree.php?fn=0&name=test_tree.js' */30 * * * * /usr/bin/php5 /var/www/update_ip.php */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/work.php' 0 3 * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/get/list.php' */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/mail.php' */1 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/iridium.php' */2 * * * * wget -O /dev/null -q 'http://uspdmanager.istt.kz/engine/globalstar.php' 0 6 * * * wget -O /dev/null -q 'http://locust.kz/DownloadWeather?forecast=000' 0 7 * * * wget -O /dev/null -q 'http://locust.kz/DownloadWeather?forecast=048' 1 1 1 * * wget -O /dev/null -q 'http://locust.kz/SendMail' 0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php' 0 1 * * * /opt/backups/backup.sh Проверяю таблицу: sudo crontab -l -u www-data **************************************************************************************************** Установка MongoDB на Ubuntu https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-18-04-ru sudo apt update sudo apt install mongodb-server sudo systemctl status mongodb **************************************************************************************************** Установка MySQL на Ubuntu 22.04 apt-get update sudo apt-get install mysql-server Удаление MySQL sudo systemctl stop mysql sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* sudo rm -rf /etc/mysql /var/lib/mysql sudo apt autoremove sudo apt autoclean Меняем пароль через SQL: sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newIg@rR0'; SELECT user,authentication_string,plugin,host FROM mysql.user; SHOW GRANTS FOR 'root'@'localhost'; Также настроить чтобы он был не регистрозависемым в файле /etc/mysql/mysql.conf.d/mysqld.cnf в секции [mysqld] добавить строку: lower_case_table_names = 1 Для возможность удаленого подключения через внешку создаём спец пользователя, это я сделал через dbForge создав там пользователя root@192.168.0.%. sudo mysql -u root -pnewIg@rR0 CREATE USER 'root'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY 'newIg@rR0'; ALTER USER 'begaikin'@'192.168.0.%' IDENTIFIED BY 'Begaikin@2'; Проверить: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%'; GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'192.168.0.%'; SHOW GRANTS FOR 'root'@'192.168.0.%'; А также для удалёного подключения закоментить параметр "bind-address = 127.0.0.1" в файле настроек mcedit /etc/mysql/mysql.conf.d/mysqld.cnf Перезагружаем MySQL: sudo service mysql restart База MySQL: db1109882_locust Логин: u1109882_root Пароль: root123456 mysqldump -uu1109882_root -proot123456 -h127.0.0.1 db1109882_locust > /root/db1109882_locust2.sql **************************************************************************************************** Установка MySQL для разработчика: sudo apt-get update sudo apt-get install libmysqld-dev **************************************************************************************************** Установка Apache и PHP (на посл версии Ubuntu php7): sudo apt-get update sudo apt-get install apache2 php sudo apt-get install php libapache2-mod-php sudo apt-get install php gettext sudo apt-get install php php-gd sudo apt-get install php php-pgsql sudo apt-get install php php-mysql sudo apt-get install php php-mysqli sudo apt-get install php-imap sudo apt-get install php-mbstring sudo apt-get install php-curl sudo apt-get install php-soap sudo apt-get install libapache2-mod-passenger #Для redmine sudo apt-get install libapache2-mod-fastcgi #Для redmine Включаем модули: sudo phpenmod imap sudo phpenmod mbstring sudo a2enmod rewrite И в sudo mcedit /etc/apache2/apache2.conf ставим AllowOverride All sudo a2enmod php8.0 sudo a2enmod ssl #Так как в последнее время делаю через haproxy то SSL в апачи не использую sudo a2enmod headers sudo a2enmod expires sudo a2enmod passenger #Для redmine sudo a2enmod fastcgi #Для redmine sudo a2dismod info #Чтобы не светить статистикой в сеть sudo a2dismod status #Чтобы не светить статистикой в сеть Также добавляем обработку раширения .xyz как .php файл. Настраиваем PHP /etc/php/8.3/apache2/php.ini: max_execution_time = 60 max_input_time = 120 short_open_tag = On display_errors = On post_max_size = 20M upload_max_filesize = 20M session.gc_maxlifetime = 14400 #Увеличиваем время жизнисесии до 4 часов Если выдаёт такое: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Настройка Apache: httpd - запустить Apache Перезапустить Apache sudo /etc/init.d/apache2 restart sudo service apache2 restart ********** Установка Composer для php ********** Скачиваю в домашнюю папку пользователя curl -sS https://getcomposer.org/installer -o composer-setup.php Выполняем загрузку и установку: sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer Потом можно будет переходить в папку с сайтом и выполнять composer require mpdf/mpdf ********** Настройка laravel под Windows php фреймворк ********** https://www.tutorialspoint.com/laravel/laravel_installation.htm После установки композера раскоментить расширение ;extension=fileinfo и выполнить команду: composer create-project laravel/laravel rigor --prefer-dist Потом можно запустить сервер зайдя в созданную папку: php artisan serve ********** Настройка https ssl для apache под Windows ********** https://apache-windows.ru/apache-ssl-переход-apache-на-https/ ********** Настройка https ssl для apache под Linux ********** Создаём ключ командой: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt На вопрос пароля написал "test!irigm" Снимаем пароль с ключа: cp server.key{,.orig} openssl rsa -in server.key.orig -out server.key rm server.key.orig Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору: sudo cp server.crt /etc/ssl/certs/ sudo cp server.key /etc/ssl/private/ sudo chmod 0600 /etc/ssl/private/geovizor_com.key Для начала необходимо активировать mod_ssl: sudo a2enmod ssl Содержание файла виртуального хоста: ServerAdmin info@geovizor.com ServerName geovizor.com ServerAlias www.geovizor.com DocumentRoot /var/www/geovizor.com DirectoryIndex index.html index.php index.xyz AddType application/x-httpd-php .php .xyz SSLEngine on SSLCertificateFile /etc/ssl/certs/geovizor_com.crt SSLCertificateChainFile /etc/ssl/certs/geovizor_com.ca-bundle SSLCertificateKeyFile /etc/ssl/private/geovizor_com.key sudo a2ensite bigfoottrade.kz.ssl.conf sudo a2ensite bigfoottrade.kz.conf sudo a2ensite zatochnik.pro.conf sudo a2ensite zatochnik.pro.ssl.conf sudo a2ensite elektronnaya-ochered.kz.conf sudo a2ensite elektronnaya-ochered.kz.conf sudo a2ensite transit.istt.kz.conf sudo a2ensite geovizor.com.ssl.conf sudo a2ensite mqtt.kz.ssl.conf sudo a2ensite stations.istt.kz.ssl.conf sudo a2ensite stations.istt.kz.conf sudo a2ensite uspdmanager.istt.kz.conf sudo a2ensite msp.istt.kz.conf sudo a2ensite mog.istt.kz.conf sudo a2ensite mqtt.kz.conf sudo a2ensite data.ccalm.org sudo a2ensite rigor.kz.conf sudo a2ensite 000-default.conf sudo a2ensite transit.istt.kz.conf sudo a2ensite aistransit.kz.conf sudo a2ensite jwt.local.conf sudo a2ensite jwt2.local.conf sudo a2ensite transit_gpti_kg.conf Посмотреть все разрешонные сайты: a2query -s sudo a2dissite bigfoottrade.kz.conf sudo a2dissite zatochnik.pro.ssl.conf sudo a2dissite zatochnik.pro.conf sudo a2dissite geovizor.com.ssl.conf sudo a2dissite transit.istt.kz.conf sudo a2dissite 000-default.conf sudo a2dissite default-ssl.conf sudo a2dissite msp.istt.kz.ssl.conf sudo a2dissite mqtt.kz.ssl.conf sudo a2dissite transit.istt.kz.conf sudo a2dissite istransit.kz.conf sudo a2dissite jwt2.local.conf sudo a2dissite jwt.local.conf http://aistransit.kz/ Для проверки файла ключа: openssl x509 -noout -modulus -in /etc/ssl/certs/geovizor_com.crt openssl x509 -noout -modulus -in /etc/ssl/private/server.key openssl pkcs7 -print_certs -in /etc/ssl/certs/geovizor_com.crt -out /etc/ssl/certs/geovizor_com.pem Проверяем настройки командой: /usr/sbin/apache2 -S ***** Настраивем виртуальный хост ***** Копируем файлик примера: sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.istt.kz.conf sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/msp.istt.kz.ssl.conf В файлике настраиваю ServerAdmin и DocumentRoot : ServerAdmin ivanov.i@istt.kz ServerName transit.istt.kz ServerAlias transit2.istt.kz DocumentRoot /var/www/transit.istt.kz ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Активируем: sudo a2ensite bigfoottrade.kz.conf sudo a2ensite bigfoottrade.kz.ssl.conf sudo a2ensite uspdmanager.istt.kz.conf sudo a2ensite uspdmanager.istt.kz.ssl.conf sudo a2ensite msp.istt.kz.ssl.conf sudo a2ensite daloradius.istt.kz.conf sudo a2ensite stations.istt.kz sudo a2ensite zatochnik.pro sudo a2ensite elektronnaya-ochered.kz.conf sudo a2ensite integration-gateway.org.conf sudo a2ensite integration-gateway.org.ssl.conf sudo a2ensite motion-engine.ru.conf sudo a2ensite motion-engine.kz.conf sudo a2ensite motion-engine.com.conf sudo a2ensite observer.kz.conf sudo a2ensite transit.istt.kz.ssl.conf sudo a2ensite transit.istt.kz.conf sudo a2ensite geovizor_local.conf Или деактивируем sudo a2dissite 000-default.conf sudo a2dissite msp.istt.kz.ssl.conf sudo a2dissite bigfoottrade.kz.conf sudo a2dissite uspdmanager.istt.kz.conf sudo a2dissite earth.kz.conf sudo a2dissite integration-gateway.org.conf sudo a2dissite observer.kz.conf Перезагружаем sudo service apache2 restart **************************************************************************************************** Настройка SSH: sudo apt-get install openssh-server Поменять порт можно в настройках: sudo mcedit /etc/ssh/sshd_config Port 2222 Для рестарта: sudo /etc/init.d/ssh stop/start/restart Для подключения через Linux: ssh administrator@192.168.0.83 -p 2222 Для винды есть PUTTY.EXE настроить кодировку на utf-8 **************************************************************************************************** Подключение к последовательному порту ttyUSB через Minicom sudo apt-get install minicom sudo minicom -s После настройки зайти так sudo minicom **************************************************************************************************** ********** Устанавливаю и настраиваю FreeRadius ********** Настройка rlm_perl для FreeRadius: http://abills.net.ua/wiki/doku.php/abills:docs:rlm_perl:ru подсказки в http://www.m-200.com/base/index.php/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA_FREERADIUS._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_3 Для того, чтобы использовать встроенный perl необходимо: 1. В файле modules/perl раскомментировать строку 'func_authorize = authorize'. 2. В файле radiusd.conf добавить: authorize { preprocess files perl } По инсткукции из http://ittraveler.org/ustanovka-i-nastrojka-radius-servera-na-ubuntu-s-veb-interfejsom/ Устанавливаем FreeRadius и пакеты sudo apt-get install freeradius sudo apt-get install freeradius-mysql sudo apt-get install freeradius-utils sudo apt-get install freeradius-perl sudo apt-get install freeradius-python Подключаемся к серверу Mysql mysql -u root -p Далее создаем базу данных radius create database radius; Назначим полные права пользователю radius grant all on radius.* to radius@localhost identified by "WP@$$w0rd"; Отключаемся от Mysql exit Импортируем таблицы в базу данных radius #mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql #mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql Для проверки добавим тестовые значения в таблицу radcheck #mysql -u root -p #mysql> use radius; #mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('sqltest', 'Password', 'testpwd'); #mysql> exit Открываем файл настроек Freeradius для MySQL расположение файла — /etc/freeradius/sql.conf Редактируем строки до такого вида: database = mysql server = "localhost" port = 3306 login = radius password = "WP@$$w0rd" radius_db = "radius" readclients = yes Далее открываем файл сайта Freeradius Расположение файла — /etc/freeradius/sites-enabled/default Приводим следующие строки к виду: Uncomment sql on authorize{} # See “Authorization Queries” in sql.conf sql ... Uncomment sql on accounting{} # See “Accounting queries” in sql.conf sql ... Uncomment sql on session{} # See “Simultaneous Use Checking Queries” in sql.conf sql ... Uncomment sql on post-auth{} # See “Authentication Logging Queries” in sql.conf sql Далее правим основной конфигурационный файл Freeradius и включаем поддержку Mysql расскоментировав строку. Расположение файла — /etc/freeradius/radiusd.conf $INCLUDE sql.conf Теперь протестируем настройки сервера. Откройте 2 ssh окна терминала. В первом окне остановим сервис Freeradius sudo service freeradius stop И запустим сервис в режиме debug sudo freeradius -X - debug mode Теперь открываем второе окно терминала и вводим запрос radtest sqltest testpwd localhost 18128 testing123 Если вывод команды такой: Sending Access-Request of id 68 to 127.0.0.1 port 1812 User-Name = "sqltest" User-Password = "testpwd" NAS-IP-Address = 127.0.1.1 NAS-Port = 18128 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=68, length=20 То все впорядке. Теперь нужно добавить Radius клиентов в файл /etc/freeradius/clients.conf Пример добавления: client 192.168.1.0/16 { secret = secretpass shortname = testclient nastype= testdevice } **************************************************************************************************** Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries: Скачал, создаю дирректорию хранения данных: O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3 O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13 Потом создать BAT файл с тем текстом что отобразится при создании каталога базы База данных создаётся не под пользователем postgres а под локальным пользователем igor **************************************************************************************************** Установка PostgreSQL 14 ubuntu 22.04 или 24.04 sudo apt-get update sudo apt-get install postgresql postgresql-contrib -y Или так если нужно установить PostGIS sudo apt-get install postgis Для удаления PostGIS в месте с зависимыми пакетами: sudo apt-get remove --auto-remove postgis sudo apt-get purge postgis Добавить русскую локаль если её нет: sudo locale-gen ru_RU sudo locale-gen ru_RU.UTF-8 sudo locale-gen kk_KZ sudo locale-gen kk_KZ.UTF-8 Проверить какая локаль по умолчанию: localectl status И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры): sudo dpkg-reconfigure locales Для задания пароля в PostgreSQL выполнить: sudo -u postgres psql \password postgres \q Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust Задать пароль: sudo -u postgres psql postgres=> SELECT usename FROM pg_user; postgres=> alter user postgres password 'PasSecrKey1'; postgres=> \q Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/ Создаём базу данных выполнив функцию: CREATE DATABASE CCALM WITH OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' CONNECTION LIMIT = -1; Файл настроек postgresql: sudo mcedit /etc/postgresql/16/main/postgresql.conf listen_addresses='*' #Разрешить подключение с внешки #Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой backslash_quote = on escape_string_warning = off standard_conforming_strings = off Чтобы воводил двоичные данные по старому изменить на: bytea_output = 'escape' Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду" Для создания нового пользователя выполнить: sudo -u postgres psql CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION; Для подключения к определённой базе данных выполнить команду: sudo -u postgres psql \list or \l: для отображения всех баз \connect zholak zholak \dt для отображения всех таблиц или написать со своим IP: host all all 2.133.238.240/24 trust Для подключения с любых IP адресов в "sudo mcedit /etc/postgresql/16/main/pg_hba.conf" прописать: host all all 0.0.0.0/0 md5 Либо с одного конкретного то: host all all 92.46.48.37/24 md5 А также поменять на listen_addresses = '*' в postgresql.conf Потом перезагрузить postgres: sudo service postgresql restart sudo /etc/init.d/postgresql stop sudo /etc/init.d/postgresql restart sudo /etc/init.d/postgresql start Проверить запущен или нет то: sudo /etc/init.d/postgresql status Посмотрель лог загрузки PostGreSQL: dmesg |grep pg Чтобы посмотреть чем занят порт выполнить команду: sudo netstat -tap | grep 5432 Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain): pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz Востановить Dump из текстового файла: psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл: /mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh #!/bin/sh pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться): su - postgres pg_restore -U -d -1 .dump pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup pg_restore -U postgres -d transit -1 /home/administrator/transit.backup pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup sudo -u postgres psql -d transit -f /tmp/transit.backup Или из архива (первоначально задать trust на 127.0.0.1) так: gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop **************************************************************************************************** Настройка отображения статистики для PostgreSQL: https://habr.com/ru/articles/488968/ SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC; SELECT * FROM pg_stat_activity SELECT * FROM pg_stat_replication SELECT * FROM pg_stat_all_tables Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/ По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU **************************************************************************************************** Установка pgagent sudo apt-get update sudo apt-get install pgagent Выполнить в консоли запрос: psql -h localhost -U postgres create extension pgagent; \q Для разрешения подключения откройте файл pg_hba.conf и замените строку на: host all all 127.0.0.1/32 md5 Можно для теста запустить pgagent с повышенным уровнем логирования: /usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk Если файла нет то пытаюсь его создать: sudo mcedit /lib/systemd/system/pgagent.service [Unit] Description=PostgreSQL PgAgent Service After=network.target [Service] Type=simple User=postgres ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1 [Install] WantedBy=multi-user.target Проверяю что сервис был запущен: sudo systemctl daemon-reload sudo systemctl enable pgagent sudo service pgagent start sudo systemctl status pgagent Для проверки пробуем подключиться к базе данных sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres \q Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться: sudo -u postgres touch /var/lib/postgresql/.pgpass sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass sudo -u postgres mcedit /var/lib/postgresql/.pgpass И прописать в него: 127.0.0.1:5432:postgres:postgres:PasSecrKey1 Где используется такой формат: hostname:port:database:username:password Затем: sudo systemctl enable pgagent sudo service pgagent start sudo service pgagent status Посмотреть логи: sudo journalctl -u pgagent **************************************************************************************************** Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт: **************************************************************************************************** Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move **************************************************************************************************** Установка PostGIS на PostgreSQL выше 9.0 версии: sudo apt-get install postgis postgresql-9.3-postgis-2.1 Для 10й версии: sudo apt install postgresql-10-postgis-2.4 sudo apt install postgresql-10-postgis-scripts Для 12й версии: sudo apt install postgresql-12-postgis-2.4 Создать базу данных и выполнть на ней следующие команды: -- Enable PostGIS (includes raster) CREATE EXTENSION postgis; -- Enable Topology CREATE EXTENSION postgis_topology; -- fuzzy matching needed for Tiger CREATE EXTENSION fuzzystrmatch; -- rule based standardizer CREATE EXTENSION address_standardizer; -- example rule data set CREATE EXTENSION address_standardizer_data_us; -- Enable US Tiger Geocoder CREATE EXTENSION postgis_tiger_geocoder; У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17 Аказывается расширение кудато делось установил: sudo apt-get install postgresql-9.5-postgis-2.2 **************************************************************************************************** Для добавления TOTP авторизации в Postgresql выполнить: CREATE EXTENSION otp; **************************************************************************************************** Проверка паролей Gcredcheck и многое другое для PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/ Ищем есть ли: apt search credcheck Устанавливаем: sudo apt update sudo apt install postgresql-16-credcheck Либо из репозиториев: sudo apt-get install postgresql-server-dev-16 # Для PostgreSQL 16 sudo apt-get install build-essential git clone https://github.com/2ndQuadrant/credcheck.git cd credcheck make sudo make install Теперь можно исползовать расширение на базе postgres: CREATE EXTENSION credcheck; Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck: -- Configure credential policies to enforce username and password standards and reload configuration files ALTER SYSTEM SET credcheck.username_min_length = 4; ALTER SYSTEM SET credcheck.password_min_length = 8; ALTER SYSTEM SET credcheck.password_min_special = 1; SELECT pg_reload_conf(); -- Attempt to create a user for a new park ranger, which does not meet the credential policies CREATE USER ranger_ WITH PASSWORD 'forest'; ERROR: password length should match the configured credcheck.password_min_length Для пароля установить: ALTER SYSTEM SET credcheck.password_expiration_days = 90; SELECT pg_reload_conf(); Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора): **************************************************************************************************** sudo apt-get install libpq-dev libpq-fe Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev apt update **************************************************************************************************** Установка phpPgAdmin через репозиторий: sudo apt-get install phppgadmin Можно открыть так: http://localhost/phppgadmin Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all Чтоб можно было залогинется под пользователем postgres меняем в: /etc/phppgadmin/config.inc.php extra_login_security в false Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost'; Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php". **************************************************************************************************** Установка pgAdmin4 в Linux Mint 20.04 (inxi -S) Проверить версию линукса: cat /etc/os-release у меня выдало: NAME="Linux Mint" VERSION="20.3 (Una)" Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/ curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' sudo apt install pgadmin4 И не запустился сервер оболочка пытается стартануть а сервер нет... sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' sudo apt install pgadmin4 Тоже не заработал Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/ **************************************************************************************************** Балансировщик назрузки и потоковая репликация: Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью https://ritorika.com.ua/dokument/6/pgpool-chto-jeto **************************************************************************************************** Мониторинг запросов postgresql **************************************************************************************************** Проверить версию OpenSSL: openssl version -v Устанавливаю из исходников: wget https://www.openssl.org/source/openssl-3.0.1.tar.gz tar xzvf openssl-3.0.1.tar.gz cd openssl-3.0.1 ./config make sudo make install ln -s libssl.so.3 libssl.so sudo ldconfig openssl version -a Если выдало что не можжет найти: openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or director Для этого добавить путь к каталогу библиотек: sudo mcedit /etc/ld.so.conf.d/libc.conf и вставить: /usr/local/lib64 и запустить sudo ldconfig Также нужно добавить путь при компиляции: sudo export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig Проверить путь: pkg-config --cflags openssl pkg-config --variable pc_path pkg-config Не знал как указать путь на /usr/local/lib64/pkgconfig поэтому скопировал в /usr/local/lib/pkgconfig Если нужно установить OpenSSL для разработчика из репозитория (но там старая нужна > 3.0): apt-get update sudo apt-get install libssl-dev **************************************************************************************************** Установить ProFTPD для доступа через FTPS с сохранением пользователей в PostgreSQL по подсказки нейросети sudo apt-get update sudo apt-get install proftpd-basic proftpd-mod-pgsql proftpd-mod-crypto postgresql postgresql-contrib openssl Создание сертификата TLS: sudo mkdir /etc/proftpd/ssl sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/proftpd/ssl/proftpd.key -out /etc/proftpd/ssl/proftpd.crt Включаем модуль в: sudo nano /etc/proftpd/modules.conf Раскоментив строку: LoadModule mod_tls.c Настройка ProFTPD для использования TLS: sudo mcedit /etc/proftpd/tls.conf Добавьте или измените следующие строки: TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1.2 TLSRSACertificateFile /etc/proftpd/ssl/proftpd.crt TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key TLSOptions NoCertRequest TLSVerifyClient off TLSRequired on TLSCipherSuite HIGH:MEDIUM:+TLSv1:!SSLv2:!SSLv3 Включение TLS в основной конфигурации ProFTPD: sudo mcedit /etc/proftpd/proftpd.conf Добавьте или измените следующие строки: Include /etc/proftpd/tls.conf Создаём и меняем базу данных CREATE DATABASE ftpusers; CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(30) NOT NULL UNIQUE, password VARCHAR(128) NOT NULL, uid INT NOT NULL, gid INT NOT NULL, homedir VARCHAR(255) NOT NULL, shell VARCHAR(255) NOT NULL ); INSERT INTO users (name, password, uid, gid, homedir, shell) VALUES ('', MD5(''), 1001, 1001, '/home/', '/bin/false'); INSERT INTO users (name, password, uid, gid, homedir, shell) VALUES ('administrator', MD5('administrator'), 1001, 1001, '/home/administrator', '/bin/false'); CREATE USER proftpd WITH PASSWORD 'ReULkD8M'; GRANT ALL PRIVILEGES ON DATABASE ftpusers TO proftpd; Включаем модуль в: sudo nano /etc/proftpd/modules.conf Раскоментив строку: LoadModule mod_sql.c LoadModule mod_sql_postgres.c LoadModule mod_sql_passwd.c Редактируем: sudo nano /etc/proftpd/pgsql.conf Настройка ProFTPD для использования PostgreSQL: sudo mcedit /etc/proftpd/pgsql.conf Вставить следующий код: SQLEngine on SQLBackend pgsql SQLAuthenticate users SQLConnectInfo ftpusers@10.101.1.6:5432 proftpd ReULkD8M SQLUserInfo users name password uid gid homedir shell # Логирование SQL-запросов SQLLogFile /var/log/proftpd/sql.log SQLLog ALL # Указание на использование открытых паролей SQLAuthTypes OpenPlaintext Добавляем ссылку на созданную настройку: sudo nano /etc/proftpd/proftpd.conf Добавилв следующее содержимое: Include /etc/proftpd/pgsql.conf Теперь можно перезапустить proftpd: sudo systemctl restart proftpd Проверяем что пользователи успешно считались из базы даныз командой: sudo mcedit -f /var/log/proftpd/sql.log **************************************************************************************************** Установить ProFTPD http://sys-admin.kz/os/nix/539-centod-install-proftpd.html для доступа через FTPS Настраиваем для пользователя www-data sudo apt-get install proftpd-basic openssl Проверить какие модули установленны: proftpd -vv sudo apt-get remove --purge proftpd-basic В настройках mcedit /etc/proftpd/proftpd.conf изменить: UseIPv6 off DefaultRoot ~ ServerIdent on "FTP Server ready." RequireValidShell off AuthUserFile /etc/proftpd/ftpd.passwd Для создания нового виртуального пользователя "tester" "firsttester" в файле выполнить комманду (uid и gid должны быть как у пользователя www-data смотри: cat /etc/passwd и cat /etc/group) sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=tester --uid=33 --gid=33 --home=/var/www/www.dirt.kz --shell=/bin/false sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpzhol --uid=33 --gid=33 --home=/mnt/ssd/ftp --shell=/bin/false sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=zatochnik --uid=33 --gid=33 --home=/var/www/www.zatochnik.pro --shell=/bin/false sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=evak --uid=33 --gid=33 --home=/var/www/evak --shell=/bin/false sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=apk --uid=33 --gid=33 --home=/var/www/istransit.kz/apk --shell=/bin/false sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rebezov.a --uid=33 --gid=33 --home=/var/www/test2.istransit.kz --shell=/bin/false sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rebezov.a --uid=33 --gid=33 --home=/opt/www/istransit.kz --shell=/bin/false Задал пароль для apk пользователя: vooOtKBb7bckcNh Задал пароль для rebezov.a : BU39kb2 задал пароль: zoto!23+ Назначить права на файл: sudo chown proftpd:nogroup /etc/proftpd/ftpd.passwd Сменить пароль: ftpasswd --passwd --name=tester --change-password Перезапустить: /etc/init.d/proftpd restart Задать права на папку: sudo chown -R 33:33 /var/www Задать права на папку: sudo chown -R 33:33 /opt/www ****************************************************** Для настройки SSL для proftpd Выполнить в консоли: Включаем модуль в: sudo mcedit /etc/proftpd/modules.conf Раскоментив строку: LoadModule mod_tls.c Проверить какие модули установленны, если нет tls то дальше не выполнять: proftpd -vv sudo mkdir /etc/proftpd/ssl sudo openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem sudo chown -R proftpd:nogroup /etc/proftpd/ssl Потом в /etc/proftpd/proftpd.conf раскоментируем строку Include /etc/proftpd/tls.conf И откоректируем этот файл так: TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSv1 TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem TLSOptions NoCertRequest TLSVerifyClient off TLSRequired on Перезапустить: /etc/init.d/proftpd restart **************************************************************************************************** На Ubuntu включить файрвол брандмауэр firewall: http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/firewall Желательно сменить порт для ssh допустим на 2222 sudo ufw allow ssh sudo ufw enable sudo ufw allow 80/tcp sudo ufw allow 8080/tcp sudo ufw allow 443/tcp sudo ufw allow 10050/tcp sudo ufw allow 50000:50010/tcp sudo ufw allow 5432/tcp sudo ufw allow 3219/tcp sudo ufw allow 3221/tcp Эти настройки были до переустановки сервера 443/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 10000/tcp ALLOW 192.168.0.0/24 3306/tcp ALLOW 192.168.0.0/24 10050/tcp ALLOW 192.168.0.0/24 10051/tcp ALLOW 192.168.0.0/24 2222/tcp ALLOW Anywhere 8080/tcp ALLOW Anywhere 5432/tcp ALLOW Anywhere 1812/udp ALLOW Anywhere 1813/udp ALLOW Anywhere 3799/udp ALLOW Anywhere Эти порты для терминалов: 3211/tcp ALLOW Anywhere 3212/tcp ALLOW Anywhere 3213/tcp ALLOW Anywhere 3214/tcp ALLOW Anywhere 3215/tcp ALLOW Anywhere 3216/tcp ALLOW Anywhere 3217/tcp ALLOW Anywhere 3218/tcp ALLOW Anywhere 3219/tcp ALLOW Anywhere 3220/tcp ALLOW Anywhere 3221/tcp ALLOW Anywhere Для freeredius: sudo ufw allow 1812/udp sudo ufw allow 1813/udp sudo ufw allow 3799/udp sudo ufw deny ftps sudo ufw delete deny 80/tcp sudo ufw allow from 192.168.0.89 to any port 3306 sudo ufw allow from 192.168.0.0/24 to any port 2222 proto tcp sudo ufw delete from 192.168.0.0/24 to any port 5432 proto tcp Для отключения: sudo ufw disable Для получения списка включнных sudo ufw status **************************************************************************************************** https://pro-gram.ru/bridge-utils-ubuntu-server-18-04.html Устанавливаю ПО для сетевого моста: sudo apt install bridge-utils Смотрим интерфейсы: ifconfig -a Открываю: sudo nano /etc/netplan/50-cloud-init.yaml Файлик для жолака есть в папке "Заливка" **************************************************************************************************** Отключить IP v6: http://www.linuxrussia.com/2013/05/disable-ipv6-ubuntu.html **************************************************************************************************** Настройка почты на POSTFIX(агент передачи почты) И DOVECOT на основе https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/ и https://www.youtube.com/watch?v=_pbH7GsVTrw&t=649s и https://www.youtube.com/watch?v=VptKRBVeCMo ********** Устанавливаю Postfixadmin ********** Для начала создаю базу в PostgreSQL с базой mail и пользователем mailreader и паролем major!reader1 cd /var/www/html sudo wget https://yer.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz sudo tar xzvf "PostfixAdmin 3.3.8.tar.gz" Создаю временный каталог в /var/www/html/PostfixAdmin/templates_c правлю способ подключения к базе: sudo mcedit /srv/http/PostfixAdmin/config.inc.php На это: $CONF['configured'] = true; $CONF['database_type'] = 'pgsql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'mailreader'; $CONF['database_password'] = 'major!reader1'; $CONF['database_name'] = 'mail'; $CONF['emailcheck_resolve_domain'] = 'NO'; Также нужно поднастроить апачи добавив следующтй код в: sudo mcedit /etc/apache2/apache2.conf ниже того что указывает на Alias /PostfixAdmin/ "/var/www/html/PostfixAdmin/public/" Options FollowSymLinks AllowOverride None Allow from all Order allow,deny Перезагружаю: systemctl restart apache2.service На последок: sudo chown www-data:www-data -R /var/www/ sudo chown www-data:www-data -R /opt/app_api_mobile_v2/mobile_v2 Теперь можно открывать сайт по IP: http://77.240.38.108/PostfixAdmin/setup.php Просит задать пароль, задал такой: 11qazxsw22 Результат генерации: $CONF['setup_password'] = '$2y$10$ySo40K0pOn0Q5jLcBoK1yua5JaGXI.NIzTmUVBn1dreTaP2RkZ2My'; И добавляем эту стору в: sudo mcedit /srv/http/PostfixAdmin/config.inc.php Потом обновляем страницу. Добавляем администратора введя пароль 11qazxsw22 емайл в качестве логина irigm@mail.ru и пароль: 33edcvfr44 Можно взглянуть базу там должны создаться таблицы Теперь осталось пойти на Postfixadmin, завести сначала почтовый домен, потом ящик и протестировать нашу почтовую систему, например, с помощью Thunderbird. Отправляем письма себе, другому пользователю в нашей системе. Потом пробуем послать себе письма с Gmail, Yandex, Mail.ru и наблюдаем за поведением системы, изучая логи. Основная настройка почты завершена. Теперь необходимо настроить DKIM, SPF, чтобы другие почтовые системы воспринимали нас как доверенных отправителей. Но об этом я расскажу в другом посте. ********** Устанавливаю Postfix ********** sudo apt-get update sudo apt install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql mailutils postgresql Ссохраняю оригинальный конфигурационный файл: cp /etc/postfix/main.cf /etc/postfix/main.cf.orig Конфигурирую: sudo dpkg-reconfigure postfix Настраиваю так: General type of mail configuration?: Internet Site System mail name: example.com (не mail.example.com) Root and postmaster mail recipient: имя пользователя основной учетной записи Linux (в наших примерах sammy) Other destinations to accept mail for: $myhostname, example.com, mail.example.com, localhost.example.com, localhost Force synchronous updates on mail queue?: No Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 Mailbox size limit: 0 Local address extension character: + Internet protocols to use: all Можно взглянуть на настройки так: sudo mcedit /etc/postfix/main.cf Через pgAdmin создаю нового пользователя mailreader с паролем major!reader1 CREATE DATABASE mail WITH OWNER mailreader; Добавляю: sudo mc edit /etc/postgresql/12/main/pg_hba.conf: local postfix postfix md5 Перезагружаю базу данных: service postgresql reload Создаём файл для обращения к базе с алиасами: sudo mcedit /etc/postfix/pgsql_virtual_alias_maps.cf https://www.alex-math.ru/administrirovaniye/ustanovka-postfix-dovecot-posfixadmin-na-ubuntu-20-04/ user = mailreader password = major!reader1 hosts = localhost dbname = mail query = SELECT goto FROM alias WHERE address='%s' AND active = '1' Создаём файл для получения информации по виртуальным доменам: sudo mcedit /etc/postfix/pgsql_virtual_domains_maps.cf user = mailreader password = major!reader1 hosts = localhost dbname = mail query = SELECT domain FROM domain WHERE domain='%u' Создаём файл для получения информации о почтовых ящиках: sudo mcedit /etc/postfix/pgsql_virtual_mailbox_maps.cf user = mailreader password = major!reader1 hosts = localhost dbname = mail query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1' Прописываем ранее созданные файлы в: sudo mcedit /etc/postfix/main.cf добавив строчки: virtual_mailbox_base = /home/mail virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf virtual_minimum_uid = 1024 virtual_uid_maps = static:1024 virtual_gid_maps = static:1024 virtual_transport = dovecot dovecot_destination_recipient_limit = 1 Настройки безопасного соединения (также просто вставил в конец файла): smtpd_sasl_auth_enable = yes smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_tls_cert_file = /etc/ssl/certs/bigfoottrade_kz.crt smtpd_tls_key_file = /etc/ssl/private/bigfoottrade_kz.key smtpd_tls_security_level = encrypt Похоже опции что ниже устарели: smtpd_use_tls = yes smtp_use_tls = yes smtp_tls_security_level = encrypt smtp_enforce_tls=yes smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtp_tls_protocols = !SSLv2, !SSLv3 smtpd_tls_protocols = !SSLv2, !SSLv3 tls_preempt_cipherlist = yes smtpd_tls_mandatory_ciphers = high tls_high_cipherlist = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ADH-AES256-GCM-SHA384:ADH-AES256-SHA256:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ADH-AES128-GCM-SHA256:ADH-AES128-SHA256:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:NULL-SHA256 smtpd_tls_auth_only = yes smtpd_helo_required = yes smtp_tls_security_level = may smtp_tls_ciphers = export smtp_tls_loglevel = 1 smtp_tls_CApath = /etc/ssl/certs smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache Снимаем комментарии со следующих строк, или дописываем их при необходимости: sudo mcedit /etc/postfix/master.cf (просто добавил в конец файла) submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=may -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=/var/spool/postfix/private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient} Проверяю на наличие ошибок: sudo postfix check В конфигурационном файле прописывается список дорменов которых обслуживает данный агент доставки. sudo mcedit /etc/postfix/main.cf Примерно таокое: mydestination = $myhostname, your_domain, localhost.com, , localhost Перезапускаем: sudo systemctl restart postfix ********** Настройка dovecot the Secure IMAP server ********** Теперь устанавливаю и настраиваю Dovecot: sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd Создаю пользователя и каталог sudo adduser --system --no-create-home --uid 1024 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail mkdir /home/mail chown vmail:vmail /home/mail chmod 700 /home/mail Смотрим что мы создали: groups vmail Настраиваем способ хранения сообщений: sudo mcedit /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/mail/%d/%u/ Настраиваем слушателя аутентификации: sudo mcedit /etc/dovecot/conf.d/10-master.conf service auth { unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } } Настраиваем аутентификацию в Dovecot: sudo mcedit /etc/dovecot/conf.d/10-auth.conf Комментируем одну строку, снимаем комментарий с другой. #!include auth-system.conf.ext !include auth-sql.conf.ext Настраиваем шифрование Dovecot: sudo mcedit /etc/dovecot/conf.d/10-ssl.conf ssl = required ssl_cert = Способы оповещений -> Создать способ оповещения После того как создали в настройках пользователя присваиваем оповещение. Потом активируем действия в "Настройка -> действия" Перезапускаем sudo service zabbix-server restart **************************************************************************************************** Установка TomCat на Ubuntu 23.04 по руководству из https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804 Обновляем пакеты: sudo apt-get update Устанавливаем Java Development Kit 8 (не ниже 8й версии) (так старая установиться: sudo apt-get install default-jdk) sudo apt install openjdk-21-jdk openjdk-21-jre java -version Создаём группу для томкат пользователя: sudo groupadd tomcat Создаём пользователя: sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat Скачиваю tomcat: cd /tmp curl -O https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz Извлекаю tomcat: sudo mkdir /opt/tomcat sudo tar xzvf apache-tomcat-10*.tar.gz -C /opt/tomcat --strip-components=1 Обновляю владельца папки: cd /opt/tomcat sudo chown tomcat:tomcat -R /opt/tomcat sudo chgrp -R tomcat /opt/tomcat sudo chmod -R g+r conf sudo chmod g+x conf sudo chown -R tomcat webapps/ work/ temp/ logs/ Указываем где находится java: sudo update-java-alternatives -l Выдаст: /usr/lib/jvm/java-1.21.0-openjdk-amd64 sudo mcedit /etc/environment Записать: JAVA_HOME="/usr/lib/jvm/java-1.21.0-openjdk-amd64" echo $JAVA_HOME Пропишу на всяк случай и $CATALINA_HOME (не обязательно) sudo mcedit /etc/environment Записать: CATALINA_HOME="/opt/tomcat" echo $CATALINA_HOME Создаём сервис для автозапуска в Ubuntu 16: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04): sudo mcedit /etc/systemd/system/tomcat.service И записываем в него следующее содержимое: [Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/java-1.21.0-openjdk-amd64 Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh User=tomcat Group=tomcat UMask=0007 RestartSec=10 Restart=always [Install] WantedBy=multi-user.target Затем: sudo systemctl daemon-reload sudo systemctl start tomcat sudo systemctl status tomcat Для автозапуска сервиса томката выполнить команду: sudo systemctl enable tomcat Разрешаем порт в фаерволе: sudo ufw allow 8080 Для использования менеджера веб. приложений томката настраиваем пользователя: sudo mcedit /opt/tomcat/conf/tomcat-users.xml В этот файл добавить роли в раздел ... запихнуть: Также закоментить содержимое тега Context в sudo mcedit $CATALINA_HOME/webapps/manager/META-INF/context.xml см.: http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Configuring_Manager_Application_Access Для того чтобы поменять порт на 80 нужно в: sudo mcedit /opt/tomcat/conf/server.xml Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: sudo apt-get install authbind sudo touch /etc/authbind/byport/80 sudo chmod 500 /etc/authbind/byport/80 sudo chown tomcat /etc/authbind/byport/80 Создать файл $CATALINA_HOME/bin/setenv.sh и добавить строку: CATALINA_OPTS="-Djava.net.preferIPv4Stack=true" AUTHBIND=yes Также заменить в $CATALINA_HOME/bin/startup.sh заменить: exec "$PRGDIR"/"$EXECUTABLE" start "$@" на exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@" Так как размер WAR архива может быть большим чем 52428800 байт то в файле sudo mcedit /opt/tomcat/webapps/manager/WEB-INF/web.xml увеличиваем параметр "max-file-size" до 100000000 байт. Перезагружаю томкат: sudo service tomcat restart Останавливаю томкат: sudo service tomcat stop Теперь можно запускать WEB интерфейс и деплоить проект: http://server_IP_address:8080 **************************************************************************************************** Для копирования библиотек запустить: mvn dependency:copy-dependencies -DoutputDirectory=${project.build.directory}/libs Потом эти библиотеки хранить рядом с jar Скомпилировать в "IntelliJ IDEA -> Maven -> package" создастца TransitToRabbitMQ-1.0-SNAPSHOT.jar Используем команду "-cp" а не "-jar" так как в манифесте нет описания главного класса: /usr/bin/java -jar /opt/TransitToRabbitMQ.jar /usr/bin/java -cp /opt/TransitToRabbitMQ.jar kz.istt.app.Forwarding Для создания сервиса для запуска .jar необходимо создать файл Transit_RabbitMQ_Forwarding.service: [Unit] Description=Forwarding RabbitMQ DATA After=syslog.target [Service] WorkingDirectory=/opt/ ExecStart=/usr/bin/java -cp /opt/TransitToRabbitMQ.jar kz.istt.app.Forwarding User=tomcat Group=tomcat UMask=0007 RestartSec=120 Restart=always SuccessExitStatus=143 [Install] WantedBy=multi-user.target [Journal] SystemMaxUse=64M Устанавливаем владельца: sudo chown tomcat:tomcat -R /opt/ Смотрим что выдаёт: sudo journalctl -e -u Transit_RabbitMQ_Forwarding **************************************************************************************************** Установка GeoServer на Tomcat Скачиваем WAR с сайта http://geoserver.org/release/stable/ cd /tmp curl -O https://nav.dl.sourceforge.net/project/geoserver/GeoServer/2.23.2/geoserver-2.23.2-war.zip Извлекаю tomcat: sudo mkdir /opt/tomcat/geoserver sudo apt-get install unzip sudo unzip geoserver-2*war.zip mv geoserver.war ROOT.war cp ROOT.war /opt/tomcat/geoserver sudo chown tomcat:tomcat -R /opt/tomcat/geoserver Добавляем в sudo mcedit /opt/tomcat/conf/server.xml перед geoserver2.ccalm.org Стандартные логин и пароль администратора admin и geoserver (поменял на geoserver1) Мастер пароль поменял с geoserver на geoserver1 http://uspdmanager.istt.kz:8080/geoserver Разрешаем запись для генерации тайлов: При переносе на другой сервер скопировать папку /opt/tomcat/webapps/geoserver/data Расширения такие как gs-web-wps-2.11.0.jar закинуть в папку: /opt/tomcat/webapps/geoserver/WEB-INF/lib Если перенаправлять через HAProxy с HTTPS на HTTTP то GeoServer будет глючить так как на строне клиента пытается подстраиваться под протокол, поэтому нужно включать HTTPS и на Tomcat! **************************************************************************************************** ***** Настройка https ssl для tomcat ***** Купил SSL сертификат в www.gogetssl.com сгенерировав на сайте SHA-256 CSR and Private Key. Подтвердил владение, выслали 2 файла в архиве: integration-gateway_org.ca-bundle, integration-gateway_org.crt Переписал Private ключ в текстовый файл locust_kz.key Также прислали сертификаты на почту: "Sectigo RSA Domain Validation Secure Server CA", "USERTrust RSA Certification Authority", "AAA Certificate Services" и использую CA сертификат. Либо при помощи самоподписанного сертификата, генерим с алиасом geoserver и паролем qw0qw1qw2: keytool -genkey -keyalg RSA -alias geoserver -keystore /opt/tomcat/conf/ssl/keystore.jks -storepass qw0qw1qw2 -validity 3650 -keysize 2048 Проверяем что ключь создан корректно: keytool -list -keystore /opt/tomcat/conf/ssl/keystore.jks -storepass qw0qw1qw2 Преобразую в хранилище pkcs12: openssl pkcs12 -export -in [my_certificate.crt] -inkey [my_key.key] -out [keystore.p12] -name [new_alias] -CAfile [my_ca_bundle.crt] -caname root openssl pkcs12 -export -in integration-gateway_org.crt -inkey integration-gateway_org.key -out keystore.p12 -name new_alias -CAfile integration-gateway_org.ca-bundle -caname root openssl pkcs12 -export -in locust_kz.crt -inkey locust_kz.key -out keystore.p12 -name new_alias -CAfile locust_kz.ca-bundle -caname root openssl pkcs12 -export -in ccalm_org.crt -inkey ccalm_org.key -out ccalm_org.p12 -name ccalm_org -CAfile ccalm_org.ca-bundle -caname root Задал пароль: qw0qw1qw2 для хранилища ключей Преобразую в хранилище java: keytool -importkeystore -deststorepass [new_keystore_pass] -destkeypass [new_key_pass] -destkeystore [keystore.jks] -srckeystore [keystore.p12] -srcstoretype PKCS12 -srcstorepass [pass_used_in_p12_keystore] -alias [alias_used_in_p12_keystore] keytool -importkeystore -deststorepass qw0qw1qw2 -destkeypass qw0qw1qw2 -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass qw0qw1qw2 -alias new_alias keytool -importkeystore -deststorepass qw0qw1qw2 -destkeypass qw0qw1qw2 -destkeystore ccalm_org.jks -srckeystore ccalm_org.p12 -srcstoretype PKCS12 -srcstorepass qw0qw1qw2 -alias ccalm_org Импорт ключа в хранилище (теперь в нём 2 ключа для locust.kz и для ccalm.org): keytool -importkeystore -srckeystore ccalm_org.p12 -destkeystore keystore.jks -srcstoretype pkcs12 -alias ccalm_org keytool -list -v -keystore keystore.jks Настроить томкат, добавив текст который ниже в: sudo mcedit /opt/tomcat/conf/server.xml Также при помощи authbind разрешить не-root программе быть назначенными младшим портам: sudo apt-get install authbind sudo touch /etc/authbind/byport/443 sudo chmod 500 /etc/authbind/byport/443 sudo chown tomcat /etc/authbind/byport/443 **************************************************************************************************** Для создания сервиса создайте service-файл /etc/systemd/system/zholak_gps.service (замените poc-smsc на имя вашего сервиса): sudo touch /etc/systemd/system/PServerARNAVI.service sudo chmod 664 /etc/systemd/system/PServerARNAVI.service sudo mcedit /etc/systemd/system/PServerARNAVI.service И пишем в этот файл следующий текст: [Unit] Description=zholak_ftp [Service] WorkingDirectory=/var/opt/servers/arnavi/ ExecStart=/var/opt/servers/arnavi/PServerARNAVI PServerARNAVI.ini RestartSec=10 Restart=always [Install] WantedBy=multi-user.target Для перепрочтения настроек выполнить: sudo systemctl daemon-reload Затем можно выполнять команды: sudo systemctl start geoserver2 sudo systemctl start SServerWialonIPS_transit sudo systemctl start PServerWialonIPS_transit_u sudo systemctl start PServerWialonIPS sudo systemctl start SServerARNAVI sudo systemctl start SServerWialonIPS sudo systemctl start PServerARNAVI sudo systemctl start PServerEGTS_transit sudo systemctl start PServerARNAVI_STATIONS_TEST sudo systemctl start SServerTKSTAR_STATIONS sudo systemctl start PServerTKSTAR_STATIONS sudo systemctl start SServerMQTT sudo systemctl start PServerMQTT sudo systemctl start SServerEGTS_transit sudo systemctl start SServerEGTS_transit_3241 sudo systemctl start Transit_RabbitMQ_Forwarding sudo systemctl start Transit_RabbitMQ_Forwarding_RUS sudo systemctl start Transit_RabbitMQ_Read sudo systemctl start SServerMT300_msp sudo systemctl start PServerMT300_msp sudo systemctl start SServerTeltonika sudo systemctl start PServerTeltonika sudo systemctl start SServerJointech sudo systemctl start PServerJointech sudo systemctl stop SServerEGTS_transit sudo systemctl stop SServerARNAVI_STATIONS_TEST sudo systemctl stop zholak_ftp sudo systemctl stop geoserver2 sudo systemctl stop Transit_RabbitMQ_Forwarding_RUS sudo systemctl stop SServerJointech sudo systemctl stop PServerJointech sudo systemctl stop PServerWialonIPS_transit sudo systemctl restart SServerWialonIPS_transit sudo systemctl restart zholak_ftp sudo systemctl restart PServerARNAVI sudo systemctl restart PServerARNAVI_TEST sudo systemctl restart PServerMT300_msp sudo systemctl restart SServerTeltonika sudo systemctl restart PServerTeltonika sudo systemctl restart Transit_RabbitMQ_Forwarding sudo systemctl restart Transit_RabbitMQ_Forwarding_RUS sudo systemctl restart Transit_RabbitMQ_Read sudo systemctl restart SServerJointech systemctl status geoserver2 systemctl status PServerARNAVI systemctl status SServerARNAVI_STATIONS systemctl status Virtuasudo systemctl start PServerWialonIPS_transitlTerminal systemctl status SServerARNAVI_STATIONS_TEST systemctl status SServerTKSTAR_STATIONS systemctl status PServerTKSTAR_STATIONS systemctl status SServerARNAVI systemctl status SServerWialonIPS systemctl status PServerEGTS_transit systemctl status PServerARNAVI systemctl status PServerWialonIPS systemctl status SServerMQTT systemctl status PServerMQTT systemctl status SServerEGTS_transit systemctl status SServerEGTS_transit_3241 systemctl status SServerWialonIPS_transit systemctl status PServerWialonIPS_transit systemctl status PServerWialonIPS_transit_u systemctl status Transit_RabbitMQ_Forwarding systemctl status Transit_RabbitMQ_Forwarding_RUS systemctl status Transit_RabbitMQ_Read systemctl status SServerMT300_msp systemctl status PServerMT300_msp systemctl status SServerTeltonika systemctl status PServerTeltonika systemctl status SServerJointech systemctl status PServerJointech Чтобы добавить сервис в автозагрузку, необходимо активировать его: sudo systemctl enable geoserver2 sudo systemctl enable SServerEGTS_transit sudo systemctl enable SServerEGTS_transit_3241 sudo systemctl enable PServerEGTS_transit sudo systemctl enable SServerWialonIPS_transit sudo systemctl enable PServerWialonIPS_transit_u sudo systemctl enable VirtualTerminal sudo systemctl enable SServerARNAVI_STATIONS sudo systemctl enable PServerARNAVI_STATIONS sudo systemctl enable PServerARNAVI_STATIONS_TEST sudo systemctl enable SServerTKSTAR_STATIONS sudo systemctl enable PServerTKSTAR_STATIONS sudo systemctl enable SServerMQTT sudo systemctl enable PServerMQTT sudo systemctl enable SServerMT300_msp sudo systemctl enable PServerMT300_msp sudo systemctl enable Transit_RabbitMQ_Forwarding sudo systemctl enable Transit_RabbitMQ_Forwarding_RUS sudo systemctl enable Transit_RabbitMQ_Read sudo systemctl enable SServerJointech sudo systemctl enable PServerJointech systemctl enable SServerARNAVI systemctl enable SServerWialonIPS systemctl enable PServerARNAVI systemctl enable PServerWialonIPS Чтобы проверить логи сервиса, выполните: journalctl -u zholak_gps journalctl -u SServerWialonIPS_transit journalctl -u PServerWialonIPS_transit journalctl -u geoserver2 **************************************************************************************************** Команды Linux pwd - получить имя текущей директории cd - изменить текущую директорию ls - распечатать информацию о файлах или директориях cat - слить или вывести файлы-аргументы на стандартный вывод cp - копировать файлы mv - переместить (переименовать) файлы ln - создать ссылку на файл rm - удалить файлы rmdir - удалить директорию mkdir - создать директорию echo - вывести аргументы командной строки на стандартный вывод ps - узнать номера выполняемых процессов kill - "убить" выполняемый процес по его номеру man - выдать справку об использовании и ключах команды **************************************************************************************************** Удалённая отладка c++ приложения на Ubuntu при помощи GDB-gdbserver debug Устанавливаем на удалённой машине: sudo apt install gdbserver Для того чтобы не писать каждый раз пароль авторизуемся по ключю Для этого генерим ключик локально: ssh-keygen -t rsa -b 2048 Значения по умолчанию оставил пустыми, сгенерился в /home/username/.ssh/id_rsa Копируем ключик на нужную машину командай: ssh-copy-id -p 22 administrator@10.101.1.3 Для копирования и запуска программы на целевую машину создаём скрипт копирования и запуска: #!/bin/bash echo "*** copy file to server ***" #scp -P 2222 /mnt/O_DRIVE/projects/Workspace_C++/GServer/Debug/GServer administrator@192.168.0.83:/var/www/server scp -P 2222 /mnt/O_DRIVE/projects/Workspace_C++/MServer/Debug/MServer administrator@192.168.0.83:/var/www/server #scp /mnt/O_DRIVE/projects/Workspace_C++/VTerminal/Debug/VTerminal administrator@192.168.0.83:/var/www/uspdmanager.istt.kz echo "*** exec program on server ***" #ssh -p 2222 administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/server/GServer ssh -p 2222 administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/server/MServer #ssh administrator@192.168.0.83 gdbserver 192.168.0.83:10000 /var/www/uspdmanager.istt.kz/VTerminal e101 Скрипт можно не делать так как в Eclipse это можно автоматизировать при помощи "C/C++ Remote Application". **************************************************************************************************** Настройка kannel для отправки SMS через SMPP (http://alexkorvin.blogspot.com/2011/05/sms-kannel-centos-55.html) Устанавливаю kannel sudo apt-get install kannel bearerbox – главный демон, который держит связь по SMPP в качестве клиента, работает с 3g-донглами, слушает порт для подключения других демонов. opensmppbox – демон, который работает как SMPP сервер для подключения других клиентов. Тоже подключается к bearerbox и работает через него. sudo mcedit /etc/kannel/kannel.conf Скрипт автостарта в ubuntu Автор: Zeboton Иногда нужно чтобы при загрузке Ubuntu выполнила какие-либо действия (к примеру, запустила какую-нибудь программу). Как же это сделать? Всё просто как 3 копейки! 1. Нужно создать файл с командами, которые нужно выполнить при старте системе: view source print ? 1. sudo nano /etc/init.d/autostart.script Как понятно, autostart.script это название файла в котором будут записаны команды и оно может быть любым, но не должно совпадать с именами уже существующих файлов в папке /etc/init.d/. В первой строке файла должно быть указано какая оболочка или интерпретатор будет выполнять команды в файле. Если вы хотите использовать те же команды, что и в терминале, то файл должен начинаться со строки: view source print ? 1. #!/bin/bash 2. Нужно разрешить файлу выполняться: view source print ? 1. sudo chmod +x /etc/init.d/autostart.script 3. Рассказываем системе что этот файл нужно исполнять при старте системы: view source print ? 1. sudo update-rc.d autostart.script defaults 95 Где 95 это порядок в очереди исполнения. Подробнее можно узнать из view source print ? 1. man update-rc.d Перезапускаем систему и радуемся результату P.S. Для удаления из автостарта нужно выполнить: view source print ? 1. sudo update-rc.d autostart.script remove **************************************************************************************************** Установка HAProxy на Ubuntu 20.04 по https://itsecforu.ru/2019/07/15/⏳-настройка-балансировщика-нагрузки-h/ sudo apt-get update && sudo apt-get install haproxy -y Создаём резервную копию файла: sudo cp /etc/haproxy/haproxy.cfg{,.bak} Редактируем конфигурацию (Описание конфигурационного файла HAProxy https://habr.com/ru/sandbox/34354/) mcedit /etc/haproxy/haproxy.cfg В конец файла добавляем пока только для перенаправления (для балансироки больше IP адресов): frontend frontend-http bind *:80 mode http # ACL для определения запросов на проверку Let's Encrypt acl is_certbot path_beg /.well-known/acme-challenge/ # Если это не запрос Let's Encrypt, перенаправляем на HTTPS http-request redirect scheme https code 301 unless is_certbot # Отправляем запросы Let's Encrypt на backend-certbot use_backend backend-certbot if is_certbot frontend LOADBALANCER-01 bind *:80 bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem crt /etc/ssl/certs/bigfoottrade_kz.pem mode http #режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика option httpclose #Закрывает пассивные соединения acl v_geoserver2 hdr(host) -i geoserver2.ccalm.org use_backend geoserver2_ccalm_org if v_geoserver2 #Перенаправление одной страницы по адресу http://geoserver2.ccalm.org/data/ на другой backend acl v_geo_data hdr(host) -i geoserver2.ccalm.org/data use_backend WEBSERVERS-01 if v_geo_data default_backend WEBSERVERS-01 backend WEBSERVERS-01 balance roundrobin server web10 127.0.0.1:8081 check inter 5s ssl verify none option httpchk backend geoserver2_ccalm_org balance roundrobin server web1 192.168.0.90:80 check option httpchk listen stats bind *:8989 stats enable stats uri / stats realm Haproxy\ Statistics stats auth igor:i123456 frontend f-RabbitMQ mode tcp bind 10.1.7.73:21000 default_backend b-RabbitMQ backend b-RabbitMQ mode tcp server srv1 10.10.16.21:20000 Для перенаправления незащищённого HTTP трафика можно: xxxxxxxxxxxxxxx Для использования SSL и перенаправляние по обычному сокету для начала нужно настроить pem файл объеденив crt и key (и незабыть изменить порт Apache с 433) cat /etc/ssl/certs/bigfoottrade_kz.crt /etc/ssl/certs/bigfoottrade_kz_ca.crt /etc/ssl/private/bigfoottrade_kz.key > /etc/haproxy/ssl/bigfoottrade_kz.pem cat AAA_Certificate_Services.crt GoGetSSL_RSA_DV_CA.crt istransit_kz.crt istransit_kz.key > istransit_kz.pem SSLCertificateFile SSLCertificateKeyFile Для включения WEB статистики на 9000 порту добавить в конец конфигурации: listen stats bind *:8989 stats enable stats uri /stats stats realm Haproxy\ Statistics stats auth igor:i123456 Тестирую файл конфигурации: haproxy -f /etc/haproxy/haproxy.cfg -c Перезагружаем: sudo systemctl restart haproxy И теперь должно открываться но адресу: http://data.ccalm.org:8989/ Обязательно проверить как установился SSL чекером: https://www.leaderssl.ru/tools/ssl_checker **************************************************************************************************** Бесплатный SSL сертификат Let’s Encrypt для HAPROXY https://serversforhackers.com/c/letsencrypt-with-haproxy На новой убунте по моему уже не обязательно выполнять так как новая версия уже есть в репозитории: sudo add-apt-repository -y ppa:certbot/certbot sudo apt-get update sudo apt-get install -y certbot Для удаления PPA нужно выполнить: sudo apt-get remove certbot sudo add-apt-repository --remove ppa:certbot/certbot apt-get install -f apt autoremove Если включён файрволл то разрешаем порт: sudo ufw allow 9080/tcp Проверяем что автообновление в certbot работает для этого выполняем команду: sudo systemctl status certbot.timer Затем пытаемся выполнить пробный прогон при помощи команды: sudo certbot renew --dry-run Согласно инструкции модифицируем конфигурационный файл haproxy добавив во frontend это: # ACL for detecting Let's Encrypt validtion requests acl is_certbot path_beg /.well-known/acme-challenge/ use_backend backend-certbot if is_certbot А также ещё один backend: # Certbot backend # Contains certbot stand-alone webserver backend backend-certbot mode http server certbot 127.0.0.1:9080 Перезагрузить и выполнить команду: certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d git.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d ru.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rug.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kz.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d kzg.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d locust.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d data.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver2.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geoserver.ccalm.org --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d aistransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d istransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d test.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d main.istransit.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d transit.istt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d geovizor.com --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mqtt.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d observer.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d rigor.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d pal.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d elektronnaya-ochered.kz --email irigm@mail.ru --agree-tos --non-interactive certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mcp.kz --email irigm@mail.ru --agree-tos --non-interactive После генерации файлы будут в: /etc/letsencrypt/live/geoserver2.ccalm.org/fullchain.pem /etc/letsencrypt/live/geoserver2.ccalm.org/privkey.pem Для обновления создаём файл /etc/letsencrypt/renew.sh (по моему этот скрипт не нужен так как рабтает сервис certbot.timer): #!/bin/bash certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepare.sh" --quiet Но для HAProxy нужно чтобы 2 файла были объединены поэтому добавляю спец скрипт /etc/haproxy/prepare.sh: #!/bin/bash # Loop through all Let's Encrypt certificates for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do CERTIFICATE=`basename $CERTIFICATE` # Combine certificate and private key to single file cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem done systemctl reload haproxy.service Обновляем конфигурацию HAProxy добавив в frontend: bind *:443 ssl crt /etc/haproxy/ssl/mqtt.kz.pem Устанавливаем права chmod +x /etc/haproxy/renew.sh chmod +x /etc/haproxy/prepare.sh И добавляем задание в cron "crontab -e" ниже текст это раз в 24 часа в 00:00:00 ночи: 0 0 * * * /bin/sh /etc/letsencrypt/renew.sh **************************************************************************************************** Подключение стронних SSL сертификатов, допустим с gogetssl.com После покупки сертификата в .pem файл нужно переписать такие ключи и сертификаты как: 1) PrivateKey 2) Сертификат (Certificate) Использую только bigfoottrade_kz.crt 3) Цепочка сертификатов (Chain of Trust) Сертификат для подписи приватного ключа (Certificate Signing Request(CSR)) использовать не надо, он больше не нужен. Пробую собрать pem файл из того что скачал с сайта gogetssl.com (зайдя в раздел подробннее о сертификате) cat istransit_kz.key istransit_kz.crt istransit_kz.ca> istransit_kz.pem Потом зайти проверить через mcedit что символы перехода не из вины **************************************************************************************************** Устанавливаю python на Ubuntu 18.04 sudo apt update sudo apt-get install build-essential python3-all-dev sudo apt-get install libhdf5-dev sudo apt-get install gdal-bin sudo apt-get install python3-gdal sudo apt-get install python3-h5py sudo apt-get install python3-requests sudo apt-get install python3-pip sudo pip3 install --upgrade pip sudo pip3 install requests pip install --upgrade requests sudo pip3 install ease_grid **************************************************************************************************** Настраиваю статический сетевой IP адрес в Ubuntu 22.04: Для этого открываем: sudo mcedit /etc/netplan/00-installer-config.yaml И меняем: network: ethernets: enp0s3: dhcp4: true version: 2 На: network: ethernets: enp0s3: dhcp4: no addresses: - 192.168.0.138/24 gateway4: 192.168.0.253 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 version: 2 **************************************************************************************************** В старой ubuntu 16.04 IP настраивались так: sudo nano /etc/network/interfaces iface eth0 inet static address 192.168.200.57 netmask 255.255.255.0 gateway 192.168.200.1 auto eth0 Или так для DHCP iface eth0 inet dhcp auto eth0 Обновляю интерфейс не перезагружая: sudo systemctl restart networking Для ubuntu 18.04 20.04 и далее настройки в etc\netplan Для ЖОЛАК настраивал мост так: network: ethernets: enp1s0: addresses: [] dhcp4: true dhcp6: false optional: true enp2s0: addresses: [] dhcp4: false dhcp6: false optional: true enp3s0: addresses: [] dhcp4: false dhcp6: false optional: true enp4s0: addresses: [] dhcp4: false dhcp6: false optional: true bridges: br0: interfaces: [enp2s0,enp3s0,enp4s0] addresses: [192.168.1.10/24] dhcp4: false dhcp6: false optional: true version: 2 Применение конфигурации: sudo netplan apply **************************************************************************************************** --sudo apt update --sudo apt install libosmocore Устанавливаю библиотеку OpenBSC: sudo apt update sudo apt install libosmocore-dev sudo apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev ---------------------------------------- https://security-bits.de/research/cellular/lab_setup Установка SimpleHLR согласно: https://osmocom.org/projects/osmonitb/wiki/Simplehlr sudo apt install php php-sqlite3 https://osmocom.org/projects/osmo-hlr/wiki/OsmoHLR Пробую скомпилить: https://github.com/moiji-mobile/hlr эти исходники по 32 битную версию Линукса (На форумах говорят проблемы были по 64 битную версию поэтому автор и сделал по 32 бита) Снадеждой что тут поддерживает TCAP/MAP так как: OsmoHLR does not support the classic TCAP/MAP protocol but rather implements the more light-weight GSUP protocol. sudo apt-get install git-all sudo apt-get install libtalloc-dev sudo apt-get install libusb-dev sudo apt-get install libusb-1.0-0-dev sudo apt-get install libmnl-dev sudo apt-get install libsctp-dev git clone https://github.com/moiji-mobile/hlr Потом запустил SH файл, скомпилилась libosmocore и что? Она типа с TCAP/MAP? Узнаём версию библиотеки: ---------------------------------------- Установка libosmoabis https://osmocom.org/projects/libosmo-abis/wiki/Libosmo-abis Это библиотека, содержащая общий / разделяемый код, относящийся к интерфейсу A-bis между BTS и BSC. Он реализует драйверы для карт E1 на основе mISDN и DAHDI, а также для некоторых диалектов A-bis / IP. sudo apt-get install libortp-dev git clone git://git.osmocom.org/libosmo-abis.git cd libosmo-abis/ autoreconf -i ./configure make sudo make install sudo ldconfig -i cd .. ---------------------------------------- Установка libosmo-abis (libosmoabis) sudo apt-get install libortp-dev sudo apt-get install -y dahdi-linux sudo apt-get install dahdi git clone git://git.osmocom.org/libosmo-abis.git cd libosmo-abis/ autoreconf -i ./configure make sudo make install sudo ldconfig -i cd .. ---------------------------------------- Пробую установить: git://git.osmocom.org/osmo-hlr это тот который не работает через TCAP/MAP а только через GSUP sudo apt-get install libpcsclite-dev sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc python-minimal sudo apt-get install libpcsclite-dev git clone git://git.osmocom.org/osmo-hlr autoreconf -i ./configure make make install ---------------------------------------- Настройка osmo-hlr согласно: https://nickvsnetworking.com/gsm-with-osmocom-part-7-the-hlr-home-location-register-and-friends/ Как установили то запускаем сервис: systemctl start osmo-hlr Подключается через telnet и продолжаем настройку telnet localhost 4258 ---------------------------------------- Установка libtasn1 версии 4.9 wget https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.9.tar.gz tar xvf libtasn1-4.9.tar.gz cd libtasn1-4.9 ./configure --prefix=/usr/local/libtasn1/4_9 make make check make install ---------------------------------------- Устанавливаю gnutls по инструкции https://noknow.info/it/os/install_gnutls_from_source: sudo apt-get install -y libtasn1-bin (У меня показало 4.13-2 а затребовало 4.9) sudo apt-get install -y nettle-dev (У меня показало что установленна версия: 3.4-1 поэтому ставлю версию gnutls-3.5.19.tar.xz) wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.4/gnutls-3.4.17.tar.xz wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.9.tar.xz wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.0.tar.xz tar xvf gnutls-3.6.9.tar.xz cd gnutls-3.6.9 ./configure --prefix=/usr/local/gnutls/3_6_9 make make check make install ---------------------------------------------------------------- Проверяем установлен ли libosmocore dpkg -L libosmocore Для установки версии разработчика libosmocore из репозитория: sudo apt-get install libosmocore-dev Для удаления libosmocore sudo apt-get remove libosmocore Либо с удалением зависимостей: sudo apt-get remove --auto-remove libosmocore Либо для полного удаления включая зависемости и конфигурационные файлы: sudo apt-get purge libosmocore Пробую откомпилить и установить: libosmocore из исходников (версия: 1.4.0.326-8c33d) sudo apt-get install git build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls28-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev libpam0g-dev ntp sudo apt-get install synaptic sudo apt install libgnutls-dev sudo apt-get install -y doxygen sudo apt-get install -y libmnl-dev git clone git://git.osmocom.org/libosmocore.git cd libosmocore/ autoreconf -i ./configure make sudo make install sudo ldconfig -i **************************************************************************************************** Настройка IPSEC VPN тунель IKEv2 PSK на Ubuntu с использование StrongSwan: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04 Генерим секретный ключь openssl rand -hex 32 Выдаст примерно такое: 23fa1e30aa1623371253e84e7d0dad9d33b1e8fc69253c247cf0297c009e5a9e Подключиться можно так: https://thesafety.us/vpn-setup-ikev2-ubuntu21 **************************************************************************************************** Установка и настройка openvpn на Ubuntu 16.04 согласно документу: https://timeweb.com/ru/community/articles/openvpn-na-ubuntu-16-04-ustanovka-1 https://www.digitalocean.com/community/tutorials/openvpn-ubuntu-16-04-ru Устанавливаем утилиту для синхронизации времени: apt-get install chrony systemctl enable chrony --now cp /usr/share/zoneinfo/Asia/Almaty /etc/localtime Установка OpenVPN: sudo apt-get install openvpn easy-rsa unzip Настройка центра сертификации easy-rsa Копируем шаблонную директорию в нужное нам место make-cadir ~/openvpn-ca Дальше заходим в созданную папку и редактируем файл vars mcedit vars И в нем поменять значения в конце файла на свои, пример: export KEY_COUNTRY="US" export KEY_PROVINCE="NY" export KEY_CITY="New York City" export KEY_ORG="DigitalOcean" export KEY_EMAIL="admin@example.com" export KEY_OU="Community" export KEY_NAME="server" Создание центра сертификации: Убедитесь что вы в папке openvpn-ca и выполните команду: source vars Теперь нужно удалить все ненужные данные для того, чтобы почистить рабочую среду: ./clean-all Переходим к построению корня центра сертификации: ./build-ca Создаём сертификаты: ./build-key-server server ./build-dh openvpn --genkey --secret keys/ta.key Создание сертификата клиента и пары ключей (для каждого подключаемого клиента нужно повторить генерацию) Для того чтобы создался файл без пароля: source vars ./build-key client1 **************************************************************************************************** BananaPI SSH создать директорию в: /var/run/sshd и перезагрузить SSH или ОС также нужно подправить файл /usr/lib/tmpfiles.d/sshd.confи удалив /var из строки: d /var/run/sshd 0755 service ssh start /usr/lib/tmpfiles.d/sshd.conf d /var/run/sshd 0755 root root BananaPI WIFI: sudo nmtui и выбрать подходящую точку доступа для подключения **************************************************************************************************** Компиляция DAHDI Asterisk http://linux.mixed-spb.ru/asterisk/install_dahdi.php git clone -b next git://git.asterisk.org/dahdi/linux dahdi-linux cd dahdi-linux make make install **************************************************************************************************** Настройка TLS для Mosquitto MQTT брокера на windows (команды ниже выполнять в LINUX) https://mcuoneclipse.com/2017/04/14/enable-secure-communication-with-tls-and-the-mosquitto-broker/ 1) Создаю CA пару ключей openssl genrsa -des3 -out m2mqtt_ca.key 2048 Задал пароль: q123456 2) Создаю сертификат для ключа m2mqtt_ca.key openssl req -new -x509 -days 3650 -key m2mqtt_ca.key -out m2mqtt_ca.crt Если выдаст: Unable to load config info from /usr/local/ssl/openssl.cnf то добавить переменную окружения OPENSSL_CONF со значением C:\Program Files\OpenSSL\openssl.cnf set OPENSSL_CONF=o:\projects\Workspace_PHP\Apache24\conf\openssl.cnf 3) Create Mosquitto Broker Key Pair openssl genrsa -out m2mqtt_srv.key 2048 4) Create Certificate Request from CA openssl req -new -out m2mqtt_srv.csr -key m2mqtt_srv.key 5) Verify and Sign the Certificate Request openssl x509 -req -in m2mqtt_srv.csr -CA m2mqtt_ca.crt -CAkey m2mqtt_ca.key -CAcreateserial -out m2mqtt_srv.crt -days 3650 Дальше копируем файлы в папку mosquitto /certs/m2mqtt_ca.crt /certs/m2mqtt_srv.crt /certs/m2mqtt_srv.key Далее открываем /mosquitto.conf и listener 1883 0.0.0.0 listener 8883 0.0.0.0 cafile C:\Program Files\mosquitto\certs\m2mqtt_ca.crt certfile C:\Program Files\mosquitto\certs\m2mqtt_srv.crt keyfile C:\Program Files\mosquitto\certs\m2mqtt_srv.key Дальше перезапускаем mosquitto Проверить кто занял порт: netstat -ab Для получения отпечастка сертификата выполнить: openssl x509 -in m2mqtt_srv.crt -noout -fingerprint -sha1 -inform pem Для преобразования в pem файл выполнить: openssl rsa -in m2mqtt_srv.key -text > m2mqtt_srv.key.pem openssl x509 -inform PEM -in m2mqtt_srv.crt > m2mqtt_srv.crt.pem **************************************************************************************************** Установка home-assistanto c Supervisor на Ubuntu Server 20.04, Linux Mint(и малинки) по мативам https://pikabu.ru/story/ustanovka_home_assistant_supervised_v_docker_na_ubuntu_2004_na_besplatnom_vps_servere_ot_oracle_testovaya_sistema_umnogo_doma_7980354 sudo apt-get update sudo apt-get upgrade -y sudo apt autoremove -y sudo apt-get install -y software-properties-common apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat Деактивируем и отключаем ModemManager: sudo systemctl disable ModemManager sudo systemctl stop ModemManager На всякий случай перезагружаем систему reboot Устанавливаем Docker: curl -fsSL get.docker.com | sudo sh Загружаем скрипт "supervised-installer": curl -Lo installer.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/installer.sh И запускаем установку одним из способов: - установщик сам выбирает директории (папки установки): sudo bash installer.sh - мы выбираем директории (папки установки - нужно сначала создать)***: sudo bash installer.sh -p /home -d $PREFIX/hassio (это пример, подробнее на фото) Разварачивание HA может занять 5 минут **************************************************************************************************** Установка Docker на Ubuntu 22.04 по мотивам: https://infoit.com.ua/linux/kak-ustanovit-docker-na-linux-mint-20/ Обновляем и устанавливаем зависимости: sudo apt update sudo apt install curl software-properties-common ca-certificates apt-transport-https -y wget -O- https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable"| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce -y sudo systemctl status docker Устанавливаем Docker Compose с сервера: Так старая версия установится: sudo apt-get install docker-compose curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version После установки будет создана группа докеров. Добавьте своего пользователя в группу, которая будет запускать команды докеров: sudo usermod -aG docker $USER После этого проверьте установку Docker, используя следующую команд sudo docker --version docker compose version **********PORTAINER********** Также можно установить удобный интерфейс для управления докер контейнерами PORTAINER по документации из: https://timeweb.cloud/tutorials/docker/ustanovka-i-ispolzovanie-portainer и видео: https://www.youtube.com/watch?v=EmtNCo7SGbQ cd /opt sudo mkdir portainer cd ./portainer sudo mcedit docker-compose.yml И прописываем в файл: version: "3.3" services: twportainer: image: portainer/portainer-ce:latest container_name: portainer environment: - TZ=Europe/Moscow volumes: - /var/run/docker.sock:/var/run/docker.sock - /opt/portainer/portainer_data:/data ports: - "8000:8000" - "9443:9443" restart: always version: "3.3": Указывает версию Docker-compose, которую вы используете. Версия 3.3 подходит для большинства современных приложений. services: В этой секции описываются запускаемые сервисы. twportainer: Имя сервиса. Используется в качестве идентификатора. image: portainer/portainer-ce:latest: Определяет образ, который будет использоваться. Здесь используется последняя версия Community Edition. container_name: twportainer: Назначает имя контейнера, чтобы было легче его идентифицировать. environment: Позволяет задать переменные окружения. Например, - TZ=Europe/Moscow устанавливает временную зону контейнера. volumes: /var/run/docker.sock:/var/run/docker.sock позволяет Portainer взаимодействовать с Docker на вашем хосте; /opt/twportainer/portainer_data:/data создает постоянное хранилище данных. ports: "8000:8000" и "9443:9443" открывают соответствующие порты для доступа к Portainer. 9443 используется для HTTPS подключения. restart: always: Гарантирует, что контейнер будет автоматически перезапускаться при необходимости, например, после перезагрузки сервера. Разрешаем пользователю запускать докер: sudo usermod -aG docker $USER Теперь можно запустить конфигурацию командой: sudo docker-compose up -d Открываем: https://127.0.0.1:9443 После предложения задания пароля для пользователя admin задал такой пароль на дом компе: &b2C6nyN2,qUNM] **************************************************************************************************** Собственный DynDNS на Linux для observer.kz для начала устанавливаем BIND 9.13 and later по этому мануалу https://www.dmosk.ru/miniinstruktions.php?mini=bind-ubuntu и по этому для новой версии https://www.netss.by/?p=26 sudo apt-get update sudo apt-get install bind9 dnsutils sudo apt-get install bind9utils Добавляем сервис в автозапуск systemctl enable bind9 Проверяем что сервис работает nslookup dmosk.ru 127.0.0.1 Открываем настройки: mcedit /etc/bind/named.conf.options Для глобальных запросов добавляем строку: allow-query { any; }; Также добавляем в этот файл DNS сервера пересылки, на них будут перенаправляться запросы если локальный не содержит данных //forwarders { // 8.8.8.8; // 8.8.4.4; //}; Проверяем настройки командой (ответ должен быть пустым): sudo named-checkconf Перезагружаем: sudo systemctl restart bind9 Проверяю версию BIND: named -v Выдало: BIND 9.16.1-Ubuntu (Stable Release) Можно проверить какой IP выдаст на DNS запрос dig locust.kz A На этом базовая настройка закончена. Наш сервер готов принимать и отдавать запросы и работать, как кэширующий dns. Далее создаём клиента согласно: https://help.ubuntu.ru/wiki/динамический_днс_своими_руками Перейдем в него. cd /etc/bind/ Генерируем пару ключь для обмена информацией между клиентом и сервером: sudo tsig-keygen -a hmac-sha512 dirt.kz > dirt.kz.key sudo tsig-keygen -a hmac-sha512 locust.kz > locust.kz.key Для загрузки ключа добавляем его файл mcedit /etc/bind/named.conf строчку с указанием файла, где определен ключ. include "/etc/bind/dirt.kz.key"; include "/etc/bind/locust.kz.key"; Следующим шагом необходимо в файл mcedit /etc/bind/named.conf.local прописать доменную зону, которой мы оперируем. zone "dirt.kz" { type master; allow-update {key dirt.kz;}; file "/var/cache/bind/dirt.kz"; }; zone "locust.kz" { type master; allow-update {key locust.kz;}; file "/var/cache/bind/locust.kz"; }; В файле "mcedit /var/cache/bind/dirt.kz" должны быть прописанны записи домена где: В файле "mcedit /var/cache/bind/locust.kz" должны быть прописанны записи домена где: Поле $ORIGIN для подставки имени в знак @, поэтому знак @ не используется просто так в тексте Если используется символ @ то он заменяется на то что было прописанно в $ORIGIN смотреть в: https://help.dyn.com/how-to-format-a-zone-file/ SOA — Начало полномочий подробней смотри в https://k.psu.ru/wiki/BIND9_(методическое_пособие)#SOA NS — Сервер имён A — рекорд MX — Почта для обмена CN — Каноническое имя PTR — указатель И таким содержимым: $ORIGIN dirt.kz $TTL 604800 @ IN SOA bigfoottrade.kz. root.bigfoottrade.kz. ( 8 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS bigfoottrade.kz. Второй файл для locust.kz: $ORIGIN . $TTL 604800 ; 1 week locust.kz IN SOA bigfoottrade.kz. irigm.mail.ru. ( 134 ; serial 604800 ; refresh (1 week) 86400 ; retry (1 day) 1419200 ; expire (2 weeks 2 days 10 hours 13 minutes 20 seconds) 604800 ; minimum (1 week) ) NS bigfoottrade.kz. $TTL 3600 ; 1 hour A 5.76.254.182 $ORIGIN locust.kz. * A 127.0.0.1 Правлю права доступа: sudo chown -R bind:bind /etc/bind Если настройки были первоначальными то стоит удалить файл /var/cache/bind/locust.kz.jnl и переинициализировать его командой: sudo rndc reconfig Потом следует вызвать: sudo systemctl restart bind9 Команда выше также переписывет накопившиеся данные из /var/cache/bind/locust.kz.jnl в /var/cache/bind/locust.kz так что после обновления если охото быстрей взглянуть на текстовое значение следует повторно вызвать эту команду После настроек сервера перезагружаем его: sudo named-checkconf sudo rndc reload sudo systemctl restart bind9 sudo rndc status journalctl | grep bind sudo journalctl -u bind9 -n 50 Создаю скрипт /etc/ddns/ddns.sh для обновления доменных зон удалённо с доступом по ключу: Файл из примера: #!/bin/bash TTL=3600 SERVER=ns.dyndns.my HOSTNAME=dhost.dyndns.my ZONE=dyndns.my KEYFILE=Kdyndns.my.+157+48025.private new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! cd /etc/ddns nsupdate -v -k $KEYFILE << EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $new_ip_address send EOF Мой модифицированный файл для обновления IP в Bind9 DNS сервису по созданному файлу ip.txt, файл ip.txt создаётся в PHP скрипте который описан ниже: #!/bin/bash TTL=3600 SERVER=127.0.0.1 HOSTNAME=*.dirt.kz ZONE=dirt.kz KEYFILE=/etc/bind/dirt.kz.key new_ip_address= FILE=/etc/ddns/ip.txt if test -f "$FILE"; then new_ip_address=`cat $FILE` rm $FILE fi len=${#new_ip_address} if [ $len -gt 3 ] then echo "New IP address = $new_ip_address" else echo "Not find IP address" exit fi cd /etc/ddns sudo nsupdate -v -k $KEYFILE << EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $new_ip_address update delete dirt.kz A update add dirt.kz $TTL A $new_ip_address send EOF echo "OK" Так как PHP работает за HAProxy то немного модифицировал скрипт который сохраняет IP обратившегося клиента в файл, а именно использую "x-forwarded-for" для передачи IP адреса клиента: '; print_r(getallheaders()); echo ''; // PROBLEM IS each browser has different "x-forwarder-for" some "X-Forwarder-for" and some browser gave you 2x ip "x.x.x.x, x.x.x.x" foreach ( getallheaders() as $k => $v) { if ( strtolower($k) == 'x-forwarded-for' ) { $tmp = explode(', ', $v); if ( $tmp[count($tmp)-1] != '' ) $_SERVER['REMOTE_ADDR'] = $tmp[count($tmp)-1]; } } if(isset($_GET["key"]) && $_GET["key"]=='4fygxNq539NFfUm6SOd2vn52GwL7o7NA'){ $myfile = fopen("/etc/ddns/ip.txt", "w"); fwrite($myfile, $_SERVER['REMOTE_ADDR']); fclose($myfile); } echo $_SERVER['REMOTE_ADDR']; ?> Проверяем что находит IP по доменному имени nslookup dirt.kz 127.0.0.1 **************************************************************************************************** DynDNS на PowerDNS авторитативный сервер DNS на Ubuntu 22.04 согласно инстркции https://phoenixnap.com/kb/powerdns-ubuntu: Можно было-бы использовать не 53 порт, но провайдер не даёт указывать порт при настройке DNS серверов (не знаю какие локальные проблемы могут возникнуть если задать не 53 порт) Устанавливаем сам PowerDNS https://doc.powerdns.com/authoritative/installation.html sudo apt-get install pdns-server sudo apt-get install pdns-backend-pgsql Подключаюсь к базе и создаю схему базу со схемой из: https://doc.powerdns.com/authoritative/backends/generic-postgresql.html Настраиваю соединение с базой данных в: sudo mcedit /etc/powerdns/pdns.d/pdns.local.gpgsql.conf Со следующим содержимым: launch+=gpgsql # gmysql parameters gpgsql-host=127.0.0.1 gpgsql-port=5432 gpgsql-dbname=powerdns gpgsql-user=powerdns gpgsql-password=y7HMHi0ATxx1VC3UU5WG gpgsql-dnssec=no Задаю права доступа к файлу: sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gpgsql.conf sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gpgsql.conf На всякий случай делаю резервные копии исходных файлов настрое: cd /etc/powerdns sudo cp named.conf named.conf.bak sudo cp pdns.conf pdns.conf.bak Наспройку файла pdns.conf авторитетный сервер, есть такой пример который следует изучить: https://raw.githubusercontent.com/trinv/PowerDNS/a56b9122f4a2de9c1f789009f09b9831f74d8bf1/pdns.template.master.conf (естественно без 1й табуляции): #allow-recursion=0.0.0.0/0 не включил так как не предполагаю использоват как рккурсивный DNS webserver=yes webserver-address=0.0.0.0 #Если 0.0.0.0 то слушаем все имеющиеся webserver-allow-from=5.76.254.182 #если из любой сети то так: ::/0, 0.0.0.0/0 но я поставил только домашний webserver-port=8090 Перезагружаем и пытаемся открыть sudo systemctl stop pdns.service http://77.240.38.137:8090 Проверяю соединение к базе перезапустив PowerDNS: sudo systemctl stop pdns.service sudo pdns_server --daemon=no --guardian=no --loglevel=9 Если всё норм выполняем: sudo systemctl restart pdns sudo systemctl enable pdns sudo systemctl status pdns Проверяем что порт 53 открыт для DNS: sudo ss -alnp4 | grep pdns Проверяем отправляя запрос к dns серверу dig @127.0.0.1 google.com ping google.com проверяем кто слушает на порту 53 sudo netstat -tulnp | grep :53 Для примера авторитетный для домена example.com то в базе данных должны быть такие настройки: ********** рекурсивный DNS от PowerDNS, тоже 53 порт и будет конфликт, поэтому на одном IP можно настроить PowerDNS чтобы он выполнял функцию рекурсивного резольвера ********** Чтобы работал резольвер от PowerDNS а не тот который от ubuntu: sudo apt-get install pdns-recursor -y sudo mcedit /etc/powerdns/recursor.conf И там прописать: forward-zones=.=8.8.8.8;8.8.4.4 Также нужно настроить sudo mcedit /etc/resolv.conf и прописать туда (так как файл символическая ссылка то сервис systemd-resolved нужно остановить иначе он его перезапишет) это чтобы программы перенаправляли запросы поднятому резольверу: nameserver 127.0.0.1 Чтобы запросы переходили на pdns-recursor Затем перезагружаем: sudo systemctl restart pdns-recursor Проверяем что преобразование DNS нормально работает: dig @127.0.0.1 google.com ********** Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS ********** Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved) sudo netplan apply Смотрим что сгенерировалось автоматически в resolv.conf после модификации файла cat /etc/resolv.conf Проверяем что интернет не перестал работать: ping changelogs.ubuntu.com Может быть что команда выше пытается по IP6 работать тогда попробовать по ping -4 changelogs.ubuntu.com Либо так: ping6 changelogs.ubuntu.com Взглянем на текущие DNS сервера, у меня такое выдало: DNS Servers: 195.210.46.195 195.210.46.132 на команду ниже: resolvectl status Отредактировал файл /etc/systemd/resolved.conf заменив nameservers на 8.8.8.8 и 8.8.4.4 Проверяем структуру файла командой: sudo yamllint /etc/netplan/50-cloud-init.yaml Применяем настройки: sudo netplan apply Проверяем что настройки изменились: resolvectl status Изменил /etc/systemd/resolved.conf настроив так: [Resolve] DNS=8.8.8.8 8.8.4.4 FallbackDNS=1.1.1.1 1.0.0.1 Потом перезагрузил: sudo systemctl restart systemd-resolved Проверяем что заняло порт 53 командой: sudo lsof -i :53 Выдало: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 670 systemd-resolve 13u IPv4 20070 0t0 UDP localhost:domain systemd-r 670 systemd-resolve 14u IPv4 20071 0t0 TCP localhost:domain (LISTEN) Останавливаем systemd-resolved (поисковик IP по домену по умолчанию от Ubuntu) sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved ********** PowerAdmin ********** Устанавливаю PowerAdmin согласно: https://phoenixnap.com/kb/powerdns-ubuntu#ftoc-heading-6 sudo apt install libpq-dev sudo apt install python3-dev sudo apt install python3-flask sudo apt install python3-pip pip install flask-mail && pip install Flask-Migrate && pip install flask-session && pip install python-ldap && pip install flask-login && pip install qrcode[pil] && pip install pytimeparse && pip install dnspython && pip install flask-seasurf && pip install flask-session-captcha && pip install zxcvbn && pip install authlib && pip install pyotp && pip install flask-login && pip install lima && pip install flask-assets && pip install lima && pip install psycopg2 && pip install asyncpg sudo apt install -y git libmysqlclient-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https python3-venv build-essential curl sudo apt install -y nodejs sudo apt install -y yarn Clone the PowerDNS Admin Git repository to /opt/web/powerdns-admin git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/web/powerdns-admin cd /opt/web/powerdns-admin python3 -mvenv ./venv source ./venv/bin/activate pip install --upgrade pip pip install -r requirements.txt Конфигугрируем PowerDNS Admin. Для начала копирую пример конфигураци, потом открываю его в редакторе: cp /opt/web/powerdns-admin/configs/development.py /opt/web/powerdns-admin/configs/production.py mcedit /opt/web/powerdns-admin/configs/production.py И редактируем следующие строки: #import urllib.parse SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0' SQLA_DB_PASSWORD = 'changeme' Cекретный ключ можно сгенерировать при помощи такой команды: python3 -c "import os; print(os.urandom(16))" Также настраиваю подключение к базе данных (сам строку составил): SQLALCHEMY_DATABASE_URI = 'postgresql://powerdns:y7HMHi0ATxx1VC3UU5WG@127.0.0.1/powerdnsadmin' Остальное коментирую: #SQLA_DB_USER = 'powerdns' #SQLA_DB_PASSWORD = 'y7HMHi0ATxx1VC3UU5WG' #SQLA_DB_HOST = '127.0.0.1' #SQLA_DB_NAME = 'powerdnsadmin' #SQLALCHEMY_DATABASE_URI = 'postgres://{}:{}@{}/{}'.format( # urllib.parse.quote_plus(SQLA_DB_USER), # urllib.parse.quote_plus(SQLA_DB_PASSWORD), # SQLA_DB_HOST, # SQLA_DB_NAME #) #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db') Экспортируем переменную: cd /opt/web/powerdns-admin export FLASK_CONF=../configs/production.py export FLASK_APP=powerdnsadmin/__init__.py Upgrade the database schema: flask db upgrade устанавливаем другие зависемости: sudo apt install npm sudo apt remove yarn curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt update sudo apt install yarn yarn --version sudo yarn install --pure-lockfile flask assets build Можно запускать: ./run.py Проже запустить с использованием SQLite по инструкции из: https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/docs/wiki/install/Running-PowerDNS-Admin-on-Ubuntu-or-Debian.md SALT = '$2b$12$yLUMTIfl21FKJQpTkRQXC0' SECRET_KEY = 'e951e5a1f4b94151b360f47edf596dd0' **************************************************************************************************** Установка сервиса обмена сообщениями RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. По документации из: https://rtfm.co.ua/ru/rabbitmq-zapusk-opisanie-primery/ sudo apt-get update sudo apt-get dist-upgrade sudo apt install rabbitmq-server Посмотреть список используемых плагинов: sudo rabbitmq-plugins list Активируем плагин rabbitmq_management для наблюдения за системой по HTTP https://www.rabbitmq.com/management.html https://thewebland.net/development/devops/chast-3-interfejs-upravleniya-rabbitmq/#:~:text=RabbitMQ%20Management%20–%20это%20удобный%20интерфейс,и%20отправлять%20%2F%20получать%20сообщения%20вручную. sudo rabbitmq-plugins enable rabbitmq_management rabbitmq_management активирует поддержку API на порту 15672: http://192.168.0.144:15672 http://10.1.7.70:15672 http://192.168.0.83:15672 Но для активации нужно добавить пользователя, смотрим пользователей: sudo rabbitmqctl list_users sudo rabbitmqctl add_user admin paRabbit! или test test для локального тестового сервера sudo rabbitmqctl set_user_tags admin administrator sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" Также можно создать пользователя для публикации сообщений но уже это можно сделать через WEB интерфейс: producer lgGDWAJEwI для guest с паролем: efewG!4ev Александра: alex jefruf!43 Теперь можно логинется по test test поменять пароль можно: https://kb.vmware.com/s/article/323520#:~:text=Log%20in%20to%20the%20RabbitMQ,host%20where%20RabbitMQ%20is%20installed. Или так можно поменять пароль: sudo rabbitmqctl change_password zenoss New-Password producer: клиент, выполняющий отправку сообщения queue: собственно очередь сообщений consumer: клиент, получающий сообщения из очереди exchange: получает сообщения от producer, и отправялет их в очереди в соответствии с его типом (см. тут https://www.rabbitmq.com/tutorials/tutorial-three-python.html) Дальше можно пробовать отправлять данные в очередь используя допустим java библиотеку урок: https://www.youtube.com/watch?v=6lPK_LgTZ9Y https://www.rabbitmq.com/devtools.html : Создаю Maven проект в консоли: cd O:\projects\Workspace_Java\ mvn archetype:generate -DgroupId=kz.istt.app -DartifactId=TransitToRabbitMQ -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false Открываю его в idea64 и добавляю в POM следующую зависемость из https://mvnrepository.com/artifact/com.rabbitmq/amqp-client: com.rabbitmq amqp-client 5.14.2 Также поставил C:\Program Files\Java\jdk-14.0.2 а то не запускалось, также просит рут права для IntelliJ IDEA. Урок создания maven проекта: https://devcolibri.com/unit/урок-1-подготовка-и-создание-maven-проекта/ или https://www.jetbrains.com/idea/guide/tutorials/working-with-maven/creating-a-project/ Добавил в POM файл: RabbitMQ https://repo1.maven.org/maven2/com/rabbitmq/amqp-client/5.16.0 com.rabbitmq false true com.rabbitmq amqp-client 5.16.0 Перезагружаем: sudo service rabbitmq-server restart **************************************************************************************************** Установка Shovels Plugin для RabbitMQ (лопата) по мотивам из: https://www.rabbitmq.com/docs/shovel Активирую плагин командой: sudo rabbitmq-plugins enable rabbitmq_shovel sudo rabbitmq-plugins enable rabbitmq_shovel_management Настраиваю Shovels Dynamic плагин в RabbitMQ через командную строку: sudo rabbitmqctl set_parameter shovel kaz_to_kaz '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation", "src-queue": "TO_KAZ", "dest-protocol": "amqp091", "dest-uri": "amqp://admin:paRabbit!@10.101.1.11:20000/playground", "dest-exchange": "swap", "dest-exchange-key": ".KAZ.", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 } }' Для Росии такие настройки: sudo rabbitmqctl set_parameter shovel kaz_to_rus '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_rus", "src-queue": "TO_RUS", "dest-protocol": "amqp091", "dest-uri": "amqp://iktt_kaz:jkrjHL7xj7PrW1D@192.168.89.133:20000/playground", "dest-exchange": "swap", "dest-exchange-key": "KZ", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 } }' Для Беларусии такие настройки: sudo rabbitmqctl set_parameter shovel kaz_to_blr '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_blr", "src-queue": "TO_BLR", "dest-protocol": "amqp091", "dest-uri": "amqp://KZ_IKTT:DK34xDNlZQfQ551k@192.168.90.133:20000/plumber", "dest-exchange": "eec.swap", "dest-exchange-key": "KZ", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 } }' Для Армении такие настройки: sudo rabbitmqctl set_parameter shovel kaz_to_arm '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:password@127.0.0.1:20000/transportation_arm", "src-queue": "TO_ARM", "dest-protocol": "amqp091", "dest-uri": "amqp://kz_istt:password@192.168.89.158:20000/transportation", "dest-exchange": "swap_kz", "dest-exchange-key": "KZ_ISTT", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 } }' Для Кыргызстана (таможенная инфраструктура) sudo rabbitmqctl set_parameter shovel kaz_to_kgz '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:paRabbit!@127.0.0.1:20000/transportation_kgz", "src-queue": "TO_KGZ", "dest-protocol": "amqp091", "dest-uri": "amqp://kz_istt:uzZNYbVTElMDXnfwQx16@192.168.70.133:20000/transportation_kaz", "dest-exchange": "swap", "dest-exchange-key": "KAZ", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 } }' Удалять так: sudo rabbitmqctl clear_parameter shovel kaz_to_kgz Для отправки из Киргизии нам то такие настройки: sudo rabbitmqctl set_parameter shovel kgz_to_kaz '{ "src-protocol": "amqp091", "src-uri": "amqp://admin:pfta2OFt@127.0.0.1:20000/transportation_kaz", "src-queue": "TO_KAZ", "dest-protocol": "amqp091", "dest-uri": "amqp://kg_amap:qrd2fjEjkegdi7bfb@192.168.70.134:20000/transportation_kgz", "dest-exchange": "swap", "dest-exchange-key": "KGZ", "ack-mode": "on-confirm", "publish-properties": { "delivery_mode": 2 } }' Удалять так: sudo rabbitmqctl clear_parameter shovel kgz_to_kaz Чтобы проверить текущие параметры Shovel: sudo rabbitmqctl list_parameters А также можно взглянуть что создалось через WEB интерфейс Не забывать что Exchange: swap должен быть не "direct" а как "topic" иначе маршрутизация не сработает. **************************************************************************************************** Установка wxWidgets на Linux mint, скачал 3.0.5 по инструкции из https://www.binarytides.com/install-wxwidgets-ubuntu/ sudo apt-get install libgtk-3-dev build-essential checkinstall mkdir gtk-build cd gtk-build ../configure --disable-shared --enable-unicode make sudo make install sudo ldconfig sudo checkinstall **************************************************************************************************** Wildfly (JBoss) https://helpingbox.net/ru/установите-и-настройте-wildfly-jboss-в-ubuntu-18-04-lts **************************************************************************************************** Установка Redmine на Ubuntu 22.04 по https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_50x_on_Ubuntu_2004_with_Apache2 Потом скопировать и подправить на PostgreSQL admin admin поменял на admin deSert!123 Готово теперь можно авторизоваться через WEB интерфейс Username: admin Password: admin **************************************************************************************************** Установка расширения https://github.com/michelp/pgjwt на ubuntu сервер Для компиляции устанавливаю (На тестовую машину, не боевую): sudo apt-get update sudo apt-get install postgresql-server-dev-14 apt install ca-certificates curl gnupg lsb-release Остановился на том что потребовало установить докер при компиляции: https://www.cherryservers.com/blog/how-to-install-and-use-docker-compose-on-ubuntu-20-04 sudo apt-get install docker-compose-plugin sudo apt-get install docker-compose-plugin Клонирую репозиторий: sudo apt install git git clone https://github.com/michelp/pgjwt.git Потом make Ошибка на мейке... install **************************************************************************************************** Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os sudo apt-get update sudo apt install redis redis-cli --version sudo systemctl status redis Config: sudo mcedit /etc/redis/redis.conf И меняем в конфигурации на: supervised systemd Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1 bind 0.0.0.0 Также в поле SECURITY нужно установить пароль, сгенерированный при помощи: openssl rand 25 | openssl base64 -A Примерно такой должен быть получиться: requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== Перезагружаем: sudo systemctl restart redis-server Проверяем Redis: redis-cli Или так проверяем: redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== И пишем: ping Проверяем какие порты прослушиваются на компе: sudo netstat -lnp | grep redis **************************************************************************************************** Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy sudo apt-get install dnsmasq sudo apt-get install resolvconf sudo apt-get install net-tools sudo apt-get install net-tools На ошибку "failed to create listening socket for port 53: Address already in use" не обрашаем внимания это норма. Настраиваем пакеты: sudo mcedit /etc/dnsmasq.conf Там будет всё закоментированно, добавляем это: no-resolv server=8.8.8.8 listen-address=127.0.0.1 bind-interfaces Далее добавляем пути в /etc/hosts пример 127.0.0.1 jwt.local Перезагружаеи sudo /etc/init.d/dnsmasq restart Проверяем: telnet 127.0.0.1 53 dig @127.0.0.1 -p 53 jwt.local **************************************************************************************************** Установка GitLab на Ubuntu сервер по https://itslinuxfoss.com/install-gitlab-ubuntu-22-04/ sudo apt update && sudo apt upgrade -y sudo apt install tzdata curl ca-certificates openssh-server sudo apt install curl debian-archive-keyring lsb-release ca-certificates apt-transport-https software-properties-common -y curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo apt install gitlab-ce Также для CI/CD устанавливаем runner, выполняет команды из .gitlab-ci.yml описание: https://habr.com/ru/companies/slurm/articles/306596/ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash sudo apt-get install gitlab-runner Редактируем имя хоста: sudo mcedit /etc/gitlab/gitlab.rb И прописываем туда external_url 'http://gitlab.local:8081' Затем: sudo gitlab-ctl reconfigure Как завершиться, проверяем: sudo gitlab-ctl status Должно выдать быть что-то в роде: run: alertmanager: (pid 92581) 18s; run: log: (pid 92343) 80s run: gitaly: (pid 92590) 18s; run: log: (pid 91561) 189s run: gitlab-exporter: (pid 92551) 20s; run: log: (pid 92078) 98s run: gitlab-kas: (pid 92520) 22s; run: log: (pid 91845) 175s run: gitlab-workhorse: (pid 92531) 21s; run: log: (pid 91985) 117s run: grafana: (pid 92610) 17s; run: log: (pid 92471) 38s run: logrotate: (pid 91486) 202s; run: log: (pid 91494) 201s run: nginx: (pid 91993) 114s; run: log: (pid 92013) 110s run: node-exporter: (pid 92540) 21s; run: log: (pid 92049) 104s run: postgres-exporter: (pid 92601) 18s; run: log: (pid 92367) 76s run: postgresql: (pid 91693) 184s; run: log: (pid 91704) 183s run: prometheus: (pid 92560) 20s; run: log: (pid 92297) 88s run: puma: (pid 91904) 132s; run: log: (pid 91917) 129s run: redis: (pid 91521) 196s; run: log: (pid 91538) 193s run: redis-exporter: (pid 92553) 20s; run: log: (pid 92217) 94s run: sidekiq: (pid 91922) 126s; run: log: (pid 91934) 122s Теперь можно задать логин пользователя (команда долго инициализируется) sudo gitlab-rake "gitlab:password:reset" Пользователь: root пароль: q12!qwW@ww Пробуем зайти по http://gitlab.local:8081 прописав домен в hosts Для настройки непрерывного развёртывания испотльзовать инструкцию: https://serverspace.ru/support/help/nastrojka-konvejera-nepreryvnogo-razvertyvaniya--gitlab-ubuntu-20-22/?utm_source=google.com&utm_medium=organic&utm_campaign=google.com&utm_referrer=google.com Клонирование через токен так: https://oauth2:PERSONAL_ACCESS_TOKEN@git.istt.kz/locust/org.ccalm.jwt.git https://oauth2:glpat-MCMi4iPS8GQzUusT3XUC@git.istt.kz/locust/org.ccalm.jwt.git https://oauth2:glpat-fseNuqu3Ftb7zwjv-kbT@git.istt.kz/locust/org.ccalm.dbms.git https://oauth2:glpat-5fJzjVymFqVumq6FC1yq@git.istt.kz/locust/org.ccalm.main https://oauth2:glpat-sKQh2x88gsmZbBCz4SfJ@git.istt.kz/transit/dispatcher/kz.istransit.dispatcher **************************************************************************************************** Установка nginx по инсткукции с сайта: https://www.8host.com/blog/sozdanie-samopodpisannogo-ssl-sertifikata-dlya-nginx-v-ubuntu-18-04/ sudo apt-get update sudo apt-get install nginx Настройка самоподписанного сертификата для SSL nginx sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 Создаём файл: sudo mcedit /etc/nginx/conf.d/ssl.conf И вписываем в него: server { listen 8091 ssl http2; listen [::]:8091 ssl http2; server_name istransit.kg; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; ssl_dhparam /etc/nginx/dhparam.pem; root /opt/www/istransit.kg; index index.html index.htm; location / { try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404 } } sudo systemctl restart nginx Также есть такие команды: nginx -s stop — быстрое завершение nginx -s quit — плавное завершение nginx -s reload — перезагрузка конфигурационного файла nginx -s reopen — переоткрытие лог-файлов Создаю виртуальный хост: sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/istransit.kz sudo mcedit /etc/nginx/sites-available/aistransit.kz Модифицируем текст настройки: server { listen 8081; listen [::]:8081; root /opt/www/istransit.kz; index index.html; server_name istransit.kz www.istransit.kz; location / { try_files $uri $uri/ =404; } } Теперь можно включить виртуальный хост: sudo ln -s /etc/nginx/sites-available/istransit.kz /etc/nginx/sites-enabled/ Проверяем правильность конфигурации: sudo nginx -t Перезапускаем: sudo systemctl restart nginx **************************************************************************************************** Как установить и настроить Elasticsearch, Logstash, Kibana (ELK Stack) на Ubuntu, Debian, Centos: https://portforwarded.com/install-elastic-elk-stack-8-x-on-ubuntu-22-04-lts/ или https://serveradmin.ru/ustanovka-i-nastroyka-elasticsearch-logstash-kibana-elk-stack/ sudo apt update && sudo apt upgrade -y Установи java как это делается смотри выше sudo apt-get install nginx curl gnupg2 wget -y sudo wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg sudo apt-get install apt-transport-httpssudo echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list sudo apt update sudo apt-get install elasticsearch Если не удалось подключить ключи к репозиторию то скачиваем deb пакет в ручную: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-amd64.deb sudo systemctl enable elasticsearch sudo systemctl start elasticsearch sudo mcedit /etc/elasticsearch/elasticsearch.yml И там раскоментить и прописать строку: network.host: 0.0.0.0 Также там поправить на: xpack.security.enabled: false sudo systemctl restart elasticsearch Проверяю версию Elasticsearch sudo ufw allow 9200/tcp curl -X GET "http://localhost:9200/" У меня выдало: { "name" : "igor-System-Version", "cluster_name" : "elasticsearch", "cluster_uuid" : "Li0_4xz2QTuy8ET7qRLTgg", "version" : { "number" : "8.13.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf", "build_date" : "2024-04-05T14:45:26.420424304Z", "build_snapshot" : false, "lucene_version" : "9.10.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" } **********Теперь устанавливаем Kibana********** sudo apt-get install kibana -y sudo systemctl start kibana sudo systemctl enable kibana Создаём административного пользователя: sudo su echo "admin:`openssl passwd -apr1`" | tee -a /etc/nginx/htpasswd.users Выдало: Дома: admin:$apr1$sFyWSvZH$E8tL1Zbo.i8q2vSsVy1HK/ На в виртуалке работа пароль 123456 выдало: admin:$apr1$/n5ACpeE$WZBtYrZOgZ10GfdT4YFD31 Далее создаём в Nginx виртуальный хост, создав конфигурационный файл для сервиса кибаны: sudo mcedit /etc/nginx/sites-available/kibana server { listen 80; server_name kibana.example.com; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } Разрешаем виртуальный хост для проксирования: sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/ sudo systemctl restart nginx sudo systemctl status nginx Теперь кибана должна открыться по адресу: kibana.example.com если не открылась перезагружаем комп *********Устанавливаю logstash********** sudo apt install logstash sudo systemctl restart logstash.service sudo systemctl enable logstash.service sudo systemctl status logstash.service По документу из: https://habr.com/ru/articles/236341/ и из https://coderlessons.com/tutorials/devops/uznaite-logstash/logstash-kratkoe-rukovodstvo Настраиваю logstash открываю потр для отправки логов из Java приложения log4j: Так как установили через репозиторий то для включения плагина Log4j он включается командой: sudo su /usr/share/logstash/bin/logstash-plugin install logstash-input-log4j Так как logstash загрузает все конфигурации из деректории то создаю новый файл для log4j mcedit /etc/logstash/conf.d/log4j.conf И теперь можно настроить для приёма log4j логов: input { log4j { mode => server host => "0.0.0.0" port => 5044 type => "log4j" } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "igor-%{+YYYY.MM.dd}" #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } } Затем нужно перезагрузить: sudo systemctl restart logstash.service *********Устанавливаю filebeat********** apt install filebeat **************************************************************************************************** **********Устанавливаю Loki в месте с Grafana и другими компонентами (Promtail)********** Согласно документации из: https://grafana.com/docs/loki/latest/get-started/quick-start/ Для Лва: https://www.youtube.com/watch?v=PBfKDyNPBug Создаём директорию в: cd /opt mkdir loki cd loki wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/loki-config.yaml -O loki-config.yaml wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/promtail-local-config.yaml -O promtail-local-config.yaml wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/docker-compose.yaml -O docker-compose.yaml Меням настройки, прописав в самый конец файла: loki-config.yaml следующее: auth_enabled: false Запускаем: sudo docker compose up -d Если нужно то для остановки можно выполнить следующую команду: sudo docker compose down Пробуем открыть графану: http://127.0.0.1:3000/ Логин: admin и пароль admin потом сгенерил пароль: gL%$FXVUrjP7zFf Теперь можно отправить тестовую строку в логи label “foo=bar2” and a single log line “fizzbuzz”: curl -H "Content-Type: application/json" \ -s -X POST "http://127.0.0.1:3100/loki/api/v1/push" \ --data-raw '{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1717279123945000000", "fizzbuzz" ] ] }]}' **********Устанавливаю Promtail********** По мотивам: https://tech.pansolusi.com/2023/08/04/installing-promtail-on-ubuntu/ cd /opt mkdir promtail cd promtail curl -O -L "https://github.com/grafana/loki/releases/download/v2.9.7/promtail-linux-amd64.zip" unzip "promtail-linux-amd64.zip" promtail -version sudo mcedit /opt/promtail/promtail-local-config.yaml И записываем в файл: server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: 'http://localhost:3100/loki/api/v1/push' basic_auth: username: alexander password: eakrdutpnhjaE2EFrAoi scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log - targets: - localhost labels: job: nginx __path__: /var/log/nginx/*log Создаём сервис для запуска Promtail sudo mcedit /etc/systemd/system/promtail.service И записываем: [Unit] Description=Promtail client for sending logs to Loki After=network.target [Service] ExecStart=/opt/promtail/promtail -config.file=/opt/promtail/promtail-local-config.yaml Restart=always TimeoutStopSec=3 [Install] WantedBy=multi-user.target Запускаем: sudo service promtail start sudo service promtail stop sudo service promtail restart sudo service promtail status sudo systemctl enable promtail Смотрим логи: sudo journalctl -u promtail.service Теперь можно смотреть в графане логи: http://127.0.0.1:3000/ с label = file Также можно взглянуть на простой WEB интерфейс promtail: http://127.0.0.1:9080 **********Устанавливаю Prometheus согласно инструкции из https://ruvds.com/ru/helpcenter/kak-ustanovit-prometheus-na-ubuntu/ ********** Установка Prometheus sudo apt update && sudo apt upgrade -y && sudo useradd --no-create-home --shell /bin/false prometheus && sudo mkdir /etc/prometheus && sudo mkdir /var/lib/prometheus && sudo chown prometheus:prometheus /etc/prometheus && sudo chown prometheus:prometheus /var/lib/prometheus && cd /tmp && wget https://github.com/prometheus/prometheus/releases/download/v3.1.0/prometheus-3.1.0.linux-amd64.tar.gz && tar xvf prometheus-3.1.0.linux-amd64.tar.gz && sudo cp prometheus-3.1.0.linux-amd64/prometheus /usr/local/bin/ && sudo cp prometheus-3.1.0.linux-amd64/promtool /usr/local/bin/ && sudo chown prometheus:prometheus /usr/local/bin/prometheus && sudo chown prometheus:prometheus /usr/local/bin/promtool && rm -rf prometheus-3.1.0.linux-amd64.tar.gz prometheus-3.1.0.linux-amd64 Настройка Prometheus Создайте файл конфигурации prometheus.yml: sudo mcedit /etc/prometheus/prometheus.yml Прописал туда настройки: global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] Созданём systemd-сервис: sudo mcedit /etc/systemd/system/prometheus.service [Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ [Install] WantedBy=multi-user.target Запускаю сервис: sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus Пробуем открыть по адресу: http://192.168.200.84:9090 Теперь настраиваем сбор логов при помощи node exporter (по мотивам из https://it-dev-journal.ru/articles/monitoring-linux-servera-s-prometheus-node-exporter): Последний билд: https://github.com/prometheus/node_exporter/releases wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz tar xf node_exporter-*.tar.gz cd node_exporter-1.8.2.linux-amd64 sudo cp node_exporter /usr/local/bin sudo useradd --no-create-home --home-dir / --shell /bin/false node_exporter Создаём сервис: sudo mcedit /etc/systemd/system/node_exporter.service [Unit] Description=Prometheus Node Exporter After=network.target [Service] Type=simple User=node_exporter Group=node_exporter ExecStart=/usr/local/bin/node_exporter SyslogIdentifier=node_exporter Restart=always PrivateTmp=yes ProtectHome=yes NoNewPrivileges=yes ProtectSystem=strict ProtectControlGroups=true ProtectKernelModules=true ProtectKernelTunables=yes [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter sudo systemctl status node_exporter Теперь Node exporter будет выдавать метрики по адресу wget http://localhost:9100/metrics -O - wget --user=prometheus --password=PUaAMOhUEOmDmcsJDFWA https://geoserver2.ccalm.org/metrics -O - Настраиваем HAProxy и basic авторизацию (если писать: insecure-password то пароль не захеширован если написать password то должен быть в md5 лил SHA-*): userlist prometheus_list user prometheus insecure-password PUaAMOhUEOmDmcsJDFWA acl v_metrics path_beg /metrics acl v_basic_auth http_auth(prometheus) http-request auth realm Metrics if v_metrics !v_basic_auth use_backend metrics if v_metrics backend metrics balance roundrobin server web1 127.0.0.1:9100 check option httpchk Теперь нужно отредактировать файл sudo mcedit /etc/prometheus/prometheus.yml, добавив новый job_name в scrape_configs с этим адресом. - job_name: 'node_exporter_metrics' scrape_interval: 10s static_configs: - targets: ['localhost:9100'] Перезагружаем prometheus чтобы он начал собирать метрики sudo systemctl restart prometheus Смотрим: http://192.168.200.84:9090/targets Далее устанавливаем графану и добавляем графики для мониторинга sudo apt-get install -y software-properties-common sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" sudo apt-get install -y gnupg sudo apt-get install -y apt-transport-https sudo wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install grafana Запустите и включите сервис Grafana: sudo systemctl start grafana-server sudo systemctl enable grafana-server Проверьте статус: sudo systemctl status grafana-server Открываем: http://192.168.200.84:3000 Логин: admin Пароль: admin Заходим в: Home->Connections->Data sources->Add data source Для Node Exporter есть шаблоны: Node Exporter Full (ID: 1860) — Полный дашборд для мониторинга серверов с использованием Node Exporter. Prometheus (ID: 10991) — Дашборд для мониторинга самого Prometheus. Linux Server Monitoring (ID: 10244) — Дополнительный дашборд для мониторинга серверов на Linux. Если вам нужно больше вариантов, вы всегда можете найти готовые дашборды на официальном сайте https://grafana.com/grafana/dashboards/ Заходим в графану и в правом верхенем углу жмём + потом Import Dashboard **********Если нужно то Grafana может быть установленна отдельно ********** Установка GrafanaLoki через Docker Engine и Docker Compose на Ubuntu 24.04 Для установки графаны через докер: cd /opt sudo mkdir grafana cd ./grafana sudo mcedit docker-compose.yml И прописываем в файл: version: "3.3" services: grafana: image: grafana/grafana-enterprise container_name: grafana restart: unless-stopped ports: - '3000:3000' loki: image: grafana/loki:latest container_name: loki restart: unless-stopped ports: - "3100:3100" Затем для запуска контейнера выполняем: sudo docker-compose up -d Если нужно то для остановки можно выполнить следующую команду: sudo docker-compose down Пробуем открыть графану: http://127.0.0.1:3000/ Логин: admin и пароль admin потом сгенерил пароль: gL%$FXVUrjP7zFf **************************************************************************************************** Настраиваю Promtail agent для винды для сбора логов c Windows: Скачал: https://github.com/grafana/loki/releases в разделе Assets файл promtail-windows-386.exe.zip Переместите файл promtail.exe в каталог, например, C:\Program Files\promtail Добавьте этот каталог в PATH, чтобы можно было запускать Promtail из командной строки. Создаём файл конфигурации в C:\Program Files\promtail promtail-config.yaml со следующим содержимым: server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: C:\Program Files\promtail\positions.yaml clients: - url: http://192.168.200.106:3100/loki/api/v1/push scrape_configs: - job_name: dbms_logs static_configs: - targets: - localhost labels: job: dbms_logs __path__: O:\MyDocuments\projects\Workspace_JavaWin\com.geovizor.dbms\logs\kz_mcp_dbms.log - job_name: jwt_logs static_configs: - targets: - localhost labels: job: jwt_logs __path__: O:\MyDocuments\projects\Workspace_JavaWin\com.geovizor.jwt\logs\kz_mcp_jwt.log Замените C:\path\to\positions.yaml и C:\path\to\log\files\*.log на соответствующие вашему окружению пути. promtail.exe --config.file=promtail-config.yaml **************************************************************************************************** Установка графаны через докер Grafana в Docker, по мотивам нейросети DeepSeek: Установка Docker: sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io Установка Docker Compose: sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose Добавляем текущему пользователю группу чтобы он мог работать с докером: sudo usermod -aG docker $USER Проверка установки: docker --version docker-compose --version Создайте директорию, где будут храниться данные Grafana: sudo mkdir /opt/grafana sudo mkdir /opt/grafana/data sudo mkdir /opt/grafana/data/grafana-storage sudo mkdir /opt/grafana/config sudo chown -R 472:472 /opt/grafana/data/grafana-storage sudo chmod -R 775 /opt/grafana/data/grafana-storage cd /opt/grafana mcedit docker-compose.yml И записываем в него такие настройки: services: grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - "3000:3000" volumes: - /opt/grafana/data/grafana-storage:/var/lib/grafana # Монтируем директорию хоста в контейнер environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin Запускаем графану с логами для тестов: docker-compose -f /opt/grafana/docker-compose.yml up Теперь запускае в фоновом режиме: docker-compose -f /opt/grafana/docker-compose.yml up -d docker-compose -f /opt/grafana/docker-compose.yml down Проверяем работу: docker-compose -f /opt/grafana/docker-compose.yml ps **************************************************************************************************** Устанавливаю Gitea по мативам: https://linuxize.com/post/how-to-install-gitea-on-ubuntu-20-04/ sudo apt update sudo apt install sqlite3 sudo apt install git git --version sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git VERSION=1.22 sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64 sudo mv /tmp/gitea /usr/local/bin sudo chmod +x /usr/local/bin/gitea Создаём директории для хранения данных: sudo mkdir -p /var/lib/gitea/{custom,data,log} sudo chown -R git:git /var/lib/gitea/ sudo chmod -R 750 /var/lib/gitea/ sudo mkdir /etc/gitea sudo chown root:git /etc/gitea sudo chmod 770 /etc/gitea sudo wget https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service -P /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now gitea sudo systemctl status gitea Отобразило что можно зайти по: http://localhost:3000/ Выбираем Database Type: SQLite3 остальные настройки можно оставить по умолчанию Установил и задал логин: irigm@mail.ru пароль: PF"Ey7#7]mUZ49s Устанавливаем параметры только чтение: sudo chmod 750 /etc/gitea sudo chmod 640 /etc/gitea/app.ini По мотивам на сайте ещё описывается как сделать проксирование через nginx А также как сделать отправку почты А также как обновит если что **********CI/CD********** Устанавливаю по инструкции из: https://gitea.com/gitea/act_runner Скачиваю act_runner с https://about.gitea.com/products/runner/ в директорию: /usr/local/bin Задаём права: sudo chown root:root /usr/local/bin/act_runner Проверяю версию: act_runner --version Выдало: v0.2.6 Записываем в конец файла /etc/gitea/app.ini следующие настройки: [actions] ENABLED=true Потом: sudo systemctl restart gitea Далее переходим в настройки проекта в пункт "Действия": "Создать новый раннер" Там был токен: CIaWAmzI4jYUCRnQcUCdBFPkg4FPGspnjdpqiqXl Создаю каталог: /etc/act_runner Генерю конфиг по умолчанию: act_runner generate-config > config.yaml Регистрирую новый runner act_runner register В WEB интерфейсе gitea появится но похоже от туда можно только удалить. Можно попробовать запустить runner: act_runner daemon Регистрация с конфигурационным файлом: act_runner -c config.yaml register Запуск с конфигурационным файлом act_runner -c config.yaml daemon Можно запустить act_runner как сервис, создав файл: sudo mcedit /etc/systemd/system/act_runner.service но нужно создать ползоветеля без привилений, такого: act_runner Но у меня почему то не запустилось... Так: sudo adduser --disabled-password act_runner sudo passwd act_runner su act_runner Давать права не обязательно: sudo chown root:root /usr/local/bin/act_runner [Unit] Description=Gitea Actions runner Documentation=https://gitea.com/gitea/act_runner After=docker.service [Service] ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml ExecReload=/bin/kill -s HUP $MAINPID WorkingDirectory=/var/lib/act_runner TimeoutSec=0 RestartSec=10 Restart=always User=act_runner [Install] WantedBy=multi-user.target Запускаем как сервис: sudo systemctl daemon-reload sudo systemctl enable act_runner sudo systemctl restart act_runner sudo systemctl stop act_runner sudo systemctl start act_runner sudo systemctl status act_runner Посмотреть на лог: grep "act_runner" /var/log/syslog # .gitea/workflows/publish.yml on: push: branches: - main workflow_dispatch: jobs: run_pull: name: run pull runs-on: igor steps: - name: CreateDate run: touch /home/igor/runner/$(date +"%Y-%m-%d_%H-%M-%S").txt **************************************************************************************************** Устанавливаю из Node.js из не стандартного репозитория так как там v12.22.9 а нужно >= 18 версия Удаляем старое: sudo apt-get remove nodejs npm Устанавливаем новое: curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs node -v npm -v **************************************************************************************************** LDAP — легковесный протокол доступа к каталогам (Для адрестной книги) sudo apt install slapd ldap-utils sudo dpkg-reconfigure slapd Настраиваем в файле: /etc/ldap/ldap.conf BASE dc=domain,dc=com URI ldap://ldap01.domain.com **************************************************************************************************** Простой инструмент для мониторинга ресурсов сервера: sudo apt install netdata systemctl restart netdata sudo mcedit /etc/netdata/netdata.conf # bind socket to IP = 127.0.0.1 bind socket to IP = 0.0.0.0 systemctl restart netdata Можно открывать по адресу: http://10.101.1.3:19999/ http://10.101.1.6:19999/ **************************************************************************************************** Install .NET SDK or .NET Runtime on Ubuntu sudo apt-get update sudo apt-get install -y dotnet-sdk-8.0 sudo apt-get install -y aspnetcore-runtime-8.0 sudo apt-get install -y dotnet-runtime-8.0 sudo apt install zlib1g Теперь можно запустить C# ASP.NET Core **************************************************************************************************** ssl genkeypair spring boot java Генерим самоподписанный SSL сертификат: keytool -genkeypair -alias weather -keyalg RSA -keystore keystore.jks -keysize 2048 -validity 3650 Потом прописать настройки: server: port: 8081 ssl: key-store: classpath:keystore.jks key-store-password: QyKtWPZB key-store-type: JKS key-alias: weather **************************************************************************************************** Для разрешения поиска через Samba и NetBIOS: sudo apt update sudo apt install samba sudo systemctl restart smbd sudo systemctl enable smbd **************************************************************************************************** Туннелирование SSH через HTTP при помощи https://github.com/larsbrinkhoff/httptunnel: sudo apt-get install httptunnel Настроил haproxy примерно так, чтобы проверялся параметр "mybiglogfile" для редиректа: frontend frontend-http bind *:80 mode http acl v_tunnel url_param(mybiglogfile) -m found use_backend httptunnel_backend if v_tunnel http-request redirect scheme https code 301 unless { ssl_fc } || v_tunnel Если есть проксирование через Nginx то добавляем в конфигурацю это: proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection ""; proxy_pass_request_body on; Проверить нет ли редиректо можно так: curl -I http://192.168.200.81/index.html?mybiglogfile=all curl -I http://locust.kz/index.html?mybiglogfile=all На сервере запустил прослушку на 9999 и перенаправление на 22: sudo hts -F 127.0.0.1:22 9999 Для остановки ps aux | grep hts sudo kill 1854 Можно запустить как сервис так sudo mcedit /etc/systemd/system/httptunnel.service: [Unit] Description=HTTP Tunnel Service After=network.target [Service] ExecStart=hts -F 127.0.0.1:22 9999 Restart=always User=root [Install] WantedBy=multi-user.target Потом: sudo systemctl daemon-reload sudo systemctl enable httptunnel sudo systemctl start httptunnel sudo systemctl status httptunnel tail -f /var/log/syslog | grep --line-buffered "htc" На клиенте запускаем локальный порт также указал 9999 а ключь htc -F 9999 --base-uri /index.html?mybiglogfile=all 192.168.200.81:80 htc -F 9999 --base-uri /index.html?mybiglogfile=all locust.kz:80 Для остановки ps aux | grep htc Потом sudo kill 783 Пробую подключиться после настройки тунеля: ssh igor@127.0.0.1 -p 9999 **************************************************************************************************** Установка Gotify через докер контейнер sudo apt update && sudo apt install -y docker.io docker-compose sudo mkdir -p /opt/gotify cd /opt/gotify Создадим конфигурацию: sudo nano /opt/gotify/docker-compose.yml