This repository was archived by the owner on Aug 19, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathINSTALL
More file actions
340 lines (269 loc) · 13.3 KB
/
INSTALL
File metadata and controls
340 lines (269 loc) · 13.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
// SPDX-License-Identifier: AGPL-3.0-only WITH LICENSE-ADDITIONAL
// Copyright (C) 2025 Петунин Лев Михайлович
1. Подготовка сервера
Обновление системы:
Обновите пакеты системы:
sudo apt update && sudo apt upgrade -y
Установка необходимого ПО:
Установите Python, NGINX, PHP и PostgreSQL:
sudo apt install nginx php-fpm php-pgsql postgresql postgresql-contrib
Установите необходимые библиотеки
pip install flask
pip install flask-cors
pip install psycopg2-binary
pip install pyjwt
pip install bcrypt
pip install python-dotenv
pip install ldap3
pip install cryptography
pip install gunicorn
pip install python-dotenv
Настройка PostgreSQL:
Создайте базу данных и пользователя:
sudo -u postgres psql
CREATE DATABASE "RLM-PSI";
CREATE USER "RLM_PSI_USER" WITH PASSWORD 'vbngrjemd#mf!';
GRANT ALL PRIVILEGES ON DATABASE "RLM-PSI" TO "RLM_PSI_USER";
\q
Настройка схемы базды данных
-- DROP SCHEMA public;
CREATE SCHEMA public AUTHORIZATION "RLM_PSI_USER";
COMMENT ON SCHEMA public IS 'standard public schema';
-- public.admin_servers определение
-- Drop table
-- DROP TABLE public.admin_servers;
CREATE TABLE public.admin_servers (
id text NOT NULL,
serv_id text NOT NULL,
userid text NOT NULL,
CONSTRAINT admin_servers_pkey PRIMARY KEY (id)
);
-- Permissions
ALTER TABLE public.admin_servers OWNER TO "PsDbAdmin";
-- public.name_privileges определение
-- Drop table
-- DROP TABLE public.name_privileges;
CREATE TABLE public.name_privileges (
id_privileges text NOT NULL,
name_privileges text NOT NULL,
CONSTRAINT name_privileges_pkey PRIMARY KEY (id_privileges)
);
-- Permissions
ALTER TABLE public.name_privileges OWNER TO "PsDbAdmin";
-- public."privileges" определение
-- Drop table
-- DROP TABLE public."privileges";
CREATE TABLE public."privileges" (
id text NOT NULL,
userid text NOT NULL,
id_privileges text NULL,
CONSTRAINT provileges_pkey PRIMARY KEY (id)
);
-- Permissions
ALTER TABLE public."privileges" OWNER TO "PsDbAdmin";
-- public.servers определение
-- Drop table
-- DROP TABLE public.servers;
CREATE TABLE public.servers (
serv_id text NOT NULL,
"Name" text NOT NULL,
status text NULL,
ip_addr text NULL,
"MAC_addr" text NULL,
"Domain" text NULL,
"Demon" bool NULL,
"validate" bool NULL,
stand text NULL,
"database" bool NULL,
replication bool NULL,
CONSTRAINT servers_pkey PRIMARY KEY (serv_id)
);
-- Permissions
ALTER TABLE public.servers OWNER TO "PsDbAdmin";
-- public.users определение
-- Drop table
-- DROP TABLE public.users;
CREATE TABLE public.users (
userid text NOT NULL,
userlogin text NOT NULL,
password_hash text NOT NULL,
email text NOT NULL,
regtimes timestamp NULL,
active bool DEFAULT false NOT NULL,
add_ldap bool NULL,
"name" text NULL,
"family" text NULL,
tg_username text NULL,
tg_id text NULL,
full_name text NULL,
telephone text NULL,
ldap_dn text NULL,
api_key text NULL,
CONSTRAINT users_pkey PRIMARY KEY (userid)
);
-- Permissions
ALTER TABLE public.users OWNER TO "PsDbAdmin";
-- Permissions
ALTER DEFAULT PRIVILEGES FOR ROLE "PsDbAdmin" IN SCHEMA public GRANT INSERT, UPDATE, REFERENCES, UNKNOWN, SELECT, TRUNCATE, DELETE, TRIGGER ON TABLES TO "RLM_PSI_USER";
2. Настройка NGINX
Создание конфигурационного файла для проекта:
Создайте новый конфигурационный файл для вашего проекта:
sudo nano /etc/nginx/sites-available/slm
Добавьте следующий конфигурационный файл:
server {
listen 80;
server_name slm-psi.domain; # Замените на ваш домен или IP-адрес
root /var/www/html/web;
index index.php;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
set $root_path /var/www/html/web;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~* \.(htaccess|log|env|conf|ini|bak|swp|json)$ {
deny all;
}
location = /config/menu.json {
allow all;
}
location ~* \.(jpg|jpeg|png|gif|ico|woff|woff2|ttf|svg)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
error_page 404 /404.html;
error_page 403 /403.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
root /var/www/html/web/err;
internal;
}
location = /403.html {
root /var/www/html/web/err;
internal;
}
location = /50x.html {
root /var/www/html/web/err;
internal;
}
}
Активация конфигурации:
Создайте символическую ссылку для активации конфигурации:
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
Проверьте конфигурацию NGINX на ошибки:
sudo nginx -t
Перезапустите NGINX для применения изменений:
sudo systemctl restart nginx
3. Настройка PHP-FPM
Настройка php.ini:
Откройте файл php.ini для редактирования:
sudo nano /etc/php/7.4/fpm/php.ini
Убедитесь, что следующие параметры настроены правильно:
error_log = /var/log/php_errors.log
log_errors = On
display_errors = Off
session.save_path = "/var/lib/php/sessions"
Перезапуск PHP-FPM:
Перезапустите PHP-FPM для применения изменений:
sudo systemctl restart php7.4-fpm
4. Развертывание проекта
Подготовка расположения логов:
В папке /var/log/ создате папку для хранения логов /slm
В данной пакке создайте два файла web.log, app.log
Назначьте права для фалов логов
chown -R www-data:www-data "/var/log/slm/web.log"
chown -R user:user "/var/log/slm/app.log"
Клонирование репозитория:
Склонируйте проект:
sudo git clone <репозиторий> /home/user/project_files
Скопируйте файлы из директории /v2/web в папку /var/www/slm/web
Скопируйте файлы из директории /v2/app в папку /opt/slm/app
Настройка прав доступа:
Установите правильные права доступа для директории проекта:
sudo chown -R www-data:www-data /var/www/slm
sudo chmod -R 755 /var/www/slm
sudo chown -R user:user /opt/slm/app
sudo chmod -R 755 /opt/slm/app
Создайте новый systemd сервис
[Unit]
Description=SLM Flask Application
After=network.target
[Service]
User=user
WorkingDirectory=/opt/slm/app
Environment="PYTHONPATH=/opt/slm/app"
ExecStart=/usr/bin/python3 /opt/slm/app/app.py
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
5. Конфигурация приложения
Откройте файл config.json
Выполните конфигурацию приложения
{
"LDAP": {
"active": false, - false не изменяемое
"domain_master": "",
"domain_slave": "",
"port": "",
"DN": "",
"username": "",
"password": ""
},
"LOG": {
"app": "/var/log/slm/app.log", - путь к лог файлу приложения
"max_bytes": 10485700, - Максимальный объем файла логов в байтах
"backup_count": 5, - количество лог файлов
"log_level": "DEBUG" - уровень логирования
},
"db": {
"host": "", - IP базы данных
"port": "5432", - Порт подключения к базе данных
"name": "", - Имя базы данных для подключения
"user": "", - Имя для подключения к БД
"password": "" - Пароль для покдлючения к БД
},
"flask": {
"SECRET_KEY": "", - HEX ключ для Flask
"JWT": {
"SECRET_KEY": "", - HEX ключ для JWT
"ACCESS_EXPIRES": 600, - время действия токена
"REFRESH_EXPIRES": 1200 - время в течении которого можно обновить токен
}
},
"frod": {
"active": true - true - включить проверки безопасности
},
"version": {
"current_version": "0.7.40-397" - Текущая версия приложения
}
}
Откойте файл modules.json
Включите необходимые Вам модули
6. Запустите приложение
Обновите конфигурацию systemd
systemctl daemon-reload
Включите сервис
systemctl enable slm-app
Запустите сервис
systemctl start slm-app
Перезапустите nginx
systemctl restart nginx