Назад | Перейти на главную страницу

Как установить и управлять программным обеспечением на сервере?

Вероятно, это вопрос, полный ответ на который занимает целые книги; но я не профессиональный ИТ-администратор, поэтому обзор / введение уже были бы полезны.

Предположим, мне нужно управлять сервером Debian (виртуальный сервер у хостинг-провайдера с корневым доступом), на котором запущены Apache, Django, несколько самописных PHP-скриптов для администрирования, Nagios / NRPE для мониторинга состояния, SFTP для загрузки личных файлов. Сервер должен в основном обслуживать статические файлы, загруженные по SFTP; Django будет использоваться для двух небольших динамических сайтов.

Из каких источников мне следует устанавливать программное обеспечение, например плагины Apache, PHP, Django, NRPE, Nagios? Я могу думать об этих возможностях:

Что из этого мне следует использовать? Есть ли другие полезные возможности, которых нет в списке? Какие рекомендации мне следует использовать при оценке всех этих источников? Есть ли общие практики выбора наилучшего метода установки?

На мой взгляд, правильный порядок создания:

  1. Использование официального инструмента управления пакетами и официальных репозиториев
  2. Использование официального инструмента управления пакетами и неофициальных репозиториев, тщательно проверенных на надежность и стабильность
  3. Вот и все.

Вы делаете не хотите заняться установкой программного обеспечения вручную. Это очень быстро становится безумной нагрузкой на обслуживание (вы должны проверять все страницы проекта каждый день, чтобы увидеть, нет ли какой-нибудь новой ошибки, которая влияет на вас, и каждый раз, когда она возникает, вам нужно запланировать перестройку и развернуть ее). Установка двоичных файлов, которые вы только что загрузили из Интернета, еще более безумна; по крайней мере, с неофициальными репозиториями у вас есть положения для подписи вашего инструмента управления пакетами, на которые можно положиться: вы не можете быть уверены, что случайно выбранный набор PHP RPM поступил, скажем, из репозиториев remi, но вы можете быть уверены, что все версии, которые вы устанавливаете из тех репо пришли из того же места.

Всегда есть контраргумент, что foo особенная снежинка; что это просто libfoo что ваши разработчики отчаянно нуждаются в версии 1.4.5.a3_345.21z. И на практике это иногда действительно так. Но это не так часто, как делают разработчики, и ваш отпор должен быть мощным, чтобы их боль потребовала libfoo поддержка вне обычных каналов сопоставима с вашей болью при ее поддержке.

И даже в этом случае вы должны упаковать его и создать внутренний репозиторий компании, в котором пакет становится доступным.

Пока Безумный Шляпник делает отличная работа ответа на исходный вопрос я хотел бы ответить на комментарий

Так что насчет программного обеспечения, которое в основном доступно в виде пакета Gem или PyPy? Если я правильно вас понял, мне следует избегать такого программного обеспечения или использовать пакет Debian (даже если он старше)?

вместе с

Есть ли другие полезные возможности, которых нет в списке? Какие рекомендации мне следует использовать при оценке всех этих источников?

из исходного вопроса.

Во-первых, вам, вероятно, следует использовать пакеты из дистрибутива, если они доступны. Это даст вам надежные исправления безопасности и исправления ошибок. Это также относится к гемам и пакетам Python. Многие из них доступны в составе вашего апстрима или какого-либо другого волонтерского проекта. Когда вы выйдете за пределы доступных пакетов, используйте упаковщик на уровне языка, но пусть он хранит вещи в каталоге, отдельном от системных двоичных файлов, и сообщает вашему приложению, что нужно добавить этот каталог библиотеки.

Во-вторых, непросто решить, сможете ли вы жить со старым пакетом. Имейте в виду, что поддерживать новейшее программное обеспечение - это нелегко. Если вы действительно хотите пойти по этому пути, читайте дальше такие системы, как или Трэвис. Когда у вас так много движущихся целей, единственный способ опередить их - это постоянно тестировать каждую новую итерацию.

Поскольку вы говорите, что используете «виртуальный сервер у хостинг-провайдера», полезно иметь в виду: он может умереть в любой момент. Возможно, вам придется восстановить его в короткие сроки. (Это просто жизнь в облаке.) Или вы можете решить, что хотите создать их больше, если ваша организация действительно успешна. Это ведет к резервные копии и управление конфигурацией. Резервные копии - отличная идея, но я позволю кому-нибудь другому рассказать вам все о них. Я хочу, чтобы вы рассмотрели возможность управления конфигурацией для установки вашего программного обеспечения.

Существует множество систем управления конфигурацией - , , , и являются примерами, но для облегчения начала работы в небольшом масштабе я определенно рекомендую для вашей ситуации. Вы можете написать сценарии оболочки для установки различных типов программного обеспечения, но будет проще и лаконичнее позволить ansible сделать это за вас.

Сначала я могу установить некоторые системные пакеты, используя apt-get:

---
- name: install deb's needed by users
  apt: name={{ item }} state=present
  with_items:
   - git
   - git-svn
   - ansible
   - tmux
   - screen
   - whois
   - traceroute
   - mtr
   - curl
   - wget
   - pcregrep

а затем установите гем Ruby:

- name: install vagrant 1.0
  gem: name=vagrant version=1.0 state=present

и пакет python:

- name: Install (Bottle) into the specified (virtualenv), using Python 2.7
  pip: name=bottle virtualenv=/my_app/venv virtualenv_command=virtualenv-2.7

Вы могли бы установить несколько пипсов или драгоценных камней в любой из них, если бы следовали with_items синтаксис, который мы использовали с apt. Вы упомянули об установке приложения PHP. Надеюсь, вы храните это в системе управления версиями где-то вроде github так что вы можете использовать модуль git чтобы установить и это тоже. По мере того, как вы продолжаете создавать свои ansible playbook, вы получаете простой способ надежной переустановки ваших систем без необходимости держать в голове много непонятных деталей.