Юрий Дадычин
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?
- Микросервисы
-
Контейнеры, их работают все cloud-провайдеры
- https://aws.amazon.com/ecs/details/
- https://azure.microsoft.com/en-us/services/container-service/
- https://cloud.google.com/container-engine/
- мне вообще больше нравятся контейнеры - меньше завязки на инфраструктуру провайдера
Прости, но
- Это все девопсятина
- микросервисы это про бэкенд
Остроумные контраргументы
Спасибо, QnA
Облако в штанах
By Yuriy Dadichin
Облако в штанах
JS и докер
- 671