Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poznámky #4

Open
4 tasks
Bystroushaak opened this issue Mar 15, 2016 · 11 comments
Open
4 tasks

Poznámky #4

Bystroushaak opened this issue Mar 15, 2016 · 11 comments

Comments

@Bystroushaak
Copy link
Member

Různé problémy:

  • Donutit ansible nainstalovat všechny závislosti, aby v něm mohl běžet docker.
  • Donutit ansible aby sestavil docker těsně před tím, než ho vloží do virtualu.
  • Donutit docker, aby sestavil všechno, co potřebuje k tomu, aby v něm mohl běžet resolver.
  • Donutit běžet resolver v docker image.
@Bystroushaak
Copy link
Member Author

Krok jedna a čtyři bych měl více/méně vyřešeny. Hm.

@westfood
Copy link
Member

Nepotřebujeme build machine a repo s artefaktama? Teď všechno klonuju přímo na stroj, buildnu a pustím. Plus je, že je to self-sufficient. Mínus je, že je asi zbytečný něco buildovat donekonečna. Nemám ale zkušenosti s CI. Ani s Jenkinsem.

@Bystroushaak
Copy link
Member Author

No, já se to právě už druhý den snažím udělat tak, aby potřeba nebylo. Podle některých zdrojů by to mělo jít i bez toho, ale jestli ještě budu chvíli bušit hlavou do zdi ansible, tak mi z toho asi h̢͚̻͛̍̌̊̇͆̍r͔̱̼̺̠̼͔ͤͪ̄ạ̯͉̫̣̟́ͮ̐́b̭͕̥̂͛̑͊n̰̦̞͈͇̠̼̽͝ė̮̆̌̀͌ͪ̕.

XML aby běžel resolver v tomcatu, k tomu .sh, aby se nainstaloval do dockeru, proprietární formát konfigurace pro docker, yaml pro ansible a ruby pro vagrant. Pak poběží server, kde bude virtuální centos, v něm virtuální docker, ve kterym bude java, ve který poběží resolver. Přijde mi, že za chvíli to bude tak hluboko, že tam narazíme na higgsův boson dřív než v CERNu.

@westfood
Copy link
Member

:-)

@westfood
Copy link
Member

hele, tak commitni nějaký kód, třeba mně něco napadne.

@Bystroushaak
Copy link
Member Author

Jsou tam dva podscripty + ten docker file. Vycházejí z tohohle instaláku:

# instalace postgresql
# source: https://wiki.postgresql.org/wiki/YUM_Installation
REPO_CONF=/etc/yum.repos.d/CentOS-Base.repo
sed '/\[base\]/a exclude\=postgresql\*' -i $REPO_CONF
sed '/\[updates\]/a exclude\=postgresql\*' -i $REPO_CONF

yum -y install http://yum.postgresql.org/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-2.noarch.rpm
yum -y install postgresql95-server.x86_64

/usr/pgsql-9.5/bin/postgresql95-setup initdb
chkconfig postgresql-9.5 on

service postgresql-9.5 start

# instalace apache tomcatu
# source: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-centos-7-via-yum
yum -y install tomcat

echo 'JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"' > /usr/share/tomcat/conf/tomcat.conf

systemctl enable tomcat
systemctl start tomcat

# instalace httpd (apache) a konfigurace pro práci s tomcatem
# source: http://www.diegoacuna.me/installing-mod_jk-on-apache-httpd-in-centos-6-x7-x/
yum -y install httpd httpd-devel apr apr-devel apr-util apr-util-devel gcc gcc-c++ make autoconf libtool wget

mkdir -p /opt/mod_jk/
cd /opt/mod_jk
wget http://www.eu.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz
tar -xvzf tomcat-connectors-1.2.41-src.tar.gz
cd tomcat-connectors-1.2.41-src/native

./configure --with-apxs=/usr/bin/apxs
make
libtool --finish /usr/lib64/httpd/modules
make install

# konfigurace apache a tomcatu
TOMCAT_CONF=/etc/tomcat/server.xml
sed '/<Service name="Catalina">/a <Connector port="8009" protocol="AJP\/1.3" redirectPort="8443" \/>' -i $TOMCAT_CONF
sed '/<Engine name="Catalina" defaultHost="localhost">/a <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">' -i $TOMCAT_CONF

cat > /etc/httpd/conf.d/mod_jk.conf <<EOF
LoadModule jk_module "/etc/httpd/modules/mod_jk.so"

JkWorkersFile /etc/httpd/conf/workers.properties
# Where to put jk shared memory
JkShmFile     /var/run/httpd/mod_jk.shm
# Where to put jk logs
JkLogFile     /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
#JkRequestLogFormat "%w %V %T"
#JkEnvVar SSL_CLIENT_V_START worker1
EOF

mkdir -p /var/run/mod_jk
chown apache:apache /var/run/mod_jk

cat > /etc/httpd/conf/workers.properties <<EOF
workers.apache_log=/var/log/httpd
worker.list=app1Worker
worker.stat1.type=status

worker.app1Worker.type=ajp13
worker.app1Worker.host=app1.myhost.com #put your app host here
worker.app1Worker.port=8009
EOF

cat > /etc/httpd/conf.d/app1.conf <<EOF
<VirtualHost *:80>
    ServerName resolver.nkp.cz
    ServerAdmin [email protected]
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
    CustomLog /var/log/httpd/app1_access.log combined
    ErrorLog /var/log/httpd/app1_error.log
    <IfModule mod_jk.c>
       JkMount /* app1Worker
    </IfModule>
</VirtualHost>
EOF

service httpd restart

# instalace resolveru
yum -y install unzip

TOMCAT_HOME=/usr/share/tomcat
chmod 777 $TOMCAT_HOME/webapps

su postgres
mkdir /tmp/czidlo
cd /tmp/czidlo

wget https://github.com/NLCR/CZIDLO/releases/download/v4.3.alpha/CZIDLO_4.3.alpha-installation.zip.zip
unzip CZIDLO_4.3.alpha-installation.zip.zip

psql -a -f initDatabase_4.3.alpha.sql
cp *.war $TOMCAT_HOME/webapps

cat > $TOMCAT_HOME/conf/context.xml <<EOF
<Context antiJARLocking="true" path="/api">
<Resource auth="Container"
 driverClassName="org.postgresql.Driver"
 maxActive="100" maxIdle="30" maxWait="200"
 name="jdbc/postgres"
 username="testuser"
 password="testpass"
 type="javax.sql.DataSource"
 url="jdbc:postgresql://localhost:5432/czidlo_core"
 />
</Context>
EOF

Ten jeden jsem včera trochu zkrouhnul o tem mod_jk, protože to je další dimenze problémů sama pro sebe.

Myslím, že budu muset změnit priority, protože se v tom naprosto brutálně patlám a už mě docela štve, že se mi nedaří progress. Zkusím vyignorovat úplně všechno, kromě sestavení ideálního dockeru (oproti testování v konzoli mi sestavování přes Dockerfile zase hází problémy s systemd, for fucks sake). Pak můžu řešit, jak ho integrovat do ansible.

@westfood
Copy link
Member

Hele na ujasnění.. zjednodušeně, abychom byli na stejné vlně.

Máme host resolver a v něm docker s aplikací.

Na úrovni hosta instalujeme PostgreSQL, Tomcat, httpd - páč jsou v yum/package-manageru.

Teď přichází dost heretická otázka:-) (snad mně nezabiješ), jestli je opravdu nutný rvát CZIDLO do dockeru, páč je už ve WAR. Což je defakto kontejnerový formát, který dáš tomcatu a on ho deployne. Tj. z netu stáhnem buildlý WAR, případně ho v mavenu buidlneme s naší konfigurací a předhodíme tomcatu na deployment.

Teď jsem commitnut PostgresSQL roli pro ansible, naisntaluje postgre-server a inicialuzuje defaultní db na hostu. Nevím ale co je míněno tímto?
REPO_CONF=/etc/yum.repos.d/CentOS-Base.repo
sed '/[base]/a exclude=postgresql*' -i $REPO_CONF
sed '/[updates]/a exclude=postgresql*' -i $REPO_CONF

Teď bych se kouknul na Tomcat a .. zatím bez buildnutí mod_jk. Jen jestli si poradí s WARem. Když to bude cajk. Šel bych další krok.

Tj. na začátek nám stačí db + tomcat + war. Když tohle funguje, můžeme to pak vylepšovat.

@westfood
Copy link
Member

Připravil jsem roli Tomcat a Czidlo. Je potřeba dokonfigurovat Czidlo vůči Tomcat a PostgeSQL. Nastuduji si k tomu docs a upravím. Na localhost:508080 je výstup z tomcat. Zatím prázdný, čeká se na konfiguraci Czidla.

@Bystroushaak
Copy link
Member Author

Hm.

@Bystroushaak
Copy link
Member Author

Takže jestli tomu rozumím dobře, tak úplně všechno pojede z ansible a docker používat nebudeme vůbec?

@westfood
Copy link
Member

Jak s dockerem ještě nedělám, tak přesně nevím, co je lepší use case pro tohle - jestli docker nebo ansible. Ale zatím to vypadá, že s ansible je to snažší - aspoň pro mně.

Na druhou stranu jsou dvě cesty, a můžeme přiravit obojí. Čistý vagrant+ansible, že si člověk postaví virtuál pomocí provize. A docker image, kterej si lupne do kterýho koliv systému. Např. s tím ansible playbookem co jsem připravil je probém, že je yum oriented. Tj. kdyby někdo to chtěl narvat na jinej OS, tak by musel upravit playbook. S hotovým docker image tenhle problém není - je to all in. Koncový admin jen řeší kontejnarizaci.

Docker určitě použiji pro seeder/wa-kat. Ale ještě s tím pořádně nedělám, tak z tebe budu nabírat získanu zkušenost.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants