# Установка и настройка сервера Global3

Инструкция описывает подготовку окружения, установку Oracle Client, развертывание сервера приложений GlobalServer, настройку подключения к Oracle и запуск сервиса `global3`.

## Необходимое программное обеспечение

Для установки сервера приложений требуется:

- Java — требования к версии и используемой JDK/JRE приведены в разделе [Требования к Java](https://help.globalerp.ru/books/G3SysAdminDoc/SNAPSHOT/html/010_WhatIs.html#java);
- `libaio1` — для Debian 12;
- `patchelf`, `libaio1t64` — для Debian 13;
- `tar`;
- `unzip`.

## Установка Oracle Client 11

Требуется полная установка Oracle Client с типом **Administrator**.

В примерах ниже предполагается, что Oracle Client установлен в каталог:

```bash
/opt/oracle
```

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

### Настройка файла tnsnames.ora

Создайте файл `tnsnames.ora`:

```bash
/opt/oracle/network/admin/tnsnames.ora
```

Пример содержимого файла:

```ini
<ALIAS> =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = <IP_HOST>)(PORT = <PORT>))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <DB_NAME>)
    )
  )
```

Параметры файла:

- `<ALIAS>` — логический псевдоним базы, который будет использоваться приложением;
- `<DB_NAME>` — имя сервиса базы данных;
- `<IP_HOST>` — адрес сервера СУБД;
- `<PORT>` — порт подключения к СУБД.

### Настройка прав доступа к Oracle Client

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

```bash
sudo groupadd global
sudo useradd -g global -m -s /bin/bash global
```

Выдайте права на каталог Oracle Client:

```bash
sudo chown -R global:global /opt/oracle/
```

### Настройка локали Oracle

При необходимости настройте локаль для корректного отображения русских символов:

```bash
export NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251
```

### Проверка необходимых библиотек

#### Debian 12

Установите пакет `libaio1`. Он используется Oracle Database в Linux для асинхронного ввода-вывода:

```bash
sudo apt update
sudo apt-get install libaio1
```

#### Debian 13

Установите пакет `libaio1t64`:

```bash
sudo apt-get update
sudo apt-get install libaio1t64
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
```

Проверьте, что в каталоге Oracle Client присутствуют следующие файлы:

- `ojdbc6.jar`;
- `ucp.jar`;
- `orail18n.jar`.

Обычно они находятся в корневом каталоге Oracle Client или в его подкаталогах, например `jdbc/lib`.

Если файлов нет, скопируйте их из дистрибутива Oracle Client или установите недостающие компоненты.

## Развертывание сервера приложений GlobalServer

### Подготовка каталогов и дистрибутива

Скачайте архив дистрибутива. Файл `globalserver.zip` передается через контактное лицо.

Создайте временный каталог и загрузите в него архив:

```bash
sudo mkdir -p /tmp/global
```

Создайте каталог для установки сервера:

```bash
sudo mkdir -p /opt/global/globalserver
```

Распакуйте дистрибутив:

```bash
sudo unzip /tmp/global/globalserver.zip -d /opt/global/globalserver
```

Назначьте владельцем каталога пользователя `global`:

```bash
sudo chown -R global:global /opt/global/globalserver
```

### Настройка прав на скрипты

Выдайте права на выполнение основных скриптов:

```bash
sudo chmod ug+x /opt/global/globalserver/start.sh
sudo chmod ug+x /opt/global/globalserver/stop.sh
sudo chmod ug+x /opt/global/globalserver/globalscheduler.sh
```

### Настройка parameters.sh

Откройте актуальный файл `parameters.sh` и проверьте параметры окружения. При необходимости скорректируйте их в соответствии с фактическим расположением Oracle Client и его библиотек.

```{attention}
Изменения конфигурации выполняйте только в файле `parameters.sh`. При изменении конфигурации в других файлах работоспособность не гарантируется.
```

Пример минимальной работоспособной конфигурации без дополнительных библиотек:

```bash
# Для запуска сервера приложений с подключением к БД Oracle

# Путь к Oracle Client
export ORACLE_HOME="/opt/oracle"

# Путь к каталогу с tnsnames.ora
export TNS_ADMIN="/opt/oracle/network/admin"

# Пути к библиотекам Oracle Client
export LD_LIBRARY_PATH=$ORACLE_HOME:$ORACLE_HOME/:$LD_LIBRARY_PATH

# Java-библиотеки и JDBC-драйвер Oracle Client
export EXT_LIBS=$ORACLE_HOME/ojdbc6.jar:$ORACLE_HOME/ucp.jar:$ORACLE_HOME/orai18n.jar
export EXT_LIBS_CLASSPATH="$EXT_LIBS/*"
```

Убедитесь, что указанные пути соответствуют фактическому расположению Oracle Client на сервере.

### Настройка сервиса global3

Для управления сервером приложений через `systemd` используется сервис `global3`.

Скопируйте шаблон сервиса и создайте файл `global3.service`:

```bash
sudo cp /opt/global/globalserver/admin/linux/global3.service.origin /lib/systemd/system/global3.service
```

Обновите конфигурацию `systemd` и включите сервис:

```bash
sudo systemctl daemon-reload
sudo systemctl enable global3
```

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

Откройте файл `global3.config.xml` в каталоге конфигурации сервера приложений внутри директории:

```text
/opt/global/globalserver/application
```

В раздел `<databases>` добавьте описание подключения к базе данных Oracle:

```xml
<database alias="<alias>">
    <users>
        <user name="<user>" password="<password>"/>
    </users>
</database>
```

Параметры подключения:

- `<alias>` — логический псевдоним базы данных, который используется приложением;
- `<alias>` должен совпадать с именем подключения, указанным в `tnsnames.ora`;
- `<user>` и `<password>` — учетные данные схемы Oracle, под которой сервер приложений подключается к базе данных.

После изменения сохраните файл конфигурации.

### Запуск сервера приложений

Запустите сервис:

```bash
sudo systemctl start global3
```

Проверьте его состояние:

```bash
sudo systemctl status global3
```

При успешном запуске сервис должен перейти в состояние `active (running)`.

### Устранение ошибки с библиотеками Oracle

При входе в Global может возникнуть ошибка:

```text
/opt/oracle/libocijdbc11.so: libnnz11.so: невозможно задействовать исполняемый стек, как требует разделяемый объект: Отказано в доступе.
```

Причина связана с тем, что некоторые библиотеки Oracle помечены как требующие исполняемый стек, а политика безопасности системы запрещает это.

#### Debian 12

Установите `execstack`:

```bash
sudo apt update
sudo apt install execstack
```

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

1. Скачайте пакет `execstack`:

   ```bash
   sudo apt update
   sudo apt download execstack
   ```

2. Передайте `.deb`-файл на сервер.

3. Установите пакет:

   ```bash
   sudo dpkg -i execstack_*.deb
   ```

Снимите флаг исполняемого стека у библиотек Oracle:

```bash
sudo execstack -c /opt/oracle/libnnz11.so
sudo execstack -c /opt/oracle/libocijdbc11.so
```

Перезапустите сервис `global3`.

#### Debian 13

Установите `patchelf` и снимите флаг исполняемого стека:

```bash
sudo apt update
sudo apt install patchelf
patchelf --clear-execstack /opt/oracle/libnnz11.so
patchelf --clear-execstack /opt/oracle/libocijdbc11.so
```

### Настройка логирования

Настройка логирования сервера приложений выполняется в отдельных конфигурационных файлах и описана в разделе [Логирование сервера приложений](https://help.globalerp.ru/books/G3SysAdminDoc/SNAPSHOT/html/090_logs.html).

```{important}
Конфигурационные файлы поставляются с закомментированным содержимым. Проверьте файлы конфигурации, настройте необходимые параметры и раскомментируйте их.
```

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

После завершения настройки выполните проверку.

1. Убедитесь, что сервис запущен:

   ```bash
   sudo systemctl status global3
   ```

2. Проверьте журналы сервера приложений и `systemd`. Убедитесь, что в них нет критических ошибок.

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

   - логи `GlobalServer`;
   - журнал `systemd` для сервиса `global3`.

3. Проверьте подключение к базе данных Oracle:

   - выполните авторизацию в системе;
   - убедитесь, что базовые операции в приложении выполняются без ошибок.

Если проверки завершились успешно, сервер приложений GlobalServer установлен, подключен к Oracle и готов к работе.

![Результат установки](img/result.png)