Skip to content

[20] PRS Setup

9health edited this page Dec 28, 2022 · 22 revisions

1. Lý do

Chạy thử PRS xem kết quả ra như thế nào

2. Tham khảo

2.1 Chung

  1. README.md tại https://github.com/9health/moviegeek

2.2 The Movie Database

  1. Sign Up — The Movie Database (TMDB)
  2. API FAQ — The Movie Database (TMDB)
  3. API Status Codes — The Movie Database (TMDB)
  4. About TMDB - The Movie Database
  5. https://www.themoviedb.org/settings/api/request

2.3 Python

  1. Python Virtual Environments: A Primer
  2. Understanding Python virtual environments using venv and virtualenv. Bản [cache] trên Google ở đây.
  3. Can I add comments to a pip requirements file? - Stack Overflow
  4. Error "Import Error: No module named numpy" on Windows
  5. How to install development tools on an unmanaged server
  6. Python.h: No such file or directory - Stack Overflow
  7. Why is python setup.py saying invalid command 'bdist_wheel' on Travis CI?

2.4 Về pyLDAVis

  1. pyLDAvis 2.1.2 documentation
  2. LDAvis - R package for interactive topic model visualization.
  3. Visualizing Topic Models - Speaker Deck
  4. Topic Model Visualization using pyLDAvis. Bản cached trên Google ở đây.
  5. Visualization Techniques for Assessing Textual Topic Models
  6. Topic model - Wikipedia

2.5 Về đo tốc độ mạng

  1. grep current rx and tx speed - LinuxQuestions.org
  2. vnStat - a network traffic monitor for Linux and BSD - Humdi.net

2.6 Về Python web server

  1. Invalid http_host header - python - Stack Overflow
  2. python - manage.py runserver - Stack Overflow
  3. Save Screen (program) output to a file - logging - Stack Overflow
  4. Copying the GNU screen scrollback buffer to a file (extended hardcopy)

3. Cần đạt được

  • PRS web app chạy được và chạy đúng với máy ảo Linux B1s trên Azure và không phát sinh chi phí trừ vào thẻ tín dụng.
  • Vào được 24 giờ trong 365 ngày.

4. Rủi ro

4.1 Phiên bản Python không hợp

  • Do không sử dụng docker và tự cài trên Ubuntu 18.04 LTS.

4.2 Các packages bị thay đổi phiên bản

  • Do phiên bản Python không giống với phiên bản tác giả dùng hay phiên bản ở docker.
  • Cần chỉnh sửa thì mới bật được PRS web app!

4.3 Vào trang web chậm

  • Do máy ảo (VM) đặt ở tận phía Tây nước Mỹ.

4.4 Không an toàn vì dùng http

  • Do PRS như vậy từ đầu

5. Cách làm

5.1 Đăng ký API tại The Movie Database

  • Dăng ký tài khoản tại trang web sau
  • Tạo API ở link sau
  • Vào repository và tạo file .prs với nội dung như sau
    {"themoviedb_apikey": "TheMovieDatabaseAPICopyHere32Chars"}
    

5.2 Cài Ubuntu Linux packages

sudo apt-get install python3-venv
sudo apt-get install build-essential
sudo apt-get install python3.6-dev
sudo apt-get install gcc libpq-dev -y
sudo apt-get install python-dev  python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
sudo apt-get install vnstat -y
sudo apt-get install sqlite3 -y
sudo apt-get install tree -y

5.3 Sử dụng branch 20221215_ubuntu_18_04_mod

git clone https://github.com/9health/moviegeek.git
git checkout 20221215_ubuntu_18_04_mod

5.4 Tạo môi trường Python ảo

python3 -m venv venv_3.6.9
source venv_3.6.9/bin/activate
python3 -m pip install wheel
python -m pip install -r requirement.txt

5.5 Tạo MovieGEEKS databases

Theo tác giả có sử dụng option SQLite3 database đủ cho kế hoạch ban đầu nên không cần setup PostgreSQL nữa.

python3 manage.py makemigrations
python3 manage.py migrate --run-syncdb

5.6 Lấy dữ liệu the TMDB

python3 populate_moviegeek.py
python3 populate_ratings.py

2 jobs này chạy rất là lâu.

5.7 Chạy web server

python3 manage.py runserver 0.0.0.0:8080

5.8 Tắt web server

Press Ctrl + C

5.9 Thoát khỏi môi trường Python ảo

deactivate

6. Kiểm tra

6.1 Link vào PRS web app

http://ninehealth.westus.cloudapp.azure.com:8080

6.2 CPU & RAM

  • Còn trống (free) khoảng 600 MB RAM tương ứng 60% RAM.
  • Khi load trang web CPU lên khoảng 5%-6%
top - 19:45:58 up 5 min,  5 users,  load average: 0.08, 0.13, 0.08
Tasks: 112 total,   1 running,  63 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.3 us,  1.0 sy,  0.0 ni, 94.4 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :   934808 total,   277108 free,   309516 used,   348184 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   480772 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND     
 1542 ninehea+  20   0 1055172 139516  36804 S  5.3 14.9   0:09.58 python3     
  982 root      20   0   79548  21444   8984 S  0.3  2.3   0:00.22 python3     
 1023 root      20   0  460576  29108   9972 S  0.3  3.1   0:00.97 python3     
    1 root      20   0  159728   9068   6760 S  0.0  1.0   0:02.90 systemd     
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd    
    3 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 rcu_gp      
    4 root       0 -20       0      0      0 I  0.0  0.0   0:00.00 rcu_par_gp  
  • Sau khi chạy web app vài phút, load 1 trang Home page
$ cat /proc/meminfo 

MemTotal:         934808 kB
MemFree:          225136 kB
MemAvailable:     493728 kB
Buffers:           26360 kB
Cached:           350796 kB
SwapCached:            0 kB
Active:           411476 kB
Inactive:         181004 kB
Active(anon):     215724 kB
Inactive(anon):      304 kB
Active(file):     195752 kB
Inactive(file):   180700 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               488 kB
Writeback:             0 kB
AnonPages:        215332 kB
Mapped:            76568 kB
Shmem:               712 kB
KReclaimable:      36300 kB
Slab:              72132 kB
SReclaimable:      36300 kB
SUnreclaim:        35832 kB
KernelStack:        2288 kB
PageTables:         5820 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      467404 kB
Committed_AS:     474408 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       25580 kB
VmallocChunk:          0 kB
Percpu:              556 kB
HardwareCorrupted:     0 kB
AnonHugePages:     53248 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:       75712 kB
DirectMap2M:      972800 kB
DirectMap1G:           0 kB

6.3 Độ trễ khi vào website

Khoảng 2-3 giây để load home page

First image https://github.com/9health/moviegeek/wiki/res/Screenshot_Network_Speed_20221215.heic

Second image https://github.com/9health/moviegeek/wiki/res/Screenshot_Network_Speed_20221215A.heic

6.4 Lỗi (Error) ở stdout

T.B.U

7. Lưu ý

7.1 Cách sử dụng môi trường Python ảo

$ python3 -m venv venv_3.6.9

$ source venv_3.6.9/bin/activate

$ python3 -m pip install django

$ python 3

>>> import django
>>> help(django)

Help on package django:

NAME
    django

PACKAGE CONTENTS
    __main__
    apps (package)
    conf (package)
    contrib (package)
    core (package)
    db (package)
    dispatch (package)
    forms (package)

$ deactivate

# Check Python global environment

$ python3

>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'django'

7.2 Chỉnh sửa phiên bản Python packages

# numpy==1.22.2
numpy==1.19.5
# pandas==1.4.1
pandas==1.1.5
# scipy==1.8.0
scipy==1.5.4

8. Lịch sử

  • 2022/Dec/15: Tạo mới
  • 2022/Dec/21: Thêm phần thông tin RAM sau khi chạy web app phần 6.2. Thêm package SQLite 3 phần 5.2.
  • 2022/Dec/28: Thêm package tree phần 5.2.