Однонодовый файловый сервер с помощью Terraform
Чтобы создать инфраструктуру для однонодового файлового сервера c помощью Terraform:
- Подготовьте облако к работе.
- Создайте инфраструктуру.
- Настройте Samba и NFS.
- Протестируйте работу файлового сервера.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки однонодового файлового сервера входит:
- плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование динамического или статического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud);
- плата за исходящий трафик (см. тарифы Yandex Virtual Private Cloud).
Создайте инфраструктуру
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Для создания инфраструктуры с помощью Terraform:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файлы с описанием инфраструктуры:
Готовый архивВручную- Создайте папку для файлов.
- Скачайте архив
(1 КБ). - Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл
single-node-file-server.tf
.
-
Создайте папку для файлов.
-
Создайте в папке конфигурационный файл
single-node-file-server.tf
:single-node-file-server.tf
terraform { 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 } ingress { protocol = "TCP" description = "nfs" v4_cidr_blocks = ["0.0.0.0/0"] port = 2049 } } resource "yandex_compute_image" "ubuntu-1804-lts" { source_family = "ubuntu-1804-lts" } resource "yandex_compute_disk" "boot-disk-ubuntu" { name = "fileserver-tutorial-disk" type = "network-ssd" zone = "ru-central1-a" size = "100" image_id = yandex_compute_image.ubuntu-1804-lts.id } 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 { disk_id = yandex_compute_disk.boot-disk-ubuntu.id } 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.
-
После создания инфраструктуры, настройте Samba и NFS.
Настройте Samba и NFS
После того как виртуальная машина fileserver-tutorial
перейдет в статус RUNNING
, выполните:
-
В блоке Сеть на странице виртуальной машины в консоли управления
найдите публичный IP-адрес виртуальной машины. -
Подключитесь к виртуальной машине по протоколу SSH.
Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.
-
Настройте Samba и NFS:
Ubuntu-
Скачайте и установите Samba:
sudo 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
-
Протестируйте работу файлового сервера
-
Установите ACL на виртуальной машине
fileserver-tutorial
:Ubuntusudo apt install acl
-
Создайте на ВМ
fileserver-tutorial
директориюremote
и файл test.txt:Ubuntusudo mkdir /<имя_папки>/remote sudo setfacl -m u:<имя_вашего_пользователя>:rwx /<имя_папки>/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 с тестовой директорией и файлом.
-
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Откройте конфигурационный файл
single-node-file-server.tf
и удалите описание создаваемой инфраструктуры из файла. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-