Na Produkcji


Łukasz Dubiel
@bambuchaAdm
github.com/bambuchaAdm

AGENDA

  • Gdzie ?
  • Jak składać ?
  • Jak stawiać ?

GDZIE ?

GDZIE ?


PaaS

Heroku
Google App Engine



GDZIE ?



VPS

OVH
HETZNER
HORNET

HEROKU

HEROKU

Pierwsze musicie mieć konto :)

Po drugie pas z narzędziami :P
 https://toolbelt.heroku.com/  

na linuxie ...
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh 

HeROKU - Konfigurajca



 heroku login

HerokU - APP


heroku create 


git push heroku master 

DEMO

Baza

Tu jest gorzej ...

Domyślnie mamy PostgreSQL, ale 

żyjemy w klasztorze i trzeba przestrzegać zasad.

BAZA - cd.


Procfile

web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} \
  -DapplyEvolutions.default=true \
  -Ddb.default.driver=org.postgresql.Driver \ 
  -Ddb.default.url=${DATABASE_URL} 

Typesafe Cofnig

TypeSAFE config

  • 3 dostępne formaty
    • Java property file
    • JSON
    • HOCON
  • Zagnieżdżanie (include)
  • Podstawianie ${foo.bar}
  • Zmienne środowiskowe
    $HOME

Kolejność ładowania

(domyślna) 

  • Zmienne systemowe (-D)
  • application.conf
  • application.json
  • application.properties
  • reference.conf

Parametry SYSTEMOWE


-Dconfig.resource=...

-Dconfig.file=...

-Dconfig.url=...


DOKUMETACJA



github.com/typesafehub/config


 

VPS

VPS

  • Aplikacja ma swoje konto w systemie
    bez przywilejów
  • Chcemy szybko wykonywać rollback
    do poprzedniej wersji
  • Nie terminujemy połączeń SSL
  • Używamy supervisorów

SToS

  • Debian "wheezy" || Ubuntu LTS
  • Nginx 1.4.x
  • Supervisor 3.x
  • Java 1.7 → 1.8
  • Chef 11.x


STruktura KAtalogów

/home/app
|-- bin                   // Our binaries (some scripts)
|-- conf                  // Config for our application 
|-- current -> app-1.3.5  // Current running application
|-- app-1.3.5
|   |-- bin
|   |-- conf
|   |-- lib
|   |-- logs -> /home/app/logs
|   `-- share
|-- app-1.3.4
|   |-- bin
|   |-- conf
|   |-- lib
|   |-- logs -> /home/app/logs
|   `-- share
|-- logs
`-- waiting  

PAKOWANie


sbt dist 

PLAN

  1. Wypakować archiwum
  2. Stworzenie symlinków do
    katalogów współdzielonych
  3. Poprawienie "current"
  4. Restar aplikacji

SUPERVISOR

 /etc/supervisor/supervisord.conf
 [unix_http_server] chown=app

/etc/supervisor/conf.d/application.conf
 [program:application] command=/home/app/bin/app.sh user=app

URUCHAMIANIE


#!/bin/bash
APP=app
HOME=/home/app
 
OLD_STACK=-Djava.net.preferIPv4Stack=trueOOMK="-XX:OnOutOfMemoryError='kill -9 %p'"
#Evolution should be blocked by default#EVOLUTIONS=-DapplyEvolutions.default=true CONFIG=-Dconfig.file=$HOME/conf/application.conf   exec $HOME/current/bin/$APP $OLD_STACK $OOMK $CONFIG $EVOLUTIONS

DEPLOY SCRIPT

 #!/bin/bash
set -e
 
HOME=/home/app
APP=app
ZIP=$(ls $HOME/waiting/$APP-*.zip)
NAME=$(basename $ZIP)
VERSION=${NAME%.zip}
TARGET=$HOME/$VERSION
 
echo $ZIP
rm -rfv $TARGET
unzip -o $ZIP -d $HOME
ln -sv $HOME/logs $TARGET/logs
supervisorctl restart $APP

UPLOAD

scp \ target/universal/*.zip \ app@production:waiting 
Łatwo przerobić na sbt task, ale...

DEPLOY


ssh app@production.com -- bin/deploy.sh 
 

PODSUMOWANIE

HeROKU

Plusy

    • Łatwość w obsłudze
    • Proste wrożenia
    • Niski koszt początkowy
    • Brak zmartwień o sprzęt, system, bezpieczeństwo


      Minusy
    • Wysoka wariancja czasu odpowiedzi
    • Niska elastyczność
    • Wysoki koszt utrzymania dużej aplikacji
    • Duże ograniczenia w środowisku

    VPS

    Plusy

      • Większe gwarancje
      • Wyższa elastyczność
      • Zdecydowanie mniejsza wariancja
      • Środowisko pod naszą kontrolą  

        Minusy
        • Wyższe koszty początkowe
        • Sami zajmujemy się systemem
        • Potrzebny admin

        Play! na produkcji

        By bambucha

        Play! na produkcji

        • 1,389