Latest Posts

Использование Docker swarm в DigitalOcean

Использование Docker swarm в DigitalOcean

Приведу простой пример использования swarm режима докера в DigitalOcean. Для раблоты нам потребуется сам docker, docker-machine, аккаунт с ключом в DigitalOcean и немного терпения.

1. Создадим новый дроплет и установим докер:

docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name

2. Проверим что машина была успешно создана:

Read more

SSL в docker nginx/proxy

SSL в docker nginx/proxy

Сегодня невозможно представить веб сервис без поддержки https. Если вы уже пользуетесь докером и поставили jwilder/nginx-proxy как реверс прокси то поддержка SSL у вас уже имеется. Для этого нужно всего лишь добавить пару новых переменных.

  1. Для начала поставьте себе jrcs/letsencrypt-nginx-proxy-companion:
    docker run -d \
        -v /some-path/volumes/certs:/etc/nginx/certs:rw \
        -v /var/run/docker.sock:/var/run/docker.sock:ro \
        --volumes-from entry-nginx \
        jrcs/letsencrypt-nginx-proxy-companion

    —volumes-from entry-nginx — где entry-nginx имя вашего докер контейнера jwilder/nginx-proxy

    Read more

Nginx reverse proxy для docker контейнеров

Nginx reverse proxy для docker контейнеров

Для размещения нескольких докер контейнеров на одной машине которые будут доступны на 80 порту (т.е для веба) нам необходимо воспользоваться каким-то обратным прокси, который будет в зависимости от запроса возвращать ответы с различных контейнеров.

Удобнее всего воспользоваться контейнером jwilder/nginx-proxy:

docker run -d -p 80:80 \
    -e DEFAULT_HOST=sassoft.ru \
    --name entry-nginx \
    -v /etc/nginx/vhost.d \
    -v /usr/share/nginx/html \
    -v /var/run/docker.sock:/tmp/docker.sock:ro \
    jwilder/nginx-proxy

Что делает данный контейнер?

Read more

Gitlab CI docker deployment

Gitlab CI docker deployment

После достижения лимитов на билды в Bitbucket Pipelines (напомню бесплатный аккаунт дает 50 минут в месяц) единственной нормальной альтернативой стал выглядеть Gitlab.

После просмотра документации и множества различных рецептов созрел следующий элегантный pipeline:

variables:
  CONTAINER_IMAGE: registry.gitlab.com/username/project
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2

stages:
  - build
  - deploy

build:
  stage: build
  image: docker:stable
  services:
    - docker:dind
  script:
  - ./docker/build.sh

deploy:
  image: username/yourimage
  when: manual
  stage: deploy
  only:
    - master
  script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan $TARGET_HOST >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - ./docker/deploy.sh

Дополнительно можно добавить шаг по запуску тестов перед сборкой контейнера.

Read more

Yii2 bitbucket-pipelines docker deployment

Yii2 bitbucket-pipelines docker deployment

После долгих экспериментов остановился на следующем yml файле для bitbucket pipelines CI:

image: sassoftinc/base # base image contains php 7.1

pipelines:
  default:
    - step:
        name: Unit tests & Build
        caches:
          - composer
          - docker
        script:
          - composer install
          - php yii migrate --interactive=0
          - mysql -h 127.0.0.1 -u user --password=some_password db < config/dev.sql #loading fixtures
          - vendor/bin/codecept run
          - ./docker/build.sh # start building docker image
        services:
          - db
          - docker
    - step:
        name: Deploy to staging
        deployment: staging
        trigger: manual
        script:
          - ./docker/deploy.sh # your deployment script, could be also done via ansible
    - step:
        name: Deploy to live
        deployment: live
        trigger: manual
        script:
          - ./docker/deploy.sh # your deployment script, could be also done via ansible

definitions:
  services:
    db:
      image: mysql:5.7.22
      environment:
        MYSQL_DATABASE: 'db'
        MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
        MYSQL_USER: 'user'
        MYSQL_PASSWORD: 'password'

CI проводит все базовые операции:

Read more

Уничтожить процесс в Postgres

Уничтожить процесс в Postgres

Эффективный метод если вы запустили какую-то долгую и неправильную транзакцию или изменение таблицы и хотите откатиться быстренько назад.
Для этого для начала получим PID процесса:

SELECT * FROM `pg_stat_activity` WHERE `state` = 'active';

В списке нужно будет найти вашу транзакцию, которую хотите отменить и записать её PID.

Теперь отменим процесс:

Read more

Bitcoind демон в докере

Bitcoind демон в докере

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

Для запуска нам нужно сделать два действия:

  1. Создать volume, где будем хранить наши данные (блокчейн цепочки):
    docker volume create --name=bitcoind-data
  2. Запустить сам docker image:
    docker run -v bitcoind-data:/bitcoin --name=bitcoind-node -d \
         -p 8333:8333 \
         -p 127.0.0.1:8332:8332 \
         kylemanna/bitcoind

    Смените порты 8333 и 8332 на свои значения.
    Пример работы JSON-RPC для bitcoind.

    Read more

Скрипт бекапа для Grafana dasboards

Скрипт бекапа для Grafana dasboards

Написал простой скрипт для автоматизации бекапов дашбоардов из графаны:

#!/bin/bash

WARN_COLOR='\x1b[33;01m'
NO_COLOR='\x1b[0m'
OK_COLOR='\x1b[32;01m'

set -e

echo -e ${WARN_COLOR}
echo "===&gt; Initializing wizzy ..."
echo -e ${NO_COLOR}

wizzy init

echo -e ${WARN_COLOR}
echo "===&gt; Setting environment variables ..."
echo -e ${NO_COLOR}

wizzy set grafana url ${GRAFANA_URL}
wizzy set grafana username ${GRAFANA_USERNAME}
wizzy set grafana password ${GRAFANA_PASSWORD}

echo -e ${WARN_COLOR}
echo "===&gt; Importing dashboards ..."
echo -e ${NO_COLOR}

wizzy import dashboards

echo -e ${WARN_COLOR}
echo "===&gt; Uploading to S3 ..."
echo -e ${NO_COLOR}

now=$(date +"%m_%d_%Y")

wizzy set s3 bucket_name ${S3_BUCKET}
wizzy set s3 path ${now}_
wizzy upload to-s3 dashboards

echo -e ${OK_COLOR}
echo "===&gt; Done ..."
echo -e ${NO_COLOR}

Предварительно сделать:

Read more

Установка grafana+statsd+graphite при помощи Docker

Установка grafana+statsd+graphite при помощи Docker

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

Достаточно запустить следующую команду у себя на сервере (предварительно установив Docker):

docker run -d -p 80:80 -p 8125:8125/udp -p 8126:8126 -p 81:81 -p 2003:2003 --name grafana kamon/grafana_graphite

80 порт — веб морда графаны
8125 — stastd порт
8126 — административный порт для statsd
81 — graphite веб морда
2003 — graphite data порт

Read more

Управление криптокошельками через единый интерфейс

Управление криптокошельками через единый интерфейс

Успешно разработано и внедрено новое решение по управлению различными криптовалютами для обменных пунктов.
В поставку решения входит удобная панель управления на основе моей открытой разработки yii2-altcoind, а также скрипты для развертывания различных нод и демонов для криптовалют.

После внедрения вы можете легко делать различные операции с вашими криптовалютами:

Read more