Phase2 — How to “nginx, uwsgi, django, redis, python 3 — project run on Centos 7 and integrate with IDE of pycharm.

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek
7 min readJan 31, 2021

Phase1 把各別的Services都build 好, 接下來就是把它們整合起來, 上一篇分享完之後, 有朋友說希望可以在phase2 也講到 datadog 整合python, 想想也不錯, 畢竟自己是總代理商, 沒道理不提到datadog

Datadog 是一款Monitoe as service 的雲端監控, 不只是監控系統、網路效能, 透過代碼帶入, 還可以監控程式碼效能, 詳細可參考 : https://www.datadoghq.com.tw

Python Performance Monitoring & Analytics

System integration map

1、Nginx ← → uWSGI 配置

使用到的資源 : uwsgi_params 文件

https://github.com/nginx/nginx/blob/master/conf/uwsgi_params
  • 1.1、這個文件配置nginx 時會用到, 主要用來讓nginx 認識 uwsgi, 如果在phase1 有按造順序安裝, 可以在 /etc/nginx/ 內看到, 沒看到的話可以vim uwsgi_param來新增一個, 內容就cv github 內容就可以.
  • 1.2、到 /etc/nginx/ 內新增一個 .conf, 名稱自取就可以, 這邊我用pysite.conf, 內容直接複製以下
upstream {
server unix:///etc/nginx/pysite.sock;
}
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
}
location / {
uwsgi_pass 127.0.0.1:9090;
include /etc/nginx/uwsgi_params;
}
}
  • server unix:///etc/nginx/pysite.sock; 這邊直接用socket 不用port主要是socket 的效能跟資源使用率會比port 好不少.
  • include /etc/nginx/uwsgi_params; 這段要根據uwsgi_params 的位址做調整.

最後記得restart nginx

service nginx restart

然後測一下nginx 的conf 正不正常

nignx -T

2、uWSGI ← → django配置

cd /etc
mkdir uwsgi
vim uwsgi.ini

為了便於管理,在etc 下新增一個uwsgi folder 並把 .ini 的conf 文件放裡面, 以下是ini文件的內容

[uwsgi]
socket = 127.0.0.1:9090
master = true //主程序
vhost = true //多站模式
no-site = true //多站模式無入口
workers = 2 //子程序數
reload-mercy = 10
vacuum = true //Quite、reload時 clear 文件
max-requests = 1000
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi.pid //pid程序文件
daemonize = /var/log/uwsgi.log

3、Pycharm IDE 配置

Pycharm 是python 常用的 IDE, 但免費的”社區版” 沒有佈署的功能, 需要手動上傳到生產環境上, 只有付費的專業版才有, 專業版不便宜, 可以到官網參考價格.

https://www.jetbrains.com/pycharm/buy/#commercial?billing=yearly
  • 設定Pycharm的Deployment
選SFTP
輸入主機的SFTP帳密(也就是SSH)
到Mappings 這邊設定本地路徑跟主機路徑

一點小心得 : 不少人會在自己電腦上安裝測試環境, 然後在電腦上直接做測試, 但這種方法很容易遇到自己電腦run 正常, 但把代碼佈署上生產環境時卻GG, 所以我開發時比較傾向, 事先把生產環境佈署好,然後再從生產環境clone 一份做開發測試環境, 然後把IDE 跟測試環境做同步,用這份測試環境做驗證…這樣一來可以排除掉很多環境差異的問題.

三個服務的環境整合與IDE配置, 就都到此結束了, 接著是Datadog 部分

Datadog APM 可以協助trace source code 問題與效能

* 安裝datadog agent

DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxx DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

xxxxxxxxxxxxxxxxxxxxxxxx這段是datadog 給的api key, 可以login datadog後在Integrations內找到

* 安裝datadog tracer

pip3 install ddtrace

以上兩個安裝完成之後, 還要在agent 的conf 內把APM功能打開

vim /etc/datadog-agent/datadog.yaml

找到 apm_config這段把註釋(#)拿掉, 接著在下面可以找到 apm_enabled: true, 一樣也是把註釋(#)拿掉.

service datadog-agent restart

完成後restart agent就完成基本配置

* python code 放import

import os
from ddtrace import tracer

* ddtrace library doc

Datadog 能夠trace 的範圍很大, 可以參考以下Glossary & Walkthrough的線上文件.

--

--

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek

I am Kirin., I was ShellFans AI Technology’s CTO. Our team specializes in IoT, Blockchain, Cloud and Ai. | https://www.shell.fans