Использование Sendgrid в Yii2
Использование Sendgrid в Yii2
Sendgrid — очень удобный сервис по отправке транзакционных писем с обширной аналитикой и отчетами по доставленным письмам. Сервис также очень удобен для обхода спам фильтров ваших писем, используя Sendgrid вы можете быть уверены что письмо будет доставлено и прочитано адресатом.
Хотя API очень прост и удобен, мы все же воспользуемся готовым расширением wadeshuler/yii2-sendgrid
Множество процессов в bash скрипте
Множество процессов в bash скрипте
Пример скрипта ниже позволяет создавать множество процессов внутри одного bash скрипта, показывать код возврата и выводить логи вывода после завершения задачи:
#!/usr/bin/env bash
# Do smth
for job in 1 2 3; do
echo "Starting job #${job}"
echo "Job done" > $job.log 2>&1 &
done
echo "Waiting for job results..."
FAIL=0
for job in $(jobs -p)
do
wait "$job" || (( FAIL++ ))
echo "Job PID #${job} finished with code: $?"
done
for job in 1 2 3; do
echo -e "\\n ======== Results for job #${job} ========"
cat $job.log
done
if [ "$FAIL" != "0" ];
then
exit 1
fi
Скрипт мониторинга криптовалютных бирж
Скрипт мониторинга криптовалютных бирж
Разработана и внедрена система мониторинга различных криптовалютных пар на следующих биржах:
- Poloniex
- Bitfinex
- Binance
- Wex
- Kucoin
- Okex
- Bithumb
- Bittrex
- Bitstamp
- Kraken
- Gemini
- Huobi
Что входит в поставку?
В поставку входит обработчик-демон, который опрашивает настроенные биржи и торговые пары каждую минуту и обновляет внутреннее хранилище курсов.
Уведомление происходит при наступлении определенного сигнала: максимум — минимум цены за определенный промежуток времени. Для этого отдельный скрипт делает запрос на callback url вашего обработчика с данными по сигналу, чтобы ваш скрипт мог обработать данный сигнал.
Скрипт проверки Stellar платежей
Скрипт проверки Stellar платежей
Разработан и оттестирован скрипт для проверки и проведения платежей через систему Stellar.
Скрипт работает с официальным horizon сервером Stellar, для работы необходим действующий активированный адрес.
Также имеется возможность использовать облачное решение для уведомлений по платежам через дружественный сервис coincallback.com
По вопросам по поставке и внедрению обращаться через раздел контакты
Использование 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.
Теперь отменим процесс: