Как развернуть приложение на сервере linux

Обновлено: 16.05.2024

Эта статья для тех, кто хочет запустить сайт или API на Flask на своём сервере и сделать его доступным из интернета. Если Вы просто делаете заглушку для теста, или локальный веб сайт эти шаги, возможно, избыточны.

Введение

Первый деплой проекта на реальном сервере это всегда вызов.

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

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

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

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

Подготовка

Про установку и настройку Debian Linux читайте в статье Самоучитель Debian

Про установку Nginx в Debian и Ubuntu читайте статьи Nginx на Debian и Nginx на Ubuntu

Залогинимся на сервере и выполним

sudo apt update

Проверим установлен ли pip3 командой

Если получили что-то вроде

pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

Тот Pip уже установлен, если нет - нужно выполнить

sudo apt install python3-pip

Подробности про pip можете прочитать здесь

Установка пакетов

Скопируем папку с нашим проектом на сервер, перейдём в директорию, в которой лежит файл requirements.txt и выполним

pip3 install -r requirements.txt

Если Вы получили предупреждение

Как это сделать можете прочитать в статье Linux PATH

Gunicorn

После успешной установки pip3 и пакетов-зависимостей нужно установить Gunicorn.

Есть и другие средства деплоить Flask, Вы можете изучить их здесь

sudo apt install gunicorn3

gunicorn можно установить через pip особенно полезным будет вариант устанвоки gunicorn в виртуальном окружении.

В этом примере для простоты работы установка была сделана через apt

Допустим главный файл вашего приложения называется aredel_com.py и вы находитесь с ним в одной директории.

Команда для запуска приложения

Как Вы могли заметить Gunicorn слушает на порту 8000.

Мы прячем Gunicorn за Nginx, так как у Nginx много возможностей по работе с нагрузкой и безопастностью, которых нет у Gunicorn.

Выключим Gunicorn нажав CTRL + C и запустим его как демон

gunicorn3 -D aredel_com:app

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

Чтобы убедиться в том, что gunicorn3 работает выполните

ps -A | grep gunicorn

10704 ? 00:00:00 gunicorn3 10707 ? 00:00:00 gunicorn3

Чтобы проверить работает ли Nginx можно зайти на сервер с помощью браузера.

IP моего сервера 192.0.2.131

Про то как настраивать подключения по сети в Linux читайте статьи Debian Network и Ubuntu Network

Доступные сайты Nginx хранит в /etc/nginx/sites-available/

cd /etc/nginx/sites-available/
ls

drwxr-xr-x 2 root root 4096 syys 17 16:38 . drwxr-xr-x 8 root root 4096 syys 17 16:38 .. -rw-r--r-- 1 root root 2416 maalis 26 2020 default

Дефолтный сайт, который вы можете увидеть введя в адресную строку браузера IP вашего сервера (у меня 192.0.2.131) выглядит примерно так:

Nginx default www.andreyolegovich.ru

Дефолтный сайт нам не нужен, поэтому можно его просто удалить

sudo rm default

Настройка Nginx

Копируем кофигурацию для nginx. Советую делать это не отсюда а с сайта gunicorn

sudo vi default

И вставляем настройки.

Если у Вас сложности с использованием vi прочитайте статью «Текстовый редактор vi»

Редактируем настройки, чтобы они больше соответствовали названию проекта

sudo service nginx restart

Более подробную информацию о настройке связки Nginx - Gunicorn Вы можете найти здесь

Про то как настроить запуск Gunicorn при перезагрузке системы читайте здесь

Итоги

Теперь если Вы зайдёте через браузер на Ваш сервер - там появится Ваше приложение.

Как это произошло: gunicorn3 запустил приложение Flask и слушал на порту 8000

Мы запустили Nginx, который слушает порт 80 и пробрасывает соединение на порт 8000 - обратите внимание на строку

В статье предполагается, что Вы имеете web-приложение OneScript, созданное на основе этой или этой статьи, либо же каким-либо другим способом. Автор использовал для размещения приложение, созданное в этой публикации.

В процессе установки была добавлена поддержка русской клавиатуры , а также установлен OpenSSH сервер для удаленного доступа к серверу .

Также , был создан пользователь с логином onescript и паролем - 123456.

Необходимые утилиты

Настройка системы

Подключаемся к серверу

Подключаемся к серверу при помощи putty.exe и вводим логин и пароль .



Обновляем список доступных пакетов и устанавливаем новые версии

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

Устанавливаем утилиту распаковки zip файлов

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

Устанавливаем mono

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

Подключаем репозитарий Mono

Устанавливаем Mono

Устанавливаем и настраиваем web- сервер

Как было указано ранее, в качестве web- сервера используется Apache с модулем mod-mono-server.

Устанавливаем Apache

Для установки , в командной строке выполняем нижеследующую команду :

Тестируем работоспособность сервера

Проверить работоспособность web- сервера можно обратившись к нему из браузера .


Устанавливаем mod-mono-server4

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

Для установки данного компонента, выполним нижеследующую команду :

Настраиваем mono-mod-server

Для простоты, используем режим AutoHosting. Для активации режима выполним нижеследующую команду :

Рестартуем сервис Apache

По умолчанию, корневая папка документов Apache расположена по нижеследующему пути : /var/www/html

Создадим в этой папке файл test.aspx следующего содержания :

Вставляем текст страницы и сохраняем файл (нажимаем ESC , затем Shift + Z + Z ) .

Тестируем работоспособность, для этого, из браузера обращаемся к созданной странице.


Настраиваем обработку расширений для *.os файлов

Для этого, отредактируем строку Add-Type application/x-asp-net , добавив туда расширение .os , в файле /etc/mono-server4/mono-server4-hosts.conf

Нажимаем Insert для включения редактированния, затем добавляем расширение . os в строку с Add-Type


Сохраняем файл (Нажимаем ESC, затем Shift + Z + Z ).

Рестартуем сервис Apache

Развертывание приложения

Копируем приложение на сервер

Предположим , что архив нашего приложения (application.zip) расположен в папке E:\Putty . Запустим командную строку Windows и выполним нижеследующую команду :

После завершения копирования, файл с архивом приложения появится в папке /tmp


Разархивируем приложение

Разархивируем application.zip в папку /var/www/html . Для этого, в командной строке выполним нижеследующую команду :

Переходим в папку /var/www/html и проверяем содержимое


Удаляем файл Web.config так как он используется для ОС Windows и переименовываем файл Web.config.linux в Web.config . Для этого выполним нижеследующие команды :


Тестируем работоспособность

Обратимся из браузера к развернутому web- приложению. Если все настроено правильно, увидим примерно такой результат (зависит от приложения, которое Вы размещали).


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

В этом примере простая демонстрация интеграции SSM развернута в системе Centos в виде веб-проекта.

Шаг 1 Инициализируйте базу данных

Убедитесь, что база данных mysql на сервере linux может быть подключена нормально, и подключитесь к серверу mysql через клиентский инструмент (например, navicat)

1) Создайте базу данных gdmt (используйте utf8 для кодировки базы данных)

2) Выполните сценарий инициализации для построения таблицы и инициализации данных.

Скрипт инициализации находится в файле проекта /ssmdemo/src/main/resources/dbscripts/initdb.sql.

Шаг 2 Настройте подключение к базе данных

Отредактируйте файл проекта /ssmdemo/src/main/resources/system.properties, чтобы указать информацию о подключении к базе данных:

Примечание: mysql8 и 5 разные

Шаг 3: упаковка веб-проекта

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

1) Подтвердите версию jdk

А) Укажите версию jdk в файле pom.xml:

Б) Если версия jdk, используемая для упаковки, не указана в файле pom.xml, будет использоваться версия jdk по умолчанию в ide. Будьте осторожны, указывайте не на среду jre, а на всю среду jdk.


Место, отмеченное 5, указывает на jdk, а не на папку jre. Eclipse ee по умолчанию указывает на папку jre. Для упаковки Maven необходимо использовать полный jdk, иначе будет сообщено об ошибке

2) Используйте maven для упаковки и создания файлов войны

Щелкните проект правой кнопкой мыши и выберите [Запуск от имени] -> [Сборка Maven . ]


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



Военное местоположение сгенерированного файла после упаковки: в целевой папке проекта

Note:

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

Если вы не хотите подключаться к базе данных в это время, вам необходимо прокомментировать и настроить тест подключения к базе данных или пропустить тест в pom.xml, а затем настроить базу данных после развертывания.

Шаг 4 Загрузите файл войны на сервер Linux

Используйте ftp (используемый здесь инструмент - xftp), чтобы загрузить военный пакет на сервер Linux.


Шаг 5: разверните файл войны

Используйте инструмент ssh (здесь используется Xshell) для подключения к серверу linux и используйте команду cp для копирования файла war в каталог webapps каталога развертывания tomcat:


Шаг 6 Протестируйте веб-проект

1) Запустите tomcat:


В это время папка ssmdemo будет создана в папке webapps.


Note:

Если вы не установили информацию о подключении к базе данных на шаге 2, вам необходимо войти в папку ssmdemo / WEB-INF / classes, чтобы отредактировать файл system.properties, чтобы настроить информацию о подключении к базе данных.

2) Доступ к развернутому проекту через Интернет.

Доступ к веб-проекту на сервере Linux

[Ошибка передачи изображения по внешней ссылке, исходный сайт может иметь механизм защиты от горячих ссылок, рекомендуется сохранить изображение и загрузить его напрямую (img-C3eBLucv-1587131622920) (images / ssmdemo-web.jpg)]

На данный момент развертывание проекта завершено!

Интеллектуальная рекомендация

Замена персонажа

Пожалуйста, реализуйте функцию для преобразованияЗаменить каждый пробел"% 20". Например, когда строка We We Happy. Строка после замены - We% 20Are% 20Happy. Встроенные функции для строк Pyth.


Подсистема ввода Android - Itreader EventHub :: GetEvents Mneedtscandevices Переменные Подробный анализ

EventHub :: MeetEvents Method, Mneedtscandevices Переменная процесса вызова подробный анализ . if (mNeedToScanDevices.


Базовые знания Python3: List

Просто поймите: 1. Типы элементов в списке могут быть разными, он поддерживает числа, строки и даже списки (так называемая вложенность). 2. Список представляет собой список элементов, заключенн.


NOIP 2017 Улучшенное сокровище группы ___ государственное давление dp + dfs

Главная идея: ответ: Этот вопрос найти несложно, f [i] указывает, что состояние выбранной точки равно i, это минимальная стоимость, а dis [i] указывает количество сокровищ от начальной точки до i. , а.

HYSBZ-2002: Bounce Bouncing Sheep (алгоритм блокировки)

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

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

Также для работы с сайтом необходима система управления контентом (CMS), веб интерфейс для управления базами данных и возможность доступа по FTP.

Рассмотрим процесс установки и настройки распространенной связки Apache-PHP-MySQL(MariaDB) в операционной системе Linux. Дополнительно будут установлены ftp-сервер vsftpd, веб-интерфейс для управления базой данных phpMyAdmin и система управления контентом Wordpress.

Для начала работы, следует заказать VPS или выделенный сервер. В данной статье примеры выполнены на виртуальном сервере со статическим публичным IP-адресом под управлением Ubuntu Server 18.04. Команды выполняются от имени суперпользователя.

1. Установка

apt install apache2

Установка и настрйока HTTP-сервера

2. Создание тестовой страницы

По умолчанию корневым каталогом для размещения сайта является директория “/var/www/html”, именно там находится страница приветствия. Создадим отдельную директорию “/var/www/sites” для размещения виртуальных хостов и вложенную папку “/var/www/sites/site1” с индексной страницей тестового сайта.

cd /var/www/
mkdir -p sites/site1
echo "<H1>Welcome</H1>" > sites/site1/index.html

В результате файл “/var/www/sites/site1/index.html” будет содержать одну html-строку:

3. Конфигурация Apache-сервера

Конфигурационные файлы сайтов находятся в каталоге “/etc/apache2/sites-available/”. Создадим конфигурационный файл для нового виртуального хоста взяв за основу конфигурацию по умолчанию из файла “000-default.conf”

cd /etc/apache2/sites-available/
cp 000-default.conf site1.conf

Откроем файл “site1.conf” и изменим параметр “DocumentRoot”. В качестве значения нужно указать путь к новому сайту, в нашем случае это “/var/www/sites/site1”

Настрйока и конфигурация Apache-сервера

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

a2dissite 000-default
a2ensite site1
systemctl reload apache2

Настройка HTTP-сервера

Настройка FTP-сервера

1. Установка

Устанавливаем ftp-сервер и дополнительный пакет “db-util”, который потребуется для настройки виртуальных пользователей.

apt install vsftpd db-util

2. Создание локальной учетной записи

Сервер vsftpd позволяет очень гибко настраивать права доступа. Для решения наших задач ftp-пользователям необходимо обеспечить следующие возможности:

  • полный доступ к содержимому директории “/var/www/sites/”;
  • невозможность выхода за пределы директории “/var/www/”;
  • подключение с использованием виртуальной учетной записи;

Создадим локальную учетную запись “virtual” без возможности входа в систему, с домашней директорией “/var/www/”. Эта учетная запись будет использоваться для подключения виртуальных ftp-пользователей.

useradd -d /var/www virtual

По умолчанию, владельцем директории “/var/www” является “root”. Для того, того, чтобы ftp-пользователи могли изменять содержимое сайтов, изменим владельца каталога “/var/www/sites/”, включая вложенные папки на “virtual”.

chown -R virtual:root /var/www/sites

В результате изменения прав, пользователь “virtual” сможет просматривать содержимое каталога “/var/www/” и записывать во вложенный каталог “/var/www/sites/”

3. Конфигурация

Основная конфигурация хранится в файле “/etc/vsftpd.conf”, приводим его к следующему виду:

4. Создание базы данных

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

Предварительно создадим в домашнем каталоге простой текстовый файл “users.txt” и запишем логины и пароли виртуальных пользователей в чередующиеся строки. Например нам нужен виртуальный пользователь с логином “ftp” и паролем “Qwe123”, тогда содержимое файла будет таким:

Создаем базу данных

db_load -T -t hash -f

Меняем стандартное содержимое PAM файла “/etc/pam.d/vsftpd” на следующие строки.

auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login

Обратите внимание, что в различных дистрибутивах расположение библиотеки “pam_userdb.so” может отличаться, при необходимости путь к файлу нужно скорректировать.

Для применения изменений перезагружаем vsftpd сервер.

systemctl restart vsftpd

Настройка FTP-сервера завершена.

Данные для подключения:

  • ftp://[ip_адрес_сервера]
  • Логин: ftp
  • Пароль: Qwe123

Настройка PHP-сервера

1. Установка

На текущий момент последней стабильной версией PHP является php 7.4.5, которая отсутствует в официальных репозиториях Ubuntu. Подключим сторонний репозиторий и установим последнюю версию PHP.

apt update
apt install software-properties-common
add-apt-repository ppa:ondrej/php
apt update
apt install php7.4

2. Проверка

Для того, чтобы PHP код мог быть исполнен, файл веб страницы должен иметь расширение “.php”. Переименовываем тестовою страницу

cd /var/www/sites/site1/
mv index.html index.php

Добавляем в файл “/var/www/sites/site1/index.php” строку php-кода. В результате содержимое файла будет таким:

Сохраняем изменения и проверяем результат в браузере.

Настройка PHP-сервера

Если вы видите результат работы функции “phpinfo()”, значит интерпретатор PHP работает корректно. Приступаем к следующему этапу.

Настройка MySQL (MariaDB)

1. Установка

Устанавливаем MariaDB и PHP-модуль для работы с MySQL, после завершения установки перезагружаем Apache

apt install mariadb-server php-mysql
systemctl restart apache2

Для проверки обновим тестовую страницу и в таблице с конфигурацией PHP и перейдем к разделу PDO. Наличие секции “PDO_mysql” говорит о корректной установке драйвера для работой с базой данных Mysql.

Настройка и установка MySQL на сервер

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

На первом шаге необходимо ввести пароль пользователя "root" для входа в СУБД или нажать Enter, если пароль не задан. Так как после установки учетная запись "root" не имеет пароля, нажимаем “Enter”.

Обратите внимание, что в MariaDB существуют собственные учетные записи, которые не имеют отношения к учетным записям операционной системы. Речь идет о пользователе "root" в MariaDB.

 MySQL: Создание пользователя и установка пароля

Далее конфигуратор предложит задать пароль для пользователя root, нажимаем “y” для подтверждения и вводим новый пароль, в нашем случае “Qwe123”

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

На все последующие запросы просто нажимаем “y” до окончания настройки.

Данные для входа в MariaDB:

Настройка phpMyAdmin

1. Установка

Устанавливаем обязательное PHP-расширение mbstring.

apt install php-mbstring

В официальном репозитории размещена устаревшая версия phpMyAdmin, поэтому выполним установку в ручном режиме.

Копируем архив на сервер в каталог “/var/www/sites/” используя любой ftp-клиент.

Распаковываем архив, и для удобства, переименовываем извлеченную папку в “phpMyAdmin”. Для распаковки zip-архива предварительно установим утилиту “unzip”. После распаковки архив можно удалить.

apt install unzip
cd /var/www/sites/
unzip phpMyAdmin-5.0.2-all-languages.zip
mv phpMyAdmin-5.0.2-all-languages phpMyAdmin
rm phpMyAdmin-5.0.2-all-languages.zip

Создаем папку “/var/www/sites/phpMyAdmin/tmp” для хранения временных файлов с полными доступом для всех. Если этого не сделать phpMyAdmin сообщит об отсутствии доступа в временной папке.

cd /var/www/sites/phpMyAdmin/
mkdir tmp
chmod 777 tmp

2. Создание псевдонима

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

Открываем файл “/etc/apache2/mods-available/alias.conf” и вставляем строку

Alias /pma “/var/www/sites/phpMyAdmin"

<IfModule alias_module>
</IfModule>

Создание псевдонима в phpMyAdmin

Перезагружаем конфигурацию Apache для применения изменений.

systemctl reload apache2

3. Подготовка базы данных

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

Кроме того, для работы дополнительных функций phpMyAdmin необходима служебная база данных и учетная запись для доступа к ней.

Создадим учетные записи

mariadb -u root -p

GRANT ALL PRIVILEGES ON *.* TO 'pma'@'localhost' IDENTIFIED BY 'Qwe123' WITH GRANT OPTION;

GRANT SELECT, INSERT, UPDATE, DELETE ON `phpmyadmin`.* TO 'pmaservice'@'localhost' IDENTIFIED BY 'Qwe123' WITH grant option;

Обратите внимание, что имя базы данных во втором запросе заключено в обратные апострофы: “… ON `phpmyadmin`.* TO 'pma'@'localhost' IDENTIFIED BY …”,

В результате в MariaDB будет создано две учетные записи:

  1. Логин: pma, пароль: Qwe123
    Учетная запись имеет полные права и будет использоваться для входа в phpMyAdmin
  2. Логин: pmaservice, пароль:Qwe123
    Служебная учетная запись необходимая для работы дополнительных функций.

На следующем шаге эти учетные данные должны быть указаны в конфигурационном файле “config.inc.php”

Далее необходимо импортировать базу данных из файла “phpMyAdmin/sql/create_tables.sql”. Выполним импорт средствами phpMyAdmin.

Вводим логин “pma”, пароль “Qwe123”

Переходим на вкладку “Импорт”, нажимаем кнопку “Выберите файл” и выбираем файл ”sql/create_tables.sql” в корневой директории phpMyAdmin. Предполагается что на локальном компьютере существует папка с файлами “phpMyAdmin”, если необходимо, распакуйте архив.

Настройка phpmyadmin

4. Конфигурация

Копируем файл конфигурации из шаблона

cd /var/www/sites/phpMyAdmin/
cp config.sample.inc.php config.inc.php

Открываем конфигурационный файл “/var/www/sites/phpMyAdmin/config.inc.php” и вносим следующие изменения:

  1. Задаем произвольное значение длиной 32 символа для параметра “$cfg['blowfish_secret']”. Можно воспользоваться любым генератором паролей.
  2. Снимаем комментарии со всех строк раздела “phpMyAdmin configuration storage settings” и указываем для параметров “controluser” и “controlpass” логин и пароль служебной учетной записи MariaDB, созданной на предыдущем шаге. В нашем случае логин - pmaservice, пароль - Qwe123

Сохраняем изменения. Настройка завершена.

Данные для входа в phpMyadmin:

Установка и настройка WordPress на сервер Linux

1. Размещение файлов дистрибутива WP

Установка Wordpress на сервер: скачиваем дистрибутив WP

Установка Wordpress на сервер: скачиваем дистрибутив WP

Загружаем архив на сервер в каталог “/var/www/sites/” и распаковываем, файлы будут извлечены в папку “wordpress”.

Копируем содержимое папки “/var/www/sites/wordpress/” в корневую директорию сайта “/var/www/sites/site1/”

Так как копирование файлов выполнялось из консоли с root-правами еще раз изменяем владельца каталога “/var/www/sites/”, включая содержимое на virtual. Это нужно для восстановления полного доступа при подключении через ftp-клиент.

cd /var/www/sites/
tar -xzvf wordpress-5.4-ru_RU.tar.gz
cp -R wordpress/* site1/
chown -R virtual:root /var/www/sites

2. Создание базы данных для WordPress

Создание базы данных для WordPress

Выделяем в левой части окна созданную БД и нажимаем кнопку “Привилегии”

Создание базы данных для WordPress

Далее нажимаем “Добавить учетную запись пользователя”.

Добавляем учетную запись пользователя в базе данных для WordPress

3. Конфигурация WP на сервере под Linux

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

cd /var/www/sites/site1/
cp wp-config-sample.php wp-config.php

Открываем файл “wp-config.php” и вводим параметры подключения к базе данных, созданной на предыдущем шаге и сохраняем изменения.

Настройка базы данных для WordPress

4. Установка CMS WordPress

Заполняем предложенные поля и нажимаем “Установить WordPress” Имя пользователя и пароль указываем произвольные, в нашем случае логин - wpadmin, пароль - Qwe123

Читайте также: