Находится в стадии разработки.
You can select different roles for you servers (Nginx, Apache, uwsgi, MySQL, PostgreSQL) and list with websites. Примеры в репозитории.
Установите Ansible на ваш рабочий компьютер (на сервер не нужно) из репозитория:
sudo apt-get install ansible
Если не устраивает версия Ansible, можно подключить ppa:ansible/ansible или ppa:ansible/ansible-1.9.
Настройте ~/.ssh/config
, чтобы был доступ к серверу просто по команде ssh имя_сервера
, например:
Host srv01.example.com
Port 2222
User myuser
Копируем к себе весь код, если ещё не сделали это ранее:
git clone "https://gitlab.com/vazhnov/ansible_webserver.git"
Создание учётных записей с паролями не поддерживается, используйте SSH ключи и беспарольный sudo.
- Создайте файл
group_vars/all/users.yml
приблизительно такого содержания:
# File: group_vars/all/users.yml
---
users:
john_scott:
comment: 'John Scott'
groups: 'adm,sudo,no_passwd_sudo'
first_last:
comment: 'First Last'
groups: 'adm,sudo,no_passwd_sudo'
- Создайте для пользователей директории вида:
roles/user_access/files/replace_files/john_scott
, файлы из них будут заменять файлы на удалённых хостах при каждом применении конфигурации Ansible. - В директориях для файлов пользователей положите файлы
.ssh/authorized_keys
с публичными ключами SSH. - Создайте для пользователей директории вида:
roles/user_access/files/first_files/john_scott
, файлы из них будут скопированы на удалённый хост, только если там ещё нет такого. Удобно, например, хранить.vimrc
,.config/mc/hotlist
и т.п.
- В файл
inventory/production/static
запишите имена серверов (лучше использовать FQDN). Одна строка = один сервер. - В
host_vars
создайте папку с именем сервера; - В ней создайте .yml файл со списком ролей для сервера, пример в host_vars/srv01.example.com/roles.yml.
- в
host_vars/имя_сервера/
создайте .yml файл со спискомall_websites
. Пример есть в host_vars/srv01.example.com/all_websites.yml.
В первый раз, чтобы установить Python:
ansible-playbook -i inventory/production pre_install.yml --limit=srv01.example.com
Если для sudo нужен пароль, добавьте опцию --ask-sudo-pass
.
Применяем роли:
ansible-playbook -i inventory/production websites_roles.yml --limit=srv01.example.com
state
— absent/present, по умолчанию present, в случае если будет выбран absent, то удалятся symlink'и на конфигурации и сервисам будет отправлен сигнал reload;
Опции:
no_passwd_sudo
— если No/False, то файл/etc/sudoers.d/no_passwd_sudo
не будет скопирован (по умолчанию = Yes);
Опции:
template
— имя шаблона из roles/nginx/templates/;root_options
— список;limit_req
— bool, default = Yes;limit_req_size
— default = 2m;limit_req_rate
— default = 3r/s;limit_req_burst
— default = 10;
Опции:
template
— имя шаблона из roles/apache/templates/;php_admin_value
— список;
Опции:
backup_path
— если задан, то при создании БД для сайта, будет загружен дамп с локальной машины;
Опции:
backup_path
— если задан, то при создании БД для сайта, будет загружен дамп с локальной машины;password
— пароль на MySQL;
Опции:
requirements_file
— список пакетов pip;
В каждой роли можно добавить задачи с именем сервера, либо с версией ОС, используется «with_first_found»:
"name_{{ inventory_hostname }}.yml"
"os_{{ ansible_distribution }}_{{ ansible_distribution_version }}.yml"
"os_{{ ansible_distribution }}_{{ ansible_distribution_major_version }}.yml"
"os_{{ ansible_distribution }}.yml"
empty.yml
Свои шаблоны в ролях рекомендуется называть my_*, так они будут автоматически попадать под правила gitignore.
git ls-files --ignored --exclude-standard
— посмотреть список игнорируемых файлов;ansible -i inventory/production srv01.example.com -m raw -a "sudo apt-get install -y python-minimal"
— установить Python2;
apt_proxy: "http://example.com:3142"
— если задана, будет создан файл/etc/apt/apt.conf.d/000apt-cacher-ng-proxy
;ntp_list
— если задана, будет сформирован файл/etc/ntp.conf
с указанным списком серверов;
- Создание учётных записей с паролями не поддерживается, используйте SSH ключи и беспарольный sudo;
- Одна учётная запись пользователя = один web-сайт;
- For first server configuring and restoring websites from backups, not for everyday updating packeges in pip
Весь контент этого репозитория распространяется под свободной лицензией MIT.