Как запустить MeiliSearch от имени системного пользователя

Вопрос или проблема

Я скачал meilisearch, переместил бинарный файл в /opt/meilisearch и создал системного пользователя sudo useradd --system --no-create-home -g meilisearch meilisearch. Если /meilisearch выполняется от имени пользователя meilisearch, возникает ошибка недостатка прав доступа.

$ sudo -u meilisearch /opt/meilisearch/meilisearch –db-path
/opt/meilisearch/datafiles –http-addr localhost:7700 –env
development 2024-12-08T21:02:05.162536Z ОШИБКА meilisearch:
ошибка=Отказано в доступе (ос ошибка 13) Ошибка: Отказано в доступе (ос
ошибка 13)

Я могу выполнять meilisearch с помощью sudo, и вообще пользователь meilisearch может запускать бинарный файл:

$ sudo -u meilisearch /opt/meilisearch/meilisearch --help
Использование: meilisearch [OPTIONS]

Опции:
      --config-file-path <CONFIG_FILE_P...

Вот настройки прав доступа:

ls -la /opt/meilisearch
всего 118552
drwxrwxr-x 3 meilisearch meilisearch      4096  7. Дек 22:55 .
drwxr-xr-x 3 root        root             4096  7. Дек 22:40 ..
drwxr-xr-x 6 meilisearch meilisearch      4096  7. Дек 23:03 datafiles
-rwxr-xr-x 1 meilisearch meilisearch 121377880  7. Дек 20:52 meilisearch

Ответ или решение

Как запустить MeiliSearch под системным пользователем

MeiliSearch — это быстрое и мощное решение для полнотекстового поиска, которое простое в установке и использовании. Тем не менее, при запуске MeiliSearch как системного пользователя могут возникать проблемы с правами доступа. Рассмотрим, как настроить и запустить MeiliSearch корректно.

1. Подготовка системы

На первом этапе убедитесь, что MeiliSearch загружен и находится в нужном месте. Вы уже переместили бинарный файл MeiliSearch в каталог /opt/meilisearch, что является хорошим началом. Также вы создали системного пользователя meilisearch без домашнего каталога:

sudo useradd --system --no-create-home -g meilisearch meilisearch

2. Проверка прав доступа

Чтобы убедиться, что проблем с доступом больше не возникнет, стоит уточнить права на директорию, куда вы собираетесь сохранять данные, а также на сам бинарный файл MeiliSearch.

Вывод команды ls -la /opt/meilisearch показывает, что у вас есть следующие права:

drwxrwxr-x 3 meilisearch meilisearch      4096  7. Dez 22:55 .
drwxr-xr-x 3 root        root             4096  7. Dez 22:40 ..
drwxr-xr-x 6 meilisearch meilisearch      4096  7. Dez 23:03 datafiles
-rwxr-xr-x 1 meilisearch meilisearch 121377880  7. Dez 20:52 meilisearch

Здесь нужно обратить внимание на то, что директория datafiles, в которую вы собираетесь записывать данные, имеет права drwxr-xr-x, что позволяет только владельцу (пользователю meilisearch) записывать данные. Обратите внимание на структуру, а также создайте путь для данных, если это еще не сделано.

3. Установка прав на каталоги

Убедитесь, что пользователь meilisearch имеет права на запись в директории. Вы можете изменить права и владельца каталога datafiles, если это требуется:

sudo chown -R meilisearch:meilisearch /opt/meilisearch/datafiles
sudo chmod -R 755 /opt/meilisearch/datafiles

Убедитесь, что и сам бинарный файл имеет актуальные права:

sudo chown meilisearch:meilisearch /opt/meilisearch/meilisearch
sudo chmod 755 /opt/meilisearch/meilisearch

4. Запуск MeiliSearch

Теперь можно запустить MeiliSearch под пользователем meilisearch. Попробуйте выполнить команду с помощью sudo, чтобы использовать системного пользователя:

sudo -u meilisearch /opt/meilisearch/meilisearch --db-path /opt/meilisearch/datafiles --http-addr localhost:7700 --env development

Убедитесь, что вы не получаете ошибок о запрещенном доступе (Permission denied). Если ошибка по-прежнему возникает, проверьте, что другие процессы не блокируют доступ к каталогу или файлам.

5. Настройка службы (опционально)

Если хотите, чтобы MeiliSearch запускался как служба, создайте systemd юнит файл:

Создайте файл /etc/systemd/system/meilisearch.service с таким содержанием:

[Unit]
Description=MeiliSearch
After=network.target

[Service]
User=meilisearch
Group=meilisearch
ExecStart=/opt/meilisearch/meilisearch --db-path /opt/meilisearch/datafiles --http-addr localhost:7700 --env development
Restart=on-failure

[Install]
WantedBy=multi-user.target

После этого активируйте и запустите сервис:

sudo systemctl enable meilisearch
sudo systemctl start meilisearch

Заключение

Следуя данным рекомендациям, вы сможете успешно запустить MeiliSearch под системным пользователем, избегая ошибок, связанных с правами доступа. Регулярно проверяйте журналы системы и документацию MeiliSearch для получения дополнительных советов по оптимизации.

Оцените материал
Добавить комментарий

Капча загружается...