Однонодовый файловый сервер
Вы научитесь создавать однонодовый файловый сервер с помощью Samba и NFS, а также подключаться к нему с компьютеров на Linux, macOS и Windows.
Чтобы создать однонодовый файловый сервер:
- Подготовьте облако к работе.
- Создайте виртуальную машину для файлового сервера.
- Настройте Samba и NFS.
- Протестируйте работу файлового сервера.
Если созданные ресурсы вам больше не нужны, удалите их.
Также инфраструктуру для однонодового файлового сервера можно развернуть через Terraform с помощью готового файла конфигурации.
Перед началом работы
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки статического сайта входит:
- плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Создайте облачные сети и подсети
Перед тем, как создавать виртуальную машину:
-
Перейдите в консоль управления Yandex Cloud и выберите каталог, в котором будете выполнять операции.
-
Убедитесь, что в выбранном каталоге есть сеть с подсетью, к которой можно подключить виртуальную машину. Для этого на странице каталога выберите сервис VPC. Если в списке есть сеть — нажмите на нее, чтобы увидеть доступные подсети. Если ни одной подсети или сети нет, создайте их.
Создайте виртуальную машину для файлового сервера
Чтобы создать виртуальную машину:
-
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины —
fileserver-tutorial
. -
Выберите зону доступности, в которой будет находиться виртуальная машина.
-
В блоке Выбор образа/загрузочного диска перейдите на вкладку Cloud Marketplace и выберите публичный образ Ubuntu.
-
В блоке Диски нажмите Добавить диск. В окне Добавление диска укажите параметры диска для хранения данных:
- Имя —
fileserver-tutorial-disk
; - Тип диска — SSD;
- Размер — 100 ГБ;
- Наполнение — Пустой.
Нажмите Добавить.
- Имя —
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и объем RAM.
Рекомендованные значения для файлового сервера:
- Гарантированная доля vCPU — 100%.
- vCPU — 8 или больше.
- RAM — 56 ГБ или больше.
-
В блоке Сетевые настройки выберите, к какой подсети будет подключена виртуальная машина при создании.
-
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно.
-
Нажмите кнопку Создать ВМ.
См. раздел Как создать инфраструктуру с помощью Terraform.
Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING
, вы можете настроить NFS и Samba.
При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
Настройте Samba и NFS
После того как виртуальная машина fileserver-tutorial
перейдет в статус RUNNING
, выполните:
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH.
Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.
-
Скачайте и установите Samba:
Ubuntusudo apt-get update sudo apt-get install nfs-kernel-server samba
-
Подготовьте и смонтируйте файловую систему на диске:
sudo mkfs -t ext4 -L data /dev/vdb
-
Подготовьте и смонтируйте папку для хранения данных на диске:
sudo mkdir /имя_папки echo "LABEL=data /имя_папки ext4 defaults 0 0" | sudo tee -a /etc/fstab sudo mount /имя_папки
-
Задайте конфигурацию NFS в файле
/etc/exports
. Вы можете отредактировать файл с помощью утилитыnano
:sudo nano /etc/exports
Добавьте в файл следующие строки:
/имя_папки <IP-адрес>(rw,no_subtree_check,fsid=100) /имя_папки 127.0.0.1(rw,no_subtree_check,fsid=100)
Где
<IP-адрес>
– IP-адрес компьютера, к которому вы будете подключать по NFS сетевой диск с данными. -
Задайте конфигурацию Samba в файле
/etc/samba/smb.conf
. Вы можете отредактировать файл с помощью утилитыnano
:sudo nano /etc/samba/smb.conf
Приведите файл к виду:
[global] workgroup = WORKGROUP server string = %h server (Samba) dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = no read only = yes create mask = 0700 [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no [data] comment = /имя_папки path = /имя_папки browseable = yes read only = no writable = yes guest ok = yes hosts allow = <IP-адрес> 127.0.0.1 hosts deny = 0.0.0.0/0
Где
<IP-адрес>
в блоке[data]
– IP-адрес компьютера, к которому вы будете подключать по NFS сетевой диск с данными. -
Перезапустите NFS и Samba:
sudo service nfs-kernel-server restart sudo service smbd restart
Протестируйте работу файлового сервера
-
Создайте на виртуальной машине
fileserver-tutorial
директориюremote
и файл test.txt:Ubuntusudo mkdir /имя_папки/remote sudo setfacl -m u:<имя_вашего_пользователя>:xw /имя_папки/remote echo "Hello world!" > /имя_папки/remote/test.txt
-
Подключите по NFS сетевой диск к вашему компьютеру и проверьте доступность тестового файла:
Linux/macOSWindowsЕсли необходимо, установите утилиту для работы с сетевыми дисками:
sudo apt-get install nfs-common
Создайте точку монтирования:
sudo mkdir /remote-test-dir
Подключите сетевой диск:
sudo mount -t nfs <внешний IP>:/имя_папки /remote-test-dir`
В результате в указанной точке монтирования должны быть доступны тестовая директория и файл.
- Запустите утилиту cmd.exe. Для этого нажмите сочетание клавиш Windows + R и выполните команду
cmd
. - В командной строке выполните команду:
net use x: \\<публичный_IP-адрес_виртуальной_машины>\имя_папки
В результате появится диск X с тестовой директорией и файлом.
- Запустите утилиту cmd.exe. Для этого нажмите сочетание клавиш Windows + R и выполните команду
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- удалите ВМ;
- удалите статический публичный IP-адрес, если вы его зарезервировали.
Как создать инфраструктуру с помощью Terraform
Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Mozilla Public License.
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Чтобы создать однонодовый файловый сервер с помощью Terraform:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файлы с описанием инфраструктуры:
В руководстве используются группы безопасности. Если они вам недоступны, то запросите доступ в поддержке или уберите из файла конфигурации блок
yandex_vpc_security_group
и другие упоминанияsecurity_group
.Готовый архивСоздание вручную- Создайте папку для файлов.
- Скачайте архив (1 КБ).
- Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл
single-node-file-server.tf
.
-
Создайте папку для файлов.
-
Создайте в папке конфигурационный файл
single-node-file-server.tf
:single-node-file-server.tfterraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } provider "yandex" { zone = "ru-central1-a" } resource "yandex_vpc_network" "network-1" { name = "network1" } resource "yandex_vpc_subnet" "subnet-1" { name = "subnet1" zone = "ru-central1-a" network_id = yandex_vpc_network.network-1.id v4_cidr_blocks = ["192.168.1.0/24"] } resource "yandex_vpc_security_group" "fileserver-tutorial-sg" { name = "fileserver-tutorial-sg" network_id = yandex_vpc_network.network-1.id egress { protocol = "ANY" description = "any" v4_cidr_blocks = ["0.0.0.0/0"] } ingress { protocol = "TCP" description = "ext-http" v4_cidr_blocks = ["0.0.0.0/0"] port = 80 } ingress { protocol = "TCP" description = "ext-ssh" v4_cidr_blocks = ["0.0.0.0/0"] port = 22 } ingress { protocol = "TCP" description = "ext-https" v4_cidr_blocks = ["0.0.0.0/0"] port = 443 } ingress { protocol = "TCP" description = "ext-msql" v4_cidr_blocks = ["0.0.0.0/0"] port = 3306 } } resource "yandex_compute_image" "ubuntu-1804-lts" { source_family = "ubuntu-1804-lts" } resource "yandex_compute_instance" "fileserver-tutorial" { name = "fileserver-tutorial" platform_id = "standard-v3" zone = "ru-central1-a" resources { core_fraction = 100 cores = 8 memory = 56 } boot_disk { initialize_params { name = "fileserver-tutorial-disk" image_id = yandex_compute_image.ubuntu-1804-lts.id type = "network-ssd" size = "100" } } network_interface { subnet_id = yandex_vpc_subnet.subnet-1.id security_group_ids = [yandex_vpc_security_group.fileserver-tutorial-sg.id] nat = true } metadata = { user-data = "#cloud-config\nusers:\n - name: <имя_пользователя>\n groups: sudo\n shell: /bin/bash\n sudo: ['ALL=(ALL) NOPASSWD:ALL']\n ssh-authorized-keys:\n - ${file("<путь_к_открытому_SSH-ключу>")}" } }
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
В блоке
metadata
укажите имя пользователя и содержимое SSH-ключа. Подробнее см. в разделе Метаданные виртуальной машины. -
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-