WebarchivCZ / Seeder

Seeder - Czech webarchive curating tool and public site
MIT License
15 stars 2 forks source link

Doplňující dotazy #254

Closed westfood closed 8 years ago

westfood commented 8 years ago

Pár dotazů:

uspokojit requirements_dev.txt -- je potřebný i pro produkci?

který z těhle příkazů jsou idempotentní? tj. můžu je pustit na produkci X krát, aniž bych to rozbil;-)

python3 ./manage.py migrate   
python3 ./manage.py collectstatic --noinput   
python3 ./manage.py rebuild_index --noinput   
python3 ./manage.py crontab add
# tx pull
tx pull -a
python3 ./manage.py compilemessages
# tx push
bash pull_locales.sh
python3 ./manage.py makemessages -a
tx push -t -s
Visgean commented 8 years ago

requirements_dev neni potrebny pro produkci, vsechny ty prikazy muzes spustit kolikrat chces..

westfood commented 8 years ago

naimportoval jsem úspěšně starou db s manage legacy_sync..

ale python3 ./manage.py rebuild_index --noinput na mně vystřelilo hlášku viz. dole:

chápu to správně že se mám postarat o instalaci elastic search? rebuild_index teda funguje dokud se neobjeví něco k indexování?

(seeder) [rudolf@curator02 Seeder]$ ./manage.py rebuild_index --noinput
Removing all documents from your index because you said so.
DELETE http://elastic:9200/haystack [status:N/A request:0.034s]
Traceback (most recent call last):
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/connection.py", line 142, in _new_conn
    (self.host, self.port), self.timeout, **extra_kw)
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/util/connection.py", line 67, in create_connection
    for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
  File "/usr/lib64/python3.4/socket.py", line 533, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/elasticsearch/connection/http_urllib3.py", line 94, in perform_request
    response = self.pool.urlopen(method, url, body, retries=False, headers=self.headers, **kw)
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/connectionpool.py", line 623, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/util/retry.py", line 232, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/packages/six.py", line 310, in reraise
    raise value
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/connectionpool.py", line 578, in urlopen
    chunked=chunked)
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/connectionpool.py", line 362, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib64/python3.4/http/client.py", line 1088, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib64/python3.4/http/client.py", line 1126, in _send_request
    self.endheaders(body)
  File "/usr/lib64/python3.4/http/client.py", line 1084, in endheaders
    self._send_output(message_body)
  File "/usr/lib64/python3.4/http/client.py", line 922, in _send_output
    self.send(msg)
  File "/usr/lib64/python3.4/http/client.py", line 857, in send
    self.connect()
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/connection.py", line 167, in connect
    conn = self._new_conn()
  File "/opt/virtualenv/seeder/lib/python3.4/site-packages/urllib3/connection.py", line 151, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fecba313ef0>: Failed to establish a new connection: [Errno -2] Name or service not known
westfood commented 8 years ago

nevím jesti to souvisí.. template k local_settings.py má jinej backend než testovací kontejner: haystack.backends

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'elasticstack.backends.ConfigurableElasticSearchEngine',
        'URL': 'http://elastic:9200/',
        'INDEX_NAME': 'haystack',
    },
}

kontejner má zase:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://elastic:9200/',
        'INDEX_NAME': 'haystack',
    },
}
Visgean commented 8 years ago

jj musis mit ten configurable backend, co se tyce toho elasticu tak jsem na nej vytvoril ten Dockerfile_elastic. Obecne budes muset vytvorit vsechny kontejnery jak jsou popsane v docker-compose...

westfood commented 8 years ago

cajk, už to funguje.. ale jen pro info..

docker je pro testování, produkce jede bez dockeru a konfigurace jde přes ansible..

Visgean commented 8 years ago

Aha ok, dik.

westfood commented 8 years ago

Jo, srry. Před pár měsíce byli pro mně ty technologie nový, tak jsem si to neuměl koncepčně srovnat. Takže jsme se domluvili na něčem, co jsem pak přehodnotil. Každopádně, díky tomu pythonu jsem naučil tunu věcí o provozu současných aplikací. Proti deploymentu apache/nginx + servletu + war - je to jinej svět. Tohle už fakt nejde stavět ad-hoc příkazama.

Současně přemýšlím takhle: Docker a docker compose je skvělej pro testování. Stejně tak i pro případnou veřejnost. Když je kontejner postavený v ubuntu tak cajk - je to defakto standard. Možná bych byl proto ty skripy rvát víc do Dockerfile, ať je to přehledný a na jednom místě, ale těm skriptům s prefixem d rozumím. S přípravou Dockerfile na něco komplikovanějšího nemám zkušenost ani neznám best practives, tak je tvůj přístup možná správnej;-) Ale každopáně, je to defakto automatizační skript. Já budu testovat ansible provizi docker prostředí - protože Domain language cílenej na popis stavu stroje je čitelenější než skripty. Budu se rozhodovat až na základě zkušenosti. Ale každopádně, i ten skript je admin dokumentace. Takže to beru. // Možná bude ve finále užitečnější programátorská dokumentace. Z admin dokumentace napsat jen základný špeky jako možnosti legacy_sync, založení user, co je idempotentní, že potřebuješ Python 3.. Tj. aby admin věděl co spravuje a jak se o tom má starat. Info o instalaci pokryje Dockerfile a můj ansible playbook.

Na produkci: Poctivá ansible automation na všechen náš SW na OS (rozhodl jsem pro CentOS), ke kterýmu je případně možné dokoupit podporu v ČR - RedHat aspol. - kdyby vedení potřebovalo něco certifikovat a byl na to požadavek. Ty YAML soubory pro ansible jsou pro mně čitelný snáz jak skripty, takže od teď beru jako ofiko dokumentaci jak něco nainstalovat.

Lesson learned: Až bude zas někdo pro nás něco prgat, měl by za úkol připravit jak Dockerfile pro testování, tak ansible+vagrant lokální prostředí jako přípravu deploymentu do naší infra - který slouží i jako defakto dokumentace. Ale chápu že vývoj teď probíhá defakto v debian/ubuntu, takže se lidi v Suse RedHat specifách neorientují a je vlastně otázka, zda-by dev vůbec měl. Kontejnery jsou spása.

Časem kontejnery na produkci přehodnotím. RancherOS zní zajímavě. A líbí se mi myšlenka, že všechny non-core/podpůrné aplikace pojedou z kontejnerů.

Visgean commented 8 years ago

Ok, to dava smysl, btw kde je teda ansible file pro seedera? Ja bych rad videl jak to funguje...