воскресенье, 26 сентября 2021 г.

terraform+aws, первые шаги

 Установка: если раньше надо было качать архивы и распаковывать, то уже (давно) есть фирменные репы, например 

https://www.terraform.io/docs/cli/install/apt.html

Дальше есть видео на офсайте

https://learn.hashicorp.com/tutorials/terraform/aws-build

В частности, надо поставить aws cli и получить Access Key (нужные линки под видео)

Дальше описываем provider и resource. При этом даже офдока создаёт путаницу, где описан в первом варианте единственный блок

module "ec2_instance" {

(под terraform >= 0.13.1)
Хотя если читать дальше, что это вроде как "наследовано" и классическая схема с resource работать будет ровно также.

После установки и запуска базового примера крайне советую смотреть лист от adv-it, там очень многое рассказано.


Далее, на одном из сайтов из топ-5 гугла есть такое описание ресурса
public_key = "${file("terraform-demo.pub")}"
но уже с 0.11 оно устарело:
Terraform 0.11 and earlier required all non-constant expressions to be
provided via interpolation syntax, but this pattern is now deprecated. To
silence this warning, remove the "${ sequence from the start and the }"
sequence from the end of this expression, leaving just the inner expression.

Вообще, если нашли какую-то доку и там проверили версию - смотрите чтобы было ну хотя бы 0.12, если меньше то относитесь к материалу скептически, оно могло устареть напрочь.

среда, 8 сентября 2021 г.

How to collect and manage all of your multi-line logs

https://www.datadoghq.com/blog/multiline-logging-guide/

Рассматривается в контексте elasticsearch, но применимо к любым обработчикам.

Вкратце: при выводе ошибки в несколько строк, их неудобно обрабатывать. Поэтому нужно или перейти на формат json, или применить "log shipper" -- парсеры, которые умеют склеивать сообщения в одно.

logstash, rsyslog, fluentd, syslog-ng, nxlog, datadog

 

понедельник, 6 сентября 2021 г.

Always Free oracle cloud

 Штатно оракл даёт 2 машины формата амазона t2.micro, а именно 2 машины по 1 ядру и 512 мб рам. А также - машины на базе арма с лимитом 4 ядра, 24 гиг рамы, то есть можно создать от 1 до 4 серверов (упираемся именно в ядра, потому что можно создать машину формата 1 ядро, 1 гиг рамы)

Но косяк в том, что услуга востребована и часто машин просто нет, поэтому надо изучать oracle CLI и регистрировать машины через крон.

https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm


Получаем бесплатные сервера в Oracle Cloud Free Tier

Oracle Cloud: PHP скрипт, когда сильно хочется бесплатный VPS 4 ядра ARM/24ГБ памяти

Создаём мини PHP SDK для подписи запросов к Oracle Cloud Infrastructure API

https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm

Oracle Cloud: бесплатный VPS 4 ядра ARM/24ГБ памяти: решаем проблему большого спроса (OCI CLI)

https://blogs.oracle.com/cloud-infrastructure/post/moving-to-ampere-a1-compute-instances-on-oracle-cloud-infrastructure-oci


суббота, 4 сентября 2021 г.

Сломанная ubuntu 20.04 (LTS)

https://serverfault.com/questions/1041031/nginx-sometimes-gets-killed-after-reloading-it-using-systemd

https://bugs.launchpad.net/ubuntu/+source/perl/+bug/1897561/

Короче, если ставим nginx-extras то ставится бажный перл

Быстрофикс: удаляем /etc/nginx/modules-enabled/50-mod-http-perl.conf

Проблема в том, что баге уже год, но "дебиан стабилен" (ubuntu - debian based), так что и в багах он тоже стабилен...

вторник, 31 августа 2021 г.

Дроп базы postgesql

Первым делом смотрим базы

\l

!!! и выбираем базу

\c our_database

Ну а теперь удаляем 

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
 

If you are using PostgreSQL 9.3 or greater, you may also need to restore the default grants.

GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;

https://stackoverflow.com/questions/3327312/how-can-i-drop-all-the-tables-in-a-postgresql-database/13823560#13823560

Если не выбрать базу - удалим вообще всю информацию...

Масштабируем / без LVM

 Взяли сервер в gcore, а там / оказался всего 3гб по умолчанию. Увеличили в панели до 10, а дальше -- всего 2 команды

growpart /dev/sda 1

resize2fs /dev/sda1

Всё, у нас в системе 10 гиг.

среда, 21 июля 2021 г.

ansible, vault, strings

 Есть удобная утилитка ansible-vault, но она шифрует сразу весь файл. Если это файл с переменными - удобнее когда шифрованы только значения ключей, в том числе при контроле гитом - любое изменение локализуется легко, в случае волта меняется весь файл.

Дешифрование строки

Вот с расшифровкой такого файла беда, ansible-vault уже не понимает что от него хотят (будет ERROR! input is not vault encrypted data. (file) is not a vault encrypted file for (file)), поэтому есть несколько вариантов посмотреть:

1) копируем строку после !vault в файл и далее ansible-vault view ...

2) через дешифровальную буку

   - hosts: localhost

     tasks:

       - debug:

           msg: "{{ secret_value }}"

3) через ansible -m debug, но оно работало до 2.8, там синтаксис будет такой

ansible localhost -m debug -a var="some_var" -e "@file.yml" --ask-vault-pass

Вместо ask можно использовать --vault-password-file (file)

Шифрование строки

А как же зашифровать эту строку?

ansible-vault encrypt_string --ask-vault-pass --stdin-name some_var

спросит два раза пароль волта. 

!!! Потом вводим значение и не нажимая энтер нажимаем два раза ctrl-d

вторник, 13 июля 2021 г.

postgres, расширенный вывод

 Иногда бывает нужно вывести записи как в mysql \G, тут для этого есть тоже команда

\x
select * from sometable;

Вариант 2, с переключением формата

select * from users \x\g\x

И третий, выводить всегда в расширенном виде, даже если уже сделано \x

select * from sometable \gx

https://serverfault.com/questions/34741/postgres-equivalent-to-mysqls-g

postgresql проверка репликации


I use following SQL queries to check status on Postgres v11 usually.

On master:

select * from pg_stat_replication;

On replica (streaming replication in my case):

select * from pg_stat_wal_receiver;
https://stackoverflow.com/questions/43388243/check-postgres-replication-status
И очень полезный совет
For vertical output replace ; with \x\g\x

Такой вот замороченный аналог mysql-ного \G

Ещё несколько запросов для слейвов
select pg_is_in_recovery();
select pg_last_xlog_receive_location();
select pg_last_xlog_replay_location();
SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location()
                  THEN 0
                ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
              END AS log_delay;



пятница, 9 июля 2021 г.

Работаем с логами

 Для начала, очень рекомендую познакомиться с journalctl, это весьма гибкая система, сделанная как замена syslog-у. Главные отличия - кольцевой буфер для логов, что с одной стороны значит "место не может кончиться от жирного лога", с другой - если нам нужны эти логи то нужны ещё сервисы по их извлечению, парсингу, хранению, ротации; а также вместо Local* работаем по именам сервисов

При этом есть и другие удобные плюшки, вида выдачи лога в нужном формате (-o json)

Если нужен вывод в syslog, есть штатные механизмы (но очень редко они сбоят)

Возможен смешанный режим работы, когда часть сервисов пишет в журнал, часть сразу в локальные файлы.

Очень годная статья по journalctl

https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs

По настройке связки

https://www.loggly.com/ultimate-guide/centralizing-with-syslog/

И теперь мы можем использовать journalbeat для выгрузки логов.

понедельник, 28 июня 2021 г.

Dell USB3.0 dock D3100 + ubuntu

 Вроде неплохой док, но его особенность - "из коробки" он работает по сути только как усб хаб + аудио, а вот видео порты не работают. Нужно качать драйвера, но на сайте dell их просто нет (точнее, там заявлена поддержка только windows). И гуглинг находит такой линк

http://www.displaylink.com/downloads/ubuntu

новая ссылка

https://www.synaptics.com/products/displaylink-graphics/downloads/ubuntu

суббота, 19 июня 2021 г.

CI/CD и .NET в докере

Есть несколько вариантов сборки

windows  based

Если открыть шаблоны гитлаб, там есть несколько вариантов под с шарп, но там в основе идут виндовые образы


linux based

mcr.microsoft.com/dotnet/core/sdk:3.1

! note

Bear in mind that since the release of .NET 5, the repository path changed to mcr.microsoft.com/dotnet/sdk:3.1. Here is a link to the rename anouncement: github.com/dotnet/dotnet-docker/issues/2375

при это стадии сборки будут такие

dotnet restore

dotnet build

dotnet publish

На самом деле, там чуть более сложный синтаксис, например для restore можно указать имя проекта, для publish - куда публиковать итог, -o ./publish/

и так далее.

Есть вариант с image: microsoft/dotnet:latest
но там есть какие-то нюансы с версиями

Чуть линков: 1 (кодероад помойка, но оригинал не нагуглился), 2, 3, 4, 5


versions in docker-compose

В начале docker-compose.yml всегда пишется версия компоуза, что когда появилось - нужно читать тут (матрица версий, полная дока). При этом может быть так, что пишем версию 3.9 - а докер что у нас установлен такой версии не знает, нужно снижать. Но снизив версию и больше не получая ошибок про указанную версию, можно получать ошибки про использование новых атрибутов. Например, убунта 18.04, докер и docker.io, вписываем версию 3.5-3.7 (выше ругается), но при этом ошибка (ниже в ошибки впишу)


Про ошибки

ERROR: Version in "./Docker/docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.

Снижаем версию или ищем как обновить инсталляцию

ERROR: The Compose file './Docker/docker-compose.yml' is invalid because:
networks.form_constructor value Additional properties are not allowed ('name' was unexpected)
То, что описано выше. При этом данный тэг заявлен в 3.5 и на неё валидатор не ругался.