Filter by tag: Linux

Letsencrypt is an excellent service for obtaining totally free security encryption certificates. Fortunately, it also has a marvelous client named Certbot. Let's install it.

Install Certbot

In the most recent versions of Ubuntu (16.04 and newer), it's possible to install Certbot automatically using native operating system repositories. It's preferable: you'll get a global executable and a package update management out of a box. Just type the following command, and you're in business:

#!/bin/bash
$ apt-get install certbot

If it's not an option for any reason, you can always check out the Github repository manually. In that case, you should choose an installation directory and create a global symlink by yourself.

#!/bin/bash
$ git clone https://github.com/certbot/certbot

Generate certificates manually

To generate a certificate we need to confirm that we have control over the domain. The standard practice is to launch a Letsencrypt process on ports 80 or 443. As we can't start anything on the Cloudfront distribution or s3 servers itself, we need to use a manual validation. Let's assume that our app is running on the my-awesome-cloudfront-app.com address. Run the following command:

#!/bin/bash
$ certbot-auto certonly --manual -d my-awesome-cloudfront-app.com

The Certbot wizard will ask you to create the file with particular content. Create it and place at the required path. Wait a few minutes after that to ensure the CloudFront cache is updated (if necessary) or verification may fail. It looks like we've got our certificates.

Apply certificates to the CloudFront distribution

We'll use the AWS CLI tool to upload the certificates to Cloudfront. Let's begin and upload one:

#!/bin/bash
$ aws iam upload-server-certificate --server-certificate-name certificate_name --certificate-body file:///etc/letsencrypt/live/my-awesome-cloudfront-app.com/cert.pem --private-key file:///etc/letsencrypt/live/my-awesome-cloudfront-app.com/privkey.pem --certificate-chain file:///etc/letsencrypt/live/my-awesome-cloudfront-app.com/chain.pem --path /cloudfront/	

A few things you may need to know about the last command:

  • The name must be unique — you can't have multiple certificates with the same name. And you can't just use the same name to replace the existing one.
  • Don't be afraid of the strange file:/// windows-like prefix. It's for Linux.
  • The /etc/letsencrypt/live/my-awesome-cloudfront-app.com/ directory will always be a symlink to a directory with your latest certificates for the domain. The previous ones will not go anywhere — you can locate them in the /etc/letsencrypt/archive subdirectory.
  • The particular `path` argument is necessary to make Cloudfront aware of you certificates. You can upload them to any path, but you simply will not find them in the web console of Cloudfront.

If you've made a mistake or you just want to delete an obsolete certificate, use the following command:

#!/bin/bash
aws iam delete-server-certificate --server-certificate-name certificate_name`

Enjoy your secure web!


Lets encrypt

Зачем это?

У защищенного соединения есть множество преимуществ перед старым добрым http: защита от перехвата траффика, защита от подмены содержимого, лучшее ранжирование в поисковых системах и т.д. Мне вот, например, нравится зеленый значок в адресной строке. Раньше за всё это удовольствие нужно было платить, поэтому сертификаты можно было увидеть только на крупных проектах, либо платежных системах (где риск компрометации данных велик и без сертификата вас просто не поймут). Проект letsencrypt.org призван изменить это положение вещей раз и навсегда.

Получение бесплатного, но полностью функционального сертификата теперь доступно каждому. Проект предоставляет утилиту командной строки, с помощью которой можно сгенерировать ключ, сертификат, и даже, в типовых случаях, установить этот сертификат в ваш конфиг веб-сервера. Единственное серьезное отличие от привычных платных сертификатов — время жизни в три месяца. Но это не минус, а намеренный подход: предполагается, что сервер будет настроен на автоматическое получение нового сертификата взамен полученного ранее (это должно помочь в борьбе с компрометацией ключей).


For Ubuntu 14.04 LTS

Latest docker version (automatic update)


$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" >> /etc/apt/sources.list.d/docker.list
$ apt-get update
$ apt-get purge lxc-docker*
$ apt-get install docker-engine
And result will be like this:

$ docker -v
Docker version 1.9.0, build 76d6bc9

Latest docker-compose version


$ curl -L https://github.com/docker/compose/releases/download/1.5.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

Grok

В жизни разработчика регулярно возникает необходимость показать результаты работы кому-либо еще — коллеге, заказчику, тестировщику. Всё довольно просто, если вы сидите в одной комнате или, хотя бы, здании: можно пригласить его к своему столу (скорее всего придется пообещать кофе или печеньки) и показать лично на собственном мониторе. Всё сложнее, если вы находитесь в разных районах, городах или даже странах. А иногда вам может пригодиться доступный из интернета API, развернутый локально — например, если вы разрабатываете или тестируете мобильные приложения.


Нет ничего удобнее хорошей командной оболочки и zsh, наверное, одна из лучших. На большинстве серверов и рабочих машин по-умолчанию стоит bash и многие даже не задумываются, что командная оболочка может или должна делать что-то еще, кроме запуска команд. Например, она должна помогать пользователю выбрать: какую команду запустить.

Установка

Установить «базовый комплект» проще простого. Например, в Ubuntu:


apt-get install zsh
usermod USER -s /usr/bin/zsh

Установить дополнительные плюшки тоже не сложно:


curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh

Результат

Например, вот так выглядит zsh у меня:

zsh


Шпион

Существует несколько способов сжечь книгу. И мир полон людей, бегущих с зажженными спичками.
«Звук бегущих ног», Рей Бредбери

Лирическое вступление

Наиболее устойчивые системы — децентрализованные и, к счастью, интернет из их числа. Своим появлением эта технология изменила всё. Никогда ранее не было возможно так просто обмениваться знаниями и новостями, иметь свободный доступ к практически любой точке земного шара. Это позволяет любому мнению быть услышанным — и это прекрасно и очень важно.

К сожалению, кроме людей созидающих знания, есть люди запрещающие знания. Запрещать знания — попросту глупо: знание есть знание, у него нет никакой моральной подоплеки, но оно, определенно, может быть кому-то не выгодно. И потому жгли людей, потом книги, теперь же они открыли для себя интернет. Но с интернетом такой фокус уже не пройдет. Потому что нам на помощь спешит VPN — виртуальные тоннели, с помощью которых мы будем выходить в интернет, например, из Амстердама, на самом же деле потягивая чаек из натурального русского самовара.


Docker

Что такое оркестрация?

Оркестрация — это координация взаимодействия нескольких контейнеров. В принципе, ничто не мешает создать контейнер, в котором запущены сразу все необходимые процессы, но этот подход лишен гибкости при масштабировании, изменении архитектуры, а также создает проблемы с безопасностью, т.к. в этом случае процессы никак не изолированы и могут без ограничений влиять друг на друга. Оркестрация же позволяет строить информационные системы из небольших кирпичиков-контейнеров, каждый из которых ответственен только за одну задачу, а общение осуществляется через сетевые порты и общие директории. При необходимости контейнеры в таком «оркестре» можно заменять на другие: например, чтобы проверить работу приложения на другой версии базы данных.


Docker

Containerization is the new virtualization
The Docker Book

Что такое Docker?

В отличии от классических систем виртуализации, которые эмулируют работу компьютерного железа и ядра операционной системы поверх него, Docker использует виртуализацию на уровне ядра: все виртуализируемые им процессы делят ядро операционной системы хоста, что позволяет значительно сократить как требуемые ресурсы, так и время, необходимое на запуск/обслуживание таких систем. В идеале, каждый процесс изолируется в собственном контейнере (linux container, lxc), который содержит набор необходимых ему библиотек, что позволяет забыть о dependecy hell, а также легко переносить стек проекта между серверами. В статье ниже я проиллюстрирую, как можно использовать Docker для настройки среды разработчика, повторяющей среду продакшена: предположим, что там используется Ubuntu LTS, PHP 5.4, Nginx.


Честно говоря, я тоже не знаю. Это был всего лишь термин, который мы начали использовать. Из-за немного необычной структуры файловой системы, при которой информация о доступе к файлам хранится в виде плоского (двумерного) массива на диске, отдельно от всей информации об иерархии каталогов, лучшее, что я могу предположить (для «и») - это «индекс». Таким образом, и-номер являлся индексом в этом массиве, и-нод - выбираемым элементом массива. (Приставка «и-» использовалась в первой версии руководства; со временем дефис перестали употреблять).
Деннис Ритчи

Я был очень удивлен, когда получил ошибку следующего содержания при попытке открытия сессии:


PHP Warning:  Unknown: open(/tmp/sess_e34ad6u6f51gum3htmqkd7ldn6, O_RDWR) failed: No space left on device (28)

Ведь при этом df -h показывал такую картину, что свободного пространства много:


df -h


Filesystem          1K-blocks     Used Available Use% Mounted on
/dev/sda2            19091584  3784332  14314332  21% /
udev                  8192628        8   8192620   1% /dev
tmpfs                 3280992      284   3280708   1% /run
none                     5120        4      5116   1% /run/lock
none                  8202472       92   8202380   1% /run/shm
/dev/mapper/vg0-var  47926152 24100456  21368096  54% /var

Оказалось, кончились файловые дескрипторы (inode), но в сообщении об ошибке этого не указывается. Проверить количество файловых дескрипторов в системе можно такой командой:


df -i

Имеет смысл отслеживать эту метрику, как и занятое на диске пространство.


Если активная работа над проектом идет над несколькими ветками сразу, всегда полезно знать, на какой ветке в текущий момент находится указатель HEAD репозитария. Чтобы не полагаться на память, можно добавить отображение названия ветки в приглашение командной строки. Для этого откроем на редактирование ~/.bashrc


export PS1='\u@\h: \w\[\033[01;33m\]$(__git_ps1) \$\[\033[00m\] '

Любуемся результатом:

Но, по хорошему, лучше просто поставьте zsh — оно того стоит.