One place for hosting & domains

      стека

      Установка стека ERPNext в Ubuntu 20.04


      Автор выбрал Software in the Public Interest для получения пожертвования в рамках программы Write for DOnations.

      Введение

      ERPNext — это набор планирования ресурсов предприятия (Enterprise Resource Planning, ERP), который позволяет использовать производительность и гибкость технологий с открытым кодом. Он отлично справляется с такими бизнес-процессами, как финансы, продажи, человеческие ресурсы, производство, снабжение, обслуживание, служба поддержки и многое другое. В числе преимуществ внедрения системы, как ERPNext, можно отметить следующее:

      • Повышение производительности за счет автоматизации повторяющихся рабочих процессов
      • Повышение эффективности ИТ путем совместного использования базы данных всеми подразделениями компании
      • Оптимизация принятия решения благодаря комплексному видению взаимосвязи между структурными единицами

      ERPNext создан на базе Frappe, платформы комплексной разработки веб-приложений, написанной на Python, со всеми преимуществами среды выполнения Node/JavaScript и использует MariaDB в качестве сервера базы данных. Одним из ряда преимуществ приложений на базе Frappe, например ERPNext, является утилита командной строки bench. CLI bench экономит время администратора за счет автоматизации таких задач, как установка, обновление, настройка и управление многочисленными сайтами Frappe/ERPNext.

      В этом обучающем модуле мы установим и настроим стек ERPNext на одном сервере под управлением Ubuntu 20.04. Это позволит вам настроить стек для различных сред разработки или производства в зависимости от ваших потребностей и подготовит вас к созданию более сложной отказоустойчивой архитектуры.

      Предварительные требования

      Примечание. При выборе спецификаций сервера следует учитывать, что системы ERP могут потреблять множество ресурсов. В этом руководстве рекомендуется использовать один сервер с оперативной памятью 4 ГБ, чего достаточно для базовых случаев использования, но требования определенного аппаратного обеспечения могут зависеть от количества пользователей, а также от размера вашего бизнеса.

      Шаг 1 — Настройка брандмауэра

      Хотя настройка брандмауэра для разработки опциональна, для производства она является обязательной с точки зрения безопасности.

      Вам потребуется открыть следующие порты на вашем сервере ERPNext:

      • 80/tcp и 443/tcp для HTTP и HTTPS соответственно
      • 3306/tcp для подключения MariaDB (рекомендуется только при необходимости удаленного доступа к базе данных)
      • 143/tcp и 25/tcp для IMAP и STMP соответственно
      • 22/tcp для SSH (если вы еще не включили OpenSSH в настройках UFW)
      • 8000/tcp для тестирования платформы перед развертыванием в производство

      Чтобы сразу открыть несколько портов можно использовать следующую команду:

      • sudo ufw allow 22,25,143,80,443,3306,8000/tcp

      Также можно разрешить подключения с определенных IP-адресов на конкретных портах с помощью этой команды:

      • sudo ufw allow from server_IP to any port port_number

      После открытия всех необходимых портов активируйте брандмауэр:

      Затем подтвердите статус брандмауэра:

      UFW выведет список ваших включенных правил. Убедитесь, что открыты необходимые порты ERPNext:

      Output

      Status: active To Action From -- ------ ---- 22,25,80,143,443,3306,8000/tcp ALLOW Anywhere 22,25,80,143,443,3306,8000/tcp (v6) ALLOW Anywhere (v6)

      Дополнительную информацию о настройке UFW можно найти в нашем руководстве по настройке брандмауэра с UFW в Ubuntu 20.04.

      Настройка соответствующего брандмауэра — это первый из двух предварительных шагов. Теперь мы настроим раскладку клавиатуры и кодирование символов на вашем сервере.

      Шаг 2 — Конфигурация локальных настроек

      Настоятельно рекомендуется настроить раскладку клавиатуры для консоли, а также язык и кодирование символов на вашем хосте. Это необходимо, чтобы избежать возможных проблем во время установки ERPNext 12. Обратите внимание, что эта конфигурация не имеет никакого отношения к языку пользовательского интерфейса на вашей фактической платформе ERPNext, а служит для конфигурации локальных настроек системы.

      Сначала обновите ваш сервер:

      Теперь настройте раскладку клавиатуры, язык и кодирование символов:

      • sudo localectl set-keymap us && sudo localectl set-locale LANG=en_US.utf8

      Утилита localectl используется Ubuntu 20.04 и другими дистрибутивами Linux для контроля и изменения языковых настроек всей системы, а также настроек раскладки клавиатуры перед входом пользователя, что требует ERPNext 12.

      Также вам потребуется добавить следующие строки в файл /etc/environment. Используйте nano или предпочитаемый текстовый редактор, чтобы открыть файл:

      • sudo nano /etc/environment

      Добавьте в него следующее содержание:

      /etc/environment

      LC_ALL=en_US.UTF-8
      LC_CTYPE=en_US.UTF-8
      LANG=en_US.UTF-8
      

      Сохраните и закройте файл.

      Перезагрузите ваш сервер для внесения всех изменений:

      Дайте вашему серверу несколько минут для перезагрузки, затем используйте ssh для повторного входа в ваш экземпляр. Теперь вы готовы установить свою базу данных.

      Шаг 3 — Установка MariaDB

      Теперь добавьте MariaDB в стек сервера. Для надлежащей работы ERPNext 12 требуется MariaDB 10.2+. Поскольку Ubuntu 20.04 включает MariaDB 10.3 в свои официальные репозитории, вы можете установить эту версию с помощью команды apt:

      • sudo apt install mariadb-server

      Также, если вы предпочитаете более новую версию MariaDB, можно следовать шагу 3 нашего руководства по установке стека ERPNext в Ubuntu 18.04. Он проведет вас по шагам мастера онлайн-репозитория MariaDB, который поможет установить новейшую версию — MariaDB 10.5.

      После установки mariadb-server установите следующие пакеты:

      • sudo apt install python3-mysqldb libmysqlclient-dev

      ERPNext 12 — это приложение Python, поэтому для управления базой данных требуется библиотека python3-mysqldb. libmysqlclient-dev требуется для доступа к определенным функциям разработчика MariaDB.

      Затем добавьте дополнительный слой безопасности на сервер MariaDB, запустив скрипт mysql_secure_installation:

      • sudo mysql_secure_installation

      Скрипт mysql_secure_installation будет давать подсказки с помощью вопросов:

      • В первом диалоговом окне вам будет предложено ввести пароль root, но так как пароль еще не задан, нажмите ENTER.
      • Затем при запросе изменить пароль root MariaDB ответьте N. Использование пароля по умолчанию и аутентификации Unix — это рекомендуемая настройка для систем на базе Ubuntu, поскольку учетная запись root тесно связана с задачами автоматизированного обслуживания системы.
      • Оставшиеся вопросы будут связаны с удалением анонимного пользователя базы данных для ограничения возможности входа в учетную запись root дистанционно на localhost, удалением тестовой базы данных и перезагрузкой таблиц привилегий. На эти вопросы можно спокойно ответить Y.

      После завершения выполнения скрипта mysql_secure_installation MariaDB начнет запуск с использованием настройки по умолчанию. Для стандартной установки ERPNext используется пользователь root для всех операций базы данных. Хотя этот подход может быть удобен для настроек одного сервера, он не является оптимальным с точки зрения безопасности. Поэтому в следующем разделе вы узнаете, как избежать этой проблемы путем создания нового пользователя со специальными привилегиями.

      Создание пользователя-суперадминистратора MariaDB

      ERPNext будет использовать пользователя root MariaDB для управления подключениями базы данных, но это не всегда идеальное решение. Чтобы преодолеть это ограничение и разрешить пользователю без привилегий root управлять MariaDB, вы вручную создадите базу данных с именем вашего пользователя. Затем вы сможете присвоить специальные привилегии новому пользователю для управления операциями базы данных ERPNext.

      Откройте командную строку MariaDB:

      Теперь создайте новую базу данных с именем пользователя, которое вы хотите назначить для подключений MariaDB. В этом обучающем руководстве будет использоваться sammy, но вы можете выбрать другое имя:

      Убедитесь, что база данных была создана с помощью этого оператора SQL:

      Вы увидите примерно следующий вывод:

      Output

      +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sammy | +--------------------+

      Теперь создайте пользователя MariaDB sammy с привилегиями, аналогичными root, а затем задайте пользователю надежный пароль на свой выбор. Сохраните пароль в надежном месте, он понадобится вам позже:

      • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'%' IDENTIFIED BY 'mariadb_password' WITH GRANT OPTION;

      Теперь подтвердите создание пользователя и новые привилегии пользователя:

      • SELECT host, user, Super_priv FROM mysql.user;

      Результат должен будет выглядеть следующим образом:

      Output

      +-----------+-------+------------+ | Host | User | Super_priv | +-----------+-------+------------+ | localhost | root | Y | | localhost | mysql | Y | | % | sammy| Y | +-----------+-------+------------+ 3 rows in set (0.001 sec)

      Теперь очистите привилегии, чтобы вступили в силу все изменения:

      После этого закройте сеанс:

      Теперь, после создания пользователя базы данных, необходимо только сделать отладку MariaDB для обеспечения надлежащей работы ERPNext 12. К счастью, команда ERPNext предоставляет превосходный шаблон настроек, который вы будете использовать в качестве отправной точки для внедрения. В следующем разделе вы узнаете, как правильно настроить базу данных MariaDB.

      Шаг 4 — Настройка MariaDB для ERPNext

      После установки и обеспечения безопасности MariaDB пришло время для отладки подключений ERPNext.

      Сначала остановите mariadb.service:

      • sudo systemctl stop mariadb

      Теперь с помощью nano или вашего любимого текстового редактора создайте файл конфигурации MariaDB под названием mariadb.cnf:

      • sudo nano /etc/mysql/mariadb.conf.d/mariadb.cnf

      Добавьте официальный шаблон конфигурации ERPNext:

      /etc/mysql/mariadb.conf.d/mariadb.cnf

      [mysqld]
      
      # GENERAL #
      user                           = mysql
      default-storage-engine         = InnoDB
      socket                         = /var/lib/mysql/mysql.sock
      pid-file                       = /var/lib/mysql/mysql.pid
      
      # MyISAM #
      key-buffer-size                = 32M
      myisam-recover                 = FORCE,BACKUP
      
      # SAFETY #
      max-allowed-packet             = 256M
      max-connect-errors             = 1000000
      innodb                         = FORCE
      
      # DATA STORAGE #
      datadir                        = /var/lib/mysql/
      
      # BINARY LOGGING #
      log-bin                        = /var/lib/mysql/mysql-bin
      expire-logs-days               = 14
      sync-binlog                    = 1
      
      # REPLICATION #
      server-id                      = 1
      
      # CACHES AND LIMITS #
      tmp-table-size                 = 32M
      max-heap-table-size            = 32M
      query-cache-type               = 0
      query-cache-size               = 0
      max-connections                = 500
      thread-cache-size              = 50
      open-files-limit               = 65535
      table-definition-cache         = 4096
      table-open-cache               = 10240
      
      # INNODB #
      innodb-flush-method            = O_DIRECT
      innodb-log-files-in-group      = 2
      innodb-log-file-size           = 512M
      innodb-flush-log-at-trx-commit = 1
      innodb-file-per-table          = 1
      innodb-buffer-pool-size        = 5462M
      innodb-file-format             = barracuda
      innodb-large-prefix            = 1
      collation-server               = utf8mb4_unicode_ci
      character-set-server           = utf8mb4
      character-set-client-handshake = FALSE
      max_allowed_packet             = 256M
      
      # LOGGING #
      log-error                      = /var/lib/mysql/mysql-error.log
      log-queries-not-using-indexes  = 0
      slow-query-log                 = 1
      slow-query-log-file            = /var/lib/mysql/mysql-slow.log
      
      # CONNECTIONS #
      
      pid-file        = /var/run/mysqld/mysqld.pid
      socket          = /var/run/mysqld/mysqld.sock
      bind-address    = 0.0.0.0
      
      [mysql]
      default-character-set = utf8mb4
      
      [mysqldump]
      max_allowed_packet=256M
      

      Сохраните и закройте файл. Для получения дополнительной информации об этих настройках посмотрите этот файл шаблона в репозитории ERPNext Github. Это полезное начало для изучения этих опций.

      Файл конфигурации /etc/mysql/mariadb.conf.d/mariadb.cnf дополняет и перезаписывает несколько значений, включенных по умолчанию в конфигурацию MariaDB, расположенную в /etc/mysql/my.cnf. Этот файл дает вам шаблон с рекомендациями, который значительно повышает производительность базы данных для ERPNext. Однако обратите внимание, что хотя этот шаблон является отличным началом, ничто не мешает вам еще больше повысить производительность MariaDB под ваши нужды.

      Тестирование подключения MariaDB

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

      Запустите mariadb.service:

      • sudo systemctl start mariadb

      Для проверки подключения можно использовать следующую команду. Не забудьте заменить sammy и mariadb_password на свои учетные данные:

      • mysql --user sammy --password mariadb_password --host=localhost --protocol=tcp --port=3306 test

      Вы увидите вывод, в котором будет показано содержание базовой справки и ряд параметров. Это означает, что ваше подключение было успешным:

      Output

      mysql Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Usage: mysql [OPTIONS] [database] Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf ... --ssl-verify-server-cert Verify server's "Common Name" in its cert against hostname used when connecting. This option is disabled by default. -t, --table Output in table format. --tee=name Append everything into outfile. See interactive help (h) also. Does not work in batch mode. Disable with --disable-tee. This option is disabled by default. -u, --user=name User for login if not current user. -U, --safe-updates Only allow UPDATE and DELETE that uses keys. -U, --i-am-a-dummy Synonym for option --safe-updates, -U. -v, --verbose Write more. (-v -v -v gives the table output format). ... max-join-size 1000000 secure-auth FALSE show-warnings FALSE plugin-dir (No default value) default-auth (No default value) binary-mode FALSE connect-expired-password FALSE

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

      • sudo systemctl restart mariadb

      После этого включите MariaDB:

      • sudo systemctl enable mariadb

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

      Шаг 5 — Настройка ERPNext 12

      Теперь, после подготовки серверной части вашей базы данных, можно продолжить настройку вашего веб-приложения ERPNext. В этом разделе вы узнаете, как установить и выполнить настройку всех компонентов, необходимых для ERPNext 12 и затем установить непосредственно приложение.

      Начните с подготовки сервера с помощью всех системных пакетов, необходимых для ERPNext 12. Установите общесистемные зависимости с помощью следующей команды:

      • sudo DEBIAN_FRONTEND=noninteractive apt install -y curl build-essential python3-testresources python3-setuptools python3-dev libffi-dev python3-pip libcurl4 dnsmasq fontconfig git htop libcrypto++-dev libfreetype6-dev liblcms2-dev libwebp-dev libxext6 libxrender1 libxslt1-dev libxslt1.1 libffi-dev ntpdate postfix python3-dev python-tk screen vim xfonts-75dpi xfonts-base zlib1g-dev apt-transport-https libsasl2-dev libldap2-dev libcups2-dev pv libjpeg8-dev libtiff5-dev tcl8.6-dev tk8.6-dev libdate-manip-perl logwatch

      Переменная DEBIAN_FRONTEND=noninteractive была передана в команду установки для отключения подсказок Postfix. Для получения подробной информации о настройке Postfix ознакомьтесь с нашим руководством Установка и настройка Postfix в Ubuntu 20.04

      Затем обновите pip3, стандартный диспетчер пакетов Python, и установите последние версии трех дополнительных модулей Python:

      • sudo -H python3 -m pip install --upgrade setuptools cryptography psutil

      setuptools упрощает установку и обновление пакетов Python, cryptography добавляет возможности шифрования, а psutil помогает системе выполнять мониторинг. Теперь, после установки всех необходимых глобальных зависимостей, вы установите все службы и библиотеки, необходимые для ERPNext 12.

      Настройка Node.js и Yarn

      ERPNext 12 может работать с версией 8+ среды сервера Node.js. На самом деле на момент составления этого обучающего модуля официальный скрипт ERPNext easy_install использует Node 8. Но с точки зрения безопасности рекомендуется установить новую версию, так как срок использования Node 8 закончился в 2020 г., и поэтому он больше не будет получать обновления безопасности. На момент составления этого обучающего модуля Ubuntu 20.04 содержит версию 10.19 Node.js. Хотя эта версия все еще поддерживается, по тем же причинам (окончание срока использования) настоятельно рекомендуется не использовать ее. Для этого руководства версия 12 LTS Node.js будет установлена вместе с соответствующими диспетчерами пакетов npm и yarn. Обратите внимание, что в каркасе Frappe используется yarn для установки зависимостей. Если вы решите использовать другой метод установки, убедитесь, что в вашей системе работает конечная версия yarn 1.12+.

      Добавьте в вашу систему репозиторий NodeSource:

      • curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh

      Теперь вы можете проверить содержание загруженного скрипта:

      • sudo nano nodesurce_setup.sh

      Если вы удовлетворены содержанием скрипта, можно запустить скрипт:

      • sudo bash nodesource_setup.sh

      Этот скрипт автоматически обновит список apt. Теперь вы можете установить nodejs на вашем сервере:

      Затем установите yarn на глобальном уровне с помощью диспетчера пакетов npm:

      Теперь, после установки Node, можно продолжить настройку wkhtmltopdf для вашей платформы.

      ERPNext использует инструмент с открытым исходным кодом wkhtmltopdf для конвертации содержимого HTML в PDF с помощью механизма исполнения Qt WebKit. Эта функция используется главным образом для печати счетов-фактур, ценовых предложений и других отчетов. В случае ERPNext 12 требуется определенная версия wkhtmltopdf 0.12.5 с обновленным Qt.

      Для установки wkhtmltopdf начните с перехода в подходящий каталог для загрузки пакета, в данном случае /tmp:

      Загрузите соответствующую версию wkhtmltopdf и пакет для Ubuntu 20.04 со страницы проекта:

      • wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb

      Теперь установите пакет с помощью инструмента dpkg:

      • sudo dpkg -i wkhtmltox_0.12.5-1.bionic_amd64.deb

      Затем скопируйте все относящиеся исполняемые файлы в каталог /usr/bin/:

      • sudo cp /usr/local/bin/wkhtmlto* /usr/bin/

      Когда файлы будут на месте, измените их разрешения, чтобы они стали исполняемыми:

      • sudo chmod a+x /usr/bin/wk*

      Теперь, после надлежащей установки wkhtmltopdf, мы добавим Redis в стек нашей базы данных.

      Установка Redis

      ERPNext 12 использует Redis для повышения производительности MariaDB. В частности, Redis помогает с кешированием.

      Сначала установите Redis из официального репозитория Ubuntu 20.04:

      • sudo apt install redis-server

      Затем активируйте Redis при запуске:

      • sudo systemctl enable redis-server

      Теперь, после добавления Redis в ваш стек, давайте обобщим, что уже выполнено. На данный момент вы установили основные компоненты, необходимые для ERPNext 12, среди которых:

      • Серверная часть базы данных MariaDB
      • Среда сервера Node.js JavaScript
      • Диспетчер пакетов Yarn
      • Кэш базы данных Redis
      • Генератор документов PDF wkhtmltopdf

      Независимо от того, устанавливаете ли вы систему ERP для разработки или производства, вы готовы к следующему шагу, а именно к установке каркаса комплексной разработки Frappe и фактического веб-приложения ERPNext 12.

      Шаг 6 — Установка командной строки Bench Frappe

      Теперь, когда вы установили все требования стека ERPNext, вы можете свободно пользоваться возможностями утилиты командной строки bench. CLI bench была разработана для оказания помощи пользователям в процессе установки, настройки и управления такими приложениями, как ERPNext, которые созданы на базе каркаса Frappe Framework. В следующих разделах вы установите CLI bench для дальнейшего использования при выполнении настройки ERPNext 12.

      Убедитесь, что пользователь Frappe (в данном случае sammy) имеет соответствующие права в своем каталоге home:

      • sudo chown sammy -R /home/sammy

      Теперь клонируйте репозиторий frappe/bench в свой домашний каталог. Не забудьте заменить sammy вашим именем пользователя системы:

      • git clone https://github.com/frappe/bench /home/sammy/.bench --depth 1 --branch master

      Установите CLI bench:

      • sudo pip3 install -e /home/sammy/.bench

      В данном руководстве предполагается, что вы устанавливаете ERPNext 12 для сценариев тестирования/производства и поэтому используете ветку master. Но если вы намерены разрабатывать приложения или пользовательские модули ERPNext, лучше выбрать ветку develop. В любом случае вы готовы к установке каркаса Frappe Framework. Это последнее действие перед установкой непосредственно ERPNext.

      Настройка среды каркаса Frappe Framework

      В этом разделе вы создадите среду Frappe с помощью CLI bench.

      Во время установки Frappe вы можете превысить лимит просмотра файлов Ubuntu, который по умолчанию установлен на 8192. Чтобы избежать этого, установите более высокий лимит с помощью следующей команды:

      • echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

      Команда tee добавит содержание вашей команды echo в вызываемый файл, а также напечатает вывод на вашей консоли.

      Затем инициализируйте каркас Frappe Framework 12. Замените Sammy на имя пользователя системы:

      • bench init /home/sammy/frappe-bench --frappe-path https://github.com/frappe/frappe --frappe-branch version-12 --python python3

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

      Output

      ... Done in 82.23s. INFO:bench.utils:setting up backups no crontab for sammy SUCCESS: Bench /home/sammy/frappe-bench initialized

      Примечание. Процесс bench init может быть остановлен при возникновении ошибки spawn ENOMEM. Эта ошибка возникает, когда в системе заканчивается память. Ее необходимо устранить перед продолжением либо путем установки дополнительной физической памяти, либо путем выделения пространства подкачки.

      Рассмотрим более подробно команду, которая используется для создания среды:

      • /home/sammy/frappe-bench — это путь установки каркаса Frappe Framework, веб-сайтов и связанных приложений. Для размещения всех необходимых файлов в данном примере будет создан новый каталог с именем frappe-bench.
      • --frappe-path указывает на репозиторий Frappe, который в данном случае является официальным репозиторием Github.
      • --frappe-branch — это версия Frappe для установки. Поскольку вы хотите установить ERPNext 12, выбранная версия — Frappe 12.
      • --python — это версия Python, которая будет использоваться. Для ERPNext 12 требуется Python 3.6+. Однако в предыдущих версиях по-прежнему используется Python 2.7.

      Дополнительную информацию о командах CLI bench см. в Справочнике команд Bench.

      Гибкость, предлагаемая каркасом Frappe, превосходит возможности изолированных сред. Также вы можете создавать различные веб-сайты и устанавливать на них приложения.

      Шаг 7 — Установка веб-приложения ERPNext 12

      В этом разделе вы настроите сайт на базе Frappe, а затем установите на нем приложение ERPNext 12.

      Перейдите в каталог, где был инициирован Frappe.

      • cd /home/sammy/frappe-bench

      Перед продолжением необходимо установить определенные версии библиотек numpy и pandas в виртуальную среду Frappe. Установите эти пакеты с помощью следующей команды:

      • ./env/bin/pip install numpy==1.18.5 && ./env/bin/pip install pandas==0.24.2

      На этом этапе установка может остановиться примерно на 10-20 минут, и отобразится сообщение:

      Output

      ... Building wheel for pandas (setup.py) ... -

      Это вызвано ошибкой, связанной с pandas и Ubuntu 20.04, достаточно новой на момент написания этого документа. Тем не менее пакеты будут созданы, и по окончании вы увидите следующий вывод:

      Output

      ... Successfully built pandas Installing collected packages: pandas Successfully installed pandas-0.24.2

      Теперь можно перейти к установке. Загрузите ERPNext 12 из репозитория с помощью командной строки bench:

      • bench get-app erpnext https://github.com/frappe/erpnext --branch version-12

      Затем создайте новый сайт, заменив your_domain на домен, который вы связали с IP-адресом этого сервера:

      • bench new-site your_domain --admin-password 'erpnext_admin_password' --mariadb-root-username sammy --mariadb-root-password 'mariadb_password'

      Давайте рассмотрим опции, используемые в команде выше:

      • bench new-site создает новый сайт на базе каркаса Frappe Framework.
      • your_domain — это имя нового сайта. Убедитесь, что DNS вашего домена имеет запись A, указывающую на IP-адрес вашего сервера.
      • erpnext_admin_password— желаемый пароль для пользователя-администратора ERPNext. Сохраните этот пароль в надежном месте, он вскоре вам понадобится.
      • mariadb_password — это пароль, который вы создали в начале руководства для пользователя sammy MariaDB.

      Затем установите приложение ERPNext на сайт:

      • bench --site your_domain install-app erpnext

      По завершении установки у вас будет рабочее приложение ERPNext 12. Теперь протестируем его с помощью команды bench:

      Команда выше инициализирует консоль мониторинга в реальном времени, на которой будут отображаться различные сообщения о веб-сервере и других службах. Откройте веб-браузер и перейдите к localhost:8000 (для локальных установок) или your_domain:8000 (если вы используете удаленный сервер). Вы увидите экран входа ERPNext (мы перейдем к входу и настройке позже, после подготовки нашего сайта к производству).

      После просмотра тестового развертывания вернитесь в свой терминал и нажмите CTRL+C. Это остановит ERPNext и закроет консоль мониторинга.

      Если ваша главная задача — создать модули или модифицировать ERPNext 12, можно остановиться на данном этапе. Компоненты для разработки больше не требуются. Однако, если вам нужна готовая система для производства, для которой не требуется ручная инициализация, необходимо установить и настроить еще несколько компонентов. Это ваш следующий шаг.

      Шаг 8 — Настройка ERPNext 12 для производства

      Хотя ваше приложение ERPNext 12 готово, система в целом еще не подготовлена к производству. Чтобы обеспечить надежность и безопасность ERPNext, необходимо подключить еще несколько служб:

      • Fail2ban обеспечивает дополнительный слой защиты от попыток грубого вмешательства со стороны злоумышленников и ботов.
      • Nginx работает главным образом как прокси-сервер и перенаправляет весь трафик с порта 8000 в порт 80 (HTTP) или порт 443 (HTTPS)
      • Supervisor следит за постоянным выполнением ключевых процессов ERPNext и при необходимости запускает их.

      К этому моменту вы установили и настроили вручную ERPNext 12, что позволило вам отрегулировать процесс под ваш конкретный сценарий использования. Тем не менее для остальной части производственной настройки можно воспользоваться удобством CLI bench и автоматизировать установку и настройку остальных служб.

      Убедитесь, что вы находитесь в рабочем каталоге Frappe:

      • cd /home/sammy/frappe-bench

      Теперь используйте следующую команду для завершения настройки ERPNext 12 для производства:

      • sudo bench setup production sammy --yes

      Команда выше установит и настроит Nginx, Supervisor и Fail2Ban установит sammy в качестве владельца среды производства.

      Файлы конфигурации, созданные командой bench:

      • Два файла конфигурации Nginx, расположенные в /etc/nginx/nginx.conf и /etc/nginx/conf.d/frappe-bench.conf
      • Один прокси-изолятор Fail2Ban, расположенный в /etc/fail2ban/jail.d/nginx-proxy.conf и один фильтр, расположенный в /etc/fail2ban/filter.d/nginx-proxy.conf

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

      • sudo supervisorctl stop all

      And then, once you are ready, you can restart your services:

      • sudo supervisorctl start all

      Now you are ready to test your installation.

      Проверка установки ERPNext 12

      Прежде всего, убедитесь в работе ключевых служб производства. Используйте следующую команду systemctl и затем привяжите ее к grep:

      • systemctl list-unit-files | grep 'fail2ban|nginx|supervisor'

      Результат должен будет выглядеть следующим образом:

      Output

      fail2ban.service enabled nginx.service enabled supervisor.service enabled

      Убедившись в том, что все работает ожидаемым образом, вы можете протестировать ERPNext 12 в реальном времени на своем сервере. Откройте свой любимый браузер и перейдите к your_domain или туда, где содержится приложение ERPNext 12.

      Через несколько секунд вы должны увидеть экран входа в ERPNext 12. Используйте Administrator для имени пользователя (адрес эл. почты) и erpnext_admin_password, созданный ранее для пароля.

      Экран входа в ERPNext

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

      Выбор языка

      После выбора языка ERPNext подскажет вашу страну, часовой пояс и валюту:

      Выбор региона

      После добавления региона вы сможете создать своего первого пользователя ERPNext. Предоставленная информация будет использоваться в качестве учетных данных для входа пользователя.

      Первый пользователь ERPNext

      На следующем экране вы увидите вопрос о доменах, которые вызывает ERPNext. Если вы не уверены в том, какой у вас домен, выберите Distribution и нажмите кнопку Next (далее).

      Выберите домены

      Затем вам потребуется указать название компании и сокращенное название.

      Название компании

      На последнем экране ERPNext попросит ввести информацию о деятельности компании, название банка, план счетов и период финансового года. Дополнительные банки вы сможете ввести позже. Теперь заполните все поля на свое усмотрение и нажмите кнопку Complete Setup (Завершить настройку).

      Финансовая информация

      Далее вы увидите строку хода выполнения.

      Настройка ERPNext

      По завершении настройки появится главная панель ERPNext 12.

      Панель ERPNext 12

      Теперь вы полностью установили и настроили приложение ERPNext 12.

      Заключение

      Теперь, когда вы соответствующим образом установили приложение ERPNext 12, возможно, вы захотите начать внедрение системы для потребностей своей компании. Лучше всего начать, нажав на кнопку Getting Started (Начало работы) на панели ERPNext. ERPNext поможет вам настроить платформу для всех потребностей бизнеса и электронной коммерции.

      Начало работы

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



      Source link

      Установка Linux, Nginx, MySQL, PHP (стека LEMP) в Ubuntu 20.04


      Введение

      Программный стек LEMP — это комплекс программного обеспечения, используемый для обслуживания динамических веб-страниц и веб-приложений, написанных на PHP. Аббревиатура LEMP обозначает операционную систему Linux с веб-сервером Nginx (произносится как «энджинкс»). Данные серверной части хранятся в базе данных MySQL, а динамическая обработка выполняется PHP.

      Это руководство рассказывает, как установить стек LEMP на сервер Ubuntu 20.04. Операционная система Ubuntu обеспечивает выполнение первого требования. Далее мы расскажем, как настроить и запустить все остальные компоненты.

      Предварительные требования

      Для выполнения настоящего обучающего руководства вам понадобится доступ к серверу Ubuntu 20.04 в качестве обычного non-root user с привилегиями sudo, а на вашем сервере должен быть включен брандмауэр. Чтобы выполнить настройку, воспользуйтесь руководством по первоначальной настройке сервера Ubuntu 20.04.

      Шаг 1 — Установка веб-сервера Nginx

      Для демонстрации веб-страниц посетителям нашего сайта мы будем использовать современный и эффективный веб-сервер Nginx. Мы будем использовать диспетчер пакетов apt для получения этого программного обеспечения.

      Поскольку в этом сеансе мы будем использовать apt впервые, нужно обновить указатель пакетов вашего сервера. После этого вы можете использовать apt install для установки Nginx:

      • sudo apt update
      • sudo apt install nginx

      При получении запроса введите y для подтверждения того, что вы хотите установить nginx. После завершения установки веб-сервер Nginx будет активирован и будет работать на вашем сервере Ubuntu 20.04.

      Если у вас включен брандмауэр ufw, как рекомендуется в руководстве по первоначальной настройке сервера, вам нужно разрешить подключение к Nginx. После установки Nginx регистрирует несколько разных профилей приложений UFW. Чтобы проверить, какие из профилей UFW доступны, выполните команду:

      Output

      Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

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

      Для этого введите следующее:

      • sudo ufw allow 'Nginx HTTP'

      Для проверки изменения используйте команду:

      Результат выполнения этой команды покажет, что трафик HTTP теперь разрешен:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

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

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

      • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

      Команда выведет несколько IP-адресов. Вы можете попробовать каждый из них в своем браузере.

      Также вы можете проверить доступность IP-адреса из других мест в интернете:

      Введите полученный адрес в браузер, и вы попадете на страницу Nginx по умолчанию:

      http://server_domain_or_IP
      

      Страница Nginx по умолчанию

      Если вы видите эту страницу, значит, вы успешно установили Nginx и активировали трафик HTTP для вашего веб-сервера.

      Шаг 2 — Установка MySQL

      Мы запустили веб-сервер, и теперь нам нужно установить СУБД, которая может хранить данные вашего сайта и управлять ими. MySQL — популярная СУБД, используемая в средах PHP.

      Используйте apt для получения и установки этого программного обеспечения:

      • sudo apt install mysql-server

      Для подтверждения установки введите Y, а затем нажмите ENTER.

      После завершения установки рекомендуется запустить скрипт безопасности, предустановленный в MySQL. Этот скрипт будет удалять некоторые небезопасные настройки по умолчанию и блокировать доступ к системе управления базы данных. Для запуска интерактивного скрипта введите следующую команду:

      • sudo mysql_secure_installation

      Скрипт предложит настроить плагин VALIDATE PASSWORD PLUGIN.

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

      Выберите Y для активации или любой другой вариант, чтобы продолжить без активации этой функции.

      VALIDATE PASSWORD PLUGIN can be used to test passwords
      and improve security. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD plugin?
      
      Press y|Y for Yes, any other key for No:
      

      Если вы ответите утвердительно, вам будет предложено выбрать уровень проверки пароля. Если вы укажете самый высокий уровень 2, система будет выводить сообщения об ошибке при попытке установки пароля, который не будет содержать цифры, буквы в верхнем и нижнем регистре и специальные символы или будет содержать распространенные словарные слова.

      There are three levels of password validation policy:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file
      
      Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
      

      Вне зависимости от того, будете ли вы использовать плагин VALIDATE PASSWORD PLUGIN, ваш сервер предложит вам выбрать и подтвердить пароль для root user в MySQL. Не нужно путать его с системным пользователем root. root user базы данных — это пользователь с правами администратора, который имеет все права для работы с системой управления базы данных. Хотя в MySQL метод аутентификации root user по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности. Чуть дальше мы расскажем об этом подробнее.

      Если вы включили использование паролей, вы увидите уровень надежности введенного пароля root, и ваш сервер запросит у вас подтверждение дальнейшего использования этого пароля. Если вас устраивает текущий пароль, введите Y в диалоге для подтверждения:

      Estimated strength of the password: 100
      Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
      

      Для всех остальных вопросов нужно выбирать Y и нажимать ENTER в каждом диалоге. Выбрав эти ответы, вы удалите ряд анонимных пользователей и тестовую базу данных, отключите возможность удаленного входа пользователя root и загрузите новые правила, чтобы внесенные изменения немедленно активировались в MySQL.

      Завершив настройку, проверьте возможность входа в консоль MySQL, набрав следующую команду:

      В результате будет установлено подключение к серверу MySQL с помощью пользователя root базы данных с правами администратора, который логически выводится в результате использования sudo при запуске данной команды. Результат должен выглядеть следующим образом:

      Output

      Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 22 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>

      Для выхода из консоли MySQL введите следующую команду:

      Обратите внимание, что для подключения под именем root user не требуется вводить пароль, хотя вы и задали его при запуске скрипта mysql_secure_installation. Это происходит, поскольку используемый по умолчанию метод аутентификации для пользователя MySQL с правами администратора — unix_socket, а не password. Хотя это может выглядеть как возможный источник проблем с безопасностью, на самом деле эти действия делают сервер базы данных более защищенным, поскольку единственные пользователи, которые могут выполнять вход в систему с правами доступа root для MySQL — это пользователи системы с привилегиями sudo, подключенные с использованием консоли или через приложение, использующее аналогичные привилегии. На практике это означает, что вы не сможете использовать root user базы данных с правами администратора для подключения из вашего приложения PHP. Настройка пароля учетной записи root MySQL работает как гарантия, если метод аутентификации по умолчанию меняется с unix_socket на password.

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

      Примечание. На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication, метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что вместо этого пароля они настроены на использование mysql_native_password. Мы расскажем об этом в шаге 6.

      Теперь ваш сервер MySQL установлен и защищен. Далее мы выполним установку PHP, последнего компонента стека LEMP.

      Шаг 3 — Установка PHP

      Вы установили Nginx для обслуживания вашего контента и MySQL для хранения и управления данными. Теперь вы можете установить PHP для обработки кода и генерации динамического контента для веб-сервера.

      Хотя Apache встраивает интерпретатор PHP в каждый запрос, Nginx требуется внешняя программа для обработки PHP и организации моста между самим интерпретатором PHP и веб-сервером. Это позволяет обеспечить более высокую производительность на большинстве веб-сайтов на базе PHP, но для этого необходимо выполнить дополнительную настройку. Вы должны установить php-fpm, т. е. диспетчер процессов PHP fastCGI, и указать Nginx на необходимость передачи запросов PHP данному программному обеспечению. Также вам потребуется php-mysql, модуль PHP, который позволяет PHP взаимодействовать с базами данных MySQL. Ключевые пакеты PHP автоматически будут установлены в качестве зависимостей.

      Для установки пакетов php-fpm и php-mysql воспользуйтесь следующей командой:

      • sudo apt install php-fpm php-mysql

      При поступлении запроса введите Y и ENTER для подтверждения установки.

      Теперь вы установили компоненты PHP. Далее вы настроите Nginx для их использования.

      Шаг 4 — Настройка Nginx для использования процессора PHP

      При использовании веб-сервера Nginx вы можете создавать блоки сервера (аналогичные виртуальным хостам в Apache) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. В этом руководстве мы будем использовать your_domain в качестве примера доменного имени. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, см. наше обучающее руководство Введение в DigitalOcean DNS.

      В Nginx на Ubuntu 20.04 по умолчанию включен один серверный блок, настроенный для вывода документов из директории /var/www/html. Хотя это хорошо работает для отдельного сайта, при размещении нескольких сайтов это может доставлять неудобства. Вместо изменения /var/www/html мы создадим внутри /var/www структуру директорий для нашего сайта your_domain, оставив /var/www/html​​​ в качестве директории по умолчанию для вывода в случае, если запросу клиента не соответствуют никакие другие сайты.

      Создайте корневую веб-директорию для your_domain следующим образом:

      • sudo mkdir /var/www/your_domain

      Затем необходимо назначить права владения для директории с помощью переменной среды $USER, которая будет использоваться для текущего системного пользователя:

      • sudo chown -R $USER:$USER /var/www/your_domain

      После этого откройте новый файл конфигурации в директории Nginx sites-available с помощью любого редактора командной строки. Мы будем использовать nano:

      • sudo nano /etc/nginx/sites-available/your_domain

      В результате будет создан новый пустой файл. Вставьте следующую пустую конфигурацию:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          server_name your_domain www.your_domain;
          root /var/www/your_domain;
      
          index index.html index.htm index.php;
      
          location / {
              try_files $uri $uri/ =404;
          }
      
          location ~ .php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           }
      
          location ~ /.ht {
              deny all;
          }
      
      }
      
      
      

      Ниже описано действие этих директив и блоков расположения:

      • listen — определяет, что будет прослушивать порт Nginx. В данном случае он будет прослушивать порт 80, используемый по умолчанию для протокола HTTP.
      • root — определяет корневую директорию документа, где хранятся файлы, обслуживаемые этим сайтом.
      • index — задает для Nginx приоритет обслуживания файлов индекса для этого сайта. Довольно часто вы указываете файлы index.html, которые имеют высший приоритет по сравнению с файлами index.php, чтобы обеспечить быструю настройку начальной страницы в приложениях PHP. Вы можете менять эти настройки в зависимости от потребностей вашего приложения.
      • server_name — определяет, на какие доменные имена и/или IP-адреса должен реагировать ваш серверный блок. Эта директива должна указывать на доменное имя или публичный IP-адрес вашего сервера.
      • location / — первый блок расположения включает директиву try_files, которая проверяет наличие файлов или директорий, соответствующих запросу URI. Если Nginx не сможет найти соответствующий ресурс, будет возвращена ошибка 404.
      • location ~ .php$ — этот блок расположения отвечает за фактическую обработку PHP посредством указания Nginx на файл конфигурации fastcgi-php.conf и файл php7.4-fpm.sock, который объявляет, какой сокет ассоциирован с php-fpm.
      • location ~ /.ht — последний блок расположения отвечает за файлы .htaccess, которые Nginx не обрабатывает. При добавлении директивы deny all, если любой из файлов .htaccess попадет в корневую директорию документа, они не будут выводиться посетителям.

      Когда вы закончите редактирование, сохраните и закройте файл. Если вы используете nano, можно ввести CTRL+X, а затем y и ENTER для подтверждения.

      Активируйте вашу конфигурацию посредством привязки к файлу конфигурации из директории Nginx sites-enabled:

      • sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

      Это укажет Nginx использовать эту конфигурацию в следующий раз при перезагрузке. Вы можете протестировать вашу конфигурацию на наличие ошибок синтаксиса с помощью команды:

      Если есть какие-либо ошибки, вернитесь в файл конфигурации и проверьте его содержание перед тем, как продолжить.

      Когда будете готовы, перезагрузите Nginx для внесения необходимых изменений:

      • sudo systemctl reload nginx

      Теперь ваш новый веб-сайт активен, но корневая веб-директория /var/www/your_domain все еще пуста. Создайте файл index.html в этом расположении, чтобы убедиться, что веб-сервер работает, как ожидалось:

      • nano /var/www/your_domain/index.html

      Внесите в файл следующее:

      /var/www/your_domain/index.html

      <html>
        <head>
          <title>your_domain website</title>
        </head>
        <body>
          <h1>Hello World!</h1>
      
          <p>This is the landing page of <strong>your_domain</strong>.</p>
        </body>
      </html>
      

      Теперь откройте браузер и получите доступ к доменному имени сервера или IP-адресу, как указано в директиве server_name в файле конфигурации вашего серверного блока:

      http://server_domain_or_IP
      

      Страница будет выглядеть следующим образом:

      Серверный блок Nginx

      Если вы видите эту страницу, это означает, что ваш серверный блок Nginx работает, как и ожидалось.

      Вы можете оставить этот файл в качестве временной начальной страницы для вашего приложения, пока не настроите файл index.php для его замены. Как только вы сделаете это, не забудьте удалить или переименовать файл index.html из корневой директории документов, так как он будет иметь приоритет перед фалом index.php по умолчанию.

      Теперь ваш стек LEMP полностью настроен. В следующем шаге мы создадим скрипт PHP для проверки способности Nginx обрабатывать файлы .php на вашем недавно настроенном веб-сайте.

      Шаг 5 — Тестирование PHP с помощью Nginx

      Теперь набор LEMP должен быть полностью настроен. Вы можете протестировать его, чтобы убедиться, что Nginx может правильно передавать файлы .php на процессор PHP.

      Вы можете сделать это, создав тестовый файл PHP в корневой директории документов. Откройте в своем текстовом редакторе новый файл с именем info.php внутри корневой директории документов:

      • nano /var/www/your_domain/info.php

      Введите или вставьте следующие строки в новый файл. Это корректный код PHP, который будет возвращать информацию о вашем сервере:

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      После завершения сохраните и закройте файл с помощью команды CTRL+X, а затем введите y и ENTER для подтверждения.

      Теперь вы можете получить доступ к этой странице в веб-браузере, посетив доменное имя или публичный IP-адрес, настроенный в файле конфигурации Nginx, добавив /info.php в конце:

      http://server_domain_or_IP/info.php
      

      Вы увидите веб-страницу, содержащую подробную информацию о вашем сервере:

      PHPInfo Ubuntu 20.04

      После проверки соответствующей информации о вашем сервере PHP с помощью данной страницы рекомендуется удалить созданный вами файл, поскольку он содержит конфиденциальную информацию о вашей среде PHP и о вашем сервере Ubuntu. Вы можете использовать rm для удаления этого файла:

      • sudo rm /var/www/your_domain/info.php

      При необходимости вы всегда сможете восстановить этот файл.

      Шаг 6 — Тестирование подключения к базе данных для PHP (необязательно)

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

      На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication, метод аутентификации по умолчанию для MySQL 8. Мы должны создать нового пользователя с помощью метода аутентификации mysql_native_password для подключения к базе данных MySQL из PHP.

      Мы создадим базу данных с именем example_database и пользователя с именем example_user, но вы можете использовать и другие имена.

      Вначале необходимо подключиться к консоли MySQL с помощью учетной записи root:

      Чтобы создать новую базу данных, запустите следующую команду в консоли MySQL:

      • CREATE DATABASE example_database;

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

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

      • CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

      Теперь нам нужно предоставить этому пользователю разрешение для базы данных example_database:

      • GRANT ALL ON example_database.* TO 'example_user'@'%';

      В результате пользователь example_user получит полный набор привилегий для базы данных example_database, но не будет обладать возможностью создания или изменения других баз данных на сервере.

      Теперь закройте оболочку MySQL:

      Вы можете проверить наличие у нового пользователя необходимых разрешений, выполнив повторный вход в консоль MySQL, на этот раз используя учетные данные вашего собственного пользователя:

      Обратите внимание на флаг -p в этой команде, который будет запрашивать пароль, который вы задаете при создании пользователя example_user. После входа в консоль MySQL убедитесь, что у вас есть доступ к базе данных example_database:

      Результат будет выглядеть следующим образом:

      Output

      +--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

      Далее мы создадим тестовую таблицу с именем todo_list. Из консоли MySQL запустите следующее выражение:

      • CREATE TABLE example_database.todo_list (
      • item_id INT AUTO_INCREMENT,
      • content VARCHAR(255),
      • PRIMARY KEY(item_id)
      • );

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

      • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

      Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:

      • SELECT * FROM example_database.todo_list;

      Вывод должен выглядеть так:

      Output

      +---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

      Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MySQL:

      Теперь вы можете создать скрипт PHP, который будет подключаться к MySQL и запрашивать ваше содержимое. Создайте новый файл PHP в пользовательской корневой веб-директории в предпочитаемом вами редакторе. Мы будем использовать nano:

      • nano /var/www/your_domain/todo_list.php

      Следующий скрипт PHP подключается к базе данных MySQL и запросам по содержимому таблицы todo_list, выводя результаты в список. Если существует проблема подключения к базе данных, будет выдана ошибка. Скопируйте это содержимое в скрипт todo_list.php:

      /var/www/your_domain/todo_list.php

      <?php
      $user = "example_user";
      $password = "password";
      $database = "example_database";
      $table = "todo_list";
      
      try {
        $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
        echo "<h2>TODO</h2><ol>";
        foreach($db->query("SELECT content FROM $table") as $row) {
          echo "<li>" . $row['content'] . "</li>";
        }
        echo "</ol>";
      } catch (PDOException $e) {
          print "Error!: " . $e->getMessage() . "<br/>";
          die();
      }
      

      Сохраните и закройте файл после завершения редактирования.

      Теперь вы можете получить доступ к этой странице в веб-браузере, посетив доменное имя или публичный IP-адрес, настроенный для вашего веб-сайта, добавив /todo_list.php в конце:

      http://server_domain_or_IP/todo_list.php
      

      Вы должны увидеть примерно следующую страницу, отображающую содержимое, которое вы добавили в тестовую таблицу:

      Пример списка дел PHP

      Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MySQL.

      Заключение

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

      Теперь можно выполнить ряд последующих шагов. Например, вы можете проверить защищенность соединений с вашим сервером. Для этого вы можете обеспечить безопасность установки Nginx с помощью Let’s Encrypt. Следуя указаниям настоящего руководства, вы получите бесплатный сертификат TLS/SSL для вашего сервера, который позволит ему обслуживать контент через протокол HTTPS.



      Source link

      Установка стека Linux, Nginx, MySQL, PHP (LEMP) в CentOS 8 [Краткое руководство]


      Введение

      В этом руководстве вы установите стек LEMP на сервер с CentOS 8. Хотя MySQL доступен в используемых по умолчанию репозиториях в CentOS 8, в этом руководстве мы рассмотрим процесс настройки стека LEMP с MariaDB в качестве системы управления базами данных.

      Более подробную версию этого обучающего руководства с подробным описанием каждого шага см. в статье Установка стека Linux, Nginx, MySQL, PHP (LEMP) в CentOS 8.

      Предварительные требования

      Для выполнения этого руководства вам потребуется доступ к серверу CentOS 8 с пользователем с правами sudo.

      Шаг 1 — Установка Nginx

      Установите пакет nginx с помощью следующей команды:

      После завершения установки запустите следующую команду, чтобы активировать и запустить сервер:

      • sudo systemctl start nginx

      Если брандмауэр firewalld активен, вам потребуется запустить следующую команду, чтобы разрешить внешний доступ к порту 80 (HTTP):

      • sudo firewall-cmd --permanent --add-service=http

      Выполните перезапуск конфигурации брандмауэра, чтобы изменения вступили в силу:

      • sudo firewall-cmd --reload

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

      Страница Nginx по умолчанию в CentOS 8

      Шаг 2 — Установка MariaDB

      Теперь мы установим MariaDB, разработанную энтузиастами версию оригинального сервера MySQL от Oracle. Для установки данного ПО запустите следующую команду:

      • sudo dnf install mariadb-server

      После завершения установки активируйте и запустите сервер MariaDB с помощью следующей команды:

      • sudo systemctl start mariadb

      Чтобы повысить уровень безопасности вашего сервера базы данных, рекомендуется запустить скрипт безопасности, который устанавливается в комплекте с MariaDB. Запустите интерактивный скрипт с помощью следующей команды:

      • sudo mysql_secure_installation

      В первом диалоге вам нужно будет ввести пароль пользователя root для текущей базы данных. Поскольку вы только что установили MariaDB и еще не меняли параметры конфигурации, пароль будет пустым, так что вам достаточно нажать ENTER в этом диалоге.

      В следующем диалоге вам будет предложено задать пароль для пользователя root базы данных. Поскольку MariaDB использует специальный метод аутентификации для пользователя root, который, как правило, отличается большей безопасностью по сравнению с аутентификацией по паролю, вам не нужно настраивать его в данный момент. Введите N и нажмите ENTER.

      Далее вы можете использовать клавиши Y и ENTER, чтобы принять ответы по умолчанию для всех последующих вопросов.

      После выполнения указанных выше действий выполните вход в консоль MariaDB с помощью следующей команды:

      В результате будет установлено подключение к серверу MariaDB с помощью пользователя root базы данных с правами администратора, который логически выводится в результате использования sudo при запуске данной команды. Результат должен выглядеть следующим образом:

      Output

      Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]>

      Чтобы создать новую базу данных, запустите следующую команду в консоли MariaDB:

      • CREATE DATABASE example_database;

      Теперь вы можете создать нового пользователя и предоставить ему полный набор прав для только что созданной вами базы данных:

      • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

      Очистите привилегии, чтобы они были сохранены и доступны в текущем сеансе:

      После этого закройте оболочку MariaDB:

      Шаг 3 — Установка PHP-FPM

      Для установки пакетов php-fpm и php-mysql воспользуйтесь следующей командой:

      • sudo dnf install php-fpm php-mysqlnd

      После завершения установки вам потребуется изменить файл /etc/php-fpm.d/www.conf, чтобы задать несколько параметров. Мы установим nano для упрощения процесса редактирования этих файлов:

      Теперь откройте файл конфигурации /etc/php-fpm.d/www.conf с помощью nano или другого выбранного вами редактора:

      • sudo nano /etc/php-fpm.d/www.conf

      Найдите директивы user и group. Если вы используете nano, вы можете нажать CTRL+W для поиска этих терминов в открытом файле. Обязательно измените оба значения с apache на nginx:

      /etc/php-fpm.d/www.conf

      …
      ; RPM: apache user chosen to provide access to the same directories as httpd
      user = nginx
      ; RPM: Keep a group allowed to write in log dir.
      group = nginx

      Сохраните и закройте файл после завершения редактирования.

      Чтобы активировать и запустить службу php-fpm, запустите следующую команду:

      • sudo systemctl start php-fpm

      Перезапустите веб-сервер Nginx, чтобы он смог использовать файлы конфигурации, созданные при установке php-fpm:

      • sudo systemctl restart nginx

      Шаг 4 — Тестирование PHP с помощью Nginx

      В CentOS 8 при установке php-fpm по умолчанию автоматически создаются файлы конфигурации, которые позволят вашему веб-серверу Nginx обрабатывать файлы .php в корневой директории документов по умолчанию, расположенной в /usr/share/nginx/html. Вам не потребуется вносить какие-либо изменения в конфигурацию Nginx для обеспечения корректной работы PHP на вашем веб-сервере.

      Нам нужно будет только изменить владельца и группу по умолчанию в корневой директории документов Nginx, чтобы вы могли создавать и изменять файлы в этом месте с помощью обычного пользователя без прав root:

      • sudo chown -R sammy.sammy /usr/share/nginx/html/

      Создайте новый файл PHP с именем info.php в директории /usr/share/nginx/html:

      • nano /usr/share/nginx/html/info.php

      Следующий код PHP будет отображать информацию о текущей среде PHP, которая запущена на сервере:

      /usr/share/nginx/html/info.php

      <?php
      
      phpinfo();
      

      Скопируйте это содержимое в ваш файл info.php и не забудьте сохранить изменения после завершения редактирования.

      Теперь мы можем проверить, может ли наш веб-сервер корректно отображать содержимое, созданное скриптом PHP. Перейдите в браузер и вставьте в адресную строку имя хоста вашего сервера или его IP-адрес, добавив /info.php:

      http://server_host_or_IP/info.php
      

      Вы увидите приблизительно следующую страницу:

      Отображаемая по умолчанию страница с данными PHP в CentOS 8

      Другие обучающие руководства

      Ниже представлены ссылки на более подробные материалы, связанные с настоящим обучающим руководством:



      Source link