---
title: 'User data в облачном сервере'
sidebar_label: 'User data'
sidebar_position: 10
description: 'Как указать пользовательские параметры конфигурации при создании облачного сервера, примеры скриптов с user data'
toc_max_heading_level: 3
---

import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import Formbricks from '@theme/MDXComponents/Formbricks'

# User data в облачном сервере

User data — пользовательские параметры конфигурации операционной системы сервера. С помощью user data вы можете автоматизировать настройку серверов. Пользовательские параметры описываются в виде скриптов в формате cloud-config (текстовые файлы с YAML-синтаксисом) или как bash-скрипт. Скрипты автоматически кодируются в Base64, передаются на сервер и выполняются с помощью агента [cloud-init](https://cloud-init.io/) при первом запуске операционной системы.

Подробнее о форматах скриптов cloud-config и bash в инструкции [User data formats](https://cloudinit.readthedocs.io/en/latest/explanation/format.html) документации cloud-init.

[Указать user data](#specify-user-data) можно при создании облачного сервера. В скриптах можно передавать параметры для настройки операционной системы и сценарии. Например:

* [создать каталог и загрузить в него файлы](#create-directory);
* [обновить репозитории и установить пакеты программного обеспечения](#update-repositories-and-packages);
* [разместить SSH-ключи на сервере](#add-ssh-keys);
* [настроить файл конфигурации преобразователя доменных имен resolv.conf](#configure-file)​.

Посмотрите другие примеры в инструкции [Cloud config examples](https://cloudinit.readthedocs.io/en/latest/reference/examples.html#cloud-config-examples) документации cloud-init.

## Указать user data \{#specify-user-data}

Указать user data можно только при [создании облачного сервера](/cloud-servers/create/create-server.mdx):

* в панели управления — на шаге 4 [дополнительных настроек](/cloud-servers/create/create-server.mdx#additional-settings) можно вставить скрипт в поле **User data**, загрузить файл в форматах `txt`, `gz`, `sh` или MIME-архив. Максимальный размер скрипта с данными, которые не закодированы в Base64, — 16 КБ;
* через OpenStack CLI и Terraform — только скрипты с данными, закодированными в Base64.

После создания сервера изменить скрипт нельзя.

## Примеры user data \{#user-data-script-examples}

### Создать каталог и загрузить в него файлы⁠ \{#create-directory}

<Tabs queryString="create-directory">
  <TabItem value="cloud-config" default>
    <TabItemLabel>
      Cloud-config
    </TabItemLabel>

    Пример скрипта для создания каталога и загрузки в него файла по сети:

    ```yaml
    #cloud-config
    runcmd:
    - mkdir /run/newdir
    - [ wget, "http://example.com", -O, /run/newdir/index.html ]
    ```
  </TabItem>

  <TabItem value="bash">
    <TabItemLabel>
      Bash-скрипт​
    </TabItemLabel>

    Пример скрипта для создания каталога и загрузки в него файла по сети:

    ```bash
    #!/bin/sh
    mkdir /run/newdir
    wget http://example.com -O /run/newdir/index.html
    ```
  </TabItem>
</Tabs>

### Обновить репозитории и установить пакеты \{#update-repositories-and-packages}

<Tabs queryString="update-repositories-and-packages">
  <TabItem value="cloud-config" default>
    <TabItemLabel>
      Cloud-config
    </TabItemLabel>

    Пример скрипта для установки pwgen и pastebinit:

    ```yaml
    #cloud-config
    package_update: true
    packages:
     - pwgen
     - pastebinit
    ```
  </TabItem>

  <TabItem value="bash">
    <TabItemLabel>
      Bash-скрипт​
    </TabItemLabel>

    Пример скрипта для установки docker:

    ```bash
    #!/bin/sh
    apt update
    apt install docker
    ```
  </TabItem>
</Tabs>

### Разместить SSH-ключи на сервере \{#add-ssh-keys}

<Tabs queryString="add-ssh-keys">
  <TabItem value="cloud-config" default>
    <TabItemLabel>
      Cloud-config
    </TabItemLabel>

    Пример скрипта:

    ```yaml
    #cloud-config
    ssh_authorized_keys:
      - ssh-rsa AAAAB3N…V7NZ user1@host
      - ssh-rsa AAAAB3N…NtHw== user2@server
    ```
  </TabItem>

  <TabItem value="bash">
    <TabItemLabel>
      Bash-скрипт​
    </TabItemLabel>

    Пример скрипта:

    ```bash
    #!/bin/sh
    echo "ssh-rsa AAAAB3N…V7NZ user1@host" >> /root/.ssh/authorized_keys
    echo "sssh-rsa AAAAB3N…NtHw== user2@server" >> /root/.ssh/authorized_keys
    ```
  </TabItem>
</Tabs>

### Настроить файл конфигурации \{#configure-file}

<Tabs queryString="configure-file">
  <TabItem value="cloud-config" default>
    <TabItemLabel>
      Cloud-config
    </TabItemLabel>

    Пример скрипта для преобразователя доменных имен resolv.conf:

    ```yaml
    #cloud-config
    manage_resolv_conf: true
    resolv_conf:
      nameservers: ['4.4.4.4', '8.8.8.8']
      searchdomains:
        - foo.example.com
        - bar.example.com
      domain: example.com
      options:
        rotate: true
        timeout: 1
    ```
  </TabItem>

  <TabItem value="bash">
    <TabItemLabel>
      Bash-скрипт​
    </TabItemLabel>

    Пример скрипта для преобразователя доменных имен resolv.conf:

    ```bash
    #!/bin/sh
    cat <<EOF > /etc/resolv.conf
    domain example.com
    nameserver 4.4.4.4
    nameserver 8.8.8.8
    search foo.example.com bar.example.com
    options rotate
    options timeout:1
    EOF
    ```
  </TabItem>
</Tabs>

<Formbricks />
