1
0
mirror of https://github.com/agibalovsa/-1C_DevOps.git synced 2025-10-08 23:22:16 +02:00

Добавлено описание инфраструктуры.

This commit is contained in:
agibalovsa
2025-04-06 18:55:52 +03:00
parent 0d72929d3a
commit 696cc850e8
14 changed files with 138 additions and 8 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
.arg
.env

View File

@@ -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)

View File

@@ -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"

View 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=

View File

@@ -0,0 +1,5 @@
#!/bin/bash
export $(cat .env) > /dev/null 2>&1;
docker stack deploy -c docker-stack.yml nginx

View File

@@ -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" }}/;
}

View 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

View 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*.

View File

@@ -0,0 +1,3 @@
PORTAINER_HTTPS_PORT=9443
PORTAINER_HTTP_PORT=9000
PORTAINER_KUBERNET_PORT=8000

View File

@@ -0,0 +1,5 @@
#!/bin/bash
export $(cat .env) > /dev/null 2>&1;
docker stack deploy -c docker-stack.yml portainer

View 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*.

View File

@@ -2,3 +2,4 @@ SONARQUBE_VERSION=
RUSSIAN_PACK=
BSL_PLUGIN_VERSION=
BRANCH_PLUGIN_VERSION=
ROOT_CERTS=

View File

@@ -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} \
.

View File

@@ -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