气候服务平台ClimateSERV2.0简介(Python)

学术   2024-11-11 15:15   湖南  

1 简介

ClimateSERV 2.0允许开发从业者、科学家/研究人员和政府决策者可视化和下载历史降雨数据、植被状况数据以及 180 天的降雨和温度预报,以增进对农业和水资源供应相关问题的理解并做出改进的决策。

这些数据可以通过 Web 应用程序直接访问,也可以使用 Python 应用程序中的 ClimateSERVpy 通过应用程序 API 进行访问

可以通过以下方式安装 ClimateSERVpy包:

pip install climateserv
conda install -c servir climateserv
环境要求:
  • Python 3.9.5 或更高版本 (建议使用 3.9.5)

  • PostgreSQL (版本 13)

  • THREDDS (版本 4.6.14)

  • Linux 服务器

具体安装需要使用两个环境:一个用于数据库,另一个用于应用程序

2 在conda 环境中设置数据库

  • 创建环境

mkdir -p /cserv2/python_environments/conda/anaconda3/envs/
conda create --prefix=/cserv2/python_environments/conda/anaconda3/envs/psqlenv python=3.9.5
conda create --name psqlenv python=3.9.5
  • 进入环境

conda activate psqlenv
  • 通过 Conda 安装 PostgreSQL

conda install -y -c conda-forge postgresql
  • 创建基本数据库

cd /cserv2
mkdir db
cd db

initdb -D local_climateserv
  • 启动 Postgres 的服务器模式/实例

pg_ctl -D local_climateserv -l logfile start
  • 创建非超级用户(更安全)

createuser --encrypted --pwprompt csadmin
  • 使用此用户,在 Base Database 中创建内部数据库

createdb --owner=csadmin cs2_db
conda deactivate
  • 创建数据库连接文件

将以下内容粘贴到下面的文件:

/cserv2/django_app/ClimateSERV2/climateserv2/data.json

{
"NAME": "cs2_db",
"USER": "csadmin",
"PASSWORD": "PASSWORD_YOU_SET_FOR_THIS_USER",
"HOST": "127.0.0.1",
"SECRET_KEY": "Your_super_secret_key_for_django"
"DEBUG": "False"
}

对于 SECRET_KEY 必须是一个较大的随机值,并且必须保密。

对于 DEBUG,在 development 中,将其设置为 “True”,对于生产环境,将其设置为 False

3 在conda 环境中设置应用程序

安装 conda 后,运行以下命令来创建 python 环境并激活

conda create --prefix=/cserv2/python_environments/conda/anaconda3/envs/climateserv2 python=3.9.5
conda activate ClimateSERV2

cd 到项目目录,然后运行以下两个安装命令:

pip install -r requirements.txt
conda install --file conda_requirements.txt

完成后,再添加一个全局 lib 来代理消息队列

sudo apt-get install rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo service rabbitmq-server start

现在可以创建一个服务和配置文件来启动 celery,这是任务队列,专注于实时处理。

需要创建两个文件,一个位于 /etc/systemd/system/celery.service,另一个位于 /etc/conf.d/celery

在 celery.service 中,需要以下内容(可能需要调整路径):

[Unit]
Description=Celery Service
After=rabbitmq-server.service network.target
Requires=rabbitmq-server.service
RuntimeDirectory=celery


[Service]
Type=forking
User=www-data
Group=www-data
EnvironmentFile=/etc/conf.d/celery
WorkingDirectory=/cserv2/django_app/ClimateSERV2
ExecStart=/bin/bash -c '${CELERY_BIN} -A $CELERY_APP multi start $CELERYD_NODES \
--pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \
--loglevel="${CELERYD_LOG_LEVEL}" $CELERYD_OPTS'

ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait $CELERYD_NODES \
--pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \
--loglevel="${CELERYD_LOG_LEVEL}"'

ExecReload=/bin/sh -c '${CELERY_BIN} -A $CELERY_APP multi restart $CELERYD_NODES \
--pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \
--loglevel="${CELERYD_LOG_LEVEL}" $CELERYD_OPTS'

Restart=always

[Install]
WantedBy=multi-user.target

在 /etc/conf.d/celery 中,可以粘贴:

CELERYD_NODES="w1 w2 w3"
DJANGO_SETTINGS_MODULE="climateserv2.settings"

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/cserv2/python_environments/conda/anaconda3/envs/climateserv2/bin/celery"

# App instance to use
CELERY_APP="climateserv2"
CELERYD_MULTI="multi"

# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"

Celery 使用一个临时目录,该目录需要在重启时自动创建。创建 /usr/lib/tmpfiles.d 并将以下内容粘贴到其中:

D /var/run/celery 0777 root root - -

手动创建此目录,以及其他几个目录:

sudo mkdir /var/run/celery 
sudo chmod 777 /var/run/celery -R

sudo mkdir /opt/celery
sudo chmod 777 /opt/celery

sudo mkdir /var/log/celery
sudo chmod 777 /var/log/celery -R

可以启用并启动 celery:

sudo chmod 644 /etc/systemd/system/celery.service
sudo systemctl daemon-reload
sudo systemctl enable celery
sudo service celery restart

开始应用程序设置

python manage.py migrate

这将负责设置数据库

运行前,需要创建一个超级用户

python manage.py createsuperuser

启动应用程序

python manage.py runserver

4 其他

web端还提供不同参数的统计计算以及不同数据的图层可视化


参考:https://github.com/SERVIR/ClimateSERV2





声明:欢迎转载、转发。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及内容、版权和其他问题,请联系小编(微信:qxxjgzh)处理。


往期推荐
 获取ERA5/ERA5-Land再分析数据(36TB/32TB)
 获取全球GPM降水数据,半小时/逐日(4TB)
 获取1998-2019 TRMM 3B42逐日降水数据
 获取最新版本CMIP6降尺度数据集30TB
 EC数据商店推出Python在线处理工具箱
★ EC打造实用气象Python工具Metview
★ 机器学习简介及在短临天气预警中的应用
★ Nature-地球系统科学领域的深度学习及理解
★ 灵魂拷问:ChatGPT对气象人的饭碗是福是祸?
★ 气象局是做啥的?气象局的薪水多少?

气象学家
【气象学家】公众号平台为您把握最新AI4Science、解读最新气象科研进展、分享气象实用编程技巧、追踪气象即时资讯。致力于提升我国天气和气候预报、预测水平。欢迎加入气象AI和气象行业交流群以及气象博士群!与12W+专业人士一起交流互动!
 最新文章