Архив автора: admin

GPing (Graphical Ping): классная утилита CLI для системных администраторов.

GPing (Graphical Ping): классная утилита CLI для системных администраторов.

GPing (Graphical Ping): классная утилита CLI для системных администраторов.

В предыдущем посте мы говорили о графическое приложение называть терминатор, который является надежный терминал идеально подходит для Опытные пользователи, как и многие другие существующие и рассмотренные здесь. Поэтому, чтобы обеспечить преемственность в этой области приложений или передовых инструментов для идеального использования IT-профессионалы в качестве Сисадмины и DevOps о GNU/Linux мы поговорим о «GPing».

Gping или графический Ping это полезный инструмент, идеально подходящий для использования в области администрирования серверов, поскольку он может генерировать подробный визуальный график при генерации пинга более чем одному хосту (компьютеру) одновременно в течение заданного периода времени.



Читать

Terminator: полезный эмулятор терминала для продвинутых пользователей.

 

Terminator: полезный эмулятор терминала для продвинутых пользователей.

Terminator: полезный эмулятор терминала для продвинутых пользователей.

Продолжая обновление содержания старых статей, сегодня настала очередь приложения «Терминатор». Это приложение, которое мы уже называли 10 лет назад с полным основанием, король терминалов.

Лично я начал использовать его около 10 лет назад, когда работал Сисадмин в организации, чьи серверная платформа он был на 100% основан на Linux. Поэтому, зная факты, я могу утверждать, что это отличное приложение, чтобы попробовать и использовать, если вы постоянно используете терминалы для различных действий.

Читать

docker-compose — hashicorp vault

Hashicop Vault будем ставить в docker-compose




ставим docker:




yum remove docker docker-engine docker.io
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager —add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker




ставим docker-compose




https://github.com/docker/compose/releases
на текущий момент самая последняя версия:
2,6,1





https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64




выкачиваем её:




curl -L «https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64» -o /usr/local/bin/docker-compose




chmod +x /usr/local/bin/docker-compose




всё готово.




теперь приступим к установке  Vault




cat docker-compose.yml




version: '3.8'



services:



  vault:

    build:

      context: ./vault

      dockerfile: Dockerfile

    ports:

      - 8200:8200

    volumes:

      - ./vault/config:/vault/config

      - ./vault/policies:/vault/policies

      - ./vault/data:/vault/data

      - ./vault/logs:/vault/logs

    environment:

      - VAULT_ADDR=http://127.0.0.1:8200

      - VAULT_API_ADDR=http://127.0.0.1:8200

    command: server -config=/vault/config/vault-config.json

    cap_add:

      - IPC_LOCK

    depends_on:

      - consul



  consul:

    build:

      context: ./consul

      dockerfile: Dockerfile

    ports:

      - 8500:8500

    command: agent -server -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect 1 -config-file=/consul/config/config.json

    volumes:

      - ./consul/config/consul-config.json:/consul/config/config.json

      - ./consul/data:/consul/data



  consul-worker:

    build:

      context: ./consul

      dockerfile: Dockerfile

    command: agent -server -join consul -config-file=/consul/config/config.json

    volumes:

      - ./consul/config/consul-config.json:/consul/config/config.json

    depends_on:

      - consul





cat consul/Dockerfile




# base image

FROM alpine:3.14



# set consul version

ENV CONSUL_VERSION 1.10.2



# create a new directory

RUN mkdir /consul



# download dependencies

RUN apk --no-cache add 

      bash 

      ca-certificates 

      wget



# download and set up consul

RUN wget --quiet --output-document=/tmp/consul.zip https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip && 

    unzip /tmp/consul.zip -d /consul && 

    rm -f /tmp/consul.zip && 

    chmod +x /consul/consul



# update PATH

ENV PATH="PATH=$PATH:$PWD/consul"



# add the config file

COPY ./config/consul-config.json /consul/config/config.json



# expose ports

EXPOSE 8300 8400 8500 8600



# run consul

ENTRYPOINT ["consul"]





cat consul/config/consul-config.json




{

  "datacenter": "localhost",

  "data_dir": "/consul/data",

  "log_level": "DEBUG",

  "server": true,

  "ui": true,

  "ports": {

    "dns": 53

  }

}





mkdir consul/data/




cat vault/Dockerfile




# base image

FROM alpine:3.14



# set vault version

ENV VAULT_VERSION 1.11.2



# create a new directory

RUN mkdir /vault



# download dependencies

RUN apk --no-cache add 

      bash 

      ca-certificates 

      wget



# download and set up vault

RUN wget --quiet --output-document=/tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip && 

    unzip /tmp/vault.zip -d /vault && 

    rm -f /tmp/vault.zip && 

    chmod +x /vault



# update PATH

ENV PATH="PATH=$PATH:$PWD/vault"



# add the config file

COPY ./config/vault-config.json /vault/config/vault-config.json



# expose port 8200

EXPOSE 8200



# run vault

ENTRYPOINT ["vault"]





cat vault/config/vault-config.json




{

  "backend": {

    "consul": {

      "address": "consul:8500",

      "path": "vault/"

    }

  },

  "listener": {

    "tcp":{

      "address": "0.0.0.0:8200",

      "tls_disable": 1

    }

  },

  "ui": true

}





mkdir vault/data/
mkdir vault/logs/




cat vault/policies/app-policy.json




{

  "path": {

    "kv/data/app/*": {

      "policy": "read"

    }

  }

}





запускаем:




docker-compose up -d




ждём пока соберётся.
потом заходим в Vault:




http://192.168.1.170:8200





ставим
Key shares = 5
Key threshold = 3
но вы можете установить любое другое значение




мы получаем 5 ключей.





внизу справа можно скачать json




{

  "keys": [

    "22b07e26d89c620dc68cab7a7e5046d8a807390fe55a477d091f9178bc8339af3c",

    "140b672e0b9fdfae320d80a023261be6a72c019fd85f19f58a29eb1fccd82f26f2",

    "6cec6d35d5f2250e4e007f1a8d88f252f725751d3383d1d0dff8aabc0e1738e16b",

    "17752ae8096c64efe213bc63eccb496a87c8525ad24c0597ecab386adbfc8c86b5",

    "e23fc4247807c314d1590dcb706e131218ae7fdf8b6d6959d208d9398c5ec2168e"

  ],

  "keys_base64": [

    "IrB+JticYg3GjKt6flBG2KgHOQ/lWkd9CR+ReLyDOa88",

    "FAtnLguf364yDYCgIyYb5qcsAZ/YXxn1iinrH8zYLyby",

    "bOxtNdXyJQ5OAH8ajYjyUvcldR0zg9HQ3/iqvA4XOOFr",

    "F3Uq6AlsZO/iE7xj7MtJaofIUlrSTAWX7Ks4atv8jIa1",

    "4j/EJHgHwxTRWQ3LcG4TEhiuf9+LbWlZ0gjZOYxewhaO"

  ],

  "root_token": "s.Rw5WixMGCf84xZD1nHhndj3K"

}




далее нужно ввести ключи по очереди:






далее выбираем рутовый токен который мы скачали вместе с ключами:





мы так же можем выбрать и другие методы:





но мы остановимся на токене




всё ок.
попадаем в панель:





проверим Consul




http://192.168.1.170:8500/





==========================================




добавим аутентификацию по логину и паролю:










ну всё готово. пользователь есть теперь зададим политику.





идём на офф сайт
https://www.vaultproject.io/docs/concepts/policies
или смотрим в default возможные варианты настройки




вставляем политику:




path "secret/*" {

  capabilities = ["create", "read", "update", "patch", "delete", "list"]

}





всё можно создавать секрет












Источник: https://sidmid.ru/docker-compose-hashicorp-vault/



2022-12-02T00:26:07
DevOps

Непрерывное развертывание с помощью GitLab и Kubernetes

Если у вас есть веб-приложение с соответствующим файлом Dockerfile, теперь вы можете перейти к следующему шагу и использовать GitLab для автоматического развертывания вашего приложения в кластере kubernetes. Вот как…




Для этого поста в блоге вам понадобится:




  • ваш исходный код и файл Dockerfile размещены в проекте GitLab



  • бегун GitLab с исполнителем docker-in-docker



  • доступ к кластеру kubernetes




Процесс на самом деле состоит из 2 этапов:




  1. создайте образ Docker и перейдите во встроенный реестр Docker в GitLab



  2. используйте kubectl apply для развертывания новой версии







1. Сборка




Если ваш Dockerfile готов, создание образа — это просто вопрос запуска docker build ...и docker push .... Однако есть еще несколько хитростей:







Итак, ваш .gitlab-ci.yml должен выглядеть так:




stages:
  - test
  - build
  - deploy

build:
  stage: build
  # this job requires docker-in-docker
  tags:
    - dind
  image: docker:19.03.12
  services:
    - docker:19.03.12-dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker build --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA --tag $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest




После завершения этапа сборки ваше изображение должно появиться в реестре контейнеров GitLab:







2. Развертывание




Чтобы выполнить развертывание, мы должны добавить задание развертывания, которое







Но сначала мы должны обеспечить, чтобы:







a. Доступ GitLab к kubernetes




Чтобы предоставить GitLab доступ к вашему кластеру kubernetes, используйте kubectl для создания учетной записи службы (SA):




kubectl create sa gitlab




В настоящее время этой учетной записи разрешен вход в систему, но у нее нет абсолютно никаких других прав. Это довольно бесполезно! Итак, мы должны определить роль, например, в файле с именем role-deployer.yaml:




kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: deployer
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["services", "deployments", "replicasets", "pods", "configmap"]
  verbs: ["*"]




В этом примере роль называется deployer и определяется в пространстве имен по умолчанию. Очевидно, что вы должны адаптироваться к своим настройкам.




To apply this configuration:




kubectl apply -f role-deployer.yaml




Now we have to bind this role to our gitlab account, using another file called rolebinding-gitlab-deployer.yaml:




kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: gitlab-deployer
  namespace: default
subjects:
- kind: User
  name: system:serviceaccount:default:gitlab
  apiGroup: ""
roleRef:
  kind: Role
  name: deployer
  apiGroup: ""




And once again we apply the configuration:




kubectl apply -f rolebinding-gitlab-deployer.yaml







Now we have to extract the token that kubernetes created for the gitlab account:




kubectl get sa gitlab -o yaml
kubectl get secret gitlab-token-??? -o yaml | grep token:







Наконец, в GitLab мы определяем 2 переменные вSettings > CI / CD / Variables:










б. Доступ Kubernetes к GitLab




Чтобы разрешить доступ из Kubernetes к реестру GitLab, перейдите Personal menu > Settings > Access Tokensи создайте токен личного доступа с областью apiдействия .







Then, back on kubernetes, use kubectl to create a PullSecret called gitlab-token:




kubectl create secret docker-registry gitlab-token 
  --docker-server=<gitlab.server:port>
  --docker-username=<gitlab-token-name> 
  --docker-password=<gitlab-token>




c. deploy job




We can add the deploy job to .gitlab-ci.yml:




deploy:
  stage: deploy
  image: cylab/kubectl
  before_script:
    # create the configuration (context) for our kubernetes cluster
    - kubectl config set-cluster deploy-cluster --server="$K8S_SERVER" --insecure-skip-tls-verify
    - kubectl config set-credentials gitlab --token=$(echo $K8S_TOKEN | base64 -d)
    - kubectl config set-context deploy-cluster --cluster=deploy-cluster --namespace=default --user=gitlab
    - kubectl config use-context deploy-cluster
  script:
    - envsubst < deploy.tmpl > deploy.yaml
    - kubectl apply -f deploy.yaml




Как вы можете видеть:







Вот пример deploy.tmpl, который вы, очевидно, должны настроить для своего приложения. Он содержит один контейнер и 4 реплики, он использует gitlab-token PullSecret и имеет службу NodePort для предоставления приложения:




apiVersion: v1
kind: Service
metadata:
  name: hello-svc
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30001
    protocol: TCP
  selector:
    app: hello-app

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deploy
spec:
  replicas: 4
  selector:
    matchLabels:
      app: hello-app
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-pod
        image: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: gitlab-token




Наконец-то




Если все пойдет хорошо, при следующем нажатии на ваш репозиторий GitLab:













Источник: https://cylab.be/blog/112/continuous-deployment-with-gitlab-and-kubernetes



Знакомство с LibreOffice Tutorial 08: Введение в LO Base

Знакомство с LibreOffice Tutorial 08: Введение в LO Base

Знакомство с LibreOffice Tutorial 08: Введение в LO Base

Продолжаем серию статей о Знакомство с LibreOffice, сегодня мы проведем этот восьмой и последний год, сосредоточив внимание на приложении, известном как «База LibreOffice». Для этого закройте этот первый цикл постов, посвященных подробному знанию, немного больше о каждом компоненте Офисный пакет LibreOffice.

Кроме того, как многие уже знают, База LibreOffice приложение, созданное для Менеджер базы данных (администратор) Того же самого. И поэтому идеал для создавать, проектировать и управлять различными типами баз данных, стиль Доступ MS Office. Итак, далее мы увидим, что предлагает эта версия с точки зрения графического интерфейса и технических характеристик.



Читать

Форматы дат в программировании

Форматы дат являются одной из наиболее часто используемых функций при написании кода на любом языке программирования. Дата и время не одинаковы во всех регионах мира; например, если у вас вторник, страны на другом конце света будут в понедельник или среду. Из-за огромных различий в часовых поясах программисты включают функции даты в свои программы для представления данных в локальном часовом поясе компьютера.

Формат даты, в котором данные записываются на компьютер, с другой стороны, обычно неорганизован и сложен для понимания, поэтому существуют форматы дат.

 

Что такое форматы дат?

С технической точки зрения формат даты — это формат, в котором дата, месяц и год даты представлены в определенном формате, таком как ‘dd/mm/yy’ или ‘yy/dd/mm’. Разные системы и языки программирования имеют разные форматы.

Каждый язык программирования имеет свой набор функций для отображения дат в определенном формате.

Давайте рассмотрим различные функции форматирования даты, доступные на различных языках программирования.

 

Формат даты PHP

Функция date() в PHP представляет дату в определенном формате. Синтаксис форматирование даты php выглядит следующим образом:

Синтаксис

date(format, timestamp)

 

Здесь,

  • Формат относится к указанному формату, в котором будет представлена дата.
  • Временная метка — это необязательный параметр, в котором вы можете указать временную метку, в которой должны быть представлены время и дата. Если функция не используется, она вернет текущую дату.

Теперь давайте рассмотрим параметры форматирования, которые можно добавить в функцию для отображения дат в различных форматах,

  • d относится к дате месяца, которая будет представлена двумя цифрами (01 или 31).
  • D относится к дню недели, который будет представлен в сокращенных текстах (Mon по Sun).
  • m относится к месяцу, который будет представлен цифрами (01 или 12).
  • M относится к месяцу, который будет представлен в сокращенных текстах (January по December).
  • y относится к году, который будет представлен двумя последними цифрами (20 или 21)
  • Y относится к году, который будет представлен четырьмя цифрами (2020 или 2021)

 

Пример:

<?php

  echo "Текущая дата в разных форматах:" . "n";

  echo date("d/m/Y") . "n";

  echo date("d-m-Y") . "n";

  echo date("d.m.Y") . "n";

  echo date("d.M.Y/D");

?>

 

Вывод:

Текущая дата в разных форматах:

21/06/2022

21-06-2022

21.06.2022

21.Jun.2022/Tue

 

 

Формат даты Javascript

В Javascript функция new date() представляет дату. Синтаксис выглядит следующим образом,

Синтаксис:

new Date();

new Date(value);

new Date(dateString);

 

Здесь,

  • Значение относится к количеству миллисекунд, прошедших с 1 января 1970 года, 00:00:00 UTC.
  • Строка даты указывает на формат даты, в котором вы хотите представить дату.

Дата в Javascript может быть отформатирована с помощью следующих способов,

  • Дата ICO

“2022-06-22” (международный стандарт)

  • Короткая дата

“06/22/2022”

  • Длинная дата

“Jun 22 2022” or “22 Jun 2022”

 

Пример:

<script>

var A = new Date('June 22, 2022');



document.write(A);

</script>

Вывод:

Wed Jun 22, 2022, 00:00:00 GMT+0200 (Central European Summer Time)

 

Формат даты SQL

В SQL функция FORMAT возвращает текущие данные в разных заданных форматах. Синтаксис выглядит следующим образом,

Синтаксис:

FORMAT (value,format[,culture])

GO

 

Здесь,

  • В разделе значение используется функция getdate() для получения даты из столбца date.
  • В разделе формат указаны параметры того, как должна быть представлена дата.
  • Культура используется для представления даты в местной культурной среде.

Вот список параметров, используемых для представления данных в определенной настройке,

  • dd, относится к дню месяца, представленному в числовых значениях. (01-31)
  • dddd, относится к текущему дню, представленному в тексте. (Monday – Wednesday)
  • ММ, относится к месяцу, представленному в цифрах. (01-12)
  • МММ, относится к названию месяца, представленному в аббревиатуре. (Jan – Dec)
  • ММММ, относится к названию месяца, представленному в тексте. (January – December)
  • yy, относится к году, представленному двумя последними цифрами. (21 или 22)
  • гггг, относится к году, представленному четырьмя цифрами. (2021 или 2022)

 

Пример:

SELECT FORMAT (getdate(), 'dd-MM-yy') as date

GO

Вывод:

22-06-22

 

Формат даты Java

В Java в классе LocalDate метод now() отображает текущую дату.

Для форматирования даты импортируется класс DateTimeFormatter, а метод ofPattern() отображает дату в определенном формате.

 

Пример:

public class Time {

  public static void main(String[] args) {

    LocalDateTime currentDate = LocalDateTime.now();

    System.out.println("Формат даты перед форматированием: " + currentDate);

    DateTimeFormatter newDateFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy");



    String dateFormatted = currentDate.format(newDateFormat);

    System.out.println("Формат даты после форматирования: " + dateFormatted);

  }

Вывод:

Формат даты перед форматированием: 2022-06-21T14:41:01.242164

Формат даты после форматирования: 21-06-2022

Вот список параметров, используемых для представления данных в определенной настройке,

  • G, относится к эпохе. (AD)
  • y, относится к году, представленному четырьмя цифрами. (2022)
  • M, относится к текущему месяцу. (June или 06)
  • d, относится к текущей дате. (01-31)
  • E, относится к дню в неделю. (Tuesday)

 

Формат даты на Python

Метод strftime() используется в Python для форматирования даты. Синтаксис выглядит следующим образом,

Синтаксис:

time.strftime(format)

 

Здесь,

Формат относится к формату, в котором будет представлена дата.

Вот краткое изложение параметров, которые будут использоваться для представления данных в определенном формате,

  • %Y, относится к году, представленному четырьмя цифрами. (2021)
  • %y, относится к году, представленному двумя последними цифрами. (21)
  • %m относится к месяцу, представленному двумя цифрами. (01-12)
  • %B, относится к месяцу, представленному в тексте. (January по December)
  • %b относится к месяцу, представленному в сокращенной форме. (Jan по Dec)
  • %A относится к дням недели, представленным в тексте. (Monday по Sunday)
  • %a относится к дням недели, представленным в краткой форме. (Mon по Sun)
  • %w относится к дням недели, представленным в цифрах. (0-6)
  • %d, относится к дате, представленной в цифрах.(01-31)

 

Пример:

from datetime import datetime

  

time = datetime.now()

print("Без форматирования: ", time)

  

print("После форматирования: ", time.strftime("%b %d, %Y"))

Вывод:

Без форматирования: 2022-06-21 14:57:29.616289

После форматирования: Jun 21, 2022

 

Заключение

Используя функцию форматирования даты, программисты могут легко изменить то, как они хотят, чтобы дата была представлена в их проектах. С упомянутыми форматами дат попробуйте изменить форматы даты в своих программах.



2022-12-01T16:20:29
Программирование