<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Aleksandr Demshin</title>
    <description>Blog of Aleksandr Demshin, Systems Engineer
</description>
    <link>https://demsh.in/</link>
    <atom:link href="https://demsh.in/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 03 Mar 2026 10:12:05 +0500</pubDate>
    <lastBuildDate>Tue, 03 Mar 2026 10:12:05 +0500</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Как установить Longhorn в Minikube</title>
        <description>&lt;h2 id=&quot;как-установить-longhorn-в-minikube&quot;&gt;Как установить Longhorn в Minikube&lt;/h2&gt;

&lt;p&gt;В этой статье я расскажу как установить Longhorn в Minikube.&lt;/p&gt;

&lt;h3 id=&quot;установка-minikube&quot;&gt;Установка Minikube&lt;/h3&gt;

&lt;p&gt;В macOS это проще всего сделать с помощью Homebrew:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;❯ brew &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;minikube
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;запуск-minikube&quot;&gt;Запуск Minikube&lt;/h3&gt;

&lt;p&gt;Для Longhorn требуется Kubernetes версии 1.18 или выше (справедливо для Longhorn v1.3.2), поэтому запускаем Minikube с соответствующей версией Kubernetes и минимум 3 ноды.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;❯ minikube start &lt;span class=&quot;nt&quot;&gt;--kubernetes-version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;v1.18.0 &lt;span class=&quot;nt&quot;&gt;--nodes&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;подготовка-node-к-установке-longhorn&quot;&gt;Подготовка node к установке Longhorn&lt;/h3&gt;

&lt;p&gt;Для установки Longhorn требуется пакет &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;open-iscsi&lt;/code&gt; на каждой ноде. Для этого запускаем команду для каждой ноды:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;❯ minikube ssh &lt;span class=&quot;nt&quot;&gt;-n&lt;/span&gt; &amp;lt;node_name&amp;gt; &lt;span class=&quot;s2&quot;&gt;&quot;sudo apt update &amp;amp;&amp;amp; sudo apt install -y open-iscsi&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Список нод можно получить командой:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;❯ minikube node list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;установка-longhorn&quot;&gt;Установка Longhorn&lt;/h3&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;❯ helm repo add longhorn https://charts.longhorn.io
❯ helm repo update
❯ helm &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;longhorn longhorn/longhorn &lt;span class=&quot;nt&quot;&gt;--namespace&lt;/span&gt; longhorn-system &lt;span class=&quot;nt&quot;&gt;--create-namespace&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--version&lt;/span&gt; 1.3.2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;проверка-установки&quot;&gt;Проверка установки&lt;/h3&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;❯ kubectl get pods &lt;span class=&quot;nt&quot;&gt;-n&lt;/span&gt; longhorn-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Mon, 07 Nov 2022 21:32:00 +0500</pubDate>
        <link>https://demsh.in/kubernetes/longhorn/minikube/howto/2022/11/07/how-to-install-longhorn-in-minikube.html</link>
        <guid isPermaLink="true">https://demsh.in/kubernetes/longhorn/minikube/howto/2022/11/07/how-to-install-longhorn-in-minikube.html</guid>
        
        
        <category>kubernetes</category>
        
        <category>longhorn</category>
        
        <category>minikube</category>
        
        <category>howto</category>
        
      </item>
    
      <item>
        <title>Как работать в путешествии с семьей</title>
        <description>&lt;p&gt;В &lt;a href=&quot;https://t.me/joinchat/AAAAAAo-Vju7cjFSfjZeeg&quot;&gt;telegram-чате&lt;/a&gt; &lt;a href=&quot;https://otus.ru&quot;&gt;otus.ru&lt;/a&gt; меня попросили написать, как путешествовать с детьми и при этом работать удаленно. Ниже я попытаюсь это сделать.&lt;/p&gt;

&lt;h2 id=&quot;зачем-всё-это&quot;&gt;Зачем всё это&lt;/h2&gt;

&lt;h3 id=&quot;зачем-нужно-путешествовать&quot;&gt;Зачем нужно путешествовать&lt;/h3&gt;

&lt;p&gt;Это нас обогащает. Новые места, люди, язык, еда, погода. Чем дальше вы уедете, тем сильнее перемены. :) Буквально на днях слышал от товарища по тренировкам, что есть исследование про то, что путешествующие люди более успешные и счастливые. Ну, а лично мне это жутко интересно.&lt;/p&gt;

&lt;h3 id=&quot;почему-работать&quot;&gt;Почему работать&lt;/h3&gt;

&lt;p&gt;Я очень люблю свою работу и работаю уже два года удаленно. Именно это мне позволяет путешествовать, когда я хочу. Обычно люди, работающие по найму путешествуют два раза в год, я могу намного больше, потому что не прекращаю работать.&lt;/p&gt;

&lt;h3 id=&quot;почему-с-семьей&quot;&gt;Почему с семьей&lt;/h3&gt;

&lt;p&gt;А ради чего еще мы живем, как не ради семьи? :)&lt;/p&gt;

&lt;h2 id=&quot;как-это-организовать&quot;&gt;Как это организовать&lt;/h2&gt;

&lt;p&gt;Мы попробовали путешествия в разных форматах и продолжительности. Мы ездили на в деревню к друзьям, к родственникам в соседний регион, в разные санатории, на базы отдыха, за границу. :)&lt;/p&gt;

&lt;p&gt;Первое. Поговорите и напомните семье, что вы будете работать, хотя это очевидно, но все равно это стоить проговорить. Решите сколько часов в день нужно для работы и соблюдайте это в путешествии. Не работайте в выходные, совсем не работайте.&lt;/p&gt;

&lt;p&gt;Для работы нужен хороший ноутбук (лучше с хорошим аккумулятором) и интернет. Убедитесь, что ваш компьютер в порядке, оказаться где-то с мертвым ноутбуком весьма печально и дорого обойдется, скорее всего. Определитесь, как будете выходить в интернет. В путешествиях по России я пользуюсь обычно мобильным интернетом, у меня тариф с 20Gb на месяц, хватает, если в YouTube не залипать. Если вы едете за границу, исследуйте вопрос. Обычно в отелях и квартирах есть WiFi, смотрите отзывы, описания, спрашивайте у хозяев. WiFi может быть платный и паршивый.&lt;/p&gt;

&lt;p&gt;Предупредите коллег, что вы не дома, что могут быть внезапные проблемы.&lt;/p&gt;

&lt;p&gt;Ещё для работы нужно удобное место. Пару дней можно и на диване работать, но постоянно - не вариант. Приходилось мне сидеть в лобби отеля, так как в номере WiFi был паршивый (вот это заранее сложно предсказать), во второй половине дня без стола уже было некомфортно, приходилось страдать. Важно наличие в отеле/квартире рабочего стола и стула/кресла (расскажите детям, что это для вас). Кому-то комфортно работать и в кафе, тогда используя &lt;a href=&quot;https://www.tripadvisor.com&quot;&gt;Tripadvisor&lt;/a&gt;, например, можно заранее найти подходящее, или пробежаться по ближайшим улицам. Я как-то в Анталье работал днем в пабе, людей там не было в это время. Наверное, можно найти коворкинг, но я не пробовал сам, поделится опытом не смогу.&lt;/p&gt;

&lt;p&gt;Собственно все. Даже не знаю, что еще добавить. :) Хороших вам путешествий! Счастливых жен, мужей и детей. Все вопросы в telegram &lt;a href=&quot;https://t.me/demshin&quot;&gt;@demshin&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 12 Jun 2019 14:22:00 +0500</pubDate>
        <link>https://demsh.in/working/travels/family/2019/06/12/how-to-work-with-family-remotely.html</link>
        <guid isPermaLink="true">https://demsh.in/working/travels/family/2019/06/12/how-to-work-with-family-remotely.html</guid>
        
        
        <category>working</category>
        
        <category>travels</category>
        
        <category>family</category>
        
      </item>
    
      <item>
        <title>Приватный Docker Registry с сертификатом от LetsEncrypt и хранением данных на S3</title>
        <description>&lt;h2 id=&quot;почему-и-зачем&quot;&gt;Почему и зачем&lt;/h2&gt;

&lt;p&gt;Потому что понадобилось на работе. Был у нас свой Docker Registry, который делал не я. Начал поднимать свой, а он не поднимается, потому что встроенная функциональность по получению сертификатов от LetsEncrypt &lt;a href=&quot;https://github.com/docker/distribution/issues/2545&quot;&gt;сломана&lt;/a&gt;. Пришлось пилить &lt;a href=&quot;https://github.com/demshin/private-docker-registry-ssl-s3&quot;&gt;свой костыль&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;как-пользоваться&quot;&gt;Как пользоваться&lt;/h2&gt;

&lt;p&gt;В readme есть инструкция. Но там кое-что упущено. Необходимо создать на AWS bucket, где будут храниться данные Registry и пользователя с политикой доступа к этому S3 bucket (нужны access key и secret key).&lt;/p&gt;

&lt;p&gt;Все вопросы в telegram &lt;a href=&quot;https://t.me/demshin&quot;&gt;@demshin&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 06 Nov 2018 16:38:00 +0500</pubDate>
        <link>https://demsh.in/docker/registry/ssl/letsecrypt/s3/2018/11/06/private-docker-registry.html</link>
        <guid isPermaLink="true">https://demsh.in/docker/registry/ssl/letsecrypt/s3/2018/11/06/private-docker-registry.html</guid>
        
        
        <category>docker</category>
        
        <category>registry</category>
        
        <category>ssl</category>
        
        <category>letsecrypt</category>
        
        <category>s3</category>
        
      </item>
    
      <item>
        <title>Внезапно решил поучаствовать в конкурсе от Hexlet</title>
        <description>&lt;p&gt;Одна их лучших образовательных площадок рунета для программистов &lt;a href=&quot;https://hexlet.io&quot;&gt;Хекслет&lt;/a&gt; проводит очередной &lt;a href=&quot;https://mystory.hexlet.io&quot;&gt;конкурс “Как я пришёл к программированию”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Конкурс довольно простой, нужно написать историю про себя, запушить ее на гитхаб в форке &lt;a href=&quot;https://github.com/Hexlet/our-stories&quot;&gt;репозитория&lt;/a&gt;, послать пуллреквест в исходный &lt;a href=&quot;https://github.com/Hexlet/our-stories&quot;&gt;репо&lt;/a&gt; и набрать больше всего звёзд.&lt;/p&gt;

&lt;p&gt;Моя история вот &lt;a href=&quot;https://github.com/demshin/our-stories/blob/master/stories/demshin.md&quot;&gt;тут&lt;/a&gt;. Накидайте звёзд. :-)&lt;/p&gt;

&lt;h2 id=&quot;результаты&quot;&gt;Результаты&lt;/h2&gt;

&lt;p&gt;Я занял третье место и получил месяц доступа на Хекслет. :)&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Oct 2018 16:00:00 +0500</pubDate>
        <link>https://demsh.in/hexlet/our-stories/2018/10/22/hexlet-challenge.html</link>
        <guid isPermaLink="true">https://demsh.in/hexlet/our-stories/2018/10/22/hexlet-challenge.html</guid>
        
        
        <category>hexlet</category>
        
        <category>our-stories</category>
        
      </item>
    
      <item>
        <title>Перенос или копирование объектов между S3 buckets в разных аккаунтах</title>
        <description>&lt;p&gt;На текущем проекте используем известные решительно всем &lt;a href=&quot;https://aws.amazon.com&quot;&gt;AWS&lt;/a&gt; - Amazon Web Services. Там есть решительно все, что нужно для современных веб-сервисов. В заметке пойдет речь об одном из сервисов Amazon, &lt;a href=&quot;https://aws.amazon.com/s3&quot;&gt;S3&lt;/a&gt; - Simple Storage Services.&lt;/p&gt;

&lt;h2 id=&quot;боль&quot;&gt;Боль&lt;/h2&gt;

&lt;p&gt;На проекте мы используем несколько аккаунтов AWS и получилось так, что нужно перенести кучу данных в S3 bucket одного аккаунта на другой. А это для меня оказалось неочевидным, поэтому пришлось немного разобраться. А результат, кроме выполненной работы, эта статья.&lt;/p&gt;

&lt;h2 id=&quot;коротко&quot;&gt;Коротко&lt;/h2&gt;

&lt;p&gt;Нужно пользователю целевого аккаунта, у которого есть права писать в целевой бакет, дать права на чтение (как минимум) из бакета-источника. Дальше воспользоваться &lt;a href=&quot;https://aws.amazon.com/cli&quot;&gt;aws-cli&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;более-подробно&quot;&gt;Более подробно&lt;/h2&gt;

&lt;h3 id=&quot;что-понадобится&quot;&gt;Что понадобится&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;S3 buckets&lt;/strong&gt; 2 штуки &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;source&lt;/code&gt; и &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;destination&lt;/code&gt;(по одной на каждый аккаунт)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;IAM User&lt;/strong&gt; (например, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;copy_user&lt;/code&gt;) с доступом &lt;strong&gt;Programmatic access&lt;/strong&gt; через &lt;strong&gt;Access key ID&lt;/strong&gt; и &lt;strong&gt;secret access key&lt;/strong&gt; (в целевом аакаунте AWS)&lt;/li&gt;
  &lt;li&gt;User Policy для пользователя выше&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ListAllMyBuckets&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:PutObject&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
             &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::source/*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::destination/*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:ListBucket&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:GetBucketLocation&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
             &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::source/*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::destination/*&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Bucket Policy&lt;/strong&gt; для бакета &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;source&lt;/code&gt;, что бы дать пользователю из целевого аккаунта доступ к нему&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Version&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;2012-10-17&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Statement&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Sid&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;AllowAll&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Effect&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Allow&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Principal&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;AWS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:iam::111122223333:user/copy_user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;s3:*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;Resource&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::from-source&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;arn:aws:s3:::from-source/*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/cli&quot;&gt;AWS CLI tool&lt;/a&gt; (есть на каждом инстансе &lt;a href=&quot;https://aws.amazon.com/ec2‎&quot;&gt;EC2&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Инстанс &lt;a href=&quot;https://aws.amazon.com/ec2‎&quot;&gt;EC2&lt;/a&gt; c Linux.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Дальше куча вариантов с помощью консольной утилиты AWS. Простейший - скопировать все:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws s3 cp s3://source/ s3://destination/ --recursive&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Спасибо за внимание! Написать мне &lt;a href=&quot;mailto: demshin@gmail.com&quot;&gt;demshin@gmail.com&lt;/a&gt; или &lt;a href=&quot;https://t.me/demshin&quot;&gt;@demshin&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 13 Aug 2018 15:50:00 +0500</pubDate>
        <link>https://demsh.in/aws/s3/s3bucket/2018/08/13/copy-objects-between-s3-buckets-in-different-accounts.html</link>
        <guid isPermaLink="true">https://demsh.in/aws/s3/s3bucket/2018/08/13/copy-objects-between-s3-buckets-in-different-accounts.html</guid>
        
        
        <category>aws</category>
        
        <category>s3</category>
        
        <category>s3bucket</category>
        
      </item>
    
      <item>
        <title>Подключение S3-bucket, как диск в Ubuntu</title>
        <description>&lt;p&gt;Захотелось разработчикам странного, работать с S3 bucket, как с частью файловой системы.&lt;/p&gt;

&lt;p&gt;Хм. Нашел черновик не дописанный. Решил быстро его дописать.&lt;/p&gt;

&lt;p&gt;В попытке решить вопрос использовали &lt;a href=&quot;https://github.com/s3fs-fuse/s3fs-fuse&quot;&gt;s3fs&lt;/a&gt;. Он работает, но непозволительно медленно.
В результате разработчикам пришлось использовать API AWS, что быстро и прекрасно работает и приложение не зависит от настроек сервера.&lt;/p&gt;

&lt;p&gt;И это прекрасно!&lt;/p&gt;

&lt;p&gt;Как итог: не рекомендую использовать s3fs, используйте способы рекомендуемые AWS.&lt;/p&gt;
</description>
        <pubDate>Thu, 22 Feb 2018 01:08:00 +0500</pubDate>
        <link>https://demsh.in/s3/aws/ubuntu/2018/02/22/S3-as-disk.html</link>
        <guid isPermaLink="true">https://demsh.in/s3/aws/ubuntu/2018/02/22/S3-as-disk.html</guid>
        
        
        <category>s3</category>
        
        <category>aws</category>
        
        <category>ubuntu</category>
        
      </item>
    
      <item>
        <title>Установка самоподписанного сертификата</title>
        <description>&lt;h2 id=&quot;update&quot;&gt;Update&lt;/h2&gt;

&lt;p&gt;Самоподписанные сертификаты не нужны. Ведь есть &lt;a href=&quot;https://letsencrypt.org&quot;&gt;letsencrypt&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;суть-проблемы&quot;&gt;Суть проблемы&lt;/h2&gt;

&lt;p&gt;Недавно я описывал &lt;a href=&quot;/ssh/vscode/remote/2017/09/28/remote-editing-files-over-ssh.html&quot;&gt;как установить сертификат&lt;/a&gt;.
Это простой способ для получения шифрованного соединения, но способ этот платный, т.к. за сертификат нужно платить. Но иногда (а на самом деле почти всегда) нам нужно получить &lt;strong&gt;https&lt;/strong&gt; в процессе разработки. Для этого и существуют самоподписанные сертификаты (selfsigned certificates).&lt;/p&gt;

&lt;h2 id=&quot;что-делать&quot;&gt;Что делать&lt;/h2&gt;

&lt;p&gt;Процесс во многом напоминает установку обычного сертификата, но с большими упрощениями.&lt;/p&gt;

&lt;h3 id=&quot;создание-ssl-сертификата&quot;&gt;Создание SSL-сертификата&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/crt/yourdomain.key -out /etc/nginx/crt/yourdomain.crt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Запустится визард, как при создании ключа и генерации запроса на создание сертфиката, с такими же вопросами. Подробнее
в моей &lt;a href=&quot;/ssh/vscode/remote/2017/09/28/remote-editing-files-over-ssh.html&quot;&gt;статье&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;настройка-nginx&quot;&gt;Настройка Nginx&lt;/h3&gt;

&lt;p&gt;На этом этапе все идентично настройке с обычными сертификатами, смотреть эту же самую &lt;a href=&quot;/ssh/vscode/remote/2017/09/28/remote-editing-files-over-ssh.html&quot;&gt;статью&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;браузер&quot;&gt;Браузер&lt;/h3&gt;

&lt;p&gt;Любой современный браузер будет ругаться при соединении с таким сервером, что логично, сертификат самоподписанный и ничего не гарантирует. В процессе разработки игнорируйте эти сообщения, а на продакшен-сервере никогда не используйте самоподписанные сертификаты.&lt;/p&gt;

&lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;

&lt;p&gt;Вот собственно и все. Вопросы в мой Telegram &lt;a href=&quot;https://t.me/demshin&quot;&gt;@demshin&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Wed, 25 Oct 2017 13:15:00 +0500</pubDate>
        <link>https://demsh.in/openssl/certificates/https/2017/10/25/self-signed-certs.html</link>
        <guid isPermaLink="true">https://demsh.in/openssl/certificates/https/2017/10/25/self-signed-certs.html</guid>
        
        
        <category>openssl</category>
        
        <category>certificates</category>
        
        <category>https</category>
        
      </item>
    
      <item>
        <title>Удалённое редактирование файлов через SSH</title>
        <description>&lt;p&gt;По моей работе очень часто приходится удаленно редактировать файлы, например, конфиги nginx. Это само по себе не плохо, но есть в этом два недостатка:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;vim&lt;/strong&gt;, и тут кто-то обвинит меня, что я недостаточно профессионален или вообще ленив, раз не могу освоить vim, но выходить из него я научился, так что не надо тут. :) А если серьезно, и правда сильно осваивать его пока нет желания, есть куча редакторов, которые проще и удобнее для меня.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;дикие тормоза&lt;/strong&gt; при редактировании через ssh, нажимаешь символ, а он печатается через несколько десятков миллисекунд, а все потому, что протокол ssh синхронный, я тут, сервера в Америке, пинг до 200 мс. :)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;выход&quot;&gt;Выход&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;использовать удобный редактор, в моем случае это &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visial Studio Code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;делать это локально, поднимая ssh тоннель&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;что-конкретно-нужно-сделать&quot;&gt;Что конкретно нужно сделать&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Поставить VSCode. Думаю с этим справитесь. :)&lt;/li&gt;
  &lt;li&gt;Поставить на него плагин &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=rafaelmaiolla.remote-vscode&quot;&gt;remote-vscode&lt;/a&gt;. Жмем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd + p&lt;/code&gt; или &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;F1&lt;/code&gt; и вводим &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ext install remote-vscode&lt;/code&gt;, ну или любым другим способом.&lt;/li&gt;
  &lt;li&gt;Настроить agent forwarding для нужного сервера. Для этого создаем или редактируем файл &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt;, если еще нет, в него добавляем:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ssh&quot; data-lang=&quot;ssh&quot;&gt;  &lt;span class=&quot;k&quot;&gt;Host&lt;/span&gt; server
  &lt;span class=&quot;k&quot;&gt;HostName&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;123&lt;/span&gt;.45.67.89
  &lt;span class=&quot;k&quot;&gt;User&lt;/span&gt; root
  &lt;span class=&quot;k&quot;&gt;ForwardAgent&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;yes&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;RemoteForward&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;52698&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;127&lt;/span&gt;.0.0.1:52698
  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;Заходим на наш сервер &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ssh -v server&lt;/code&gt;, естественно там уже должны быть ключи или нужно ввести пароль.&lt;/li&gt;
  &lt;li&gt;Ставим rmate&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;wget &lt;span class=&quot;nt&quot;&gt;-O&lt;/span&gt; /usr/local/bin/rcode https://raw.github.com/aurora/rmate/master/rmate
&lt;span class=&quot;nb&quot;&gt;sudo chmod &lt;/span&gt;a+x /usr/local/bin/rcode&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Делаем логаут.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;В VSCode жмем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd + p&lt;/code&gt; или &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;F1&lt;/code&gt; и в открывшейся консоли редактора выполняем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Remote: Start Server&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Заходим снова на сервер. По команде &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rcode /path/to/file&lt;/code&gt; редактируем и сохраняем файл в своем любимом VSCode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Естественно подобный трюк можно проделать практически с любым редактором кода. Google поможет найти, как это сделать. Удачи друзья.&lt;/p&gt;
</description>
        <pubDate>Thu, 28 Sep 2017 11:25:00 +0500</pubDate>
        <link>https://demsh.in/ssh/vscode/remote/2017/09/28/remote-editing-files-over-ssh.html</link>
        <guid isPermaLink="true">https://demsh.in/ssh/vscode/remote/2017/09/28/remote-editing-files-over-ssh.html</guid>
        
        
        <category>ssh</category>
        
        <category>vscode</category>
        
        <category>remote</category>
        
      </item>
    
      <item>
        <title>Установка сертификата на сайт</title>
        <description>&lt;p&gt;Пришлось освоить новое, поэтому новый пост. Жаль, что для всего нового, что я узнаю, не получается написать пост, а то пришлось бы по несколько постов в неделю ваять. :-)&lt;/p&gt;

&lt;p&gt;На этот раз я устанавливал сертификаты для сайтов. Сайты рабочие и все под NDA, поэтому пишу максимально обезличено, без упоминаний реальных имен, все совпадения случайны. :-)&lt;/p&gt;

&lt;h2 id=&quot;зачем-нужен-ssl-сертификат&quot;&gt;Зачем нужен SSL сертификат&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;безопасное соединение между браузером и сервером, все передаваемые данные шифруются, используется протокол https&lt;/li&gt;
  &lt;li&gt;Google и другие поисковики сайты с поддержкой https выдают выше в результатах поиска&lt;/li&gt;
  &lt;li&gt;современные браузеры скоро будут неистово ругаться на сайты без https&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;установка-ssl-сертификата-на-сайт&quot;&gt;Установка SSL-сертификата на сайт&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Нужно сгенерировать ключ и запрос на выпуск сертификата CSR (Certificate Signing Request) &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl req -new -newkey rsa:2048 -nodes -keyout my_domain.key -out my_domain.csr&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;запустится мастер, в котором нужно будет ответить на вопросы (один из важных вопросов это код страны, который обязательно нужно указать по стандарту &lt;a href=&quot;https://ru.wikipedia.org/wiki/ISO-3166-1&quot;&gt;ISO 3166-1&lt;/a&gt;)&lt;/li&gt;
      &lt;li&gt;результатом работы будет два файла
        &lt;ul&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my_domain.key&lt;/code&gt;, его не отдавайте никому, это секретный ключ&lt;/li&gt;
          &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my_domain.csr&lt;/code&gt;, он нужен будет для генерации сертификата, по сути это публичный ключ, в нем содержится информация, которую вы вводили, ее можно просмотреть с помощью какого-нибудь CSR-Decoder, например &lt;a href=&quot;https://www.sslshopper.com/csr-decoder.html&quot;&gt;этого&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Дальше оформляется заявка на выпуск сертификата, содержимое файла &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my_domain.csr&lt;/code&gt; нужно будет отправить на сервер, который выдает сертификаты обычно за деньги (я пользовался &lt;a href=&quot;https://namecheap.com/&quot;&gt;этим&lt;/a&gt;), но есть и бесплатные варианты&lt;/li&gt;
  &lt;li&gt;после этого нужно провести валидацию сертификата, тут есть три варианта
    &lt;ul&gt;
      &lt;li&gt;самый простой, с помощью электронной почты в том домене, к которому вы делаете сертификат, она указывается во время выбора типа валидации&lt;/li&gt;
      &lt;li&gt;с помощью файла, загруженного на веб-сайт, он должен быть с определенным именем и содержанием и доступен по определенному пути, сам файл можно будет скачать на сервере, который выдает сертификаты, там же и путь узнаете, куда его положить&lt;/li&gt;
      &lt;li&gt;третий вариант, сделать определенную запись на DNS-сервере, подробности тоже сервис по выдаче сертификатов предоставит&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;после прохождения валидации, сертификат придет на почту, которую вы указали при генерации CSR, останется его установить&lt;/li&gt;
  &lt;li&gt;нужно из пришедших файлов сертификата (файлы &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my_domain.crt&lt;/code&gt; и &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my_domain.ca-bandle&lt;/code&gt;) сгенерировать цепочку сертификатов с помощью команды &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat my_domain.crt my_domain.ca-bundle &amp;gt;&amp;gt; cert_chain.crt&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;получившийся файл &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cert_chain.crt&lt;/code&gt; (его лучше переименовать, особенно если у вас несколько сайтов на сервере) и файл с ключом &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;my_domain.key&lt;/code&gt; нужно скопировать на сервер с сайтом, например в директорию &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/nginx/cert/&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;в конфиге nginx для этого домена настроить постоянную переадресацию 301 с http на https прописать пути к ключу и сертификату, включить ssl, прописать порт 443, вот вам кусок конфига:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-nginx&quot; data-lang=&quot;nginx&quot;&gt;&lt;span class=&quot;k&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;listen&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;server_name&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;my_domain.com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;301&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;https://my_domain.com&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$request_uri&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;server_name&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;my_domain.com&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;www.my_domain.com.com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;listen&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;443&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ssl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;kn&quot;&gt;ssl&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;ssl_certificate&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;/etc/nginx/crt/my_domain.crt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;ssl_certificate_key&lt;/span&gt;	&lt;span class=&quot;n&quot;&gt;/etc/nginx/crt/my_domain.key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;ssl_protocols&lt;/span&gt;		&lt;span class=&quot;s&quot;&gt;TLSv1&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;TLSv1.1&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;TLSv1.2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kn&quot;&gt;ssl_ciphers&lt;/span&gt;		&lt;span class=&quot;s&quot;&gt;HIGH:!aNULL:!MD5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;kn&quot;&gt;other&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;settings&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;нужно проверить, есть ли ошибки в конфиге &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo nginx -t&lt;/code&gt;, при ошибке в консоли появится соответствующее сообщение&lt;/li&gt;
  &lt;li&gt;останется перезапустить сервис nginx &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo service nginx restart&lt;/code&gt; или &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo nginx -s reload&lt;/code&gt;, если ошибок в конфиге не будет, то сервис успешно перезапустится и https заработает&lt;/li&gt;
  &lt;li&gt;с помощью сервиса https://www.sslshopper.com/ssl-checker.html проверьте, что на вашем сайте реально работает https&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В целом ничего сложного, вопросы можно попробовать задать в мой Telegram &lt;a href=&quot;https://t.me/demshin&quot;&gt;@demshin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;P.S. Много полезного про SSL-сертификаты можно прочитать в прекрасной &lt;a href=&quot;https://habrahabr.ru/company/tuthost/blog/150433/&quot;&gt;статье&lt;/a&gt; на Хабре.&lt;/p&gt;
</description>
        <pubDate>Sat, 16 Sep 2017 13:50:00 +0500</pubDate>
        <link>https://demsh.in/openssl/certificates/https/2017/09/16/certificates.html</link>
        <guid isPermaLink="true">https://demsh.in/openssl/certificates/https/2017/09/16/certificates.html</guid>
        
        
        <category>openssl</category>
        
        <category>certificates</category>
        
        <category>https</category>
        
      </item>
    
      <item>
        <title>Установка RVM на macOS</title>
        <description>&lt;p&gt;Как видно из моего &lt;a href=&quot;https://demsh.in/about&quot;&gt;резюме&lt;/a&gt; я начал работать в компании &lt;a href=&quot;http://360bound.com&quot;&gt;360bound&lt;/a&gt;. А там новый для меня стек технологий.&lt;/p&gt;

&lt;p&gt;Работаю я в macOS (и ничего другого не хочется :-)) и установить &lt;a href=&quot;https://rvm.io&quot;&gt;RVM&lt;/a&gt; по инструкции с офсайта не вышло. RVM - это Ruby Version Manager, тулза, которая позволяет при разработке удобно управлять разным окружением для Ruby (версии интерпретаторов, наборы gem’ов и т.д.). Непродолжительное гугление привело к результатам.&lt;/p&gt;

&lt;p&gt;Все проводилось на macOS Sierra 10.12.5, с установленным Command Line Tools и Brew Ports.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ставим &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;brew install gpg&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;ставим ключи безопасности для RVM: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;command curl -sSL https://rvm.io/mpapis.asc | gpg --import -&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;ставим непосредственно RVM: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\curl -L https://get.rvm.io | bash -s stable&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;в номом окне терминала проверяем, что RVM установился: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rvm -v&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 07 Jul 2017 22:22:22 +0500</pubDate>
        <link>https://demsh.in/rvm/ruby/2017/07/07/install-rvm.html</link>
        <guid isPermaLink="true">https://demsh.in/rvm/ruby/2017/07/07/install-rvm.html</guid>
        
        
        <category>rvm</category>
        
        <category>ruby</category>
        
      </item>
    
  </channel>
</rss>
