Инструкция по установке ПО ЁДиск
Общие требования к аппаратному обеспечению
Для установки ПО «ЁДиск» потребуется:
  1. Wildcard-домен (т.н. домен с подстановочными знаками)
  2. Wildcard SSL для защиты всей группы доменов
  3. Серверные мощности, определяемые исходя из предполагаемых нагрузок.
Разворачивание ПО
Настройка доступа для пользователя ЁДиск
Формирование SSH-ключа:
Пример команды создания пользователя от root (замените ***PUBLIC-KEY*** сгенерированным ключом):
useradd ЁДиск && mkdir ~ЁДиск/.ssh && echo 'ssh-rsa ***PUBLIC-KEY***' > ~ЁДиск/.ssh/authorized_keys && chown ЁДиск:ЁДиск -R ~ЁДиск/.ssh && chmod 700 ~ЁДиск/.ssh/ && chmod 600 ~ЁДиск/.ssh/authorized_keys && sed -i -e 's/^Defaults *requiretty/#Defaults requiretty/' /etc/sudoers && echo 'ЁДиск ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
Настройка NTP
Пример:
sudo timedatectl set-ntp true
sudo timedatectl status
Установка Docker
Для примера мы будем использовать CE 18.09.0. Для более подробной установки обратитесь к официальному руководству: https://docs.docker.com/engine/install/
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager \
	--add-repo \
	https://download.docker.com/linux/debian/docker-ce.repo
sudo yum makecache fast
sudo yum install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
Установка Docker-Compose
Для примера мы будем использовать версию 1.9.0 с библиотеками Python:
sudo yum install -y python2-pip
sudo pip install 'docker-compose==1.9.0'
Настройка служебных виртуальных машин
Добавить пользователя ЁДиск в группу Docker.
usermod -a -G docker ЁДиск
Далее необходимо подготовить конфигурационные файлы и скопировать их в папку /home/ЁДиск/.
Пользователь ЁДиск с ~/.ssh/id_rsa должен иметь доступ ко всем виртуальным машинам.
hosts - inventory file
Пример:
backend2
backend3


[notifications]
backend1
backend2
backend3


[frontends]
backend1
backend2


[admins]
backend1
backend2


[mongodb-cfg]
backend1    mongodb_cfg_hostname=mongodb-cfg1
backend2    mongodb_cfg_hostname=mongodb-cfg2
backend3    mongodb_cfg_hostname=mongodb-cfg3


[mongodb-sh]
backend1    mongodb_hostname=mongodb-sh1-1 rs_name=sh1
backend2    mongodb_hostname=mongodb-sh1-2 rs_name=sh1
backend3    mongodb_hostname=mongodb-sh1-3 rs_name=sh1


[rabbitmq]
backend1
backend2
backend3


[webdavs]
backend1
backend2
backend3


[zipstreams]
backend1
backend2
backend3


[mongobackup]


[zabbix-agents]
backend1
backend2
backend3
frontend1
frontend2


[zookeepers]
backend1    zoo_my_id=1
backend2    zoo_my_id=2
backend3    zoo_my_id=3


[solrs]
backend1    solr_hostname=solr1
backend2    solr_hostname=solr2


[vrrp]
Более подробно про inventory file можно почитать в официальном руководстве Ansible:  https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
variables - variables file
Пример:
rabbitmq_user: mountbit
rabbitmq_pass: ***rabbitmq_pass***
rabbitmq_vhost: mountbit
rabbitmq_erlang_cookie: ***rabbitmq_erlang_cookie***


restart_policy: unless-stopped


zabbix_server_host: zabbix
zabbix_agent_port: 10051


uwsgi_harakiri_time: 120
backend_mem_limit: 4g


rabbitmq_zabbix_username: zabbix
rabbitmq_zabbix_password: ***rabbitmq_zabbix_password***


use_webdav: True
use_zipstream: True


use_elk: True
elk_address: ***IP-адрес***
elk_port: 20515


backend_extra_hosts: []


rabbitmq_image: "{{ registry }}/rabbitmq:3.6.15-management"
mongodb_image: "{{ registry }}/mongo:{{ mongodb_version }}"
zookeeper_image: "{{ registry }}/zookeeper"
solr_image: "{{ registry }}/solr"


zabbix_release: 3.4.*
clx.pem – wildcard-сертификат для домена
Формат: cert+CA_chain+key
Установка Deployer
Установка производится на сервисную
docker login ***АДРЕС СЕРВИСА НА БАЗЕ ЁДИСК***:443
docker pull ***АДРЕС СЕРВИСА НА БАЗЕ ЁДИСК***:443/cjhc/clx-deployer
Установка MongoDB и RabbitMQ
Запуск Deployer в режиме init на сервисной виртуальной машине от пользователя Ёдиск
docker run --rm -it   -v $(pwd)/hosts:/etc/ansible/hosts -v $(pwd)/variables:/etc/ansible/variables -v $(pwd)/clx.pem:/etc/ansible/clx.pem -v $(pwd)/mountbit.yaml.tmpl:/etc/ansible/mountbit.yaml.tmpl -v ~/.ssh/id_rsa:/etc/ansible/id_rsa  ***АДРЕС СЕРВИСА НА БАЗЕ ЁДИСК***:443/cjhc/clx-deployer	-e ansible_ssh_private_key_file=/etc/ansible/id_rsa [hosts]
backend1   	 ansible_host=***IP-адрес*** clx_ip=***IP-адрес*** ansible_user=ЁДиск ansible_become=true
backend2   	 ansible_host=***IP-адрес*** clx_ip=***IP-адрес*** ansible_user=ЁДиск ansible_become=true
backend3   	 ansible_host=***IP-адрес*** clx_ip=***IP-адрес*** ansible_user=ЁДиск ansible_become=true
frontend1            	ansible_host=***IP-адрес*** clx_ip=***IP-адрес***  ansible_user=ЁДиск ansible_become=true
frontend2            	ansible_host=***IP-адрес*** clx_ip=***IP-адрес***  ansible_user=ЁДиск ansible_become=true


[balancers]
frontend1
frontend2


[backends]
backend1
--tags='init'
Установка MongoDB
На первом узле кластера MongoDB выполняется следующая команда:
docker exec -ti clx_mongo-sh_1 mongo
    rs.initiate()
    rs.add("mongodb-sh1-2")
    rs.add("mongodb-sh1-3")
    rs.status()

На каждом следующем узле:

docker exec -ti clx_mongo_1 mongo
    sh.addShard( "sh1/mongodb-sh1-1:27017" )
    sh.status()
Установка RabbitMQ
На втором и третьем узлах RabbitMQ узлов необходимо выполнить команду:

docker exec -ti clx_rabbitmq_1 /bin/bash
    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@rabbitmq-backend1
    rabbitmqctl start_app


    #check
    rabbitmqctl cluster_status

На каждом RabbitMQ узле (необходимо заменить ---password--- на пароль пользователя mountbit)
docker exec -ti clx_rabbitmq_1 /bin/bash
    rabbitmqctl add_vhost mountbit
    rabbitmqctl add_user mountbit ---password---
    rabbitmqctl set_permissions -p mountbit mountbit '.*' '.*' '.*'


    rabbitmqctl set_policy -p mountbit ha-all "^.*$" '{"ha-mode":"all", "ha-sync-mode": "automatic"}'

[root@hcpvdrap01 ~]# docker exec -ti clx_rabbitmq_1 /bin/bash
root@rabbitmq-backend1:/# rabbitmqctl add_vhost mountbit
Creating vhost "mountbit"
root@rabbitmq-backend1:/# rabbitmqctl add_user mountbit ---password---
Creating user "mountbit"
root@rabbitmq-backend1:/# rabbitmqctl set_permissions -p mountbit mountbit '.*' '.*' '.*'
Setting permissions for user "mountbit" in vhost "mountbit"
root@rabbitmq-backend1:/# rabbitmqctl set_policy -p mountbit ha-all "^.*$" '{"ha-mode":"all", "ha-sync-mode": "automatic"}'
Setting policy "ha-all" for pattern "^.*$" to "{\"ha-mode\":\"all\", \"ha-sync-mode\": \"automatic\"}" with priority "0"
Установка ПО Ёдиск
На сервисной виртуальной машине от пользователя Ёдиск выполнить команду
docker run --rm -it   -v $(pwd)/hosts:/etc/ansible/hosts -v $(pwd)/variables:/etc/ansible/variables -v $(pwd)/clx.pem:/etc/ansible/clx.pem -v $(pwd)/mountbit.yaml.tmpl:/etc/ansible/mountbit.yaml.tmpl -v ~/.ssh/id_rsa:/etc/ansible/id_rsa  ***АДРЕС СЕРВИСА НА БАЗЕ ЁДИСК***:443/cjhc/clx-deployer	-e ansible_ssh_private_key_file=/etc/ansible/id_rsa
MongoBackup
Следующие операции выполняются на любом узле бэкенда

Создать скрипт /root/mongobackup.sh
#!/bin/bash


set -e


ls -c /var/backups/mongodb/*.tar.gz | tail -n +15 | xargs -r rm
rm -rf /var/backups/mongodb/dump/ && mkdir -p /var/backups/mongodb/dump/


docker run --rm --name mongobackup --network="clx_default" -v /var/backups/mongodb/:/var/backups/mongodb/ mongo:2.6 mongodump -h mongo --out /var/backups/mongodb/dump/ 2>&1 > /var/backups/mongodb/dump/dump.log || cat /var/backups/mongodb/dump/dump.log
cd /
tar zcf /var/backups/mongodb/mongodb_dump_`date +%F_%T`.tar.gz /var/backups/mongodb/dump/
Запустить скрипт командой:
chmod +x /root/mongobackup.sh
mkdir -p /var/backups/mongodb
Создать конфигурационнй файл crontab /etc/cron.d/mongobackup
05 01 * * * root    /root/mongobackup.sh