Статьи

Мои рекомендации по развертыванию веб-приложения в Alibaba Cloud

Эта статья была первоначально опубликована на Alibaba Cloud . Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.

В этой статье я хочу поделиться лучшими практиками, которые я использую при развертывании веб-приложения в Alibaba Cloud. Я работаю фрилансером, и недавно один из моих клиентов попросил меня настроить SuiteCRM для его небольшой организации. Поскольку я часто пишу учебные пособия для Alibaba Cloud , я рекомендовал клиенту использовать ту же облачную платформу. Для почти 100 пользователей и не менее 30 одновременно работающих пользователей, вот конфигурация, которую я рекомендовал.

  1. Экземпляр ECS с 2 виртуальными ЦП и 4 ГБ ОЗУ для установки Nginx с PHP-FPM.
  2. Экземпляр ApsaraDB для RDS для MySQL с 1 ГБ ядра, 1 ГБ ОЗУ и 10 ГБ памяти.
  3. Direct Mail для отправки писем.

Шаги, которые я выполнил, очень просты и могут быть применены почти ко всем приложениям на основе PHP.

Если вы новичок в Alibaba Cloud, вы можете использовать эту ссылку для регистрации в Alibaba Cloud. Вы получите бесплатный кредит нового пользователя на сумму 300 долларов США, который вы можете использовать для опробования различных продуктов Alibaba Cloud.

Создание экземпляра ECS

Облако Alibaba документировало почти все, что вам потребуется для начала работы с облачной платформой. Вы можете использовать учебные пособия по началу работы или блог Tech Share, чтобы узнать, как начать использовать Alibaba Cloud. Вы можете найти наиболее очевидные шаги в Руководстве по быстрому запуску и позвольте мне рассказать вам о лучших практиках, которые следует использовать при создании экземпляра ECS.

Войдите в свою консоль Alibaba Cloud и перейдите в интерфейс Elastic Compute Service . Вы можете легко создать экземпляр, нажав кнопку « Создать экземпляр» . Что нужно иметь в виду:

  1. Регион : поскольку Alibaba Cloud имеет центры обработки данных по всему миру, всегда выбирайте регион, который географически ближе к пользователям приложения. Поскольку дата-центр находится ближе к пользователю, веб-сайт будет загружаться очень быстро из-за низкой задержки сети. В моем случае я выбрал регион Мумбаи, поскольку организация базировалась в самом Мумбаи.
  2. Метод выставления счетов : Если вы планируете непрерывно запускать экземпляр 24/7, вы всегда должны выбирать ежемесячную подписку, поскольку она снизит цену до половины по сравнению с Pay-As-You-Go. Например, ежемесячная стоимость подписки для экземпляра ECS общего типа с 2 виртуальными ЦП и 4 ГБ ОЗУ составляет 23 доллара США, но тот же экземпляр в системе Pay-As-You-Go стоит 0,103 доллара США в час. Ежемесячная стоимость составляет 0,103 * 24 * 30 = 74,16 долларов США.
  3. Тип экземпляра : выберите тип экземпляра в соответствии с вашими требованиями. Ресурсы могут быть увеличены позже по требованию.
  4. Изображение : вы можете найти приложение, которое вы хотите установить в своем экземпляре ECS, на образе Marketplace, но всегда рекомендуется устанавливать его самостоятельно в чистом официальном образе. Позже, если ваше приложение обнаружит какую-то ошибку, вы узнаете, где искать.
  5. Хранилище : системные диски удаляются при освобождении экземпляра ECS. По возможности используйте диск с данными, поскольку ваш диск будет сохранен даже после случайного удаления экземпляра.

Вот конфигурация, которую я использовал.

Вы можете выбрать VPC, который создается по умолчанию. В него можно добавить до 4092 экземпляров. Я использую разные группы безопасности для каждого экземпляра ECS, так что я могу настроить индивидуально и убедиться, что неиспользуемый порт не открыт.

Еще одна важная вещь — использовать аутентификацию на основе ключей, а не пароли. Если у вас уже есть пара ключей, вы можете добавить открытый ключ в Alibaba Cloud. Если нет, вы можете использовать Alibaba Cloud для его создания. Убедитесь, что ключ хранится в очень безопасном месте, а сам ключ шифруется парольной фразой.

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

Настройка экземпляра ECS

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

  1. Вместо использования учетной записи root для выполнения команд настройте пользователя sudo при первом подключении и всегда используйте пользователя sudo для выполнения команд. Вы также можете установить аутентификацию на основе ключей для пользователя sudo и полностью отключить вход в систему.
  2. Всегда держите ваш базовый образ обновленным.
  3. Базовые образы Alibaba не имеют дополнительного пакета, который не требуется. Не устанавливайте пакет, который не требуется.
  4. Если во время установки дела идут плохо, вы всегда можете сбросить экземпляр, изменив системный диск. Вам не нужно удалять экземпляр и создавать его заново.

Я создал пользователя sudo и настроил в нем аутентификацию на основе ключей. Я обновил базовый образ и настроил автоматические обновления системы. Я следовал руководству по установке веб-сервера Nginx, который представляет собой легкий веб-сервер промышленного уровня. Далее я установил PHP 7.2 с PHP-FPM. PHP 7.2 является последней доступной версией PHP на данный момент. Использование новейшего программного обеспечения гарантирует, что система свободна от всех ошибок, и мы также получим более быструю обработку и большую стабильность. Наконец, я скачал архив SuiteCRM с его официального сайта и развернул файлы в Nginx.

Вы можете использовать учебные пособия по началу работы или учебные пособия, написанные авторами Tech Share, для установки приложений.

Настройка правил группы безопасности

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

Вы можете видеть, что я разрешил только порты 22, 80 и 443 вместе со всеми пакетами ICMP. Порт 22 используется для соединения SSH. Порт 80 — это незащищенный порт HTTP, который в моем случае просто перенаправляет на порт 443 по HTTPS. Пакеты ICMP используются для проверки связи с хостом, чтобы проверить, жив он или нет. Это нормально, если вы хотите отбросить и пакеты ICMP — вы просто не сможете пропинговать свой экземпляр.

Создание экземпляра RDS

Первый вопрос, который нужно задать, прежде чем мы создадим экземпляр RDS, — зачем он нам нужен. Мы можем установить любой сервер базы данных с открытым исходным кодом, такой как MySQL, MariaDB, PostgreSQL или MongoDB, на сам экземпляр ECS.

Ответ на этот вопрос заключается в том, что ApsaraDB для RDS оптимизирован для скорости и безопасности. По умолчанию создаваемый нами экземпляр доступен только для экземпляров из белого списка.

Давайте посмотрим на вещи, которые следует иметь в виду при создании экземпляра ECS.

  1. Регион: всегда выбирайте один и тот же регион для экземпляра базы данных и экземпляра ECS. Также убедитесь, что они оба находятся в одном VPC. Это позволит вам использовать бесплатную передачу данных в интрасети между хостами в одной сети. Другое преимущество состоит в том, что вам нужно будет внести в белый список только частный IP-адрес экземпляра ECS. Это в значительной степени повышает безопасность базы данных.
  2. Оплата: Опять же, стоимость ежемесячной подписки меньше, чем у метода Pay-As-You-Go. Выберите в соответствии с вашими потребностями.
  3. Емкость: вы можете начать с младшей конфигурации, такой как 1 ядро, 1 ГБ экземпляра и 5 ГБ хранилища. В дальнейшем вы можете увеличить ресурсы.
  4. Учетные записи: Никогда не создавайте основную учетную запись для экземпляра MySQL 5.6, если это не требуется. Вы можете создать базу данных и пользователя базы данных для каждой базы данных.

Вот конфигурация RDS, которую я использовал для SuiteCRM.

После активации экземпляра MySQL RDS я внес в белый список экземпляр ECS на вкладке « Безопасность » этого экземпляра. Как только я внес в белый список IP-адрес, я получил имя хоста для экземпляра RDS вместе с номером порта, который был портом MySQL по умолчанию «3306». Я создал базу данных с именем «suitecrm» и пользователя базы данных с именем «suitecrm» и предоставил пользователю доступ для чтения / записи.

Использование HTTPS

Поскольку Интернет растет, все больше и больше сайтов добавляются ежедневно. Когда центр сертификации Let’s Encrypt начал раздавать SSL-сертификаты бесплатно, стало популярным использование SSL на каждом веб-сайте. В целях безопасности очень важно использовать SSL в веб-приложении. Если данные, которыми обмениваются, являются незашифрованными, человек, подслушивающий в сети, может извлечь конфиденциальную информацию.

Alibaba Cloud также предоставляет SSL-сертификаты , но, на мой взгляд, это довольно дорого. Однако с дорогими вещами приходят дополнительные гарантии. SSL-сертификаты, предоставляемые Alibaba Cloud, подходят для корпоративных пользователей.

В развертывании SuiteCRM я также использовал бесплатный SSL Let’s Encrypt для защиты веб-приложения SuiteCRM. Для генерации сертификатов Certbot, который является клиентским приложением для Let’s Encrypt CA, домен должен быть направлен на сервер.

Alibaba Cloud предоставляет доменные имена по очень разумным ценам с бесплатной защитой Whois. В моем случае мой клиент уже купил доменное имя в другом месте. Я создал поддомен и указал домен на экземпляр ECS. Я установил Certbot и мог легко генерировать сертификаты. Никогда не забывайте настраивать задание cron для автоматического обновления сертификатов, так как срок действия сертификатов истекает каждые три месяца.

Настройка прямой почтовой рассылки

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

Служба прямой почтовой рассылки Alibaba Cloud обеспечивает более дешевый способ отправки электронной почты из приложения с использованием SMTP. Это бесплатно для первых 200 писем каждый день. В моем случае достаточно 200 электронных писем в день, и электронные письма, превышающие бесплатную квоту, также очень дешевы. Я добавил новый почтовый поддомен в Direct Mail. После добавления домена меня попросили обновить DNS. Я сделал так, как было указано, и DNS потребовалось некоторое время, чтобы проверить, как распространение занимает время. После этого я добавил адрес отправителя, и у меня был готов SMTP-сервер для использования с приложением.

Установка через Интернет

Наконец-то у меня все было готово. Приложение SuiteCRM размещено на ECS, а сервер базы данных размещен на ApsaraDB для RDS. Я мог легко пройти через веб-установку для установки программного обеспечения.

Вот конфигурация, которую я предоставил для сервера базы данных во время сетевой установки SuiteCRM.

Точно так же я заполнил всю необходимую информацию и предоставил данные SMTP-сервера.

Наконец, мое приложение было успешно развернуто в Alibaba Cloud. Кроме того, я предложил клиенту использовать ApsaraDB для Memcache для хранения кеша сеансов SuiteCRM и использовать WAF для защиты приложения от входящих угроз. Однако клиент не хотел реализовывать предложения, поскольку они увеличивали свой ежемесячный счет. Однако клиент был очень рад видеть производительность приложения на платформе Alibaba Cloud.

Я часто пишу технические блоги на платформе Alibaba Cloud Tech Share. Перейдите по следующей ссылке, чтобы найти учебники, написанные мной. Я также напишу подробное руководство по шагам и командам, которые необходимо выполнить, чтобы установить SuiteCRM на Ubuntu 16.04 на платформе Alibaba Cloud Tech Share.