Большинство наших клиентов работают с хостингом через панель управления. Нашим клиентам, которым требуется автоматизировать работу с хостингом без входа в панель управления, мы можем предложить API.
С его помощью можно делать все тоже самое, что и через панель — создавать и удалять сайты или контейнеры, менять настройки PHP, перезагружать сайты и многое другое.
Откройте раздел “Ключ API” в панели управления. Если ключ еще не создан, то нажмите “Создать ключ”.
При помощи API ключа получите токен, который будет действовать 24 часа:
Запрос
curl -XPOST https://panel.netangels.ru/api/gateway/token/ -d 'api_key=3fyL8piL6goKDkWa8ctK6AdQsfW79N5uG9cLD71hfjc3rHKhXfQ7t96b'
Ответ
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6InUzNzY2MyIsImV4cCI6MTU2NjQxMjc3M30.FQNDFOqJDaLvZgiqxhDp9jljulGDoeT5zlQ4aZArLfs"
}
Более подробно получение токена описано на странице https://api.netangels.ru/gateway/#token-obtain
Сохраним токен как переменную, чтобы проще было обращаться к нему:
export TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6InUzNzY2MyIsImV4cCI6MTU2NjQxMjc3M30.FQNDFOqJDaLvZgiqxhDp9jljulGDoeT5zlQ4aZArLfs"
Теперь все готово, чтобы полноценно работать с API.
curl --request POST https://api-ms.netangels.ru/api/v1/hosting/containers/ -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" --data '{ "name": "Мои сайты", "memory_limit": 512, "quota": 5120, "redis": 512, "memcache": 512 }'
{
"created": "2019-08-20 13:49:21",
"enabled": true,
"environment": "STRETCH",
"id": 10214, # <--- уникальный номер контейнера
"is_in_transfer": false,
"locked": false,
"login": "c10214",
"memcache": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1864,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"memory_limit": 512,
"name": "Мои сайты",
"quota": 5120,
"redis": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1198,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"service_address": "h7.netangels.ru",
"service_ip": "91.201.52.235",
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21",
"virtualhosts": {
"entities": []
}
При создании контейнера в ответе нам был показан уникальный номер контейнера “id”: 10214. Он понадобится нам для создания сайта в поле container_id
.
Запрос
curl --request POST https://api-ms.netangels.ru/api/v1/hosting/virtualhosts/install/ -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" --data '{"name": "apitest.na4u.ru", "image": "wordpress", "force_https": true, "charset": "utf-8", "aliases": ["www.apitest.na4u.ru"], "main_alias": "apitest.na4u.ru", "container_id": "10214", "admin_email": "info@netangels.ru", "admin_password": "Ra7Ia2oh" }'
{
"aliases": [
"apitest.na4u.ru",
"www.apitest.na4u.ru"
],
"cache_static": 0,
"certificate_id": 0,
"charset": "utf-8",
"container": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"environment": "STRETCH",
"id": 10214,
"is_in_transfer": false,
"locked": false,
"login": "c10214",
"memcache": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1864,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"memory_limit": 512,
"name": "Мои сайты",
"quota": 5120,
"redis": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1198,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"service_address": "h7.netangels.ru",
"service_ip": "91.201.52.235",
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21",
"virtualhosts": {
"entities": []
}
},
"container_id": 10214,
"created": "2019-08-20 14:02:10",
"cron_mail": "",
"dbms_account": {
"connection_string": "mysql:\u002f\u002fc10214_apitest_na4u_ru:KiPqeKebdusaf56@localhost\u002fc10214_apitest_na4u_ru",
"created": "2019-08-20 14:02:10",
"databases": [],
"db_servers_string": "localhost",
"id": 19525,
"login": "c10214_apitest_na4u_ru",
"password": "KiPqeKebdusaf56",
"type": "mysql",
"updated": "2019-08-20 14:02:10",
"virtual_host": null
},
"enabled": true,
"engine": "php",
"engine_directives": [
"max_input_vars = 20000",
"upload_max_filesize = 128M",
"post_max_size = 128M",
"display_errors = 0",
"log_errors = 1",
"date.timezone = Europe\u002fMoscow",
"error_log = \u002fhome\u002fc10214\u002fapitest.na4u.ru\u002flog\u002fphp-errors.log",
"mail.log = \u002fhome\u002fc10214\u002fapitest.na4u.ru\u002flog\u002fphp-mail.log"
],
"engine_version": "7.3",
"environment_variables": [
"PATH=\u002fhome\u002fc10214\u002fapitest.na4u.ru\u002fbin:\u002fhome\u002fc10214\u002fbin:\u002fusr\u002flocal\u002fbin:\u002fusr\u002fbin:\u002fbin:\u002fusr\u002fsbin"
],
"force_https": false,
"id": 19540,
"locked": false,
"main_alias": "apitest.na4u.ru",
"name": "apitest.na4u.ru",
"num_workers": 8,
"outgoing_connections": true,
"outgoing_mail": "NORMAL",
"read_only_environment_variables": [
"APP_IP=127.0.4.114",
"APP_PORT=53820",
"DB_CONNECTION_STRING=mysql:\u002f\u002fc10214_apitest_na4u_ru:KiPqeKebdusaf56@localhost\u002fc10214_apitest_na4u_ru",
"DBUSER=c10214_apitest_na4u_ru",
"DBPASS=KiPqeKebdusaf56"
],
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 14:02:10"
}
Мы можем создать сайт
curl --request POST 'https://api-ms.netangels.ru/api/v1/hosting/virtualhosts/' --header "Authorization: Bearer ${TOKEN}" --header "Content-Type: application/json" --data '{ "name": "apitest-phpengine.na4u.ru", "engine": "php", "dbms_type": "mysql", "force_https": true, "charset": "utf-8", "aliases": ["www.apitest-phpengine.na4u.ru"], "main_alias": "apitest-phpengine.na4u.ru", "container_id": "10214" }'
{
"aliases": [
"apitest-phpengine.na4u.ru",
"www.apitest-phpengine.na4u.ru"
],
"cache_static": 0,
"certificate_id": 0,
"charset": "utf-8",
"container": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"environment": "STRETCH",
"id": 10214,
"is_in_transfer": false,
"locked": false,
"login": "c10214",
"memcache": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1864,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"memory_limit": 512,
"name": "Мои сайты",
"quota": 5120,
"redis": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1198,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"service_address": "h7.netangels.ru",
"service_ip": "91.201.52.235",
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21",
"virtualhosts": {
"entities": []
}
},
"container_id": 10214,
"created": "2019-08-21 13:00:11",
"cron_mail": "",
"dbms_account": {
"connection_string": "mysql:\u002f\u002fc10214_apitest_phpengine_na4u_ru:BuFnaVemcaloj29@localhost\u002fc10214_apitest_phpengine_na4u_ru",
"created": "2019-08-21 13:00:11",
"databases": [],
"db_servers_string": "localhost",
"id": 19611,
"login": "c10214_apitest_phpengine_na4u_ru",
"password": "BuFnaVemcaloj29",
"type": "mysql",
"updated": "2019-08-21 13:00:11",
"virtual_host": null
},
"enabled": true,
"engine": "php",
"engine_directives": [
"max_input_vars = 20000",
"upload_max_filesize = 128M",
"post_max_size = 128M",
"date.timezone = Europe\u002fMoscow",
"log_errors = 1",
"default_charset = \"\"",
"error_log = \u002fhome\u002fc10214\u002fapitest-phpengine.na4u.ru\u002flog\u002fphp-errors.log",
"mail.log = \u002fhome\u002fc10214\u002fapitest-phpengine.na4u.ru\u002flog\u002fphp-mail.log"
],
"engine_version": "7.3",
"environment_variables": [
"PATH=\u002fhome\u002fc10214\u002fapitest-phpengine.na4u.ru\u002fbin:\u002fhome\u002fc10214\u002fbin:\u002fusr\u002flocal\u002fbin:\u002fusr\u002fbin:\u002fbin:\u002fusr\u002fsbin"
],
"force_https": false,
"id": 19618, # <--- уникальный номер сайта
"locked": false,
"main_alias": "apitest-phpengine.na4u.ru",
"name": "apitest-phpengine.na4u.ru",
"num_workers": 8,
"outgoing_connections": true,
"outgoing_mail": "NORMAL",
"read_only_environment_variables": [
"APP_IP=127.0.4.114",
"APP_PORT=51387",
"DB_CONNECTION_STRING=mysql:\u002f\u002fc10214_apitest_phpengine_na4u_ru:BuFnaVemcaloj29@localhost\u002fc10214_apitest_phpengine_na4u_ru",
"DBUSER=c10214_apitest_phpengine_na4u_ru",
"DBPASS=BuFnaVemcaloj29"
],
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-21 13:00:11"
}
При создании сайта в ответе нам был показан уникальный номер сайта “id”: 19618. Он понадобится нам для изменения настроек PHP.
Сначала получим все настройки PHP. Для удобства будем использовать утилиту jq
, которая позволит легко фильтровать вывод. Так же сохраним вывод в файл directives.txt
:
curl --request GET 'https://api-ms.netangels.ru/api/v1/hosting/virtualhosts/19540/' --header "Authorization: Bearer ${TOKEN}" --header "Content-Type: application/json" | jq .engine_directives > directives.txt
В файле directives.txt
изменим значения параметра log_errors
, установив значение 0
. Загрузим PHP настройки обратно:
curl --request PUT 'https://api-ms.netangels.ru/api/v1/hosting/virtualhosts/19618/engine-settings/' --header "Authorization: Bearer ${TOKEN}" --header "Content-Type: application/json" -d @directives.txt
Проверим, что настройки действительно изменились:
curl --request GET 'https://api-ms.netangels.ru/api/v1/hosting/virtualhosts/19618/php-directives/search/?term=log_errors' --header "Authorization: Bearer ${TOKEN}" --header "Content-Type: application/json"
Ответ сервера:
[ "log_errors = 0", "log_errors_max_len = 1024" ]
curl --request PUT 'https://api-ms.netangels.ru/api/v1/hosting/virtualhosts/19618/order-certificate/' --header "Authorization: Bearer ${TOKEN}"
{
"aliases": [
"apitest-phpengine.na4u.ru",
"www.apitest-phpengine.na4u.ru"
],
"cache_static": 0,
"certificate_id": 36352,
"charset": "utf-8",
"container": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"environment": "STRETCH",
"id": 10214,
"is_in_transfer": false,
"locked": false,
"login": "c10214",
"memcache": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1864,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"memory_limit": 512,
"name": "Мои сайты",
"quota": 5120,
"redis": {
"created": "2019-08-20 13:49:21",
"enabled": true,
"id": 1198,
"locked": false,
"memory_limit": 512,
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21"
},
"service_address": "h7.netangels.ru",
"service_ip": "91.201.52.235",
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-20 13:49:21",
"virtualhosts": {
"entities": []
}
},
"container_id": 10214,
"created": "2019-08-21 13:00:11",
"cron_mail": "",
"dbms_account": {
"connection_string": "mysql:\u002f\u002fc10214_apitest_phpengine_na4u_ru:BuFnaVemcaloj29@localhost\u002fc10214_apitest_phpengine_na4u_ru",
"created": "2019-08-21 13:00:11",
"databases": [],
"db_servers_string": "localhost",
"id": 19611,
"login": "c10214_apitest_phpengine_na4u_ru",
"password": "BuFnaVemcaloj29",
"type": "mysql",
"updated": "2019-08-21 13:00:11",
"virtual_host": null
},
"enabled": true,
"engine": "php",
"engine_directives": [
"max_input_vars = 20000",
"upload_max_filesize = 128M",
"post_max_size = 128M",
"date.timezone = Europe\u002fMoscow",
"log_errors = 1",
"default_charset = \"\"",
"error_log = \u002fhome\u002fc10214\u002fapitest-phpengine.na4u.ru\u002flog\u002fphp-errors.log",
"mail.log = \u002fhome\u002fc10214\u002fapitest-phpengine.na4u.ru\u002flog\u002fphp-mail.log"
],
"engine_version": "7.3",
"environment_variables": [
"PATH=\u002fhome\u002fc10214\u002fapitest-phpengine.na4u.ru\u002fbin:\u002fhome\u002fc10214\u002fbin:\u002fusr\u002flocal\u002fbin:\u002fusr\u002fbin:\u002fbin:\u002fusr\u002fsbin"
],
"force_https": true,
"id": 19618,
"locked": false,
"main_alias": "apitest-phpengine.na4u.ru",
"name": "apitest-phpengine.na4u.ru",
"num_workers": 8,
"outgoing_connections": true,
"outgoing_mail": "NORMAL",
"read_only_environment_variables": [
"APP_IP=127.0.4.114",
"APP_PORT=51387",
"DB_CONNECTION_STRING=mysql:\u002f\u002fc10214_apitest_phpengine_na4u_ru:BuFnaVemcaloj29@localhost\u002fc10214_apitest_phpengine_na4u_ru",
"DBUSER=c10214_apitest_phpengine_na4u_ru",
"DBPASS=BuFnaVemcaloj29"
],
"state": "ENABLED",
"state_description": "unlock",
"updated": "2019-08-21 14:10:21"
}
Готово! В данной статье мы показали только небольшую часть действий, которую можно выполнить через API. Вы можете ознакомиться с подробной документацией по всем вызовам API.