You've already forked rarus_1c_devops
							
							
				mirror of
				https://github.com/agibalovsa/-1C_DevOps.git
				synced 2025-10-31 00:08:02 +02:00 
			
		
		
		
	Добавлено описание инфраструктуры.
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1,2 @@ | ||||
| .arg | ||||
| .env | ||||
|   | ||||
							
								
								
									
										44
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								README.md
									
									
									
									
									
								
							| @@ -1 +1,43 @@ | ||||
| # 1C-DevOps | ||||
| # 1C-DevOps | ||||
|  | ||||
| ## Описание | ||||
|  | ||||
| В данном репозитории находятся настроечные файлы для создания docker образов и развертывания docker контейнеров приложений, относящихся к разработке на платформах 1С:Предприятие, 1С:Элемент. | ||||
|  | ||||
| Репозиторий содержит: | ||||
|  | ||||
| - Файлы *dockerfile* для создания репозитория. | ||||
| - Файлы *.arg.tmpl* - как шаблоны файлов для задания аргументов сборки образов. | ||||
|    > Для кастомизации образов файлы аргументов сборки образов *.arg* помещены в *gitignore*, чтобы они не влияли на репозиторий. | ||||
| - Файлы *docker-compose.yml* для создания контейнеров с помощью `docker compose`. | ||||
| - файлы *docker-stack.yml* для создания контейнеров с помощью `docker stack deploy`. | ||||
| - Файлы *.env.tmpl* - как шаблоны файлов для задания переменны среды. | ||||
|    > Для кастомизации контейнеров файлы переменных среды *.env* помещены в *gitignore*, чтобы они не влияли на репозиторий. | ||||
| - Файлы */swarm/\*.tmpl* - как шаблоны файлов конфигураций для **docker swarm**. | ||||
|    > Файлы шаблонов настроек содержат минимальные настройки для успешного запуска приложения для предварительного знакомства. | ||||
| - Файлы *\*.sh* - вспомогательные скрипты для настройки инфраструктуры. | ||||
|  | ||||
| Порядок работы с репозиторием: | ||||
|  | ||||
| - Создать образ. | ||||
| - Поднять контейнер с минимальными настройками (docker compose, docker stack deploy). | ||||
| - Настроить приложения в контейнере помощью пользовательских настроек. | ||||
|  | ||||
| > **Важно**. Репозиторий на текущем этапе развития не претендует на полноту описания. Его развитие будет идти по мере изучения новых механизмов и оптимизации изученных раннее. За любую помощь в дополнении или развития текущих файлов настроек автор репозитория будет очень благодарен. | ||||
|  | ||||
| Автор постарался выполнить настроечные файлы таким образом, чтобы они отвечали требованиям манифеста развития репозитория. | ||||
|  | ||||
| ## Манифест развития репозитория | ||||
|  | ||||
| - Репозиторий заточен прежде всего под создание стека технологий для работы с приложениями на 1С. | ||||
| - Все настроечные файлы репозитория должны быть выполнены таким образом, чтобы их хватило для начального запуска приложений с минимально-необходимыми настройками. | ||||
| - Все настроечные файлы в репозитории не должны мешать настройке приложений с помощью пользовательских конфигурационных файлов. | ||||
| - Содержания настроечных файлов репозитории должно хватить, чтобы пользователь смог поднимать приложения, без изменения этих файлов "под себя". | ||||
| - Настроечные файлы не должны путать пользователей репозитория своей сложной структурой и должны следовать единственной цели - помогать специалистам и сообществу в развитии своей внутренней инфраструктуры, и стеку технологии работы с приложениями 1с в целом. | ||||
|  | ||||
| ## Содержание | ||||
|  | ||||
| - [Portainer](docker/portainer/RAEDME.md) | ||||
| - [Nginx](docker/portainer/RAEDME.md) | ||||
| - [Gitlab](docker/portainer/RAEDME.md) | ||||
| - [Sonarqube](docker/portainer/RAEDME.md) | ||||
|   | ||||
| @@ -13,4 +13,4 @@ letsencrypt['enable'] = false | ||||
| nginx['redirect_http_to_https'] = true | ||||
| nginx['http2_enabled'] = false | ||||
| nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt" | ||||
| nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key" | ||||
| nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key" | ||||
							
								
								
									
										9
									
								
								docker/nginx/swarm/.env.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								docker/nginx/swarm/.env.tmpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| HOSTNAME= | ||||
| GITLAB_HOSTNAME= | ||||
| GITLAB_HTTPS_PORT= | ||||
| GITLAB_SSH_PORT= | ||||
| SONAR_HOSTNAME= | ||||
| SONAR_HTTP_PORT= | ||||
| PORTAINER_HOSTNAME= | ||||
| PORTAINER_HTTPS_PORT= | ||||
| PORTAINER_HTTP_PORT= | ||||
							
								
								
									
										5
									
								
								docker/nginx/swarm/docker-stack-deploy.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								docker/nginx/swarm/docker-stack-deploy.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| export $(cat .env) > /dev/null 2>&1; | ||||
|  | ||||
| docker stack deploy -c docker-stack.yml nginx | ||||
| @@ -53,8 +53,12 @@ server { | ||||
|     proxy_set_header X-Forwarded-Proto    $scheme; | ||||
|     proxy_set_header X-Forwarded-Protocol $scheme; | ||||
|     proxy_set_header X-Url-Scheme         $scheme; | ||||
|     proxy_set_header Upgrade     $http_upgrade; | ||||
|     proxy_set_header Connection  "upgrade"; | ||||
|  | ||||
|     proxy_pass https://{{ env "PORTAINER_HOSTNAME" }}:{{ env "PORTAINER_HTTPS_PORT" }}; | ||||
|     proxy_cache_bypass $http_upgrade; | ||||
|  | ||||
|     proxy_pass https://{{ env "PORTAINER_HOSTNAME" }}:{{ env "PORTAINER_HTTPS_PORT" }}/; | ||||
|  | ||||
|   } | ||||
|  | ||||
|   | ||||
							
								
								
									
										7
									
								
								docker/nginx/swarm/update-config.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								docker/nginx/swarm/update-config.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| if (docker config inspect nginx_conf) ; then | ||||
|     docker config rm nginx_conf | ||||
| fi; | ||||
|  | ||||
| docker config create --template-driver golang nginx_conf nginx_conf.tmpl | ||||
							
								
								
									
										15
									
								
								docker/portainer/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								docker/portainer/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| # Portainer | ||||
|  | ||||
| [**Portainer**](https://docs.portainer.io/) - это универсальная платформа для управления контейнерами. | ||||
|  | ||||
| ## Создание контейнера | ||||
|  | ||||
| Переменные среды: | ||||
|  | ||||
| - `PORTAINER_HTTPS_PORT` - порт хоста для указания HTTPS порта приложения. | ||||
| - `PORTAINER_HTTP_PORT` - порт хоста для указания HTTP порта приложения. | ||||
| - `PORTAINER_KUBERNET_PORT` - порт хоста для указания порта приложения интеграции с **Kubernetes**. | ||||
|  | ||||
| Запуск осуществляется с помощью **docker swarm** на узле где активирован менеджер swarm, для этого используется файл скрипта *docker-stack-deploy.sh*. | ||||
|  | ||||
| Для запуска приложения необходимо создать файл переменны среды *.env* на основе шаблона *.env.tmpl*. | ||||
							
								
								
									
										3
									
								
								docker/portainer/swarm/.env.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docker/portainer/swarm/.env.tmpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| PORTAINER_HTTPS_PORT=9443 | ||||
| PORTAINER_HTTP_PORT=9000 | ||||
| PORTAINER_KUBERNET_PORT=8000 | ||||
							
								
								
									
										5
									
								
								docker/portainer/swarm/docker-stack-deploy.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								docker/portainer/swarm/docker-stack-deploy.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| export $(cat .env) > /dev/null 2>&1; | ||||
|  | ||||
| docker stack deploy -c docker-stack.yml portainer | ||||
							
								
								
									
										24
									
								
								docker/sonarqube/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								docker/sonarqube/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # Sonarqube | ||||
|  | ||||
| [**Sonarqube**](https://docs.sonarsource.com/) - платформа с открытым исходным кодом для непрерывного анализа и измерения качества программного кода. | ||||
|  | ||||
| ## Создание образа | ||||
|  | ||||
| Аргументы сборки: | ||||
|  | ||||
| - `SONARQUBE_VERSION`     - версия [базового образа](https://hub.docker.com/_/sonarqube/tags?name=community) *sonarqube*. | ||||
| - `RUSSIAN_PACK`          - версия [плагина русификации](https://github.com/1c-syntax/sonar-l10n-ru) *sonarqube*. | ||||
| - `BSL_PLUGIN_VERSION`    - плагин, [поддерживающий язык 1С:Предприятие 8](https://github.com/1c-syntax/sonar-bsl-plugin-community) для *sonarqube*. | ||||
| - `BRANCH_PLUGIN_VERSION` - плагин, [позволяющий работать с ветками для](https://github.com/mc1arke/sonarqube-community-branch-plugin) *sonarqube community edition*. | ||||
| - `ROOT_CERTS`            - ссылки на внешние публичные сертификаты, для их фиксации в образе. | ||||
|   Данная переменная используется, для интеграции с внешними сервисами по протоколу HTTPS, например, с Gitlab. Ее указание необходимо в 2 случаях: | ||||
|   - Внешние сервисы используют сертификаты, выпущенные внутренним PKI, и для их доверия необходимо указать корневые и промежуточные сертификаты. | ||||
|   - Внешние сервисы используют сертификаты, выпущенными доверенными центрами сертификации, но, по каким-то причинам, эти сертификаты не установлены в базовом образе Linux. Соответственно возникает ошибка доверия при обращении к этим сервисам. | ||||
|  | ||||
|   Сертификаты должны быть доступны по url ссылкам. Ссылки должны быть разделены запятой. Например: | ||||
|    | ||||
|   ```ini | ||||
|   ROOT_CERTS="http://secure.globalsign.com/cacert/gsgccr6alphasslca2023.crt http://secure.globalsign.com/cacert/root-r6.crt""http://secure.globalsign.com/cacert/gsgccr6alphasslca2023.crt http://secure.globalsign.com/cacert/root-r6.crt" | ||||
|   ``` | ||||
|  | ||||
| Для сборки приложения необходимо создать файл переменны среды *.arg* на основе шаблона *.arg.tmpl*. | ||||
| @@ -2,3 +2,4 @@ SONARQUBE_VERSION= | ||||
| RUSSIAN_PACK= | ||||
| BSL_PLUGIN_VERSION= | ||||
| BRANCH_PLUGIN_VERSION= | ||||
| ROOT_CERTS= | ||||
| @@ -8,5 +8,6 @@ docker build \ | ||||
|   --build-arg "RUSSIAN_PACK=$RUSSIAN_PACK" \ | ||||
|   --build-arg "BRANCH_PLUGIN_VERSION=$BRANCH_PLUGIN_VERSION" \ | ||||
|   --build-arg "BSL_PLUGIN_VERSION=$BSL_PLUGIN_VERSION" \ | ||||
|   --build-arg "ROOT_CERTS=$ROOT_CERTS" \ | ||||
|   -t sonarqube/1c:${SONARQUBE_VERSION}-${BSL_PLUGIN_VERSION} \ | ||||
|   . | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # https://hub.docker.com/_/sonarqube | ||||
| ARG SONARQUBE_VERSION=lts-community | ||||
|  | ||||
| FROM sonarqube:${SONARQUBE_VERSION} | ||||
| FROM "sonarqube:${SONARQUBE_VERSION}" | ||||
|  | ||||
| USER root | ||||
|  | ||||
| @@ -17,16 +17,29 @@ ARG RUSSIAN_PACK \ | ||||
|     BRANCH_PLUGIN_VERSION | ||||
|  | ||||
| RUN set -eux; \ | ||||
|     curl -#Lo extensions/plugins/sonar-l10n-ru-plugin-${RUSSIAN_PACK}.jar https://github.com/1c-syntax/sonar-l10n-ru/releases/download/v${RUSSIAN_PACK}/sonar-l10n-ru-plugin-${RUSSIAN_PACK}.jar; \ | ||||
|     curl -#Lo "extensions/plugins/sonar-l10n-ru-plugin-${RUSSIAN_PACK}.jar" "https://github.com/1c-syntax/sonar-l10n-ru/releases/download/v${RUSSIAN_PACK}/sonar-l10n-ru-plugin-${RUSSIAN_PACK}.jar"; \ | ||||
|     if [ "$BSL_PLUGIN_VERSION" = "nightly*" ]; then \ | ||||
|         curl -#Lo /opt/sonarqube/extensions/plugins/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar https://github.com/1c-syntax/sonar-bsl-plugin-community/releases/download/v999.99.99/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar; \ | ||||
|         curl -#Lo "/opt/sonarqube/extensions/plugins/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar" "https://github.com/1c-syntax/sonar-bsl-plugin-community/releases/download/v999.99.99/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar"; \ | ||||
|     else \ | ||||
|         curl -#Lo /opt/sonarqube/extensions/plugins/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar https://github.com/1c-syntax/sonar-bsl-plugin-community/releases/download/v${BSL_PLUGIN_VERSION}/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar; \ | ||||
|         curl -#Lo "/opt/sonarqube/extensions/plugins/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar" "https://github.com/1c-syntax/sonar-bsl-plugin-community/releases/download/v${BSL_PLUGIN_VERSION}/sonar-communitybsl-plugin-${BSL_PLUGIN_VERSION}.jar"; \ | ||||
|     fi; \ | ||||
|     curl -#Lo /opt/sonarqube/extensions/plugins/sonarqube-community-branch-plugin-${BRANCH_PLUGIN_VERSION}.jar https://github.com/mc1arke/sonarqube-community-branch-plugin/releases/download/${BRANCH_PLUGIN_VERSION}/sonarqube-community-branch-plugin-${BRANCH_PLUGIN_VERSION}.jar; \ | ||||
|     curl -#Lo "/opt/sonarqube/extensions/plugins/sonarqube-community-branch-plugin-${BRANCH_PLUGIN_VERSION}.jar" "https://github.com/mc1arke/sonarqube-community-branch-plugin/releases/download/${BRANCH_PLUGIN_VERSION}/sonarqube-community-branch-plugin-${BRANCH_PLUGIN_VERSION}.jar"; \ | ||||
|     chown sonarqube:root /opt/sonarqube/extensions/plugins/*; | ||||
|  | ||||
| ENV SONAR_WEB_JAVAADDITIONALOPTS=-javaagent:/opt/sonarqube/extensions/plugins/sonarqube-community-branch-plugin-${BRANCH_PLUGIN_VERSION}.jar=web \ | ||||
|     SONAR_CE_JAVAADDITIONALOPTS=-javaagent:/opt/sonarqube/extensions/plugins/sonarqube-community-branch-plugin-${BRANCH_PLUGIN_VERSION}.jar=ce | ||||
|  | ||||
| ARG ROOT_CERTS= | ||||
| RUN set -eux; \ | ||||
|     for cert in ${ROOT_CERTS}; do \ | ||||
|         certFile=$(basename "${cert}"); \ | ||||
|         curl -#o "/usr/local/share/ca-certificates/${certFile}" "${cert}"; \ | ||||
|         keytool -importcert -keystore /opt/java/openjdk/lib/security/cacerts \ | ||||
|             -storepass changeit -file "/usr/local/share/ca-certificates/${certFile}" \ | ||||
|             -alias "${certFile%.*}" -noprompt; \ | ||||
|     done; \ | ||||
|     if [ "${ROOT_CERTS}" ]; then \ | ||||
|         update-ca-certificates; \ | ||||
|     fi; | ||||
|  | ||||
| USER sonarqube | ||||
|   | ||||
		Reference in New Issue
	
	Block a user