Использование 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. Проверим что машина была успешно создана:
SSL в docker nginx/proxy
SSL в docker nginx/proxy
Сегодня невозможно представить веб сервис без поддержки https. Если вы уже пользуетесь докером и поставили jwilder/nginx-proxy как реверс прокси то поддержка SSL у вас уже имеется. Для этого нужно всего лишь добавить пару новых переменных.
- Для начала поставьте себе 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
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
Что делает данный контейнер?
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
Дополнительно можно добавить шаг по запуску тестов перед сборкой контейнера.
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 проводит все базовые операции:
Уничтожить процесс в Postgres
Уничтожить процесс в Postgres
Эффективный метод если вы запустили какую-то долгую и неправильную транзакцию или изменение таблицы и хотите откатиться быстренько назад.
Для этого для начала получим PID процесса:
SELECT * FROM `pg_stat_activity` WHERE `state` = 'active';
В списке нужно будет найти вашу транзакцию, которую хотите отменить и записать её PID.
Теперь отменим процесс:
Bitcoind демон в докере
Bitcoind демон в докере
С появлением докера необходимость в различных установочных скриптов и инструкций сошла на нет. Теперь для того, чтобы поднять свою биткойн ноду достаточно написать пару команд ну и конечно запустить докер хост.
Для запуска нам нужно сделать два действия:
- Создать volume, где будем хранить наши данные (блокчейн цепочки):
docker volume create --name=bitcoind-data
- Запустить сам 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.
Скрипт бекапа для 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 "===> Initializing wizzy ..."
echo -e ${NO_COLOR}
wizzy init
echo -e ${WARN_COLOR}
echo "===> 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 "===> Importing dashboards ..."
echo -e ${NO_COLOR}
wizzy import dashboards
echo -e ${WARN_COLOR}
echo "===> 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 "===> Done ..."
echo -e ${NO_COLOR}
Предварительно сделать:
Установка 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 порт
Управление криптокошельками через единый интерфейс
Управление криптокошельками через единый интерфейс
Успешно разработано и внедрено новое решение по управлению различными криптовалютами для обменных пунктов.
В поставку решения входит удобная панель управления на основе моей открытой разработки yii2-altcoind, а также скрипты для развертывания различных нод и демонов для криптовалют.
После внедрения вы можете легко делать различные операции с вашими криптовалютами: