Показаны сообщения с ярлыком VDS. Показать все сообщения
Показаны сообщения с ярлыком VDS. Показать все сообщения

четверг, 18 июня 2015 г.

Git: делаем удалённый репозиторий

Ещё одно простое решение для простой задачи.
Немного предистории. Когда-то давно я задумался о том как хранить свои исходники в репозитории на своём vds. Тогда я пользовался Subversion и не считал ssh-туннели для доступа к репозиторию избыточной сложностью. Теперь я постарел, стал ленивым и полюбил git.
Что может быть проще, чем git init в корне проекта? И уже можно пользоваться всеми преимуществами контроля версий без всякого сервера.
Следующий шаг: проект уже вырос и паранойя выросла вместе с ним. Все разработчики делятся не два вида: одни ещё ни разу не теряли исходники а другие уже делают git push в конце каждого рабочего дня :)

пятница, 24 июня 2011 г.

Зачем нам админы? Настраиваем Apache на VDS за 10 минут

Иметь "свой" VDS очень удобно. А порой и весьма полезно для повышения квалификации в смежных областях. Эта небольшая история началась с одной неудачной попытки поставить софт на VDS. Нужно было обновить пару библиотек, те потянули зависимости, а там уже нарисовалась перспектива замены ядра...
Когда стало ясно, что с моим Debian 5 проблем будет ещё много, я вспомнил, что мой VDS-провайдер предлагает ещё несколько образов диска на выбор, в том числе Ubuntu 10.4, версии библиотек у которой должны быть существенно новее. Но была одна проблема: в этом образе не предустановлена панель ISPManager. Эта панель замечательно помогала мне "рулить" моим сервером, не заглядывая в консоль. Было немного страшно отказываться от неё, ведь моя квалификация как сисадмина весьма невелика. Но что нам стоит попробовать? И, забэкапившись, начали...
Заливаем новый образ, входим root-ом, засекаем время :)
apt-get install apache2
Когда apache установлен, пробуем его запустить
service apache2 start
Если сервер поднялся без ошибок - значит вы не пожалели денег на конфигурацию виртуального сервера. Я пожалел... На 64 мб памяти apache смог только укоризненно написать в лог
Resource temporarily unavailable: apr_thread_create: unable to create worker thread
... и умереть.
Лог, кстати, по умолчанию лежит в /var/log/apache2/error.log
Прожорливость apache лечим редактированием лимитов в /etc/apache2/apache2.conf
Речь идёт о константах в блоках <IfModule mpm_prefork_module> <IfModule mpm_worker_module>, и <IfModule mpm_event_module>. Не долго думая ставим их вдвое меньше значений по умолчанию. Apache при старте может предложить поправить какие-либо константы. Послушаемся его (в меньшую сторону).
Итак apache запущен. При заходе на любой из своих сайтов, в DNS которых прописан ip моего сервера я вижу страницу apache по умолчанию с оптимистичной надписью.
Теперь настало время сконфигурировать виртуальные хосты для моих сайтов.
В большинстве мануалов это предлагается делать редактированием httpd.conf. Не верьте. В нашем случае httpd.conf пустой и оставлен только для совместимости. Вместо него стоит обратить внимание на два каталога /etc/apache2/sites-available и /etc/apache2/sites-enabled. Все файлы из последнего включаются в конфиг apache. И это не файлы на самом деле. Это ссылки на аналогичные файлы из первого каталога. Такая схема позволяет нам 1: не править основной конфиг при добавлении/изменении виртуальных хостов; 2: не править вообще ничего чтобы удалить/восстановить хост. Просто добавляем/удаляем соответствующую ссылку командой ln.
Кстати, та же схема работает и с включением/отключением модулей apache.
В /etc/apache2/sites-available есть конфиг виртуального хоста по умолчанию. Копируем его с новым именем (например именем домена) и правим, чтобы получилось что-то вроде этого:
<VirtualHost *:80>
    ServerAdmin webmaster@my1domain.com
    ServerName my1domain.com
    DocumentRoot /var/www/my1domain.com
    <Directory /var/www/my1domain.com>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /var/log/apache2/my1domain-com-error.log
    LogLevel warn
    CustomLog /var/log/apache2/my1domain-com-access.log combined
</VirtualHost>
Тут my1domain.com - имя нашего домена. Для второго и т.д. сайта повторяем процедуру, соответственно меняя домен. Создаём ссылки на полученные конфиги в каталог /etc/apache2/sites-enabled и соответствующие каталоги для DocumentRoot. В эти каталоги и загружаем содержимое сайтов.
Делаем
service apache2 restart
и получаем ошибку (например) из-за того, что в .htaccess наших сайтов используется mod_rewrite а соответствующий модуль не подключен. Для подключения модуля, как вы уже догадались, делаем ссылку в /etc/apache2/mods-enabled которая указывает на /etc/apache2/mods-available/rewrite.load
В общем, с установленными но не подключенными модулями поступаем так всегда. А если модуль не установлен? Установим его. Например php5 ставим командой
apt-get install libapache2-mod-php5
Это только модуль для apache, сам php подтянется по зависимостям. 
Снова перезагружаем сервер и наслаждаемся работой своих сайтов. Впрочем, мы ведь забыли mysql? Не проблема:
apt-get install mysql-server
Вообще, идея этого поста не в том, как уложиться в 10 минут. Она в том, что не нужно бояться заниматься администрированием  своих серверов самостоятельно. Не нужно доставать саппорт провайдера или платить больше за навороченные панели управления, если нам всего лишь нужно захостить 2-3 ненагруженных сайта для своих экспериментов. А вот если эксперимент удастся, и нагрузка начнёт расти, тогда другое дело... Тогда наши суперуспешные проекты окупят нам и сервера и команду администраторов к ним. И решения этих сисадминов будут куда серьёзнее тех, что изложены выше. Но за это уже заплатите не вы, а ваши многочисленные и счастливые клиенты :)

четверг, 16 июня 2011 г.

svn over ssh: безопасный репозиторий для своих проектов в облаке

Редко кто из программистов не работает дома. И мало у кого не возникало проблемы синхронизации исходников между домашней и рабочей машиной. Есть масса решений от самых простых и неудобных (носим всё на флешке), до сложных или параноидальных (шифрованный контейнер в DropBox-е). Хочу описать ещё один вариант, который лично мне пока нравится больше всего.

Во-первых, однозначно нужна система контроля версий. Те кто хоть раз терял исходники со мной согласятся. А если над проектом работают и другие люди, сомнения в необходимости использования svn или т.п. вообще отпадают. Я лучше знаком с subversion, поэтому его и поставим. 

Во-вторых: куда ставить? Нужен как минимум VDS чтобы иметь root-доступ на удалённую машину для установки нужных нам приложений. Я выбрал firstvds.ru. В основном потому что минимальная конфигурация сервера (более чем достаточная для наших целей и парочки "домашних страничек" в придачу) там стоит около $5 в месяц. Можно поставить образ debian, senos, fedora, ubuntu c вполне достаточным набором софта или без него, по желанию. Я выбрал debian, поэтому остальные инструкции считаем применительно к нему. 

А инструкций, собственно, совсем немного:
1. Ставим svn
apt-get install subversion
2. Добавляем группу и пользователя
groupadd svn
3. Добавляем пользователя 
useradd -g svn -d /home/svn -m svn
4. Из-под нового пользователя создаём репозиторий
su svn
cd ~
mkdir repos
svnadmin create /home/svn/repos/
5. Чтобы закрыть доступ для всех кроме авторизованного пользователя и задать ему (т.е. себе) пароль, в файле /home/svn/repos/conf/svnserve.conf добавляем строки:
anon-access = none
auth-access = write
password-db = passwd 
и в файле passwd в том же каталоге добавляем строку вида
username = password
6. Запускаем сервер
/usr/bin/svnserve -d --listen-port 3232 -r /home/svn/repos/

И последнее: как получить доступ к нашей новой игрушке. Как указано выше, svnserve слушает у нас порт 3232. Поэтому самый простой способ получить доступ к репозиторию: svn://<хост или ip вашего сервера>:3232 Отсюда делаем checkout в локальный каталог на домашней машине (он, естественно, пока будет пустым), складываем в локальный каталог наши проекты и делаем commit (рекурсивно). Потом делаем checkout на рабочей машине с этого же адреса и получаем всё что положили. Дальше работаем как обычно. 
Но так работать не стоит, если не хотите, чтобы ваши исходники получил кто-то "третий". Протокол svn не защищен шифрованием. Есть несколько методов решения этой проблемы, но все они связаны с использованием дополнительного софта. Мы же поступим проще.
Порт 3232 на удалённой машине свяжем с портом (например) 2323 на локальной машине с помощью ssh-туннеля:
ssh -2 -N -f -L 2323:localhost:3232 root@<хост или ip вашего сервера>
Теперь url репозитория с которым можно безопасно работать:
svn://localhost:3232
Скорость работы в таком случае будет ниже, но можно не опасаться перехвата трафика.