mirror of
https://github.com/1C-Company/docker_fresh.git
synced 2024-12-04 10:24:48 +02:00
edit readme.md
This commit is contained in:
parent
a90f103af5
commit
f21a1a6b00
59
README.md
59
README.md
@ -1 +1,58 @@
|
||||
# docker_fresh
|
||||
# 1С:Предприятие. Облачная подсистема Фреш в Docker
|
||||
Позволяет в течении ~30 минут развернуть рабочий стенд подсистемы Фреш с использованием технологии docker.
|
||||
Может пригодится для:
|
||||
- Разработки конфигурации которая должно работать в облаке
|
||||
- Разработки самой технологии Фреш
|
||||
- Тестирования средств адаптации конфигураций
|
||||
- и т.д.
|
||||
|
||||
## Системные требования
|
||||
- Оперативной памяти от 4Гб
|
||||
- Лучше от 8Гб
|
||||
- Свободного места от 50Гб
|
||||
- ПО:
|
||||
-- [Python 3+](https://www.python.org/downloads/ "Python 3+")
|
||||
-- [Docker](https://docs.docker.com/engine/install/ "Docker")
|
||||
-- [Docker Compose](https://docs.docker.com/compose/install/ "Docker Compose")
|
||||
|
||||
## Дистрибутивы необходимые для развертывания
|
||||
Для развертывания стенда потребуются дистрибутивы платформы 1С Предприятие и подсистемы Фреш
|
||||
- [Платформа 1С Предприятие 8.3](https://releases.1c.ru/project/Platform83 "Платформа 1С Предприятие 8.3") требуется два файла
|
||||
- Клиент 1С:Предприятия (64-bit) для RPM-based Linux-систем
|
||||
- Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем
|
||||
- [Дистрибутивы компонентов 1cFresh](https://releases.1c.ru/project/FreshPublic "Дистрибутивы компонентов 1cFresh")
|
||||
- Сайт 1cFresh
|
||||
- Форум 1cFresh
|
||||
- Шлюз приложений для DEB-based Linux-систем
|
||||
- Конфигурация **Менеджер сервиса**
|
||||
- Конфигурация **Агент сервиса**
|
||||
- Конфигурация **Менеджер доступности**
|
||||
- [1С:Библиотека технологии сервиса, редакция 1.2](https://releases.1c.ru/version_files?nick=SMTL12&ver=1.2.2.26 "1С:Библиотека технологии сервиса, редакция 1.2") или [1С:Библиотека технологии сервиса, редакция 2.0](https://releases.1c.ru/project/SMTL20 "1С:Библиотека технологии сервиса, редакция 2.0")
|
||||
|
||||
<details>
|
||||
<summary>Компоненты используемые для тестирования</summary>
|
||||
- [1С Предприятие 8.3.15.1869](https://releases.1c.ru/version_files?nick=Platform83&ver=8.3.15.1869 "1С Предприятие 8.3.15.1869")
|
||||
- [Клиент 1С:Предприятия (64-bit) для RPM-based Linux-систем](https://releases.1c.ru/version_file?nick=Platform83&ver=8.3.15.1869&path=Platform\8_3_15_1869\client_8_3_15_1869.rpm64.tar.gz "Клиент 1С:Предприятия (64-bit) для RPM-based Linux-систем")
|
||||
- [Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем](https://releases.1c.ru/version_file?nick=Platform83&ver=8.3.15.1869&path=Platform\8_3_15_1869\rpm64_8_3_15_1869.tar.gz "Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем")
|
||||
- [1С:Предприятие. Облачная подсистема Фреш 1.0.28.1](https://releases.1c.ru/version_files?nick=FreshPublic&ver=1.0.28.1 "1С:Предприятие. Облачная подсистема Фреш 1.0.28.1")
|
||||
- [Сайт 1cFresh 1.2.14.1](https://releases.1c.ru/version_file?nick=FreshPublic&ver=1.0.28.1&path=FreshPublic\1_0_28_1\Extrafiles\site_1.2.14.zip "Сайт 1cFresh 1.2.14.1")
|
||||
- [Форум 1cFresh 1.0.41.1](https://releases.1c.ru/version_file?nick=FreshPublic&ver=1.0.28.1&path=FreshPublic\1_0_28_1\Extrafiles\forum_1.0.41.zip "Форум 1cFresh 1.0.41.1")
|
||||
- [Шлюз приложений 1.1.1.8 для DEB-based Linux-систем ](https://releases.1c.ru/version_file?nick=FreshPublic&ver=1.0.28.1&path=FreshPublic\1_0_28_1\Extrafiles\appgate_1.1.1.8_1_all.deb "Шлюз приложений 1.1.1.8 для DEB-based Linux-систем ")
|
||||
- [Менеджер сервиса. Версия 1.0.94.20](https://releases.1c.ru/version_file?nick=FreshPublic&ver=1.0.28.1&path=SM\1_0_94_20\SM_1_0_94_20_setup1c.exe "Менеджер сервиса. Версия 1.0.94.20")
|
||||
- [Агент сервиса. Версия 1.0.29.4](https://releases.1c.ru/version_file?nick=FreshPublic&ver=1.0.28.1&path=SA\1_0_29_4\SA_1_0_29_4_setup1c.exe "Агент сервиса. Версия 1.0.29.4")
|
||||
- [Менеджер доступности. Версия 1.0.3.4](https://releases.1c.ru/version_file?nick=FreshPublic&ver=1.0.28.1&path=AM\1_0_3_4\AM_1_0_3_4_setup1c.exe "Менеджер доступности. Версия 1.0.3.4")
|
||||
- [1С:Библиотека технологии сервиса, редакция 1.2. Версия 1.2.2.26](https://releases.1c.ru/version_files?nick=SMTL12&ver=1.2.2.26 "1С:Библиотека технологии сервиса, редакция 1.2. Версия 1.2.2.26")
|
||||
</details>
|
||||
## Подготовка к развертыванию
|
||||
##### Клонирование репозитория
|
||||
```bash
|
||||
git clone https://github.com/WizaXxX/docker_fresh.git
|
||||
cd docker_fresh
|
||||
```
|
||||
|
||||
##### Размещение дистрибутитов
|
||||
Все ранее скачанные дистрибутивы необходимо разместить в каталоге `/docker_fresh/distr/`. После добавление всех дистрибутивов в каталог, он должен выглядить следубщим образом
|
||||
![](https://i.ibb.co/S50sF96/2020-04-10-16-03-22.png)
|
||||
|
||||
##### Настройка списка создваемых информационных баз
|
||||
В файле `/docker_fresh/other_files/params.json` расположен список информационных баз которые требуется создать в формате **JSON**
|
||||
|
@ -11,6 +11,7 @@ services:
|
||||
- ./mnt:/mnt
|
||||
- ../images/site/create_db.psql:/create_db_site.psql
|
||||
- ../images/forum/create_db.psql:/create_db_forum.psql
|
||||
- ../images/db/wait_postgres.sh:/wait_postgres.sh
|
||||
|
||||
nginx:
|
||||
image: nginx:stable-alpine
|
||||
@ -107,6 +108,7 @@ services:
|
||||
- ../conf/site/context.xml:/usr/local/tomcat/conf/context.xml
|
||||
- ../conf/site/server.xml:/usr/local/tomcat/conf/server.xml
|
||||
- ../images/site/distr/site/media:/var/www/content/media/
|
||||
- ../images/site/wait_site.sh:/wait_site.sh
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
|
9
images/db/wait_postgres.sh
Executable file
9
images/db/wait_postgres.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
# make sure pg is ready to accept connections
|
||||
until ./pg_isready
|
||||
do
|
||||
echo "Waiting for postgres"
|
||||
sleep 1;
|
||||
done
|
||||
|
||||
# Now able to connect to postgres
|
@ -1,6 +1,6 @@
|
||||
FROM tomcat:7.0-jre8-alpine
|
||||
|
||||
ENV JAVA_OPTS "${JAVA_OPTS} -Xms512m -Xmx1024m -XX:+UseParallelGC -server"
|
||||
ENV JAVA_OPTS "${JAVA_OPTS} -Xms256m -Xmx512m -XX:+UseParallelGC -server"
|
||||
|
||||
RUN rm -rf /usr/local/tomcat/webapps/* && \
|
||||
mkdir -p /var/www/forum/{mess_files,logo}
|
||||
|
@ -1,6 +1,6 @@
|
||||
FROM tomcat:7.0-jre8-alpine
|
||||
|
||||
ENV JAVA_OPTS "${JAVA_OPTS} -Xms512m -Xmx1024m -XX:+UseParallelGC -server "
|
||||
ENV JAVA_OPTS "${JAVA_OPTS} -Xms256m -Xmx512m -XX:+UseParallelGC -server "
|
||||
|
||||
RUN rm -rf /usr/local/tomcat/webapps/* && \
|
||||
mkdir -p /var/www/content/searchIndex \
|
||||
|
9
images/site/wait_site.sh
Executable file
9
images/site/wait_site.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
until [ "`wget -q -O- http://localhost:8080 | grep 'Главная'`" != "" ];
|
||||
do
|
||||
echo "Waiting for site"
|
||||
sleep 3
|
||||
done
|
||||
|
||||
echo Tomcat is ready!
|
@ -20,7 +20,6 @@ images.append(site.New())
|
||||
# images.append(forum.New())
|
||||
# images.append(core.New())
|
||||
# images.append(gate.New())
|
||||
# images.append(nginx.New())
|
||||
|
||||
debug = '-debug' in sys.argv
|
||||
start_time = datetime.now()
|
||||
|
@ -53,7 +53,7 @@ def web_publish_command(host_name, conf_name, internal, descriptor, base_name=''
|
||||
command.append('\'/mnt/other-files/vrd/{}.vrd\''.format(descriptor))
|
||||
return command
|
||||
|
||||
def create_ib_command(host_name, ib_name, conf_ver=''):
|
||||
def create_ib_command(host_name, ib_name, conf_ver='', job_dn='N'):
|
||||
command = []
|
||||
command.append('docker')
|
||||
command.append('exec')
|
||||
@ -61,8 +61,8 @@ def create_ib_command(host_name, ib_name, conf_ver=''):
|
||||
command.append('srv.' + host_name)
|
||||
command.append('/opt/1C/v8.3/x86_64/1cv8')
|
||||
command.append('CREATEINFOBASE')
|
||||
command.append('\'Srvr="srv";Ref="{0}";DBMS=PostgreSQL;DBSrvr="db";DB="{0}";DBUID="postgres";LicDstr="Y";Locale="ru_RU";CrSQLDB="Y";SchJobDn="N";\''.format(
|
||||
ib_name))
|
||||
command.append('\'Srvr="srv";Ref="{0}";DBMS=PostgreSQL;DBSrvr="db";DB="{0}";DBUID="postgres";LicDstr="Y";Locale="ru_RU";CrSQLDB="Y";SchJobDn="{1}";\''.format(
|
||||
ib_name, job_dn))
|
||||
command.append('/UseTemplate')
|
||||
command.append('/mnt/' + ib_name + '_' + conf_ver.replace('.', '_') + '.cf')
|
||||
command.append('/Out "/mnt/create_ib_' + ib_name + '.out"')
|
||||
|
@ -2,12 +2,17 @@
|
||||
"ИмяХоста": "HOSTNAMEREPLACE",
|
||||
"ИнформационныеБазы": [
|
||||
{
|
||||
"Сервер": "web/int/sm",
|
||||
"ИмяВКластере": "sm",
|
||||
"КодКонфигурации": "sm",
|
||||
"ТипКонфигурации": "Управляющая",
|
||||
"Администратор": "Администратор",
|
||||
"ПользовательУправления": "RemoteAccess"
|
||||
"Сервер": "web/int/smtl",
|
||||
"ИмяВКластере": "smtl",
|
||||
"КодКонфигурации": "smtl",
|
||||
"ТипКонфигурации": "Прикладная",
|
||||
"Администратор": "Admin",
|
||||
"ПользовательУправления": "RemoteAccess",
|
||||
"ИмяВнешнейПубликации": "smtl",
|
||||
"ИмяФайлаШаблонаВнешненийПубликации": "withzone",
|
||||
"ИмяФайлаШаблонаВнутреннейПубликации": "zoneless",
|
||||
"СоздаватьВМенеджере": true,
|
||||
"ИмяФайлаКонфигурации":"smtl.cf"
|
||||
},
|
||||
{
|
||||
"Сервер": "web/int/sa",
|
||||
@ -15,15 +20,38 @@
|
||||
"КодКонфигурации": "sa",
|
||||
"ТипКонфигурации": "Сервисная",
|
||||
"Администратор": "",
|
||||
"ПользовательУправления": ""
|
||||
"ПользовательУправления": "",
|
||||
"ИмяВнешнейПубликации": "sa",
|
||||
"ИмяФайлаШаблонаВнешненийПубликации": "zoneless",
|
||||
"ИмяФайлаШаблонаВнутреннейПубликации": "zoneless",
|
||||
"СоздаватьВМенеджере": true,
|
||||
"ИмяФайлаКонфигурации":"sa.cf"
|
||||
},
|
||||
{
|
||||
"Сервер": "web/int/smtl",
|
||||
"ИмяВКластере": "smtl",
|
||||
"КодКонфигурации": "smtl",
|
||||
"ТипКонфигурации": "Прикладная",
|
||||
"Администратор": "Admin",
|
||||
"ПользовательУправления": "RemoteAccess"
|
||||
"Сервер": "",
|
||||
"ИмяВКластере": "am",
|
||||
"КодКонфигурации": "",
|
||||
"ТипКонфигурации": "",
|
||||
"Администратор": "Администратор",
|
||||
"ПользовательУправления": "",
|
||||
"ИмяВнешнейПубликации": "",
|
||||
"ИмяФайлаШаблонаВнешненийПубликации": "",
|
||||
"ИмяФайлаШаблонаВнутреннейПубликации": "zoneless",
|
||||
"СоздаватьВМенеджере": false,
|
||||
"ИмяФайлаКонфигурации":"am.cf"
|
||||
},
|
||||
{
|
||||
"Сервер": "web/int/sm",
|
||||
"ИмяВКластере": "sm",
|
||||
"КодКонфигурации": "sm",
|
||||
"ТипКонфигурации": "Управляющая",
|
||||
"Администратор": "Администратор",
|
||||
"ПользовательУправления": "RemoteAccess",
|
||||
"ИмяВнешнейПубликации": "adm",
|
||||
"ИмяФайлаШаблонаВнешненийПубликации": "zoneless",
|
||||
"ИмяФайлаШаблонаВнутреннейПубликации": "zoneless",
|
||||
"СоздаватьВМенеджере": true,
|
||||
"ИмяФайлаКонфигурации":"sm.cf"
|
||||
}
|
||||
]
|
||||
}
|
60
start.py
60
start.py
@ -2,12 +2,14 @@ import subprocess
|
||||
import os
|
||||
import modules.helper as helper
|
||||
import sys
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
host_name = '.1cfresh.dev'
|
||||
sup_password = '123Qwer'
|
||||
new_server = False
|
||||
global_debug = False
|
||||
info_base_list = []
|
||||
configurations = {}
|
||||
|
||||
docker_run_str = 'docker run --rm -v {}:/out_files alpine'.format(
|
||||
@ -72,17 +74,21 @@ def call(command, remote=True, debug=False, action='', measure_duration=False, s
|
||||
@print_description
|
||||
def get_configurations_data():
|
||||
"""Get configuration data"""
|
||||
# r=root, d=directories, files = files
|
||||
for r, d, files in os.walk(helper.replace_sep(local_work_dir + 'mnt')):
|
||||
for file in files:
|
||||
conf_key = file.split('.')[0].split('_')[0]
|
||||
configurations[conf_key] = '.'.join(file.split(
|
||||
'.')[0].split('_')).replace(conf_key + '.', '')
|
||||
|
||||
with open('other_files/params.json') as json_file:
|
||||
data = json.load(json_file)
|
||||
for ib_data in data['ИнформационныеБазы']:
|
||||
if not os.path.isfile('distr/{}'.format(ib_data['ИмяФайлаКонфигурации'])):
|
||||
print('Не найден файл', ib_data['ИмяФайлаКонфигурации'])
|
||||
else:
|
||||
info_base_list.append(ib_data)
|
||||
|
||||
|
||||
def prepare_new_ib(key, post_data=''):
|
||||
def prepare_new_ib(key, post_data='', job_dn=False):
|
||||
|
||||
call(' '.join(helper.create_ib_command(host_name, key, configurations[key])),
|
||||
job_dn_str = 'Y' if job_dn else 'N'
|
||||
|
||||
call(' '.join(helper.create_ib_command(host_name, key, configurations[key], job_dn_str)),
|
||||
remote=False,
|
||||
action='Creating ' + key,
|
||||
measure_duration=True)
|
||||
@ -173,8 +179,6 @@ def publish_sevises():
|
||||
host_name, 'smtl', False, 'withzone')), remote=False)
|
||||
call(' '.join(helper.web_publish_command(
|
||||
host_name, 'sa', False, 'zoneless')), remote=False)
|
||||
call(' '.join(helper.web_publish_command(
|
||||
host_name, 'openid', False, 'openid', 'sm')), remote=False)
|
||||
|
||||
# publish int services
|
||||
call(' '.join(helper.web_publish_command(
|
||||
@ -185,10 +189,14 @@ def publish_sevises():
|
||||
host_name, 'sa', True, 'zoneless')), remote=False)
|
||||
call(' '.join(helper.web_publish_command(
|
||||
host_name, 'am', True, 'zoneless')), remote=False)
|
||||
|
||||
# publish special services
|
||||
call(' '.join(helper.web_publish_command(
|
||||
host_name, 'openid', False, 'openid', 'sm')), remote=False)
|
||||
call(' '.join(helper.web_publish_command(host_name, 'sc', True,
|
||||
'sessioncontrol', 'sm;Usr=SessionControl;Pwd=' + sup_password)), remote=False)
|
||||
'sessioncontrol', 'sm;Usr=SessionControl;Pwd=' + sup_password)), remote=False)
|
||||
call(' '.join(helper.web_publish_command(host_name, 'extreg', True,
|
||||
'extreg', 'sm;Usr=ExtReg;Pwd=' + sup_password)), remote=False)
|
||||
'extreg', 'sm;Usr=ExtReg;Pwd=' + sup_password)), remote=False)
|
||||
|
||||
# restart Apache
|
||||
call('docker exec web.' + host_name +
|
||||
@ -263,9 +271,28 @@ def init_gate():
|
||||
|
||||
call('docker exec -t web.{0} curl --user Администратор: https://{0}/a/adm/hs/docker_control/update_appgate'.format(host_name),
|
||||
remote=False)
|
||||
@print_description
|
||||
def wait_postgres():
|
||||
"""Waiting for postgres"""
|
||||
|
||||
call('docker exec -t db.{} /wait_postgres.sh'.format(host_name), remote=False)
|
||||
|
||||
@print_description
|
||||
def wait_site():
|
||||
"""Waiting for site"""
|
||||
|
||||
call('docker exec -t site.{} /wait_site.sh'.format(host_name), remote=False)
|
||||
|
||||
@print_description
|
||||
def enable_job_in_sm():
|
||||
"""Enable scheduled jobs sm"""
|
||||
|
||||
call('docker exec -t ras.{} deployka scheduledjobs unlock -db sm -db-user \'Администратор\''.format(host_name),
|
||||
remote=False)
|
||||
|
||||
global_start_time = datetime.now()
|
||||
print('{}Fresh is starting{}'.format(colors.GREEN, colors.WHITE))
|
||||
|
||||
# destroy exist conteiners and network
|
||||
call(docker_compose_str + 'down', remote=False, silent=False)
|
||||
|
||||
@ -285,18 +312,21 @@ if new_server:
|
||||
|
||||
# start db srv ras web gate conteiners
|
||||
call(docker_compose_str + 'up -d db srv ras web gate', remote=False, silent=False)
|
||||
wait_postgres()
|
||||
|
||||
if new_server:
|
||||
create_db_site()
|
||||
create_db_forum()
|
||||
publish_sevises()
|
||||
prepare_new_ib('smtl')
|
||||
prepare_new_ib('sa')
|
||||
prepare_new_ib('am')
|
||||
prepare_new_ib('sm', post_data='/mnt/other-files/params.json')
|
||||
enable_job_in_sm()
|
||||
create_db_site()
|
||||
create_db_forum()
|
||||
|
||||
# start site forum nginx conteiners
|
||||
call(docker_compose_str + 'up -d site forum nginx', remote=False, silent=False)
|
||||
call(docker_compose_str + 'up -d nginx site', remote=False, silent=False)
|
||||
wait_site()
|
||||
|
||||
if new_server:
|
||||
delete_control_extension('smtl', 'Admin', 'smtl')
|
||||
|
Loading…
Reference in New Issue
Block a user