ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ основному содСрТимому

πŸ—οΈ Π‘Π΅ΠΊΡ€Π΅Ρ‚Ρ‹ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈΠ· консоли β€” большоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ tuna secrets

Β· 4 ΠΌΠΈΠ½. чтСния

Π”ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сСкрСты Π² консоли ΡƒΠΌΠ΅Π»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ: ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния. Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” завСсти сСкрСт, ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ β€” ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅.

Π’ tuna-cli 0.35 tuna secrets стал ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ инструмСнтом: сСкрСтами, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, окруТСниями ΠΈ сСрвисными ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π° Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² скриптах ΠΈ CI.

Π Π°Π±ΠΎΡ‚Π° с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСкрСтами​

Появились ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для чтСния ΠΈ записи сСкрСтов ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ:

tuna secrets list # список, значСния скрыты
tuna secrets get API_TOKEN DB_URL # значСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… сСкрСтов
tuna secrets set API_ENABLED=true --type boolean
openssl rand -hex 32 | tuna secrets set API_TOKEN
tuna secrets delete OLD_KEY
tuna secrets upload .env # Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

set ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΈΠ· stdin ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ β€” Ρ‚Π°ΠΊ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ шСлла Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ лишнСго. МоТно Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ значСния, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π²Π΅Π±-интСрфСйсС. upload дополняСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈΠ· .env ΠΈΠ»ΠΈ .json, Π½Π΅ трогая ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ сСкрСты.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ окруТСния, Π½Π΅ раскрывая значСний​

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… вмСсто значСния сСкрСта Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пСчатаСтся Π΅Π³ΠΎ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ β€” hmac:cea41705. ΠžΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ значСния Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ, Π° Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° нСльзя.

Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос Β«Π° Π² stage ΠΈ prod Ρ‚ΠΎΡ‡Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΊ Π±Π°Π·Π΅?Β», Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ раскрывая, ΠΈ спокойно ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π»ΠΎΠ³ΠΈ CI:

НастоящиС значСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ list --values ΠΈ get.

Новый Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ β€” ΠΎΠ΄Π½Π° команда​

ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ рСпозитория Ρ„Π°ΠΉΠ» tuna.yaml:

tuna.yaml
setup:
- project: api-php
config: dev

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ tuna secrets setup β€” ΠΈ tuna secrets run -- yarn start запустит ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСкрСтами. Для монорСпозитория ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько привязок, ΠΊΠ°ΠΆΠ΄ΡƒΡŽ со своим ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ.

Π‘Π΅ΠΊΡ€Π΅Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π½ΠΎ Π±Π΅Π· Ρ„Π°ΠΉΠ»Π° Π½Π° дискС​

НСкоторыС прилоТСния Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. РаньшС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ сСкрСты Ρ‡Π΅Ρ€Π΅Π· download ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ΠΏΠΎΡ‚ΠΎΠΌ Π½Π°Π΄ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. Π€Π»Π°Π³ --mount Ρ€Π΅ΡˆΠ°Π΅Ρ‚ это ΠΈΠ½Π°Ρ‡Π΅: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ создаёт ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» (named pipe) ΠΈ ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ сСкрСты Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ β€” env, json, yaml ΠΈΠ»ΠΈ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. ЗначСния ΠΆΠΈΠ²ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² памяти ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ„Π°ΠΉΠ»Π° с сСкрСтами Π½Π° дискС Π½Π΅ появляСтся, Π° послС Π²Ρ‹Ρ…ΠΎΠ΄Π° процСсса ΠΊΠ°Π½Π°Π» удаляСтся.

tuna secrets run --mount ./secrets.json --mount-format json -- ./app --config ./secrets.json

Π‘ --mount-max-reads 1 ΠΊΠ°Π½Π°Π» исчСзаСт сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈ стартС.

Π Π°Π±ΠΎΡ‚Π° Π±Π΅Π· сСти​

tuna secrets run сохраняСт послСдниС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ сСкрСты Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ, Ссли API нСдоступСн, β€” ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ встанСт ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡΠ΅Ρ‚ΡŒΡŽ. Если ΠΆΠ΅ сСрвСр ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ доступ ΠΎΡ‚ΠΎΠ·Π²Π°Π½ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ большС Π½Π΅Ρ‚, копия удаляСтся: ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ сСкрСты послС ΠΎΡ‚Π·Ρ‹Π²Π° доступа опаснСС, Ρ‡Π΅ΠΌ остановка прилоТСния.

Π‘ --offline ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ обращаСтся ΠΊ API:

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ конфигов​

tuna secrets substitute Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ Ρ„Π°ΠΉΠ»-шаблон со значСниями сСкрСтов. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² со своим Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ β€” nginx.conf, application.yml, .ini β€” ΠΈ для манифСстов Kubernetes:

tuna secrets substitute config.tmpl --output config.ini
tuna secrets substitute deployment.tmpl | kubectl apply -f -

ΠžΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° Π² ΠΈΠΌΠ΅Π½ΠΈ сСкрСта β€” ошибка с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ мСста Π² шаблонС, Π° Π½Π΅ молчаливая пустая строка Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅.

Π£Π΄ΠΎΠ±Π½ΠΎ Π² скриптах ΠΈ CI​

Π’Ρ‹Π²ΠΎΠ΄ всСх ΠΊΠΎΠΌΠ°Π½Π΄ tuna secrets ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½ с расчётом Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ:

  • Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ Π² stdout, статус ΠΈ ошибки β€” Π² stderr, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ°ΠΉΠΏ;
  • -o json ΠΈ -o yaml Π΅ΡΡ‚ΡŒ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ записи, Π° ошибки Π² этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠΆΠ΅ приходят JSON'ΠΎΠΌ;
  • get --plain ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π³ΠΎΠ»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для подстановки: docker login -p "$(tuna secrets get REGISTRY_PASSWORD --plain)";
  • tuna secrets run Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса, поэтому ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ прямо Π² CI-Π΄ΠΆΠΎΠ±Ρƒ.

Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для GitLab CI ΠΈ GitHub Actions Π΅ΡΡ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ структурой​

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, окруТСния, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ сСрвисныС ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ· консоли:

tuna secrets projects create "API PHP" --slug api-php
tuna secrets environments create Staging --slug stage --project api-php
tuna secrets configs clone stage --name stage-feature-x --project api-php
tuna secrets configs tokens create --description ci --access read --max-age 720h --project api-php --config stage

tuna secrets open ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² Π²Π΅Π±-интСрфСйсС β€” ΠΊΠΎΠ³Π΄Π° всё-Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚.

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ обновлСнии​

  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ сСкрСтов, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΎΡ‚Π·Ρ‹Π² сСрвисных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ с tuna-cli 0.36 ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’ CI ΠΈ скриптах Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π»Π°Π³ --yes, ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой.
  • Если Π²Ρ‹ Ρ€Π°Π·Π±ΠΈΡ€Π°Π»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ tuna secrets Π² скриптах, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΡ…: строки Π»ΠΎΠ³Π° Π²ΠΈΠ΄Π° INFO[...] Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, Π° для машинного Ρ€Π°Π·Π±ΠΎΡ€Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ -o json.

ПолноС описаниС ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Ρ„Π»Π°Π³ΠΎΠ² β€” Π½Π° страницС Π Π°Π±ΠΎΡ‚Π° Π² CLI. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ инструкции.

ΠžΡΡ‚Π°Π²ΡŒΡ‚Π΅ отзыв​

Если Π²Π°ΠΌ нравится ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Tuna, ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π²Ρ‹ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹ Ρ‡Π΅ΠΌ Π»ΠΈΠ±ΠΎ, Ρ‚ΠΎ поТалуйста ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΎΡ‚Π·Ρ‹Π².

ΠŸΠΎΠΌΠΎΡ‰ΡŒβ€‹

ΠœΡ‹ Ρ†Π΅Π½ΠΈΠΌ Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π΅ΠΌ всС обращСния, Ссли Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с tuna – ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов: