Рубрика: Uncategorized

  • Включение автозагрузки MySQL в Ubuntu

    Включение автозагрузки MySQL в Ubuntu

    Включить автозагрузку при старте системы

    sudo systemctl enable mysql

    Для немедленного запуска (если не запущен)

    sudo systemctl start mysql

    Перезапуск службы

    sudo systemctl restart mysql

  • Смена региона на роутере gl-inet be3600 state 7

    Чтобы сменить регион с CN на EN на роутере gl-inet be3600 state 7 подключитесь к роутеру по ssh, обычно 192:168.8.1 с помощью putty или других ssh клиентов, введите логин root и пароль от Вашей админки, далее после авторизации выполните команду:

    dd if=/dev/mtdblock11 bs=1 skip=136 count=2 2>/dev/null | grep -q «CN» && { echo -n «US» | dd of=/dev/mtdblock11 bs=1 seek=136 conv=notrunc; sync; echo «OK»; reboot; } || echo «ERROR»

    В результате выполнения данной команды регион сменится с Китая на Америку и роутер обретет все функции Американской версии.

  • Настройка sms обмена для внутренних пользователей asterisk

    Настройки SMS для внутренних номеров (3 и 5 цифр) в Asterisk

    1. Основная конфигурация SIP (sip.conf)

    «`ini

    [general]

    accept_outofcall_message = yes

    auth_message_requests = yes

    allow = message

    ; Шаблон для внутренних пользователей

    [internal-template](!)

    type = friend

    host = dynamic

    context = internal-sms

    dtmfmode = rfc2833

    qualify = yes

    allow = all

    accept_outofcall_message = yes

    auth_message_requests = yes

    allow = message

    ; Примеры пользователей с 3-значными номерами

    [101](internal-template)

    secret = password101

    callerid = «User 101» <101>

    [202](internal-template)

    secret = password202

    callerid = «User 202» <202>

    [999](internal-template)

    secret = password999

    callerid = «User 999» <999>

    ; Примеры пользователей с 5-значными номерами

    [10001](internal-template)

    secret = password10001

    callerid = «User 10001» <10001>

    [54321](internal-template)

    secret = password54321

    callerid = «User 54321» <54321>

    [88888](internal-template)

    secret = password88888

    callerid = «User 88888» <88888>

    «`

    2. Диалплан для обработки SMS (extensions.conf)

    «`ini

    [internal-sms]

    ; Обработка входящих SMS для 3-значных номеров (101-999)

    exten => _[1-9][0-9][0-9],1,NoOp(Received SMS for 3-digit number: ${EXTEN})

    exten => _[1-9][0-9][0-9],n,Goto(process_sms,1)

    ; Обработка входящих SMS для 5-значных номеров (10000-99999)

    exten => _[1-9][0-9][0-9][0-9][0-9],1,NoOp(Received SMS for 5-digit number: ${EXTEN})

    exten => _[1-9][0-9][0-9][0-9][0-9],n,Goto(process_sms,1)

    ; Общая обработка SMS

    exten => process_sms,1,NoOp(Processing SMS from ${MESSAGE(from)} to ${EXTEN})

    exten => process_sms,n,Set(FROM_NUMBER=${CUT(MESSAGE(from),@,1)})

    exten => process_sms,n,Set(FROM_NUMBER=${CUT(FROM_NUMBER,:,2)})

    exten => process_sms,n,Set(SMS_TIMESTAMP=${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})

    exten => process_sms,n,Set(SMS_ID=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})

    ; Проверка валидности отправителя (3 или 5 цифр)

    exten => process_sms,n,GotoIf($[${LEN(${FROM_NUMBER})} = 3]?valid_sender)

    exten => process_sms,n,GotoIf($[${LEN(${FROM_NUMBER})} = 5]?valid_sender)

    exten => process_sms,n,NoOp(Invalid sender number: ${FROM_NUMBER})

    exten => process_sms,n,MessageSend(sip:${FROM_NUMBER}@localhost,sip:${EXTEN}@localhost,»Error: Invalid sender number»)

    exten => process_sms,n,Hangup()

    exten => process_sms,n(valid_sender),Set(DB(SMS/${EXTEN}/inbox/${SMS_ID}/from)=${FROM_NUMBER})

    exten => process_sms,n,Set(DB(SMS/${EXTEN}/inbox/${SMS_ID}/message)=${MESSAGE(body)})

    exten => process_sms,n,Set(DB(SMS/${EXTEN}/inbox/${SMS_ID}/timestamp)=${SMS_TIMESTAMP})

    exten => process_sms,n,Set(DB(SMS/${EXTEN}/inbox/${SMS_ID}/status)=unread)

    ; Отправляем подтверждение доставки

    exten => process_sms,n,MessageSend(sip:${FROM_NUMBER}@localhost,sip:${EXTEN}@localhost,»SMS delivered to ${EXTEN}»)

    ; Логируем доставку

    exten => process_sms,n,Set(LOG=/var/log/asterisk/sms.log)

    exten => process_sms,n,System(echo «[${SMS_TIMESTAMP}] FROM:${FROM_NUMBER} TO:${EXTEN} MSG:’${MESSAGE(body)}’» >> ${LOG})

    exten => process_sms,n,Hangup()

    ; Сервисные номера для работы с SMS

    exten => *99,1,NoOp(SMS Inbox Check for ${CALLERID(num)})

    exten => *99,n,Set(SMS_COUNT=0)

    exten => *99,n,Set(SMS_LIST=${DB_KEYS(SMS/${CALLERID(num)}/inbox,)})

    exten => *99,n,GotoIf($[${ISNULL(${SMS_LIST})}]?no_messages)

    ; Чтение сообщений

    exten => *99,n,While($[${SET(sms_id=${SHIFT(SMS_LIST)})}])

    exten => *99,n,Set(SMS_FROM=${DB(SMS/${CALLERID(num)}/inbox/${sms_id}/from)})

    exten => *99,n,Set(SMS_MSG=${DB(SMS/${CALLERID(num)}/inbox/${sms_id}/message)})

    exten => *99,n,Set(SMS_TIME=${DB(SMS/${CALLERID(num)}/inbox/${sms_id}/timestamp)})

    exten => *99,n,Playback(from)

    exten => *99,n,SayNumber(${SMS_FROM})

    exten => *99,n,PlayBACK(message)

    exten => *99,n,SayAlpha(${SMS_MSG})

    exten => *99,n,Set(DB(SMS/${CALLERID(num)}/inbox/${sms_id}/status)=read)

    exten => *99,n,Set(SMS_COUNT=$[${SMS_COUNT} + 1])

    exten => *99,n,EndWhile()

    exten => *99,n,Playback(you-have)

    exten => *99,n,SayNumber(${SMS_COUNT})

    exten => *99,n,Playback(messages)

    exten => *99,n,Hangup()

    exten => *99,n(no_messages),PlayBACK(you-have-no-new-messages)

    exten => *99,n,Hangup()

    ; Очистка всех SMS

    exten => *98,1,NoOp(Clear SMS inbox for ${CALLERID(num)})

    exten => *98,n,Set(SMS_KEYS=${DB_KEYS(SMS/${CALLERID(num)}/inbox,)})

    exten => *98,n,GotoIf($[${ISNULL(${SMS_KEYS})}]?empty_inbox)

    exten => *98,n,While($[${SET(sms_key=${SHIFT(SMS_KEYS)})}])

    exten => *98,n,Set(DB_DELETE(SMS/${CALLERID(num)}/inbox/${sms_key}))

    exten => *98,n,EndWhile()

    exten => *98,n,Playback(messages-deleted)

    exten => *98,n,Hangup()

    exten => *98,n(empty_inbox),PlayBACK(no-messages-to-delete)

    exten => *98,n,Hangup()

    ; Проверка существования номера

    exten => *97,1,NoOp(Check if number exists: ${CALLERID(num)})

    exten => *97,n,Playback(your-number-is)

    exten => *97,n,SayNumber(${CALLERID(num)})

    exten => *97,n,Playback(and-has)

    exten => *97,n,Set(SMS_EXISTS=${DB_EXISTS(SMS/${CALLERID(num)}/inbox)})

    exten => *97,n,GotoIf($[${SMS_EXISTS}]?has_messages:no_messages_97)

    exten => *97,n(has_messages),Set(MSG_COUNT=${DB_KEYS(SMS/${CALLERID(num)}/inbox,)})

    exten => *97,n,Playback(you-have)

    exten => *97,n,SayNumber(${MSG_COUNT})

    exten => *97,n,Playback(messages)

    exten => *97,n,Hangup()

    exten => *97,n(no_messages_97),PlayBACK(no-messages)

    exten => *97,n,Hangup()

    «`

    3. Утилиты для работы с SMS

    Создайте файл /usr/local/bin/sms_tool:

    «`bash

    #!/bin/bash

    function show_usage {

        echo «SMS Tool for Asterisk»

        echo «Usage: $0 {send|inbox|count|clear|list} [parameters]»

        echo »  send <from> <to> <message>»

        echo »  inbox <number>»

        echo »  count <number>»

        echo »  clear <number>»

        echo »  list [pattern]»

    }

    case «$1» in

        send)

            if [ $# -lt 4 ]; then

                echo «Usage: $0 send <from> <to> <message>»

                exit 1

            fi

            asterisk -rx «message send sip:$2@localhost sip:$3@localhost $4»

            ;;

        inbox)

            if [ $# -lt 2 ]; then

                echo «Usage: $0 inbox <number>»

                exit 1

            fi

            asterisk -rx «database show SMS/$2»

            ;;

        count)

            if [ $# -lt 2 ]; then

                echo «Usage: $0 count <number>»

                exit 1

            fi

            asterisk -rx «database show SMS/$2» | grep -c «/inbox/»

            ;;

        clear)

            if [ $# -lt 2 ]; then

                echo «Usage: $0 clear <number>»

                exit 1

            fi

            asterisk -rx «database deltree SMS/$2»

            ;;

        list)

            if [ $# -eq 2 ]; then

                asterisk -rx «database show» | grep «SMS/» | grep «$2» | cut -d/ -f2 | sort | uniq

            else

                asterisk -rx «database show» | grep «SMS/» | cut -d/ -f2 | sort | uniq

            fi

            ;;

        *)

            show_usage

            ;;

    esac

    «`

    4. Примеры использования

    Отправка SMS между разными форматами номеров:

    «`bash

    # От 3-значного к 3-значному

    asterisk -rx «message send sip:101@localhost sip:202@localhost Hello from 101!»

    # От 3-значного к 5-значному

    asterisk -rx «message send sip:999@localhost sip:10001@localhost Message to long number»

    # От 5-значного к 3-значному

    asterisk -rx «message send sip:54321@localhost sip:101@localhost Hi from 54321»

    # От 5-значного к 5-значному

    asterisk -rx «message send sip:10001@localhost sip:88888@localhost Test message»

    «`

    Использование утилиты:

    «`bash

    # Дать права на выполнение

    chmod +x /usr/local/bin/sms_tool

    # Примеры использования

    sms_tool send 101 10001 «Test message»

    sms_tool inbox 101

    sms_tool count 10001

    sms_tool list

    sms_tool clear 202

    «`

    5. Проверка конфигурации

    «`bash

    # Проверка синтаксиса конфигураций

    asterisk -rx «sip show settings» | grep -i message

    asterisk -rx «dialplan show internal-sms»

    # Мониторинг SMS трафика

    tail -f /var/log/asterisk/sms.log

    # Проверка зарегистрированных номеров

    asterisk -rx «sip show peers» | grep -E «(101|202|999|10001|54321|88888)»

    «`

    6. Важные особенности

    · ✅ Поддержка смешанной нумерации (3 и 5 цифр)

    · ✅ Проверка валидности длины номеров

    · ✅ Единая обработка для всех форматов номеров

    · ✅ Совместимость с любыми номерами, начинающимися с 1-9

    · ✅ Централизованное логирование всех операций

    Теперь система поддерживает SMS между любыми внутренними номерами длиной 3 или 5 цифр, начинающимися с любой цифры от 1 до 9.

  • Установка LEMP + phpMyAdmin + Let’s Encrypt на Ubuntu 22.04

    Установка LEMP + phpMyAdmin + Let’s Encrypt на Ubuntu 22.04

    1. Обновление системы

    «`bash

    sudo apt update && sudo apt upgrade -y

    sudo apt install -y curl wget software-properties-common

    «`

    2. Установка Nginx

    «`bash

    sudo apt install -y nginx

    sudo systemctl start nginx

    sudo systemctl enable nginx

    «`

    3. Установка MariaDB

    «`bash

    sudo apt install -y mariadb-server mariadb-client

    sudo systemctl start mariadb

    sudo systemctl enable mariadb

    «`

    Настройка безопасности MariaDB

    «`bash

    sudo mysql_secure_installation

    «`

    Ответьте на вопросы:

    · Enter current password for root (enter for none): Enter

    · Set root password? [Y/n]: Y

    · New password: ваш_пароль

    · Remove anonymous users? [Y/n]: Y

    · Disallow root login remotely? [Y/n]: Y

    · Remove test database and access to it? [Y/n]: Y

    · Reload privilege tables now? [Y/n]: Y

    4. Установка PHP 8.1

    «`bash

    sudo apt install -y php-fpm php-mysql php-mbstring php-xml php-curl php-zip php-gd php-bcmath

    «`

    Проверка версии PHP

    «`bash

    php -v

    «`

    5. Настройка Nginx для PHP

    «`bash

    sudo nano /etc/nginx/sites-available/default

    «`

    Замените содержимое на:

    «`nginx

    server {

        listen 80;

        listen [::]:80;

        server_name ваш_домен.com www.ваш_домен.com;

        root /var/www/html;

        index index.php index.html index.htm;

        location / {

            try_files $uri $uri/ =404;

        }

        location ~ \.php$ {

            include snippets/fastcgi-php.conf;

            fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            include fastcgi_params;

        }

        location ~ /\.ht {

            deny all;

        }

    }

    «`

    Проверка конфигурации Nginx

    «`bash

    sudo nginx -t

    sudo systemctl reload nginx

    «`

    6. Создание тестового PHP-файла

    «`bash

    echo «<?php phpinfo(); ?>» | sudo tee /var/www/html/info.php

    «`

    7. Установка phpMyAdmin

    «`bash

    sudo apt install -y phpmyadmin

    «`

    Во время установки выберите:

    · Веб-сервер: apache2 (выберите пробелом) → OK

    · Настройка базы данных для phpmyadmin: Да

    · Пароль для phpmyadmin: ваш_пароль

    Создание символической ссылки для Nginx

    «`bash

    sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

    «`

    Настройка прав доступа

    «`bash

    sudo chown -R www-data:www-data /usr/share/phpmyadmin

    sudo chmod -R 755 /usr/share/phpmyadmin

    «`

    8. Установка Certbot для Let’s Encrypt

    «`bash

    sudo apt install -y certbot python3-certbot-nginx

    «`

    9. Получение SSL сертификата

    «`bash

    sudo certbot —nginx -d ваш_домен.com -d www.ваш_домен.com

    «`

    Следуйте инструкциям:

    · Email для уведомлений: ваш_email

    · Принять условия: Y

    · Подписка на рассылку: N (или Y)

    · Перенаправление HTTP → HTTPS: 2

    10. Автоматическое обновление сертификатов

    «`bash

    sudo certbot renew —dry-run

    «`

    11. Финальная проверка

    «`bash

    sudo systemctl status nginx

    sudo systemctl status mariadb

    sudo systemctl status php8.1-fpm

    «`

    12. Дополнительные настройки безопасности

    Настройка MariaDB для phpMyAdmin

    «`bash

    sudo mysql -u root -p

    «`

    «`sql

    CREATE USER ‘phpmyadmin’@’localhost’ IDENTIFIED BY ‘ваш_пароль’;

    GRANT ALL PRIVILEGES ON *.* TO ‘phpmyadmin’@’localhost’ WITH GRANT OPTION;

    FLUSH PRIVILEGES;

    EXIT;

    «`

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

    «`bash

    sudo ufw allow ‘Nginx Full’

    sudo ufw allow OpenSSH

    sudo ufw enable

    «`

    Проверка установки

    1. Nginx: Откройте в браузере http://ваш_домен.com

    2. PHP: Откройте http://ваш_домен.com/info.php

    3. phpMyAdmin: Откройте https://ваш_домен.com/phpmyadmin

    4. SSL: Проверьте наличие зеленого замка в адресной строке

    Важные команды для управления

    Перезагрузка служб:

    «`bash

    sudo systemctl reload nginx

    sudo systemctl restart php8.1-fpm

    sudo systemctl restart mariadb

    «`

    Просмотр логов:

    «`bash

    sudo tail -f /var/log/nginx/error.log

    sudo tail -f /var/log/php8.1-fpm.log

    «`

    Обновление сертификатов вручную:

    «`bash

    sudo certbot renew

    «`

    В итоге данный пакет вместе с сертификатами весит 542 мб, и Вы получаете рабочий сервер

  • Исправление прав для WordPress

    Установите правильного владельца для всей директории WordPress

    sudo chown -R www-data:www-data /var/www/html

    Установите правильные права доступа

    sudo find /var/www/html -type d -exec chmod 755 {} \;
    sudo find /var/www/html -type f -exec chmod 644 {} \;

    Особые права для wp-content

    sudo chmod -R 775 /var/www/html/wp-content/
    sudo chown -R www-data:www-data /var/www/html/wp-content/