[flant] init repo

This commit is contained in:
Мостовой Владимир Андреевич 2026-09-09 17:06:31 +03:00
commit 3edb6c95ab
20 changed files with 455 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*.swp
.werf_secret_key
.idea
.logs/*
.logs

10
.helm/secret-values.yaml Normal file
View File

@ -0,0 +1,10 @@
keycloak:
password:
_default: 100019d23b8362f17b51fa105aa4ee817cbfc3ba6cec2427468d48a589fb40552cb29b82799efe896d0de6b29b2917e2de08
preprod: 10008a37f9b07c5afb21b7c23fc6052eeb43160a56e5a99ea65192007807192915a377a86af2663c79dc0b5af903c325ac95
prod: 10001ecb181e403d22a0530052a87ce07b9080247298c22d79b0f00550801db552659e6cf308164118ea8d2867c8c34eb0c5
postgres:
password:
_default: 10000d6340d0de2c7776d4955d1811a5ff135213cb7e101a8ea27fe240b3869179c40e0e70161f27f9bd618139917a357dc1
preprod: 100094cf6a127f06aee854384e745d50cfb900da0976bc1c81350b1039bca7d0e28123332d502725d55f9ec685a8683c8c38
prod: 1000e251d400b1660bb9c386c3b055d6d36d70edfba30e0b194a8f6e7d7bc278b1847a371b500ed7e9f639e9632176ee3d98

1
.helm/secret/dev/tls.crt Normal file
View File

@ -0,0 +1 @@
10001bb139fe4b0f3affcb04d9809519f69344c13eda9d4e931877f015036d965992baa8afd294d105ec1034590e31f140e79f224f85dc5eac228abc11ee9a4ee97d681a5340a69d953a13d405c89d4ad6a154fd947053decb639472d07d1acf2536cc593801f2cf74e907dd5752813f0bb26fd59336a8fb18bce9692dac8409bcf55f6eae4aaec31b75f1a2c7a7566f94de0f75918bddf99fad808758f35eb793e3153aff6860f76d0f266a4b93c3864963c4b2f97484434669cff779b45ca9609bb8802ad7e5379370251bf18c866b13f0cd28c6af2124cb983fa978f930b32684e455e2bb320e795ab9905f29458aacc8b19bc5fce4d7fdf47c9ec110ca1c7d0967e78e2ae8af5af1002a6f1d2f17eab3bcff63a333792cc4694ebce35ba62df04595677f9868aef524bd711209ceb615a8aea106b47f5907b3eaec429b0d512c2623d1464c84a95a3b374c89c68ab3cdbc19f7a57cf341a50293b39b132ae9140abfad6cb9c4a6f271d3050812f03fccf1d5335f61f845eef87ae861b5bcf0eb29c13eecae16b5fca983bf234708fb830e63b2c374ad6571396889a35a10787deaa7ba016d614b8549f10e4578ee2d2235277c3a979026537a02fd910eabb405fb03fc0ba20a0478812c51ad37fd6e425e5eeff55ce889d088130c64b39a19ea6de92ee73705a457ac1db97de466b467ee2427286b2a6fbe33f8081f63f135308692b1567b8876b7d04581d6e143a122c22f04172468a88ddcb6399b5f1cb9f22f01ca0ad22e7fd16d0a4cdebe0da5df7db42b00a3482397a0d4e8fa6e14d00898310b511782f94eaf4cdf7c4aa9ad05810f6499db2fd8603a8f513e6fbac85b1496a9f082847a338585b6c11b5feaf1fadac9a4cd3b176867403986f6267fc691484421a8f11075359eb31d7eca9ae803064280b2c0bcbed233ad664e169660170ae939b00fa06f7f684145d9517f5a175933b83db211ec2df5eddcc6eeecd4a61623ed22847d36d0a75ce5bb06e759cbf3dc8f3d3c8bd93f2e675bbb5c4fb0d7caa307ecce6e3b71a91643b905cac4e90139534c0e52a66da4bdabf8c2b8d79a079a7501eb818dcbbe77a4b78c92b34fc7270968af73bcdd0858b1c875b10c6171d9097c6a88fc31a367d6d86ccde7aa8d93de5fbee8c295a5b924725b599f4dbf5526cc75e81e0fcb0af537bdfd22e8401560c56b2aac2bab4bf3cfebee46f93ad1b31a4d6abe0ff473608d5c33c2ac697af69837e20360721a9e6fbcdcba4187878374db9aa4c539cddd822a1e0ac856c682bc9219729bcbafd10e794119efd045202db37e57d705d94a1bb0d8026225cb6ae8c59fc74776db66caf40006d8f638b32eede8baf50701eb2fad921d3638a4ddd594a18ec14f1a99d5e8add88423d3ce28dbfebd91a1cf86b1313f4a2671085f8706755175333fda2a137d93354e353bb12cfc4932553b8649eda07767472af3730b07e3d6c3d0bc7aad79d67332359a6cc562868ed4ec5a9544eb1aec68dd31c31974b38c022f44c4e3e6f420ada1c18f0d8f7263719d328ae4de6bc712d35f4d50857bcbe0ebc4f801dfc7c16b9b9b62fb2632787efc1c8d8228ba76aa5d4fbd27ebd9b42d5ad5f5169dd2bda0c15caaab03ecbcae4385c400bc9f529d9cf2f4e9d97802c1d4f4660fd669d693b78b250ec042694979cc787b4dd95aafa688f7a2d33fed0487da3d49ec3ff30645adc801ce2af43e632d280a21e8c94a9260d3fb885aa492b751228ff36b

1
.helm/secret/dev/tls.key Normal file
View File

@ -0,0 +1 @@
1000f9ed3fbba04f757f05d4c596d15acccffafecc09d431ecf51ddb51af8d6022b32faa0d0fdd25e060ed736985d84eed5d5bd225b3df1d3d187b7781840deb3ce65ce0cd2b1dbdb428aa2182623397994f12163ebd8f07abc2a7c0261654cbb163d053ce5db41ac62d32e8c73d675eef778ccc55fe603c3cd149625ae253e2c5677596ea7de07b8518b00c9905082cc624d45d3a8671906d164ca602a9f45ebfcaf626268a7087f5133c945fb95e19ce8a78a754031dc48b294488f650554b121f9b7f62032a33b60412e79fc7276387d456ffbcf11bd2b67cf38f34cfbde58ba2a9dbac7885b6e647647fb70957cf752987ebb49c91b95cf9761de2396909feb7fb240995702e41099c3975cf7fe8e9ebe9cd72ae2e0e114af7427c79f6d403c63897cc13dfd6982afbb1a47f481de75e8f0e12b75284b3a6b64fc9a549350413eae663a54c922edf3bc25578ddf5680ac9d8406795e8b045dd10ce4d254e7565f3e25b5fa40178fb0f82acda8d713939571e9f0db1a9c20d051ef4deabc524b025dc1e2cc22bb0dcf71f83f01ec6ddf7a9627eea88ee475c3bed3bb71ec27e4701f1b86353e25cb7a7d428d69aedf89a228167230a255fd53c0ef3da28f55df1091ae1c9ee758d3a1296e8553ca5055b9c95d9b371d9d70a3f029ad35f71c722dad45361ba5475c5e4b21dd483b9e0115ea7cf9d4ad82737ba70bb70188291b8c91643126375fe242331e6ad4f66b86f667886d717cc0782d52044bc0ed8662df261780157cc69d4421f9e150c66507d7158f550763ffee8f63cf76048c208c50275c2f62a7e76e25d83e0ce50a82351f142acdd135c3aa9c07f4d2b368e52410c8f82643e5ea665cd212cb579feee8337bef059968fcca014b2607174db38504707bc1ad62cebb15aea04163dc81c1fff78e2f46eb85fa38782542745caadeb2237a7ee0123befb57c97b83a6643b0ac54f1b2ebee27a613dba58e58a27296e50457d2f83d0e16061b9fb548d442059d818a25fbfd241082009f63e2a91013309bebc8ecff5db0cb2bf36365f8dbbbb89d359a8292e26fdccdf8ff94df8214538798a8acf1613fd4cb6d270ddaa5058d5293ea33bce864a772a1d9a5f8342e1a12ee68c96fbe1d3b6eb1d5136c61867e04b05d87b2b3c40f5ca88465e1f01063cd7f46cb631636e4115743add8ce7dcc62cfaddba6c000ce37d4778229790e4f04453bf52e84ae698676ecc8f86efffb16a12b0a53f8e32b5ed9911a9823435038f3a64e27ce928379168fa652129e8922f506f948b8679833c86fd34d5441cb499c32b7cd5e543327141f099607dfdbb046794aa6e132f2690ab4dbb01eec5d6fedb2d97a63b06d79e3c56650a72f31fa164bb9db32767afe2d5fbf518e35452d1f0f5f4307a1c4de7ae1ad28ff3ca913d392136051df506e8f78cce910d0cf970a93a49c1087c25ff5fe53c0d29606edec8394fb9b0ce32df52a8c4bc5d62e04c03bc475ee4508a63b282ab094901de863d09874e9034113336dd0c3e39a5cccf6f634938cf1decab43d2f5756d5b59437c280bff79af689816a3d645b0f2c96cd5baaeb3be65732458150ad710e329e7860664aba558493acbf7c2fb9cac5e09fa89b6f8f4303f14e059f9b34a14b88ad35b0c2efd3c57942685edcadc438efb986cfbac59f08f3c4c52384da2427ad4d2569dd11006d29bdca455fa17db9b748816cec6963ce2d9534b3cfd9d87e661b211d0be811bd295358f7007fa20d1233e0ee26f3d23f1e12f32d9bf44b5ac604f06500db9b85a51067621fe9b32c56666727c95ffed703984b16cb46faecd4d4b9b2e919e7757924797b2093b8eff323c4833ac977abb31eeb21992cb9b2cb4ce62737302709db88ca840e2203dbe5d8abe46f9cde568a286c34d1a0753c3523812abb4eb2579be62d033d2919d9231cc7c9c505954471e2ee2217710904c931f4637f71cd7671c5b2cb7f8810bb7f1e7c61ec669d6c1b0bf80860d6376bbefd22245da28e25e5e9dad41791ba959e40c436ce2ae4c465a32072b52efaef24fa84acb0a7ee10682d4f2db3e2cbfe43f6ce6678b89f389cdff010876772e1dd6a0505d1278dcc89c7d905879d196ee560b8973c19be7455eb31541db4a82d4ba3e7b5dd3ddff98bf1614c8943f528a6fa0032d2de289373c816fdff34649552a9705b717b0a227ecfa0ff1115379013ee95052db8340e4fc3da09f8bcccaa9ca39dbd489957dc5ad386174769f62ecbb8a9a3b1aac468572fee4ddb0b23360138cc3c2e3e93a27a7926552f480991b5b14b73b191b2a4469a9bda6da22ef0b9b85593291a2b4459a3b547bcd977a172f5e1c9c38b74459e15988e052a9807470036db73137a52b61cd9c909b94b8868b12c0b1bf2c0f60ff2eed5e586bb3c1c3eaf2f75d5850541f28d3d0845574

View File

@ -0,0 +1 @@
10007e4c81d3f7848370f5a3ac01bfcf448f51fa1688fad4f6a15c934c2631aa457f58cd5795861855278dd88168be31e9a5fa376652f00f9938dca6c30c14f313f617221348e8f9ddbb9a763f3588e982c957f82f9c71718c8069f6898d9f80576c34e5ee0ca25344ae27d7f61de52c607b653faf0203f8bcb24bbef37fdeb1825f4a726bc8735cea38441ccb604b10df760fe0346cc062f90e6259ac53f04083f944383d626138df9657c576c227219816e14ec18ac45f5f656b84a23dbfa3e099e2688df206fa46eccb6b7a092057020e34db6a17d8f0f4a97ea53c2ca2d3be713a7e9ced1093bb0192087da799e72f7c631c2b9a14b2d41d0d20cd6147dcebf0e0d41d0b6a15833d1c96c9b875f405bf250245cffadad46d61c4a9951e5cd8ca0d67c8df86727e3be6313064790fd7c54e9a2cf80babeba83499a77118b14912d786e976678435343c2c5ff4b71049366421249ff227b545a3d48466ac28f7a4ef29f42ad14ad0d393e9607beecca511a3da690ab01570638937614712f590130a8474a1f4cdbff42cba313c0821bc86b0174c930fbbb39a25359f729ff9f204b396201fb44885ceedf308ace470055751d72aa6e7aa27ed44c4718e75439925b749444ae6328b5dc9470cd884b5f60ac4d82830c38eb7a661d0aa319a667ad5b64ba019efce0955c518d67b02bf85d298e48e5d783540d683b069cc384aa562c5a425e60ba240cade9e239437f5b349cc1b3afe66edd250e1136a057e2915325cca92f99de81f6c4c22389116331dd55a049d70e67774e191123e0ab8e3cbcdb36b7df90208746c9856e1477d7f10da7de15543d69b086409e294d8d2a0465adccc56237d4370bd3c0666f80172df99c2c8049f285afbf2458ea9eaa2f18221c24f309664eaca3cf174c617d761d2520602f6574282c3a4e9d9dcb427269e1442afae8b9d4bfd6400fccfb694bcc2c10d12cfa794bbf722cf960416a653e10d198c99098cbb2665ec1e8a56ce5e60c44149ecc4bf87cb6a2257b18a3684e516227e66aae631c623fd467106d82314fcba034bb808c82dc77f3b86ad71485136a4a4334908c5b28477d4268f584957ef935408c9f5fdb23ee288fc4b48ec75fa7eb9617f2ff97b5b4df5e849d66d7ecf967c9ffca48d1f798308cec9ed70667bc6889780ff39d1ed083e965895a47502ef7dd1a6933b55992fc990ab6209db274b71efcf28a3f547ef87b1ce701f98bfaa85423f042ffaf2a5b62a8684138b726ab4203e204e2b98de5f51e1584b7b6623b3869b532535e5fc307b5f43dca26ca6446e14af61cc3ad439a11694b2c16cc0ca7654d00d0004e07b1d3c0b63e6d85a247d34904ed44673981009c498c226f9708e45b95661a60f00b219c131231c3f9c2e81a2d03a9f24e084ad96ac122f8f84da5859171ad1693a296b3004beecbdca5321aa6a6496c2d3f1a1cea730b9a1488fd5227538fcda2e5682df03d144e477b59e03b7f2df1e2912c24a09b1b0cefce1c6e383813d729b2a76c29a7aec1c192202a40e102eab127f8309de6ea46363a3795a6d669effb95b093977defcc04cfbef5e45a2e2920b601414eb33daa9d4233ff9aa6815c38a171da16bd14273b515c82461296695c7d9080c791c77c142261ad509a696a2a99e15fbb44b432fd937d934b9fedb77d5e10580a0943cbd4599e8440b7004e14dc19ee43a3ff3c1bebf3e660a733e5ec697b84160900b9849b30f87b5f93e0934b32f40122c49

View File

@ -0,0 +1 @@
1000c2852c94da974f9b0944df15e5eeb1d7a048cfab4119091096ebb89ee3cd55562e07edacd4a5e9046a3c538231055d31e4f36162421f0ec78e94b4bb51746b4133daa197be0544161aa6f96f7e1a67f9a78fe9132fd8abede9dabb4fde128eb851f74729459bd372d15cc936bfb47afe2931cf1dd52fc44088cc87200eb6d8dd836532c449cd68fc5f941f32da3c6d94c04c29c669e02254a374ef4c45e217bea6eabb42d9262529ce79636c8fb9b457a70fa3114d5e017c4ceeb9b1ac87b921666f32ceb5af4a347d4c641420145d4343516b7fab75372d44f46c7db3563545beea098818ac2a0f630ed7d5d63060e3c5e72cfd55721bd3196bb05045bbda78859b4852abb3d0c47dc8c90d052e3696bd9a10e0ee4075b0a7958d77c0c83d42bd896a1704db786cc0abd782489e4b05456a139a2988aaac0a6fafccbafb8a259f584abe20b75e383e9108086f5de8fab090d22bf3a44eb12301206a9e837f65ef547d1e5de4ef70d88bed3df2a2e7caa41c5965c58ce8f21240608438d94700203b1b013f11895bef3a333e8e32aaa2407bb0ab6cf004f93d2a8c3baf0dbd596bde457505ec542f2ba0573d6de972380c6ba751a72509e24917664e7d0e844bf7f4f6098ce96183206851f54eb23cbe3fdbf6dcdb1614a1ed60d1f3713a7da0fe4895a9e1c6a5d7be8e16f9385a04acce708fa0545045b2b4b4d550d288e1cfdae4efe1148489be56f929d3c18bd8ecac3bd41402d44ee51d00a7d30224c877a233bad4a73a704175165a1572a2801a42d2b8db0f5426aa144cb0a6f39a3eac72cfb5ac49b342beb8faae2c6c70909723d64349212a01ee7623ad80a2fc6f15fbb92147978ee5d8cf2e4e5fc190e2533461d6bfc3a6e00082eaf1a1eb699e4ea5f74a8d62f3aab6e38f819c50702349ab4183329fd117bfdc2cbe8dcd5048a79f8d147704fd62612fe8f20f31d1550bc5451fd4c6402b621f60ddaf98be638039e90cf45059b38bb0b6d07985fa2540443259bd789cf30f20edf40eb337fb9d44aa90eab1a27ceb7fd000b3419b60de5d87eb8d63adf6f5cdf1b0d8953a6d580c25a7732f090982c9fda18c7aa6726f8e141b68c85cff784684276fec0ecb121ee3c463fd50d1d4595159d06323f42e5d25e51e07e4a37c7f60e9683b57193cdcf5eb281d817d2297090a3f82ab0230e26f6212fd98d558479dcffd6fbea94089fc0e552953dc1faa651925fe595f047fd93294626bba251ba61aaf5a8948160fb3483c0b2a11605c84707bb7746cb20f3d75dfae71d0733cd48386212d2ca2524a6dc62f6bbe5948ccb9b3a777ba23b5e544d79ce2f6e4f5213c4e4b42b2143b675567829acebb93cdb6a71222b1ed57bb982b64340fc0791e6df00d60c8527aebae6ee0fff7f6d8a81405d99919839f7b871f3efd76facede3048a27f36855085987c89c5fe467ceead25b06f11a158931b74e7a65ae8d6741d7ade98f7557bf1ea02500f0dd7861fb5aaa1de892d7960fd64f0cbe35075b8add216e99825d70ae4e11f99753e89147c8f770fbe7e507419b3b96abb98e68b22a476476b2a4146a8369d774235bed5a9fd93ccfc4ded5463b5acf8f13a79fe02bb625b8c45636aeb67b6bfff1e28d65618f678cd0aa46b5a5abb726b23a40ef77ded7e2d26683f85822ddf726716d31841ab755101206f901b4f22dea9cb516302f0f4ab8d215c4736edb9ccb0a9778c78b89ac8c91cf07d2a266ea9564deaee19e6e0cd693f11a828dd58dd7a7e2f7f4f9f41b9246e6e9b19fd2f180f5c877865960139c6c55cb50a3a38dfe3b9f33521f4ec5432204c7b8c2674d32cc050ff5cdb659895aad6140c15312769493160a04f64d3941aa050a9192e43307c97e3da1dd416ecf46fd9fac0e44d7a9ea3f4a04497d323515ce4cbf57e8fff516443764fb278f271140951c346c090b4fae0f9dc15a046cad38b95a2a5034ab5a85b67ecd894686565f11143393536ce65c846ec21db7dcf2d4acf4091dc2eb2478880c1f55aa611c930d0f2eb6d826c12c62cc8a178a82fab9c3bd97f153c0b63d814902af836c262da1879a03e27e72811e2f5ea2d11c7882e3e072bfa10f6d8d114a5732c7483689b097909d5d4d97ea9e260fb32c3536c14554660f8ee2ee200b3416f3ebf45db3aaf15e5844516b70b602597323944fc9bbf2cf1eefc8b5f032bf4dacb75968800bba1d2e4c36e495b1f8748d5a1ec6e38fd1de6653c62a15f18c6abbb56dc21c7642b77c914fbae3e217913709adfbf1134cb8722cf6d9c489127a7f0f78fa126c48833b3475a92cbddea304c3d501c8190263a2fd93681db0ed456dd85e9d0e5dcdc6562fb65b81f1ccb4c7188d67d20e76ee8616d65c9856522e4e00ed3a3b4efe4c2f1e86dc6a1ba2c12749a71a9b669f10cfafa07d9aba77ee6a2d9

View File

@ -0,0 +1 @@
10004057abdb270178be89497b720cc1f92bbfb97b859729ab2d035bd671322187cd7dfc02b2dc0296e87f79dda9cce9a2be1ac5641c63cd96091e4eff40e407fb32415e61ece18e62aff30e0b632c03ce317f2b635a4552a22233f57d5b4867ad46e5672238405451f2bfdded3d23a3a68bf4afd10cedcf749a692d59afc233d2f3106a8d4dea6d9de7330dca36602e3633783aed00c74654f48c6a7a96ffc7d1f0b37215097089ee66b8ad19dce57b84f643abf616e7f441abc107b9e49fbe622b8735e394bba09d2b7094d22cc908567f57892cb08844c2bcf7dd4372cdac6460c30a2001e6083a0cf4f796ed21c946fe21b96e0dbf7683d7ecebae9e268cee8eb602b2b3c83e216ec125384b88dbc211776fc7ab97546a720338895e9bc4725097071b8681b51298cb94e69355ef546a14865a9723f892bb2310b3b2353105d68122e2d9e35bd48fdbee2a2975ab06c1d62b1a03a58fc23145a4d280e8758c0e91429c0b7f7f11a49a2b160f947aec4a49d6cd2c9e4107ebc18ef5936dc84019e134d0b412e3d020c7c2692a17c0b24e9cd2e1261268528a8b963f0e3d75c5ec758233aaed077eac719cff3054c23b4f24e27544b9f7bfd4fe78710363a128e5fa732d0f7dac5a03ea17cb49a78fd126c0896aacd079b026c8ae7f4295e933c143ce313c91439cb7129192dcd05831222f227d85cd35dc2eefb3f203e8fee8f8bb417efc6bdd96030b1637da1ee6d6f4ef783cbe5a04f45fcfec30cabb08578cbf15596984d7bcac36a7f35da2095cc6f88f1b1b3b062bc419a6f9346c73276807054a7e68eb308bbdc064706940475172a7d84f3590494a06dd549d64f1124ed04f9764f691f93e6ff2609d295ecbc3af70a00ac423daa67bcfaf0cc15161bf4c31bdd40e9a17bbafc5a0a72ce99fca7a46a4e07e34dde223cc447cff12c004e04638d9dbefeca9f79c4fc2266f502f6337357f801d39ea48e8c35873d36fba297f70b06e0ca5c6bed8383857a6ba0286bd7ad8af5acc02985b9c6b8aaada6d68af6c4531545fb401f7a48d5d743206f80ba924afccc1ce95c3c1b8b2eeebf8ebcd64ef86a8c297547b1309bbcdf6f1885ac67c208740c28b260cd41ab8d7bd5b4e49e0730e6b83ad1a47092fc3405a5e238849e738e16484230e8448eccf3f206412cdc6c5218755fa0c03360cd043d158d4c0a36c2b46c59a4fd721b6d6b54f38c20a29287b28a4f78c4297e229cbc6afd540c91addb89479e7ee728d22bd6956d1f390bf2daf8e5a47e97e37266e8a87e1748835bb054ad332892e145e56bb45d5f188a13e550d0a3b464d1d709e4526c75e4268889263d37ee0890837e3ab93975a1bc6e2f4322354e1b872b28f0b5139d5d77f3c2c57a2a69ff5aa48ad61a2b3c4e4c76b9c67e6d0e22e4f9eeb54076d56e033153ca8921f8739d79a93aceb7a408f3e6866435b1077ddf0c0864a42a99ce1cdb57676651d239c86602b1c2f456c7edb6584071221ef9ab31debcd8a59143be147fb9630d8115a11aa86616a8b0e3b38d8a1b23a9d8343cbed71bbfe0095ed9ab25c466c8fe71d2f1f68ba2af9198f3c2e1ef4a995893590f847fd962ded9b5eab058affd79c226d6d8339fa2c479ad7fc7b0400afa92ce8eb3bb60e992a162163596586c57d83bb6e69253dc3cdb442fcaa8b9e933cbae96eb371d70735c7ec1c7a12230385933164c288f8cd175bffb2abc9ed9919db301ddf4e9322802b3454b07a908b7d60b8fcd2

View File

@ -0,0 +1 @@
1000fdd238199916413bfccdd061b3f3b0ff7624aa55fff013b234b13a84f32ecf00f1a923529b241f91edac30abedff36accfa9050f48cc48aa8945ebb4a2bdd656384dd222f21d6c7b37c7b9c7f3d34bf04525c6142e4d558c7a3235ec3b2255121f20e489c8c945f9f13ca333027663cb59be7144fa9765428d0c33d10be3853c15aee814aefca264a503702bf5fec270767c00e7cbc1212d20e79a81ebab8e2f60be8fff0076445bb7c3d7ba2d1eedc8cb5b439c5fbdf783c50b432ef12db21fcc3fbb496be965a3d57c14e2d1aefd33d1c3a521151150be29ae765f0fa2ddcd6e8f819e56ff18be1df6e82fddd6e061f95454e3d6c111ec6dd7033dbcf5e96cb97ac65ccbdf2b89c7bca17183c9a1c0678368318f827488cc231ee7e3a590c813d947ff4e3b1792b360a7f21d14b9ca455f2d7bb8f51e8480a07751067416723b6baf0403ca4dad5726f87bcc9d9f2769bceccf56790aaa27104cd996295657d3f66291549b7ecc513f270de2ca7c12ecdd767aa8882769d30ccc8d3b995d9b81c3cf9fcfc148412f0f028da32ff1af96bbe2dea8fd2432f93e1df5efa3d147ad868e304a92c00aa0c1e74b070ebb79bd73c39411c54c5818e23d78b63706395485c59d2f8ad062916805d6d68621ed4482265f041329accfd2c3c123449c3db1086fa372308b8a0e1dda7c38f58c3c24e0f5be1a1806c011f57b4973a513cd3c802db06e9a1acef999534ceb90ff3567640943ca7cde3fb4430b5b786dd5ef93c02f7e9bab6fc9b8565dc3dcc01ea95a6138c2dd90aa3e53fd2d2b2344cc1bfd0ace38f552115ec7f32816f34f0de484ac2ea31c2e8e09739fa584f830a3d86e87350c427d06398f3d3fc43bbbc66692c52b299a2eed8db9be5aee865afd85deab85147397aecc5e32a8bce47bf29b3bbc6f73e41453699cdddabc0c74a9025801aa189f562418aa96dfa1a881c8a5529344b6fc8124694be530631b547c4045eb7e34759f7c89c3dc8f2c07db4c871d495e1c1c596b12cb68a09c57aa42d3a589508d1ee843a3d4b00f88ef8a90e388d6531fcbdf02b7fb2ee4720f5d94ee201eff9f40b792b0614600f4a06a8a69c3dc1fd8a5e78d82a64829062f90881b0c1e19e70424f213d4f60873c6c1094be894201bf6a4d1f6daa0c20f1bd2ae0208ce406807aeb9020d1ff3a1486b973b9c24517e5c3a64ebdb4cfd7651cb54c8e901e72da4b16f18b85e5dbde5f5d76a050fa44c4899fd223a5caf54282b83304363a991c76b1f8813065d9fff06aa3c604a061ff7d46c7866842e6e96d75ab09d07e088891c7e162ef716b684481215c3a6818f719cc9d6bcb378a7eecd9174e0c1d2b23f9aec8b2f80a99561eafdbcf8e7e74cfa3a39f778a7eafe9567e3f76ebc4cf6e2f644ba9ba584330a501a7ef545519a5ce24d57a220bb3cab13de82f487e5a90b72f002a0f8e59b10f6aff93c4de9075d2f7e1d4ef3b74fbd0e00a012d66645113898941fedf9d31f3829114cf1768e9726279fc7b8a496a8c57e6575e56ad3d7510c617ae97a6c23a0fb52ebe6097b1439e774e256e9669701d57bce859507326e6b1d26cddf0a1b1291d3a8a96f9691494b806c4f2bbeec6cd16545da0887ac8fdb0d0ea2111551a8e536154f11e6bdd53bf326e6b869d711392aad7909a949e5d08f95f0a835aa17ce41b1ed57ac73c66b5ea43c3c3498a4d3e3be5efe776c1302d3df110c04859bafcb281b40679b175f6e916a6364bb58852ebfe6010c4af547e44605d330c6e5c70d5f23657260716e922ff6720128102add90933eca57c8665d2f72c17db989af87bd4bd1287e37b8fbd2e13f088f5ab1c5ab8579c5c5e33ff7c6fc7f928ad4015f1a7c2ea0ed48f4bacea2a0e391515bbb114cfbc4c60efcdc10ae0b2848ad927b85c83eb89adfacdfcc1f08cec4d0769de8ed17f25bd632069d9e73cad23412f72f834bd2e2bbf529cfe3756003e7f702cb395d4b964bdd565cc4db3ecc5af6305f1eb095150fbd1b3fdec070b4be39c45141383c2e3883866d00a289da62965048dffc9b35d32eb9a744e83ae13ab0a80d4ee10eca0705d6ae8f716c98276b00efbf05acd8159c969d0a634ac3ba4a279569ea7904d98eae2a9a627b62624070dee51bb505660aaf69fee735aa5634194b425bec8f883e4e6ae1035fbeb7771128e0e1392aa19e8c3e872b23c097200cf379b0f50391752ad8d9721675d5a32f3b257ae46199a8540e142182fadbc76cb174e5d7070ab75fb021b7be32809bfa5b3967426eb96fdcd5291c11bff3b10032848938ec579a639e7308dde51375e983f4f64dc6eb0a2cf80dc4994444f0c4657fdb5c17a8ece1df0d5b471a5a4ce3dc059a879c7a55c9c78b9299a0e50420a2d0ad52168e99a9d6293fa220fb5bc80f7ca93a8a26b21693ba3927ce02793b

View File

@ -0,0 +1,11 @@
---
apiVersion: v1
kind: Secret
metadata:
name: {{ .Chart.Name }}-env
annotations:
"werf.io/sensitive": "true"
type: Opaque
stringData:
KC_BOOTSTRAP_ADMIN_PASSWORD: {{ dig .Values.werf.env .Values.keycloak.password._default .Values.keycloak.password | quote }}
KC_DB_PASSWORD: {{ dig .Values.werf.env .Values.postgres.password._default .Values.postgres.password | quote }}

View File

@ -0,0 +1,24 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Chart.Name }}-env
data:
KC_ADMIN: "admin"
KC_METRICS_ENABLED: {{ dig .Values.werf.env .Values.keycloak.metrics._default .Values.keycloak.metrics | quote }}
KC_HEALTH_ENABLED: {{ dig .Values.werf.env .Values.keycloak.health._default .Values.keycloak.health | quote }}
KC_HOSTNAME: "https://{{ dig .Values.werf.env .Values.keycloak.ingress.domain._default .Values.keycloak.ingress.domain }}"
KC_PROXY_ADDRESS_FORWARDING: "true"
KC_PROXY: "edge"
KC_DB: "postgres"
KC_DB_URL_HOST: "postgres"
KC_DB_URL_PORT: {{ .Values.postgres.port | quote }}
KC_DB_URL_DATABASE: {{ dig .Values.werf.env .Values.postgres.database._default .Values.postgres.database | quote }}
KC_DB_USERNAME: {{ dig .Values.werf.env .Values.postgres.user._default .Values.postgres.user | quote }}
KC_CACHE: "ispn"
KC_CACHE_STACK: "kubernetes"
KC_HTTP_ENABLED: "true"
KC_FRONTEND_URL: "https://{{ dig .Values.werf.env .Values.keycloak.ingress.domain._default .Values.keycloak.ingress.domain }}"
KC_PROXY_HEADERS: xforwarded
KEPTSTORE_URL: {{ dig .Values.werf.env .Values.keycloak.appUrl._default .Values.keycloak.appUrl | quote }}
KC_LOG_LEVEL: {{ dig .Values.werf.env .Values.keycloak.logLevel._default .Values.keycloak.logLevel | quote }}

View File

@ -0,0 +1,122 @@
{{- $pgDb := dig .Values.werf.env .Values.postgres.database._default .Values.postgres.database | quote }}
{{- $pgUser := dig .Values.werf.env .Values.postgres.user._default .Values.postgres.user | quote }}
{{- $pgPassword := dig .Values.werf.env .Values.postgres.password._default .Values.postgres.password | quote }}
{{- $pgStorageSize := dig .Values.werf.env .Values.postgres.storage.size._default .Values.postgres.storage.size | quote }}
{{- $pgStorageClass := dig .Values.werf.env .Values.postgres.storage.class._default .Values.postgres.storage.class | quote }}
{{- $nodeSelector := dig .Values.werf.env .Values.postgres.nodeSelector._default .Values.postgres.nodeSelector }}
{{- $tolerations := dig .Values.werf.env .Values.postgres.tolerations._default .Values.postgres.tolerations }}
---
apiVersion: v1
kind: Secret
metadata:
name: {{ .Chart.Name }}-postgres-env
annotations:
"werf.io/sensitive": "true"
werf.io/weight: "-31"
stringData:
POSTGRES_DB: {{ $pgDb }}
POSTGRES_USER: {{ $pgUser }}
POSTGRES_PASSWORD: {{ $pgPassword }}
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Chart.Name }}-postgres
labels:
app: {{ .Chart.Name }}-postgres
annotations:
werf.io/weight: "-30"
spec:
serviceName: postgres
replicas: 1
selector:
matchLabels:
app: {{ .Chart.Name }}-postgres
template:
metadata:
labels:
app: {{ .Chart.Name }}-postgres
spec:
{{- if $nodeSelector }}
nodeSelector: {{ toYaml $nodeSelector | nindent 8 }}
{{- end }}
{{- if $tolerations }}
tolerations: {{ toYaml $tolerations | nindent 6 }}
{{- end }}
imagePullSecrets:
- name: registrysecret
containers:
- name: master
image: {{ .Values.werf.image.postgresql }}
imagePullPolicy: IfNotPresent
resources: {{ dig .Values.werf.env .Values.postgres.resources._default .Values.postgres.resources | toYaml | nindent 10 }}
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
subPath: postgresql
- name: config
mountPath: /usr/share/postgresql/postgresql.conf.sample
subPath: postgresql.conf.sample
env:
- name: TZ
value: "Europe/Moscow"
envFrom:
- secretRef:
name: {{ .Chart.Name }}-postgres-env
readinessProbe:
tcpSocket:
port: {{ .Values.postgres.port }}
initialDelaySeconds: 5
timeoutSeconds: 1
livenessProbe:
tcpSocket:
port: {{ .Values.postgres.port }}
initialDelaySeconds: 30
periodSeconds: 5
volumes:
- name: config
configMap:
name: {{ .Chart.Name }}-postgres
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ $pgStorageSize }}
{{- if $pgStorageClass }}
storageClassName: {{ $pgStorageClass }}
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
clusterIP: None
selector:
app: {{ .Chart.Name }}-postgres
ports:
- name: {{ .Chart.Name }}-postgres
port: {{ .Values.postgres.port }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Chart.Name }}-postgres
annotations:
werf.io/weight: "-31"
data:
postgresql.conf.sample: |
listen_addresses = '*'
log_checkpoints = on
log_connections = off
log_disconnections = off
log_duration = on
log_line_prefix = '%m %p %u@%d from %h [vxid:%v txid:%x] [%i]'
log_lock_waits = on
log_statement = 'all'
log_temp_files = 0
log_timezone = 'UTC'

View File

@ -0,0 +1,106 @@
{{- $nodeSelector := dig .Values.werf.env .Values.keycloak.nodeSelector._default .Values.keycloak.nodeSelector }}
{{- $tolerations := dig .Values.werf.env .Values.keycloak.tolerations._default .Values.keycloak.tolerations }}
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Chart.Name }}
labels:
app: {{ .Chart.Name }}
spec:
replicas: {{ dig .Values.werf.env .Values.keycloak.replicaCount._default .Values.keycloak.replicaCount }}
serviceName: {{ .Chart.Name }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
annotations:
checksum/secret-env: {{ include (print $.Template.BasePath "/04-secret-envs.yaml") . | sha256sum }}
checksum/config-env: {{ include (print $.Template.BasePath "/05-cm-envs.yaml") . | sha256sum }}
spec:
{{- if $nodeSelector }}
nodeSelector: {{ toYaml $nodeSelector | nindent 8 }}
{{- end }}
{{- if $tolerations }}
tolerations: {{ toYaml $tolerations | nindent 6 }}
{{- end }}
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- {{ .Chart.Name }}
topologyKey: kubernetes.io/hostname
weight: 100
imagePullSecrets:
- name: registrysecret
serviceAccountName: {{ .Chart.Name }}-{{ .Values.werf.env }}
containers:
- name: keycloak
image: {{ .Values.werf.image.keycloak }}
command: [ "/bin/bash","-c","/opt/keycloak/bin/kc.sh start -Djgroups.dns.query={{ .Chart.Name }}-headless.{{ .Values.werf.namespace }}.svc.cluster.local --legacy-observability-interface=true"]
envFrom:
- secretRef:
name: {{ .Chart.Name }}-env
- configMapRef:
name: {{ .Chart.Name }}-env
ports:
- name: http
containerPort: 8080
- name: health
containerPort: 9000
startupProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
failureThreshold: 15
periodSeconds: 3
timeoutSeconds: 3
resources: {{ dig .Values.werf.env .Values.keycloak.resources._default .Values.keycloak.resources | toYaml | nindent 10 }}
securityContext:
allowPrivilegeEscalation: false
runAsUser: 0
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}
labels:
app: {{ .Chart.Name }}
spec:
ports:
- name: http
port: 8080
targetPort: 8080
- name: health
port: 9000
targetPort: 9000
selector:
app: {{ .Chart.Name }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-headless
spec:
type: ClusterIP
clusterIP: None
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
- name: health
port: 9000
targetPort: 9000
publishNotReadyAddresses: true
selector:
app: {{ .Chart.Name }}

View File

@ -0,0 +1,28 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Chart.Name }}-{{ .Values.werf.env }}
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ .Chart.Name }}-{{ .Values.werf.env }}
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ .Chart.Name }}-{{ .Values.werf.env }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ .Chart.Name }}-{{ .Values.werf.env }}
subjects:
- kind: ServiceAccount
name: {{ .Chart.Name }}-{{ .Values.werf.env }}
namespace: {{ .Release.Namespace }}

View File

@ -0,0 +1,42 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Chart.Name }}
annotations:
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/proxy-buffer-size: "8k"
nginx.ingress.kubernetes.io/session-cookie-expires: "86400"
nginx.ingress.kubernetes.io/session-cookie-max-age: "86400"
nginx.ingress.kubernetes.io/session-cookie-name: keycloak-cookie
nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
spec:
ingressClassName: {{ dig .Values.werf.env .Values.keycloak.ingress.classNames._default .Values.keycloak.ingress.classNames | quote }}
tls:
- hosts:
- {{ dig .Values.werf.env .Values.keycloak.ingress.domain._default .Values.keycloak.ingress.domain | quote }}
secretName: {{ dig .Values.werf.env .Values.keycloak.ingress.secretName._default .Values.keycloak.ingress.secretName | quote }}
rules:
- host: {{ dig .Values.werf.env .Values.keycloak.ingress.domain._default .Values.keycloak.ingress.domain | quote }}
http:
paths:
- backend:
service:
name: {{ .Chart.Name }}
port:
number: 8080
path: /
pathType: ImplementationSpecific
---
apiVersion: v1
kind: Secret
metadata:
name: {{ dig .Values.werf.env .Values.keycloak.ingress.secretName._default .Values.keycloak.ingress.secretName }}
annotations:
"werf.io/sensitive": "true"
type: kubernetes.io/tls
stringData:
tls.crt: |
{{- werf_secret_file (printf "%s/%s" .Values.werf.env "tls.crt") | nindent 4 }}
tls.key: |
{{- werf_secret_file (printf "%s/%s" .Values.werf.env "tls.key") | nindent 4 }}

80
.helm/values.yaml Normal file
View File

@ -0,0 +1,80 @@
keycloak:
health:
_default: true
metrics:
_default: true
appUrl:
_default: https://app.pro.lukoil.com
preprod: https://app.preprod.pro.lukoil.com
prod: https://app.prod.pro.lukoil.com
logLevel:
_default: INFO
preprod: INFO
prod: INFO
replicaCount:
_default: 1
nodeSelector:
_default:
node-role.deckhouse.io/worker: ""
tolerations:
_default: []
resources:
_default:
limits:
memory: 1024Mi
requests:
cpu: 125m
memory: 1024Mi
preprod:
limits:
memory: 2Gi
requests:
cpu: 125m
memory: 1024Mi
prod:
limits:
memory: 2Gi
requests:
cpu: 250m
memory: 1024Mi
ingress:
domain:
_default: keycloak.pro.lukoil.com
preprod: keycloak.preprod.pro.lukoil.com
prod: keycloak.prod.pro.lukoil.com
secretName:
_default: keycloak-tls
classNames:
_default: nginx
postgres:
port: "5432"
database:
_default: keycloak
user:
_default: keycloak
storage:
size:
_default: 15Gi
preprod: 10Gi
prod: 20Gi
class:
_default: local-storage-class-worker
resources:
_default:
requests:
cpu: 200m
memory: 1Gi
limits:
memory: 2Gi
nodeSelector:
_default:
node-role.deckhouse.io/worker: ""
tolerations:
_default: []

BIN
plugins/sms-v0.3.1.jar Normal file

Binary file not shown.

BIN
plugins/theme-v0.3.1.jar Normal file

Binary file not shown.

Binary file not shown.

4
werf-giterminism.yaml Normal file
View File

@ -0,0 +1,4 @@
giterminismConfigVersion: 1
config:
goTemplateRendering:
allowEnvVariables: []

17
werf.yaml Normal file
View File

@ -0,0 +1,17 @@
---
configVersion: 1
project: keycloak
deploy:
namespace: '[[ env ]]'
helmRelease: '[[ project ]]-[[ env ]]'
---
image: keycloak
from: registry.lukoil.ru:8123/external-pub/keycloak/keycloak:26.4.0
git:
- add: /plugins
to: /opt/keycloak/providers
owner: 1000
group: 0
---
image: postgresql
from: registry.lukoil.ru:8123/external-pub/library/postgres:16.10-alpine3.22