You've already forked docker_fresh
							
							
				mirror of
				https://github.com/1C-Company/docker_fresh.git
				synced 2025-10-30 23:47:54 +02:00 
			
		
		
		
	edit readme.md
This commit is contained in:
		
							
								
								
									
										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/`. После добавление всех дистрибутивов в каталог, он должен выглядить следубщим образом | ||||
|    | ||||
|  | ||||
| ##### Настройка списка создваемых информационных баз | ||||
| В файле `/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') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user