среда, 11 ноября 2015 г.

vzctl - операции с OpenVZ-контейнером (VE)

Создание/Удаление

Создание окружения из шаблона:
vzctl create ${ID} --ostemplate ${OS}
vzctl create ${ID} --ostemplate ${OS} --config ${CONF}
Установка основных параметров
vzctl set ${ID} --onboot yes --nameserver ${NS} --hostname ${HOSTNAME} --save
Выставляем пароль рута:
vzctl set {ID} --userpasswd root:новыйпароль 
Запуск
vzctl start ${ID}
Если вы находитесь в Private Area VE (root@ubuntu:/vz/private/101#) или открыт какой либо файл, может выдать ошибку
vzquota : (error) quota check : getcwd: No such file or directory
vzquota init failed [1]
Вход в окружение
vzctl enter ${ID}
Остановка
vzctl stop ${ID}
Рестарт
vzctl restart {ID}
Удаление (сначало нужно остановить ВМ)
vzctl destroy {ID}

Установка сети

Добавить ip адрес для venet интерфейса в ВМ OpenVZ wiki
vzctl set {ID} --ipadd 192.168.0.55 --save
Удаление всех ip адресов для ВМ
vzctl set {ID} --ipdel all --save
Добавить интерфейс eth0 в ВМ OpenVZ wiki
vzctl set {ID} --netif_add eth0 --save
Удаление всех сетевых интерфейсов
vzctl set {ID} --netif_del all --save

Настройка квот

Оперативная память

privvmpages - объем памяти выделеное:максимальное
vzctl set {ID} --privvmpages 512M:512M --save
nano /etc/vz/conf/111.conf 
PRIVVMpagES="131072:131072"
В конфигурационном файле объем памяти указан в страницах по 4кБ
(131 072 * 4) / 1 024 = 512 МБ

Дисковое пространство

Установка выделеное:максимальное
vzctl set {ID} --diskspace 10G:10G --save
Количество inodes
vzctl set 777 --diskinodes 300000:320000 --save
Выставляем квоты для пользователей, групп внутри нашего VDS: (очень надо если на этом VDS еще и хостинг будет делаться. Потому как панели управления хостингом без этого ругаются)
vzctl set 103 --quotaugidlimit 200 --save

Процессорное время

cpuunits : распределение соотношения процессорного времени между СТ
от 50 до 50000
vzctl set ${ID} --cpuunits 1000 --save
Например: установим для 3х СТ параметры 1000, 2000 и 3000. Тогда 3ий СТ получит половину процессорного времени.
1000 + 2000 + 3000 = 6000
1000/6000-1/6 или 16% ; 2000/6000-1/3 или 34%; 3000/6000-1/2 или 50%
cpulimit : абсолютный максимум процессорного времени в процентах
от 10 до 100 для одноядерного ЦПУ и можно указывать >100 для многоядерного (при значении 100% будет занято время только одного ядра)
vzctl set ${ID} --cpulimit 20 --save
Поддержка cpulimit только (или пока только) в stable версии 2.6.18

Собственный хостинг репозиториев с помощью GitLab

Забрал отсюда, спасибо авторам


Техническая справка

Git — распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux. Git используют такие проекты, как Chromium, jQuery, PHP, MediaWiki и прочие. Программа является свободной и выпущена под лицензией GNU GPL версии 2.
Статья о Git на Википедии
GitLab существует как в виде SAAS — веб-сайта с открытой регистрацией, так и в качестве индивидуального решения — GitLab Community Edition, которое можно установить на свой сервер и настроить под собственные нужды. Процесс установки достаточно долгий и требует root-доступа к серверу. Для стабильной работы GitLab требует от сервера как минимум двухъядерный процессор и 2 Гб ОЗУ. Такая конфигурация обеспечит быструю работу приложения и поддержку до 500 пользователей. GitLab поддерживает множество различных дистрибутивов Linux, но инструкция по установке расчитана на Debian/Ubuntu.

Установка

Установку можно разбить на несколько этапов:
  • установка необходимых системных утилит
  • установка Ruby
  • создание пользователя для SSH-подключений к GitLab
  • установка и настройка GitLab Shell
  • установка и настройка базы данных
  • установка и настройка самого GitLab
  • установка и настройка Nginx
Список внушительный, однако подавляющее большинство этапов состоят исключительно из консольных команд и занимают считаные секунды. Тем более, что какие-то из компонентов из списка выше на большинстве серверов уже установлены и им требуется лишь незначительная конфигурация. Итак, приступим.

Установка необходимых системных утилит

Для установки и настройки всех компонент, необходимых для работы GitLab, нам понадобятся: утилита sudo, набор библиотек для компиляции Ruby, актуальная версия Git и почтовый сервер.
Перед установкой каких-либо пакетов через утилиту apt-get, следует обновить список источников и существущие пакеты, выполнив в консоли такие команды:
apt-get update -y
apt-get upgrade -y
Здесь и далее команды нужно выполнять от имени пользователя root.
Первой в списке необходимых компонент идет утилита sudo. Она установлена на большинстве эксплуатируемых серверов. Но если вдруг ваш сервер совсем чист и непорочен, для ее установки необходимо выполнить в консоли следущую команду:
apt-get install sudo -y
Теперь установим библиотеки для компиляции Ruby:
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate
Убедитесь, что на сервере установлен git, и его версия не ниже 1.7.10:
sudo apt-get install -y git-core
git --version
Если установлена устаревшая версия, нужно удалить ее:
sudo apt-get remove git-core
Если git не установлен либо был удален предыдущей командой, нужно скачать и скомпилировать его:
# Устанавливаем библиотеки, необходимые для компиляции
sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential

# Загружаем и компилируем исходники
cd /tmp
curl --progress https://git-core.googlecode.com/files/git-1.9.0.tar.gz | tar xz
cd git-1.9.0/
make prefix=/usr/local all
sudo make prefix=/usr/local install
Обратите внимание на версию git. На момент написания это версия 1.9.0. Уточнить, какая версия git является актуальной, можно на официальной странице проекта.
И наконец, если не установлен почтовый сервер, вот команда для его установки:
sudo apt-get install -y postfix
В процессе установки почтовый сервер попросит себя сконфигурировать. Для этого нужно выбрать на появившемся экране пункт «Internet Site» и указать правильное имя хоста — IP-адрес или доменное имя.

Установка Ruby

Для работы GitLab требуется Ruby 2.1.6. Если у вас уже установлен Ruby 1.8, его необходимо удалить перед установкой новой версии:
sudo apt-get remove ruby1.8
Теперь скачаем и скомпилируем Ruby 2.1.6:

mkdir /tmp/ruby && cd /tmp/ruby
curl -L --progress http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.6.tar.gz | tar xz
cd ruby-2.1.6
./configure --disable-install-rdoc
make
sudo make install
Помимо самого Ruby нам понадобится библиотека bundler:
sudo gem install bundler --no-ri --no-rdoc

Создание пользователя для SSH-подключений к GitLab

Создадим для SSH-подключений пользователя git:
sudo adduser --disabled-login --gecos 'GitLab' git

Установка и настройка GitLab Shell

GitLab Shell — это отдельная утилита для управления SSH-доступом и репозиториями. Для ее установки необходимо выполнить следущие команды:
# Переходим в домашнюю директорию
cd /home/git

# Загружаем исходный код
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-shell.git -b v1.9.3
cd gitlab-shell

# Создаем конфигурационный файл
sudo -u git -H cp config.yml.example config.yml
После выполнения команд нужно отредактировать файл config.yml. В нем в настройке gitlab_url нужно указать будущий адрес GitLab, например:
gitlab_url: http://gitlab.example.com/"
Теперь устанавливаем и инициализируем утилиту:
sudo -u git -H ./bin/install

Установка и настройка базы данных

Для работы GitLab требует базу данных. Разработчики GitLab рекомендуют использовать PostgreSQL, однако поддержка MySQL также присутствует. Для установки PostgreSQL, выполните:
sudo apt-get install -y postgresql-9.1 postgresql-client libpq-dev
Для установки MySQL:
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
sudo mysql_secure_installation
Во время установки необходимо будет придумать и ввести пароль root пользователя MySQL.
Теперь нужно создать саму базу данных для работы GitLab. Для этого нужно выполнить несколько SQL-запросов. Начнем с PostgreSQL. В командной строке это делается так:
# Логинимся в PostgreSQL
sudo -u postgres psql -d template1

# Создаем пользователя для GitLab
template1=# CREATE USER git;

# Создаем базу данных для GitLab и даем доступ к ней созданному пользователю
template1=# CREATE DATABASE gitlabhq_production OWNER git;

# Выходим из PostgreSQL
template1=# \q
Теперь MySQL (не забудьте вместо $password поставить хороший, крепкий пароль):
# Логинимся в MySQL
mysql -u root -p

# Тут нужно будет ввести пароль root пользователя MySQL

# Создаем пользователя для GitLab
# вводить 'mysql>' не нужно, он показан для наглядности процесса
# и не забудьте в следущей команде заменить $password на настоящий пароль!
mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';

# Устанавливаем тип базы данных
mysql> SET storage_engine=INNODB;

# Создаем базу данных для GitLab
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

# Даем доступ к созданной базе данных пользователю GitLab
mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';

# Выходим из MySQL
mysql> \q

Установка и настройка самого GitLab

Этот этап самый сложный, поэтому будем выполнять его пошагово. Первый шаг — загрузка исходников GitLab. Делается это через git и выглядит примерно вот так:
# Переходим в домашнюю директорию
cd /home/git

# Загружаем GitLab
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-8-stable gitlab
Обратите внимание на флаг -b 6-8-stable во второй команде. На момент написания этой статьи актуальным является GitLab версии 6.8. Однако рекомендую перед установкой уточнить эту информацию на официальном сайте проекта и подставить в эту команду правильную версию. Кроме того, вместе с GitLab периодически обновляется и GitLab Shell, это также нужно учесть.
Второй шаг — развертывание и настройка. Сюда входят создание необходимых файлов конфигурации, создание необходимых приложению папок и установка прав доступа на уже существующие папки:
# Переходим в папку GitLab
cd /home/git/gitlab

# Создаем файл конфигурации для GitLab
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# Выставляем владельца и права на папки log/ и tmp/
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX log/
sudo chmod -R u+rwX tmp/

# Создаем папку для сателлитов и выставляем на нее права
sudo -u git -H mkdir /home/git/gitlab-satellites
sudo chmod u+rwx,g+rx,o-rwx /home/git/gitlab-satellites

# Выставляем права на папки tmp/pids/ и tmp/sockets/
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/

# Выставляем праав на папку public/uploads/
sudo chmod -R u+rwX  public/uploads

# Создаем файл конфигурации для сервера Unicorn
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb

# Создаем файл конфигурации для Rack attack
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
После выполнения команд нужно отредактировать файл config/gitlab.yml. В нем нужно указать следующие настройки:
Настройка Раздел Описание Пример
host gitlab Cюда надо вписать адрес, по которому будет доступен GitLab gitlab.example.com
email_from gitlab Тут нужно прописать email, с которого будет отправляться почта gitlab@example.com
support_emal gitlab Адрес тех. поддержки. Если его закомментировать, будет использован адрес из email_from support@example.com
bin_path git Установите значение /usr/local/bin/git, если компилировали git вручную на первом этапе установки /usr/local/bin/git
E-mail адрес из email_from также нужно установить в конфигурации git:
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@example.com"
sudo -u git -H git config --global core.autocrlf input
Теперь нужно сконфигурировать базу данных. Для PostgreSQL:
sudo -u git cp config/database.yml.postgresql config/database.yml
sudo -u git -H chmod o-rwx config/database.yml
Для MySQL:
sudo -u git cp config/database.yml.mysql config/database.yml
sudo -u git -H chmod o-rwx config/database.yml
Не забудьте указать в файле config/database.yml логин и пароль для доступа к вашей базе данных. Следущий шаг — установка зависимостей. Делается это одной простой командой. Если вы используете PostgreSQL:
cd /home/git/gitlab
sudo -u git -H bundle install --deployment --without development test mysql aws
Если используете MySQL:
cd /home/git/gitlab
sudo -u git -H bundle install --deployment --without development test postgres aws
Теперь нужно инициализировать приложение. Сюда входят инициализация базы данных и установка ротации логов:
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

# Тут нужно будет ввести yes для подтверждения создания таблиц в базе данных

# Создаем инициализационный скрипт
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab

# Добавляем GitLab в местный авторан
sudo update-rc.d gitlab defaults 21

# Создаем ротатор логов
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
Теперь осталось проверить статус приложения и запустить его. Проверяется статус такой командой:
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
Корректно установленное приложение должно выдавать примерно следущее:
Если все хорошо — приложение можно запускать:
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
sudo service gitlab start

Установка и настройка Nginx

Последний этап установки GitLab — установка и настройка сервера Nginx. Установка выглядит так:
sudo apt-get install -y nginx
Копируем конфигурационный файл Nginx из дистрибутива GitLab:
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
Не забудьте указать правильный адрес вашего GitLab в файле /etc/nginx/sites-available/gitlab в настройке server_name раздела server. Мне также пришлось указать IP-адрес сервера в настройке listen раздела server. Теперь нужно перезапустить сервер:
sudo service nginx restart
 
Готово! Установка и настройка GitLab окончена. Убедитесь, что все правильно настроено, выполнив команду:
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
Если все пункты списка зеленые — значит, приложение установлено и настроено верно и можно начинать работу. Для этого зайдите по адресу приложения и авторизуйтесь, используя данные по умолчанию:
Логин:  root
Пароль: 5iveL!fe
Не забудьте сменить пароль после авторизации! Приятной работы!