Юрий Дадычин

FE DM, Levi9

Облако в штанах

Решение начинается с проблемы или задачи

*Капитан, и вы здесь?

  • L9 нужен новый сайт

  • Вернее текущая версия не делает то что должна

  • Вернее она не нравится https://www.facebook.com/alexlisovsky

Корпоративный вызов

  • Решили закуситься с хэд-офисом
  • У маркетинга должен был зародиться смысл
  • Wordpress надоел и надо что-то быстрое 

Есть задание - есть полигон для велосипедов

Кроме шуток:

  • Если делаете что-то с нуля - пробуйте новое
  • Не делаете - учитесь  
  • никогда не зацикливаетесь на “проверенных решениях”
  • подходите к задаче как-будто первый день в индустрии, с наивностью ребенка, так веселее  

Сайт с профурсетками(MVP)

  • Красноречивый лендинг
  • Страница с вакансиями
  • Страницы вакансий

CMS

  • Естественно SPA
  • API
  • Некая БД(не интересно)

Решил начать с простого

  • CMS API
    • Koa2

  • CMS SPA
    • Angular(4.x.x)

    • Redux

Начался dependency-love:

  • Я вот `node -v` -> v6.3.1
  • Koa хотел 7.9.х для своих async/await
  • Уже побежал апдейтить но… эй парень а какая у тебя нода?(вопрос в зал)
  • Я хотел штопать модели и контроллеры

  • Я хотел делегировать дальнейшую работу, соответственно
  • Я не хотел апдейтить депенденси и ридми писать, о том как все запустить

Как быть?

  • VM?
  • Vagrant?

  • Лучше, Docker

Вжух поставил Docker,

Что дальше?

FROM node:7.9.0
COPY . /app
CMD ["sh", 
"/app/scripts/dev_entrypoint.sh"]
#!/bin/bash
# app/scripts/dev_entrypoint.sh

cd /app
npm install
./node_modules/nodemon/bin/nodemon.js /
--harmony /
--legacy-watch /
index.js
docker-compose.yml
version: '3'

services:
  levi9-site-admin-api:
    build: ./levi9-site-admin-api
    volumes:
      - ./levi9-site-admin-api:/app
    ports:
      - 8888:8081

И что имеем???

  • Контейнер, который уже можно деплоить
  • С ним-же можно и разрабатывать, `volumes:  - ./levi9-site-admin-api:/app`
  • Все зависимости в контейнере

Минусы:

  • “Не уютная” отладка
  • Собственно завязка на докер

Можно делегировать.

 

Далее CMS SPA

  • Почему-бы и не контейнер?
  • Dev контейнер
  • Про прод чуть позже
version: '3'

services:
  levi9-site-admin-api:
    ...

  levi9-site-admin-front:
    build: ./levi9-site-admin-front
    volumes:
      - ./levi9-site-admin-front:/app
    ports:
      - 4200:4200
    depends_on:
      - levi9-site-admin-api
FROM node:7.9.0
COPY . /app
CMD ["sh", 
"/app/scripts/dev_entrypoint.sh"]
#!/bin/bash

cd /app
#npm install -g @angular/cli
if ! type "ng" > /dev/null; then
  # install @angular/cli here
  npm install -g @angular/cli
fi

npm install
npm run start

CMS готова

  • Минусы те-же, но все работает, просто не уютно
  • Разработчик API или SPA затачивает свою систему под разработку API либо SPA, не парясь о сетапе остальной части приложения
  • Решение работает из коробки у каждого, если есть докер

Во все тяжкие

  • Половина решения уже в докере
  • Нечего плодить техно-зоопарки
  • Все статика
  • Все индексируется
  • Вопрос только с синхронизацией
  • Просто по крону перестраиваем страницы если в CMS были апдейты
FROM nginx
RUN apt-get install -y cron
RUN apt-get install -y ruby-dev
RUN apt-get install -y make
RUN gem install jekyll bundler
# copy scripts
COPY docker_scripts/nginx.conf /etc/nginx/nginx.conf
...
RUN crontab /etc/cron.d/cronjob
# copy site
COPY . /usr/share/nginx/html
# bootstrap
WORKDIR /usr/share/nginx/html
CMD ["sh", "/usr/share/bootstrap.sh"]
# open ports
EXPOSE 18080

Production композиция

Street magic

И где здесь cloud-ready?

Прости, но

  • Это все девопсятина
  • микросервисы это про бэкенд

Остроумные контраргументы 

Спасибо, QnA

Облако в штанах

By Yuriy Dadichin

Облако в штанах

JS и докер

  • 671