Содержание
Как развернуть сервис ShariX Open
1. Установить виртуальные машины в соответствии со схемой развертывания сети (рекомендуемый вариант по умолчанию - ALT Linux P10.1)
2. Настроить сеть внутри виртуальной машины в соответствии с выбранным сценарием - Development или Production
3. Перенести на виртуальную машину код для развертывания
4. Создать БД для функционирования сервиса (если ее нет) для подключения к программному продукту. Рекомендуется использовать PostgreSQL
5. Подготовить Django-проект к запуску
6. Настроить сервисы (веб-сервер, XMPP-сервер и тп)
Полезные знания для процесса разворачивания сервиса
Работа с виртуальной машиной
Полезные советы при установке виртуальной машины
Первоначально устанавливается виртуальная машина, разворачивание рекомендуется делать с использованием Proxmox (система виртуализации с открытым исходным кодом, основанная на Debian GNU/Linux).
Необходимо задать параметры (процессор, оперативная память и дисковое пространство).
Рекомендуемые значения параметров ВМ:
- CPU: 2 ядра;
- RAM: 4Gb;
- HDD: 40Gb.
При использовании ALT Linux 10.1 во время установки надо в соответствующем меню выбрать, какие пакеты лучше установить вместе с установкой системы. Рекомендуется выбрать минимальный набор и дополнительно только systemd-networkd (сетевая утилита, позволяющая настраивать сеть на самой виртуальной машине).
Настройка виртуальной машины
После установки виртуальной машины, необходимо настроить сеть.
Для этого находясь в директории cd/etc/systemd/network/,
(У каждой программы есть место для хранения настроек. Если не положить файл конфигурации в нужное место, программа не будет работать).
Расширение netdev – это описание интерфейса, по которому система понимает какой выполняет функционал (основной интерфейс в виртуальной машины, по крайней мере в alt linux называется ens19 это реальный физический интерфейс у виртуальной машины, добавления .20 .40 это используют для обозначения, что за что отвечает, это добавляет к нему сеть vlan.
Далее вы даёте ему параметр kind=vlan, и дальше тэг, он обычно совпадает со значением после точки).
Пример настроек сетевого интерфейса
[Netdev] Name=ens19.20 Kind=vlan [VLAN] Id=20
Полезные команды
cd /путь/к/директории
Показывает содержимое директории
ls -la
Открыть файл для редактирования
vim <имя_файла>
Установка дополнительных пакетов
Когда всё настроено, но виртуальная машина пустая, необходимо написать команду для обновления источников пакетов:
apt-get update
После того как источники были обновлены, необходимо запустить команду для обновления пакетов:
apt-get dist-upgrade
Использование команды 'apt-get dist-upgrade' предпочтительнее, чем 'apt-get upgrade'. Такая компанда использует более гибкий подход для разрешения конфликтов взаимозависимых пакетов.
Далее идет команда для обновления ядра:
update-kernel
Затем - установка web-сервера Apache:
apt-get install httpd2
Проверка/установка пакетов Git:
apt-get install git
Примечание: Команды выполняются с правами суперпользователя. Зависимости пакетов подтягиваются из репозиториев автоматически.
Настройка подключения к Git
Для подключения к репозиториям Git компании, нужно создать файл конфигурации Для перемещения по директориям (подкаталогам) файловой системы используется команда 'cd'. Для перехода в каталог '.ssh/' необходимо использовать следующую команду:
cd .ssh/
ls - список файлов в директории.
ls
В данной папке видим каталог с ключами и конфигурационный файл:
authorized_keys - в этой папке хранятся публичные ключи, для получения доступа к виртуальной машине, без логина и пароля
config – в этот файл, для работы с гитом необходимо прописать настройку
Необходимо настроить пустой конфиг:
vim config
Параметры config:
Host - домен гит-сервера (git.sharix-app.org)
Hostname - домен гит-сервера (git.sharix-app.org)
User - имя вашего пользователя, по нему будет доступ к репозиториям, к установке и к скачиванию.
Port - 300 (сейчас используется такое значение, в будущем может быть изменено).
Пример конфига
Host git.sharix-app.org Hostname git.sharix-app.org User Denis Port 300
ssh-keygen (покажет директорию, не меняем название ключа, не используем пароль для ключа, ключ должен быть чистейшим и беззащитным ).
ssh-keygen
После генерации ключа (ключи в директории .ssh) смотрим содержимое директории через ls
ls
cat id_rsa.pub
Копируем ключ → заходим в свой аккаунт гита → настройки → параметры SSH ключи → сверху пишем имя, а снизу вставляем скопированный публичный SSH ключ.
SSH нужно пробежаться по всему config’у, полностью найти ключик и установить connect с сервером. Из-за того, что порт нестандартный это нужно сделать вручную, иначе не получится.
После того, как создан и скопирован ключ, нужно зайти в свой аккаунт гит, далее - в настройки, и там найти параметр 'ssh-ключи'.
Ввести в терминале команду:
ssh -vv git.sharix-app.org
Команда выводит все шаги (SSH прочитал файлы, нашел ключ и собирается подключиться - подтверждаем «Yes»).
После того как видим 'publickey' и 'succeeded', прерываем работу терминала
После успешного подключения к репозиторию и проверки работы ключа, можно, используя нашего пользователя, скачивать репозитории, делать в них коммиты на своем ПК (то есть, отредактировать, сделать коммит и отправить изменения на сервер).
Настройка Web-сервера
Перейти в директорию Apache
cd/etc/httpd2/conf/sites-enabled/
sites-enabled - директория, в которой находятся конфигурации web/доменов, через которые мы получаем доступ к каким либо ресурсам.
Создаем vim guide.conf
vim guide.conf
Вставляем готовый текст конфига или создаем вручную:
- После заголовка VirtualHost указывается адрес хоста и через двоеточие - порт, например: 80 (стандартный порт http, система за пределами Nginx) или 443 (стандартный порт https - для защищенного соединения, где идентификация подлинности сервера на клиенте производится с помощью сертификата, а трафик шифруется с использованием протокола TLS или устаревшего SSL). Вместо конкретного адреса можно использовать замещающий символ «*». Адрес в формате IPv6 необходимо указывать в квадратных скобках.
- ServerAdmin - электронная почта администратора сервера;
- ServerName - основное доменное имя сервера;
- ServerAlias - алиас (псевдоним) имени сервера 'ServerName';
- DocumentRoot - корневая директория виртуального хоста - необходимо указать директорию, где будет размещено web-приложение, например: '/var/www/webapps/<директория с приложением>';
- ErrorLog - полный путь и имя файла журнала ошибок;
- CustomLog - полный путь и имя файла журнала доступа к серверу;
- AddDefaultCharset - кодировка по умолчанию, например: 'utf-8'.
Далее - сохраняем конфиг и выходим из редактора (команда 'wq')
Пример конфига Apache
<VirtualHost <адрес хоста>:80> ServerAdmin web@webserver.local DocumentRoot /var/www/webapps/<директория с приложением> ErrorLog /home/www/.log/sharix-assist-landing-error_log CustomLog /home/www/.log/sharix-assist-landing-access_log common AddDefaultCharset utf-8 </VirtualHost>
Как проверить доступность служб
После сохранения посмотрим статус Apache (systemctl status httpd2.service) → inactive → запуск (systemctl start httpd2.service) → еще раз проверить статус → active (если нужно обновить, то reload)
systemctl status httpd2.service
systemctl start httpd2.service
Если нужно изменить конфиг, после сохранения изменений, для перезапуска сервиса не забудьте написать следующую команду:
systemctl reload httpd2.service
Смотрим содержимое директории:
cd /var/www/webapps/
ls (пусто)
ls
В данный момент директория пуста, поэтому клонируем репозиторий:
git clone
Выводим подробное описание прав на файл, его владельца, даты:
ls -la
Так как владелец файлов указан 'root', группа для доступа 'webmaster' (специальный пользователь для взаимодействия с Apache), необходимо поменять владельца файлов на 'apache2':
chown -R apache2:apache2: sharix-open-landing/
Проверяем:
ls -la
Далее переходим внутрь каталога:
cd sharix-open-landing/
Проверяем: git checkout new-master (название ветки) - перемещение между ветками.
git checkout new-master
В гите может быть несколько веток и если просто скопировать репозиторий, то это не значит, что мы будем находиться в нужной ветке. И если написать несуществующую ветку, то гит ее создаст.
Гит ругается, что мы изменили пользователя на apache2 и что этот пользователь не скачивал данную директорию, то есть он хранит информацию о том, у кого пользователя есть доступ.
Поэтому сначала мы скачиваем, делаем изменения, пушим на сервер (при необходимости) и после этого даем права на директорию.
Либо:
cd ..
chown -R root:apache2: sharix-open-landing/
Консольные текстовые редакторы
Vim - консольный текстовый редактор для Unix-подобных операционных систем, таких как Linux и macOS. Vim удобен для работы с текстом в консоли, а его управление с помощью клавиатуры обеспечивает более быстрое и эффективное редактирование текста.
Чтобы войти в Vim, вам нужно открыть терминал и ввести команду «vim». Затем вы увидите пустое окно редактора. Начните вводить текст и используйте клавиши управления для перемещения по тексту.
Чтобы внести изменения, просто начните вводить текст в режиме вставки. Чтобы сохранить и выйти, нажмите Esc для выхода из режима вставки, затем введите команду «:wq» и нажмите Enter.
Если вам нужна подробная инструкция по использованию Vim, вы можете посмотреть на сайтhttps://firstvds.ru/technology/tekstovyy-redaktor-vim-kratkoe-rukovodstvo. Там вы найдете инструкцию по установке, основы работы с Vim и многое другое.
Nano - простой текстовый редактор для терминала, который доступен на большинстве Unix-подобных операционных систем, таких как Linux и macOS. Он легкий в использовании и хорошо подходит для начинающих пользователей.
Чтобы войти в Nano, вам нужно открыть терминал и ввести команду «nano». Затем вы увидите пустое окно редактора. Начните вводить текст и используйте клавиши управления для перемещения по тексту. Чтобы внести изменения, просто начните вводить текст. Чтобы сохранить и выйти, нажмите Ctrl+O, затем Y для подтверждения сохранения изменений и Enter.
Если вам нужна более подробная инструкция по использованию Nano, вы можете посмотреть на https://blog.sedicomm.com/2018/11/21/rukovodstvo-po-ispolzovaniyu-tekstovogo-redaktora-nano-v-linux-dlya-nachinayushhih/ или ввести команду «man nano» в терминале для отображения руководства пользователя.
Mcedit - текстовый редактор, доступный на большинстве Unix-подобных операционных систем, таких как Linux или macOS. mcedit представляет собой редактор, который интегрирован в Midnight Commander (mc), что облегчает работу с файлами. Он обладает многими возможностями, такими как подсветка синтаксиса, автодополнение и другие.
Чтобы войти в mcedit, вам нужно открыть терминал и ввести команду «mcedit» после чего вы увидите пустое окно редактора. Начните вводить текст и используйте клавиши управления для перемещения внутри редактора. Чтобы внести изменения нажмите клавишу «Insert» и начните вводить текст. Чтобы сохранить и выйти, нажмите «F2» затем выберите «Salva» и нажмите «Invio» или «Enter».
Если вам нужна более подробная инструкция по использованию mcedit, вы можете посмотреть на https://redos.red-soft.ru/base/manual/utilites/mc-filemanager/ или ввести команду «man mcedit» в терминале для отображения руководства пользователя.
Полезные команды для работы с Linux
Как узнать ip для информации в конфиге?
ip a
Как положить ключ?
ssh-keygen (покажет директорию, не меняем название ключа, не используем пароль для ключа, ключ должен быть чистейшим и беззащитным ).
ssh-keygen
После генерации ключа (ключи в директории .ssh) смотрим содержимое директории через ls
ls
cat id_rsa.pub
Копируем ключ → заходим свой аккаунт гита → настройки → параметры SSH ключи → сверху пишем имя, а снизу вставляем скопированный публичный SSH ключ.
SSH нужно пробежаться по всему config’у, полностью найти ключик и установить connect с сервером. Из-за того, что порт нестандартный это нужно сделать вручную, иначе не получится.
После того как мы создали и скопировали ключ, нужно зайти на свой аккаунт гит, в настройки и там есть параметр ssh-ключи.
ssh -vv git.sharix-app.org - полностью выводит все шаги SSH (он прочитал все файлы, нашел ключ и теперь собирается подключиться, даем добро YES).
После того как мы видим publickey и succeeded, мы прерываем работу терминала
ssh -vv git.sharix-app.org
Настройка сети
Production
Рекомендуемый вариант сети для функционирования сервиса в соответствии с описанной схемой.
Development
Упрощенный вариант сети, удобный для ведения разработки.
Отличается от Production-варианта меньшим количеством виртуальных машин, на которых развернуты компоненты решения.
Перенос кода для разворачивания
Куда клонировать и почему?
DEVELOPMENT
Можно в домашнюю директорию рута или куда удобно.
PRODUCTION
Рекомендуется делать под специальным пользователем и по пути за пределами домашней директории, но в которую пользователь имеет права.
Что и откуда клонировать?
Корневой проект - https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base
Так склонируется шаблон сервиса Open. Если уже создается кодовая база под собственный дочерний сервис, необходимо клонировать репозиторий ее корневого элемента. Обратите внимание на возможные лицензионные ограничения и особенности.
Как обновлять решение?
- При разворачивании своего решения лучше всего сразу же сделать форк проектов в свои репозитории (учитывайте лицензионные особенности).
- Удобно оставить несколько remote - из upstream шаблона, а также подключить как remote один или несколько репозиториев в соответствии с проектом построения решения
- Чтобы работать с закрытыми git - надо скорее всего положить ключи на виртуальную машину для этого и в целом настроить git под себя
Подсказки работы с git
'git commit' - сохранение содержимого индекса в новый «слепок», затем сдвигает указатель текущей ветки на этот слепок:
git commit
'git add' - добавление содержимого рабочей директории в индекс для последующего коммита:
git add
'git status' - показывает состояние файлов рабочей директории и индекса (изменения и несоответствия для последующего коммита):
git status
'git diff' - показывает разницу между двумя ветками Git, например, разница между индектом и последним коммитом:
git diff --staged
git diff master branchX
'git reset' - отмена изменений:
git reset
'git clean' - удаление «мусора» из рабочей директории:
git clean
'git branch' - менеджер веток. Вывести список веток:
git branch --list
Создать ветку 'branch1':
git branch branch1
'git checkout' - переключение веток, выгрузка их содержимого в рабочую директорию:
git checkout new-master
Описание репозиториев
open-web-admin – админка для сервиса. Необходимо на её основе создать 'sharix-<имя_сервиса>-web-admin', создаёте репозиторий на гите в организации гит, добавляете туда разработчиков и клонируете этот репозиторий на машину.
sharix-open-payments, sharix-open-webservice-running - идентично.
open-docu-wiki – стили для вики и для ваших сервисов.
Также нужно создать репозиторий sharix-<имя_сервиса>-landing для главной страницы вашего сервиса.
Репозитории mob-client и mob-provider – для взаимодействия с мобильными устройствами.
Все репозитории для Django копируем в корень root (для перехода использовать команду cd), а все что связано с Apache и не будет использоваться Unicorn и Django - отправляем в '/var/www/webapps'.
sharix-open-webapp-base, sharix-open-backend, sharix-open-tickets - клонировать, не переименовывать.
Как создать БД?
1. Необходимо установить БД на виртуальную машину
apt-get install postgresql14-server
2. Необходимо инициализировать БД, она происходит автоматически
/etc/init.d/postgresql initdb
3. Включить БД как сервис, чтобы он запускался после перезапуска
systemctl enable postgresql --now
4. Создать пользователя - владельца БД в БД. Например, ему можно дать имя сервиса.
su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole --encrypted --pwprompt ПОЛЬЗОВАТЕЛЬ_ВЛАДЕЮЩИЙ_БД'
5. Создать БД с пользователем, который был только что создан
su - postgres -s /bin/sh -c 'createdb -O ПОЛЬЗОВАТЕЛЬ_ВЛАДЕЮЩИЙ_БД ИМЯ_БД'
6. Данные из пп4-5 необходимо запомнить. Они должны быть достаточно надежными. При необходимости их можно будет поменять. Для разработки можно использовать упрощенные значения, но надо не забыть изменить их перед вводом решения в эксплуатацию на более надежные.
Как подготовить Django-проект ShariX Open к запуску
1. Подготовить файл конфигурации (config.py) по инструкции в README, он должен находиться в директории core внутри проекта:
https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base
- Ввести данные БД и хоста в файл конфигурации в соответствующие поля. Если БД на том же сервере, что и разворачиваемое решение - указываете 127.0.0.1 как хост. В ином случае настройки указываются в соответствии с конфигурацией сети.
- Аналогично с BIND для веб-сервера.
- SECRET_KEY - на усмотрение разворачивающего, любая последовательность символов, заменяется все содержимое внутри одинарных кавычек.
- ALLOWED_HOSTS - должен быть в списке хост, на котором запущен веб-сервер - его доменное имя, ip, и ip-адрес прокси-сервера (при наличии)
- CSRF_TRUSTED_ORIGINS - один из параметров защиты Django CSRF (Cross Site Request Forgery protection). Содержит список доверенных источников для небезопасных запросов. По умолчанию = [] (пустой список). В Django, начиная с версии 4.0, проверка заголовка источника не выполняется, поэтому в данном параметре необходимо указывать конкретный домен или несколько доменов. Выражения доменных имен необходимо указывать в одинарных кавычках. Символ звездочки с точкой перед именем домена означает поддержку всех субдоменов указанного домена. Подробнее тут.
Пример:
CSRF_TRUSTED_ORIGINS = ['https://*.sharix-app.org/']
но для production-решений лучше писать что-то более узкое.
В более старых версиях значения параметра должны включать только имя хоста, без звездочки, например:
CSRF_TRUSTED_ORIGINS = ['open.sharix-app.org']
2. Настроить права скрипта развертывания проекта
chmod u+x install_unix.sh
3. Запустить скрипт развертывания проекта
./install_unix.sh
Скрипт настроен для использования директории 'root'.
4. Ввести учетные данные технического администратора сервиса (номер телефона, имя и пароль). Этот администратор сможет получить доступ к технической административной панели, но не будет обладать никакими иными правами внутри сервиса, если они не будут специально назначены. Он может назначить права только основного администратора по функционированию сервиса (ответственное лицо перед платформой).
5. Назначаем права на исполнение на скрипт запуска процесса сервиса (на виртуальной машине - первый раз, или, например, после перезагрузки) и запускаем (например, для проверки)
chmod u+x bin/webuser.sh ./bin/webuser.sh &
6. Сервис необходимо активировать (при создании дочернего решения его лучше переименовать и в целом создать новый репозиторий с конфигами по аналогии):
systemctl enable sharix_open.service
7. Можно перезагрузить компьютер и проверить, что все работает.
Как узнать какие на виртуальной машине открыты порты?
Команда lsof -i -P (Данная команда показывает процесс, порт и состояние).
lsof -i -P
Когда там будут проекты Django, веб-сервера, jabberd, то все задействованные порты будут отображаться. Если портов нет, то это либо не запущен сам сервис либо что-то с настройкой.
systemctl status <имя процесса> - проверить статус любого процесса
Пример проверки статуса процесса 'httpd2'
systemctl status httpd2.service
Состояние active – все работает
Состояние inactive – отображается серым, не запущено
Состояние fault – есть какая-то ошибка, в конфигурации или в процессах
Необходимо следить за пересечение портов и старайтесь их не пересекать, для предотвращения конфликтов процессов.
Установка минимальных пакетов для развертывания решения
Необходимо установить минимальные пакеты для работы Django:
Python - apt-get install python3
apt-get install python3
Устанавливаем модуль джанго.
apt-get install python3-module-django
Venv - apt-get install python3-module-virtualenv
apt-get install python3-module-virtualenv
Мы установили минимальные пакеты для работы джанго.
Важное замечание: для каждого сервиса необходимо прописывать свой порт, для корректной работы.
Установка и настройка системы заявок 'sharix-open-tickets'
sharix-open-tickets - Система работы с заявками, реализованная в виде приложения Django.
Последовательность установки и настройки:
1. Скачать репозиторий:
git clone -b tickets_module http://git.sharix-app.org/ShariX_Open/sharix-open-tickets.git tickets
2. Важный момент:
git checkout master
3. Выполнить шаги, описанные в инструкции по установке из файла 'README.md'.
4. Сгенерировать виртуальное окружение:
python3 -m venv tickets
Проверить его создание (в директории должен появиться каталог 'tickets'):
ls
5. Добавить в файл '.gitignore' исключения для Git, что не следует отправлять (пароли, логины, что-то еще столь же ценное и важное).
Для создания и редактирования файла использовать любой текстовый редактор, например, vim:
vim .gitignore
Пример содержимого файла:
# Virtualenv env/ venv/ # VSCode .vscode # Python __pycache__/ *.py[cod] *$py.class # Django migrations/
6. После того как скачали репозиторий и все пакеты, перейти в созданное окружение:
source tickets/bin/activate
Теперь вы находитесь внутри созданного окружения. Это нужно для того, чтобы не было проблем с разными версиями в разных проектах на Django, так как для них могут использоваться разные версии пакетов.
7. Установка зависимостей.
Файл 'requirements.txt' содержит перечень зависимостей (пакетов ОС), необходимых для корректной работы приложения.
Устанавливаем пакеты в окружение:
pip3 install -r requirements.txt
Если pip ругается на устаревшую версию - обновить его следующей командой:
pip3 install --upgrade pip
8. Установить в окружение сервер СУБД, инициализировать его, создать пользователя и БД.
Делается это идентично установке СУБД виртуальной машины, как описано выше в разделе Как создать БД?.
Необходимо устанавливать postgreSQL версии 15:
apt-get install postgresql15-server
9. Для того чтобы узнать ip-адреса интерфейсов, выполнить следующую команду:
ip a
10. Разрешить доступ postreSQL по локальной сети:
echo "listen_addresses = 'localhost'" >> var/lib/pgsql/data/posthresql.conf
11. Проверить и (при необходимости) отредактировать права пользователей postreSQL:
vim var/lib/pgsql/data/pg_hba.conf
Для того, чтобы остановить виртуальное окружение, использовать команду:
cd sharix-open-tickets\ deactivate
Как будет работать unicorn:
У вас внутри репозитория будет папочка bin, внутри неё будет 2 файла, один из них нужно перенести, а другой по инструкции Вам возможно нужно будет настраивать. Как только перенесете файл, нужно будет прописать следующую команду (вместо звёздочки у Вас будет своё название)
systeml enable *.service
Это необходимо сделать, для корректной работы скриптов проекта на джанго, после перезагрузки, иначе их вручную нужно будет запускать.
Для проверки нужно будет написать команду reboot и если у вас не запускается проект, значит какой-то сервис не включен.
Команды linux:
1. Move – либо перенести файл, либо изменить его название.
move
2. Copy – копирование (добавляйте -r для копирования всей директории).
copy
Что нужно делать с шаблоном docu wiki?
У Вас шаблонный сайт, которому Вы в апатче даёте путь и домен, потом какую-то часть Вы настраиваете в файле docu wiki.php в конфигах, какую-то часть Вы прописываете docu wiki.php lvan local.
В чём разница? - один файл – это основной, а второй файл — это надстройка над файлом, local преобладает, так как он перезаписывает первый файл.
Эта команда может понадобиться, чтобы дать право на исполнение.
chmod
u - права для user
chmod u+x
g – права для group
a – права для всех
А после + идут права на:
x – исполнение
w – запись
r – чтение
Также права можно отзывать используя -, вместо +
Запуск, перезапуск и отладка
1. Уточнить имя сервиса.
ls /etc/systemd/system/
2. Штатный запуск:
systemctl start sharix_open.service
Проверить статус или остановить - это status или stop.
Чтобы запустить gunicorn «на коленке» для проверки ошибок:
кореньпроекта/bin/webuser.sh
Если не перезапускается - возможно, лишние процессы gunicorn.
Посмотреть:
# ps aux | grep gun
Убить ненужные - команда kill и номер процесса, в нормальном состоянии от 2 процессов на сервис.
Далее запустить сервис штатно.