35
Как приручить проектное окружение PHP User Group, Минск, Июнь’2014 Александр Курило, EPAM

Как приручить проектное окружение. PHP UG Minsk, июнь'2014

  • Upload
    kamazee

  • View
    120

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Как приручить

проектное окружениеPHP User Group, Минск, Июнь’2014

Александр Курило, EPAM

Page 2: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

«Приручить»?

Насколько окружение вам

подконтрольно?

Что будет, если сеть пропадет?

Что будет, если сервер исчезнет?

Что будет, если винчестер на рабочей

машине сдохнет?

Page 3: Как приручить проектное окружение. PHP UG Minsk, июнь'2014
Page 4: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Грустная история

Жил-был проект.

Жил-был сервер.

Всё было хорошо.

Пока не понадобился ещё один сервер.

Page 5: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Ещё один сервер?

2 часа!

Page 6: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

alex@workstation:~$ ssh root@newserver

Linux EVBYMINSD234A 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Tue Jun 17 14:39:08 2014 from workstation

root@newserver:~# apt-get install nginx-light php5-fpm php5-curl mysql-server

sudo

Reading package lists... Done

Building dependency tree

Reading state information... Done

sudo is already the newest version.

The following extra packages will be installed:

libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl

libmysqlclient18 libnet-daemon-perl libonig2 libplrpc-perl libqdbm14 mysql-

client-5.5 mysql-common mysql-server-5.5 mysql-server-core-5.5 nginx-common

php5-common

The following NEW packages will be installed:

libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl

libmysqlclient18 libnet-daemon-perl libonig2 libplrpc-perl libqdbm14 mysql-

client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5

nginx-common

nginx-light php5-common php5-curl php5-fpm

0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.

Need to get 13.7 MB of archives.

After this operation, 108 MB of additional disk space will be used.

Do you want to continue [Y/n]?

Page 7: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Поехали!

Page 8: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Приехали :(

PHP Fatal error:

Call to undefined function ldap_bind()

Page 9: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Тоже мне проблема

apt-get install php5-ldap

Page 10: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Поехали!

Page 11: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Бдыщь :(

PHP Fatal error:

Class 'SplEnum' not found

Class 'MarkdownDocument' not found

Page 12: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Что-то не так

Page 13: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Написать инструкцию?

Page 14: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Написать инструкцию?

Page 15: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Скрипт?

Page 16: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Скрипт?

Page 17: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Использовать мудрость поколений

Page 18: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Использовать мудрость поколений

Page 19: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Provisioning

«Подготовка к работе, инициализация»

Управление конфигурацией

Page 20: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Как это выглядит?

1. Playbook

$ cat ansible/env.yml

---

- hosts: all

roles:

- repo-mirror

- repo-update-cache

- packages-ansible

- repo-dotdeb

- packages-system-base

< … >

Page 21: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Как это выглядит?

2. Roles (tasks, handlers, files, templates, vars)

$ tree ansible/roles/repo-mirror

ansible/roles/repo-mirror

├── defaults

│ └── main.yml

├── handlers

│ ├── main.yml

│ └── update_cache.yml

├── tasks

│ └── main.yml

└── templates

└── etc

└── apt

└── sources.list.j2

$ cat ansible/roles/repo-mirror/tasks/main.yml

---

- name: Set sources.list

sudo: yes

template: src=etc/apt/sources.list.j2 dest=/etc/apt/sources.list

register: repo_mirror

- include: ../handlers/main.yml

when: repo_mirror.changed

Page 22: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Как это выглядит?

3. Inventory

$ cat ansible/inventory/dev

[api-dev]

myproject-api.dev api_hostname=myproject-api.example.org

Page 23: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Как это выглядит?

Всё вместе:

alex@workstation:~/projects/sample$ ansible-playbook -i qa env.yml

PLAY [all]

********************************************************************

GATHERING FACTS

***************************************************************

ok: [default]

TASK: [repo-mirror | Set sources.list]

****************************************

ok: [default]

TASK: [repo-mirror | Update apt cache]

****************************************

skipping: [default]

TASK: [repo-update-cache | Update apt cache]

**********************************

ok: [default]

Page 24: Как приручить проектное окружение. PHP UG Minsk, июнь'2014
Page 25: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

SSH? apt-get? Нет, спасибо

Поход по SSH на сервер и установка

пакетов вручную (и тем более сборка

из исходников) — антипаттерн!

Page 26: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Возпроизводимое окружение

Версионированное окружение

Состояние окружения синхронизировано с

состоянием проекта

Page 27: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Ещё один сервер?

10 минут!

Page 28: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

А можно так прямо у меня?

Конечно! Можно поднять виртуалку.

А если в команде больше одного

человека?

А если нужно проверить всё под новой

версией ОС?

Page 29: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Vagrant

$ vagrant up

Box — это готовая, минимально

конфигурируемая виртуалка. Свой box

сделать тоже несложно!

Page 30: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Немного магии

config.vm.provision "ansible" do |ansible|

ansible.playbook = "ansible/dev.yml"

ansible.groups = {

"dev" => ["default"],

}

end

$ ansible-playbook -i qa env.yml$ vagrant provision

Page 31: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Итого

У каждого разработчика свое окружение

Управляется двумя командами:

$ vagrant up

$ vagrant provision

QA, staging, production etc — под тем же

провиженингом

Page 32: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Переустановил винду?

10 минут!

Page 33: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Нет сети?

Пофиг

Page 34: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Поменял винду на мак?

10 минут

Page 35: Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Спасибо

Майклу Дехану за ansible

Митчеллу Хашимото за Vagrant

Вам за внимание :-)

kamazee

[email protected]