Включение автозагрузки MySQL в Ubuntu
Включить автозагрузку при старте системы
sudo systemctl enable mysql
Для немедленного запуска (если не запущен)
sudo systemctl start mysql
Перезапуск службы
sudo systemctl restart mysql
Включение автозагрузки MySQL в Ubuntu
sudo systemctl enable mysql
sudo systemctl start mysql
sudo systemctl restart mysql
Чтобы сменить регион с 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 для внутренних номеров (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
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 мб, и Вы получаете рабочий сервер
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 {} \;
sudo chmod -R 775 /var/www/html/wp-content/
sudo chown -R www-data:www-data /var/www/html/wp-content/