Stoqs: μ‚¬μš©μž μ›Œν¬ μŠ€ν…Œμ΄μ…˜μ—μ„œ Docker 배포 ν…ŒμŠ€νŠΈ 및 λ¬Έμ„œν™”

에 λ§Œλ“  2019λ…„ 01μ›” 24일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: stoqs/stoqs

Linux 기반 ν˜ΈμŠ€νŒ… μ„œλ²„μ˜ ν”„λ‘œλ•μ…˜μ— STOQSλ₯Ό λ°°ν¬ν•˜λŠ” 방법 은 README.md에 λ¬Έμ„œν™” MBARI의 곡용 STOQS μ„œλ²„ λ₯Ό λ°°ν¬ν•˜κΈ° μœ„ν•΄ λ”°λ₯΄λŠ” μ§€μΉ¨μž…λ‹ˆλ‹€.)

ν•΄μ–‘ν•™ λ°μ΄ν„°μ˜ μ‚¬μš©κ³Ό 이해λ₯Ό 더 잘 μ§€μ›ν•˜κΈ° μœ„ν•΄ κ³Όν•™μžλ“€μ΄ 자체 μ›Œν¬ μŠ€ν…Œμ΄μ…˜μ— μ„€μΉ˜λœ STOQS둜 μž‘μ—… ν•  수 μžˆλ„λ‘ 지침을 μ œκ³΅ν•˜κ³ μžν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€λ₯Όλ‘œλ“œν•˜κ³  데이터 κ³Όν•™ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  자체 캠페인 데이터에 λŒ€ν•œ μ‹œκ°ν™”λ₯Ό 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ›Œν¬ μŠ€ν…Œμ΄μ…˜ μ„€μΉ˜ 지침은 MacOS, Windows 및 Linuxμ—μ„œ ν…ŒμŠ€νŠΈν•΄μ•Όν•©λ‹ˆλ‹€.

Data Science capstone help wanted

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

PR https://github.com/stoqs/stoqs/pull/838을 μ‚¬μš©ν•˜λ©΄ MacOSμ—μ„œ Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  λ‹€μ‹œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ MacOSμ—μ„œ μ €μž₯μ†Œλ₯Ό 볡제 ν•œ ν›„ λ³€κ²½ν•΄μ•Όν•˜λŠ” 파일의 μ°¨μ΄μ μž…λ‹ˆλ‹€.

git diff
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 7d23d994..f171564f 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -19,7 +19,7 @@ services:
     ports:
       - "${STOQS_PGHOST_PORT}:5432"
     # Set user for deployment on MacOS, assign HOST_ID=<result of `id -u`> in your .env file
-    ##user: ${HOST_UID}
+    user: ${HOST_UID}
     environment:
       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
       - STOQSADM_PASSWORD=${STOQSADM_PASSWORD}

diff docker/template.env docker/.env
16c16
< STOQS_HOME=/vagrant/dev/stoqsgit
---
> STOQS_HOME=/Users/mccann/GitHub/stoqsgit
19c19
< ##HOST_UID=
---
> HOST_UID=399
43c43
< ##CAMPAIGNS_MODULE=stoqs/mbari_campaigns.py
---
> CAMPAIGNS_MODULE=stoqs/mbari_campaigns.py

λͺ¨λ“  6 λŒ“κΈ€

MacOS에 λ°°ν¬ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν™˜κ²½μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • macOS Mojave 10.14.2κ°€ νƒ‘μž¬ 된 2013 λ…„ ν›„λ°˜ MacBook Pro
  • 1TB μ†”λ¦¬λ“œ μŠ€ν…Œμ΄νŠΈ λ“œλΌμ΄λΈŒ 및 16GB 1600Mhz DDR3 RAM
  • Docker Desktop Community 버전 2.00.2
  • GitHub 및 DockerHub에 λŒ€ν•œ ν›Œλ₯­ν•œ 인터넷 μ—°κ²°

github repoλ₯Ό λ³΅μ œν•˜κ³  이미지λ₯Ό 가져와 웹앱을 λ°°ν¬ν•©λ‹ˆλ‹€. unix time(1) λͺ…령은 μ‹œκ°„μ΄ 많이 κ±Έλ¦¬λŠ” λ‹¨κ³„μ˜ κ²½κ³Ό μ‹œκ°„μ„ κΈ°λ‘ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

mkdir /tmp/GitHub
cd /tmp/GitHub

time git clone https://github.com/stoqs/stoqs.git stoqsgit
Cloning into 'stoqsgit'...
remote: Enumerating objects: 1008, done.
remote: Counting objects: 100% (1008/1008), done.
remote: Compressing objects: 100% (92/92), done.
remote: Total 58864 (delta 938), reused 971 (delta 916), pack-reused 57856
Receiving objects: 100% (58864/58864), 197.44 MiB | 10.31 MiB/s, done.
Resolving deltas: 100% (44798/44798), done.
Checking out files: 100% (26469/26469), done.

real    0m26.203s
user    0m9.229s
sys 0m6.120s

export STOQS_HOME=/tmp/GitHub/stoqsgit
cd $STOQS_HOME/docker
cp template.env .env

# Edited .env to set STOQS_HOME variable and uncomment CAMPAIGNS_MODULE line

time docker-compose pull
Pulling postgis   ... done
Pulling mapserver ... done
Pulling stoqs     ... done
Pulling nginx     ... done

real    2m33.514s
user    0m1.839s
sys 0m0.278s

time docker-compose up -d
Creating network "docker_default" with the default driver
Creating volume "docker_static-files" with default driver
Creating volume "docker_media-files" with default driver
Creating stoqs-mapserver ... done
Creating stoqs-postgis   ... done
Creating stoqs           ... done
Creating stoqs-nginx     ... done

real    0m9.021s
user    0m0.558s
sys 0m0.159s

초기 데이터λ₯Ό κΈ°λ³Έ λ°μ΄ν„°λ² μ΄μŠ€λ‘œλ‘œλ“œν•˜κ³  λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” 데 λͺ‡ λΆ„ 더 κ±Έλ¦½λ‹ˆλ‹€. 둜그 좜λ ₯은 docker-compose logs -f 둜 λͺ¨λ‹ˆν„°λ§ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예 :

docker-compose logs -f
...
stoqs        | Wed Jan 30 17:34:01 2019 - [emperor] vassal /etc/uwsgi/django-uwsgi.ini is ready to accept requests
stoqs        | WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x55aab8b92010 pid: 245 (default app)
stoqs        | WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x55aab8b92010 pid: 250 (default app)

이제 둜컬 stoqs μ›Ή 앱을 https : // localhost μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€

screen shot 2019-01-30 at 9 57 53 am
λͺ¨λ“  것이 ν›Œλ₯­ν•΄ 보이며 μ‹€μ œλ‘œ MBARI의 곡용 STOQS μ„œλ²„μ—μ„œ μΆ”κ°€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Όλ‘œλ“œν•˜μ—¬ 자체 뢄석에 μ‚¬μš©ν•  μˆ˜μžˆλŠ” 둜컬 데이터λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 예 :

time curl -k https://stoqs.mbari.org/media/pg_dumps/stoqs_canon_september2018.pg_dump | \
>     docker exec -i stoqs pg_restore -Fc -U postgres -d stoqs_canon_september2018
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  195M  100  195M    0     0  1190k      0  0:02:48  0:02:48 --:--:-- 1993k

real    8m38.634s
user    0m0.688s
sys 0m1.026s

κ·ΈλŸ¬λ‚˜ Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λ €κ³ ν•˜λ©΄ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. Mac의 λ¬Έμ œλŠ” postgres 데이터 λ³Όλ₯¨μ΄ μ»¨ν…Œμ΄λ„ˆμ— λ§ˆμš΄νŠΈλ˜λŠ” 방식과 μ»¨ν…Œμ΄λ„ˆ 내뢀에 ν•„μš”ν•œ κΆŒν•œκ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€μ΄ λ¬Έμ œμ— λŒ€ν•œ λ‹€μŒ 주석에 μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

docker-compose logs -f κ°€ ν•œ 터미널 μ°½μ—μ„œ μ‹€ν–‰λ˜κ³  λ‹€λ₯Έ μ°½μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

docker-compose restart postgis

docker-compose logs -f 창에 λ‹€μŒμ΄ ν‘œμ‹œλ©λ‹ˆλ‹€.

stoqs-postgis | chown: changing ownership of '/var/lib/postgresql/data/pg_wal': No such file or directory
stoqs-postgis exited with code 1

그리고 postgis λ°μ΄ν„°λ² μ΄μŠ€ μ»¨ν…Œμ΄λ„ˆκ°€ 전체 STOQS 앱을 μ‹€ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Linux μ„œλ²„ λ˜λŠ” μ›Œν¬ μŠ€ν…Œμ΄μ…˜μ— 배포 ν•  λ•ŒλŠ”μ΄ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

postgres 이미지에 λŒ€ν•΄ μ„€λͺ… 된 λŒ€λ‘œ --user μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ postgis μ»¨ν…Œμ΄λ„ˆμ˜ μ‚¬μš©μžλ₯Ό μ„€μ •ν•˜λŠ” 데 μ•½κ°„μ˜ ν¬λ§μ΄μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ μ΄κ²ƒμœΌλ‘œ μš°λ¦¬λŠ” Mac 호슀트의 μ‚¬μš©μž IDλ₯Ό postgis μ»¨ν…Œμ΄λ„ˆμ˜ μ‚¬μš©μž ID와 μΌμΉ˜μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ Mac의 Dockerμ—μ„œ STOQSκ°€ μž‘λ™ν•˜λ„λ‘ λ‹€μ–‘ν•œ 섀정을 ν…ŒμŠ€νŠΈν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

  1. docker-compose logs -f μ‹€ν–‰ν•˜λŠ” ν•˜λ‚˜μ˜ 터미널 창을 μ—΄μ–΄ λ‘‘λ‹ˆλ‹€.
  2. λ‹€λ₯Έ μ°½μ—μ„œ docker-compose build 및 docker-compose up -d λͺ…λ Ή μ‹€ν–‰
  3. 또 λ‹€λ₯Έ μ°½ (λ˜λŠ” μ„ ν˜Έν•˜λŠ” νŽΈμ§‘κΈ°)μ—μ„œ ν…μŠ€νŠΈ 파일 νŽΈμ§‘

$ STOQS_HOME / dockerμ—μ„œ docker-compose.yml νŒŒμΌμ„ νŽΈμ§‘ν•˜μ‹­μ‹œμ˜€. postgis μ„œλΉ„μŠ€μ— λ‹€μŒ 행을 μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

user: 399

μ—¬κΈ°μ„œ 399 λŠ” λ‚΄ Macμ—μ„œ 둜그인 κ³„μ •μ˜ uidμž…λ‹ˆλ‹€. ( id -u λͺ…λ Ήμ—μ„œ κ°€μ Έμ˜΅λ‹ˆλ‹€.) 그런 λ‹€μŒ postgis 이미지λ₯Ό λ‹€μ‹œ λΉŒλ“œν•˜κ³  λ‹€μ‹œ λ°°ν¬ν•©λ‹ˆλ‹€.

docker-compose build postgis
docker-compose up -d

둜그 μ°½μ—λŠ” μ„œλΉ„μŠ€κ°€ λ‹€μ‹œ μ‹œμž‘λ˜κ³  λ°˜λ³΅λ˜λŠ” 것과 같은 λ‚΄μš©μ΄ ν‘œμ‹œλ˜λŠ” λŒ€μ‹  ν‘œμ‹œλ©λ‹ˆλ‹€.

stoqs        | *** Waiting for postgres container ...

성곡적인 λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 둜그 λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ˜κ³  κ²°κ΅­ https : // localhost μ—μ„œ 싀행쀑인 μ›Ή μ„œλΉ„μŠ€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€

STOQS μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” νŒŒμΌμ„ νŽΈμ§‘ν•˜κ³  ꡬ성이 성곡할 λ•ŒκΉŒμ§€ 둜그 좜λ ₯을 λͺ¨λ‹ˆν„°λ§ν•˜λŠ” μ΄λŸ¬ν•œ 단계λ₯Ό 반볡 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

PR https://github.com/stoqs/stoqs/pull/838을 μ‚¬μš©ν•˜λ©΄ MacOSμ—μ„œ Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  λ‹€μ‹œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ MacOSμ—μ„œ μ €μž₯μ†Œλ₯Ό 볡제 ν•œ ν›„ λ³€κ²½ν•΄μ•Όν•˜λŠ” 파일의 μ°¨μ΄μ μž…λ‹ˆλ‹€.

git diff
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 7d23d994..f171564f 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -19,7 +19,7 @@ services:
     ports:
       - "${STOQS_PGHOST_PORT}:5432"
     # Set user for deployment on MacOS, assign HOST_ID=<result of `id -u`> in your .env file
-    ##user: ${HOST_UID}
+    user: ${HOST_UID}
     environment:
       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
       - STOQSADM_PASSWORD=${STOQSADM_PASSWORD}

diff docker/template.env docker/.env
16c16
< STOQS_HOME=/vagrant/dev/stoqsgit
---
> STOQS_HOME=/Users/mccann/GitHub/stoqsgit
19c19
< ##HOST_UID=
---
> HOST_UID=399
43c43
< ##CAMPAIGNS_MODULE=stoqs/mbari_campaigns.py
---
> CAMPAIGNS_MODULE=stoqs/mbari_campaigns.py

이것은 μ‚¬μš©μž μ •μ˜ λ°μŠ€ν¬νƒ‘ μ›Œν¬ μŠ€ν…Œμ΄μ…˜μ—μ„œμ΄ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ ν•œ κ²°κ³Όμž…λ‹ˆλ‹€.

운영체제 : Ubuntu 18.04.1
CPU : AMD Ryzen 5 1600
λ©”λͺ¨λ¦¬ : 16GB DDR4 @ 3466Mhz
μŠ€ν† λ¦¬μ§€ : 512GB NVMe SSD
Docker CE 버전 : 18.09.1
인터넷 : ~ 70Mbps λ‹€μš΄λ‘œλ“œ

μœ„μ—μ„œμ™€ λ‹€λ₯΄κ²Œ ν•œ μœ μΌν•œ 일은 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§Œλ“œλŠ” 데 κ±Έλ¦° μ‹œκ°„μ„ μΈ‘μ •ν•˜κΈ° μœ„ν•΄ -d μŠ€μœ„μΉ˜μ—†μ΄ docker-composeλ₯Ό μ‹€ν–‰ ν•œ κ²ƒμž…λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” NGINXκ°€ μ‹€ν–‰λ˜λŠ” 것을보고 CTRL + Cλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜λ™μœΌλ‘œ μ’…λ£Œν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ μ‹€ν–‰ μ‹œκ°„λ³΄λ‹€ μ•½κ°„ 증가 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

mkdir /tmp/git
cd /tmp/git

time git clone https://github.com/stoqs/stoqs.git stoqsgit
Cloning into 'stoqsgit'...
remote: Enumerating objects: 1081, done.
remote: Counting objects: 100% (1081/1081), done.
remote: Compressing objects: 100% (144/144), done.
remote: Total 58937 (delta 985), reused 1020 (delta 937), pack-reused 57856
Receiving objects: 100% (58937/58937), 197.46 MiB | 8.42 MiB/s, done.
Resolving deltas: 100% (44845/44845), done.
Checking out files: 100% (26469/26469), done.

real    0m26.103s
user    0m9.998s
sys     0m3.263s

# Created STOQS_HOME variable
export STOQS_HOME=/tmp/git/stoqsgit
cd $STOQS_HOME/docker

# Setup .env set STOQS_HOME directory and uncommented CAMPAIGNS_MODULE
cp template.env .env
vi .env

# Output omitted

time docker-compose pull                                                                                                                                                      

# Output omitted

real    5m6.275s
user    0m1.388s
sys     0m0.160s

time docker-compose up

# Output omitted

real    6m31.452s
user    0m2.609s
sys     0m0.893s
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰