Na Produkcji
Łukasz Dubiel
@bambuchaAdm
github.com/bambuchaAdm
@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
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
- Wypakować archiwum
- Stworzenie symlinków do
katalogów współdzielonych - Poprawienie "current"
- 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=true
OOMK="-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