天天看點

開源物聯網Actorcloud配置postgres庫,使用flask初始化55張表!

作者:flyiot

目錄

  • 前言
  • 1,關于ActorCloud
  • 2,使用postgresql資料庫,并配置帳号密碼
  • 3,初始化資料庫表
  • 4,總結

前言

本文的原文連接配接是:

https://blog.csdn.net/freewebsys/article/details/108971807

fly-iot飛馳物聯專欄:

https://blog.csdn.net/freewebsys/category_12219758.html

1,關于ActorCloud

關于ActorCloud

ActorCloud 是一個物聯網雲平台,該平台提供了一些裝置管理和應用使能等基礎能力,使應用開發者從繁瑣的底層連接配接、資料傳輸和基本資料處理、存儲中解放出來,更加關注于業務本身的開發和創新,縮短應用開發周期,降低開發成本,快速地滿足客戶的需求。ActorCloud旨在解決物聯網平台開發過程中的以下問題:

新業務上線周期長:由于物聯網應用開發覆寫了硬體、網絡、協定、接入、雲計算、資料存儲、資料分析和前端應用開發等各個方面,導緻研發周期比較長,無法快速響應客戶的靈活需求。

網絡聯接類型複雜:物聯網接入的網絡連接配接類型非常多,包括營運商提供的2G/3G/4G、NB-IoT,WIFI,LoRaWAN等。

終端、傳感器廠家衆多,需要保證在終端裝置和伺服器之間建立穩定的資料通道,減少裝置端的開發成本。

安全性:物聯網連接配接的真正實體實體裝置,如何保護這些裝置的安全通路控制、以及采集上來的資料的安全、可靠性等。

物聯網接入的海量裝置:物聯網應用可能會接入海量的裝置,保證在軟體的功能性需求滿足的情況下,還需保證在海量裝置接入的情況下應用的高穩定和高可靠性。

github項目位址:

https://github.com/actorcloud/ActorCloud

gitbook 文檔位址:https://wivwiv.gitbooks.io/emq-actorcloud-doc/content/introduction/introduction.html

2,使用postgresql資料庫,并配置帳号密碼

docker-compose配置檔案:

postgres:
    image: postgres:13-alpine
    container_name: postgres
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
      timeout: 45s
      interval: 10s
      retries: 10
    restart: always
    environment:
      - POSTGRES_USER=actorcloud
      - POSTGRES_PASSWORD=public
      - APP_DB_USER=actorcloud
      - APP_DB_PASS=public
      - APP_DB_NAME=actorcloud
    volumes:
      - ./postgres:/docker-entrypoint-initdb.d/
    ports:
      - 5432:5432
           

然後後端的python服務就可以連結上了。

3,初始化資料庫表

研究半邊天,才明白 flask 有自動執行的指令。還是挺強大的。

參考這個:

https://blog.csdn.net/lingyingdon/article/details/108084721

Actorcloud 開發了自定義的指令,這邊使用 flask 執行指令即可:

# 先設定app 檔案:
export FLASK_APP=/data/manage.py 

# flask --help
Usage: flask [OPTIONS] COMMAND [ARGS]...

  This shell command acts as general utility script for Flask applications.

  It loads the application configured (through the FLASK_APP environment
  variable) and then provides commands either provided by the application or
  Flask itself.

  The most useful commands are the "run" and "shell" command.

  Example usage:

    $ export FLASK_APP=hello.py
    $ export FLASK_DEBUG=1
    $ flask run

Options:
  --version  Show the flask version
  --help     Show this message and exit.

Commands:
  db       Perform database migrations.
  deploy   Deploy project
  run      Runs a development server.
  shell    Runs a shell in the app context.
  upgrade  Upgrade project

# 在 /data 目錄直接執行即可。
flask upgrade

########## project_manage.project_deploy() 
database init
  Creating directory /data/migrations/orm ...  done
  Creating directory /data/migrations/orm/versions ...  done
  Generating /data/migrations/orm/env.py ...  done
  Generating /data/migrations/orm/README ...  done
  Generating /data/migrations/orm/alembic.ini ...  done
  Generating /data/migrations/orm/script.py.mako ...  done
  Please edit configuration/connection/logging settings in '/data/migrations/orm/alembic.ini' before proceeding.
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.ddl.postgresql] Detected sequence named 'roles_id_seq' as owned by integer column 'roles(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'groups_id_seq' as owned by integer column 'groups(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'app_api_logs_id_seq' as owned by integer column 'app_api_logs(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'devices_id_seq' as owned by integer column 'devices(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'invitations_id_seq' as owned by integer column 'invitations(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'lwm2m_items_id_seq' as owned by integer column 'lwm2m_items(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'device_count_day_id_seq' as owned by integer column 'device_count_day(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'data_points_id_seq' as owned by integer column 'data_points(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'certs_id_seq' as owned by integer column 'certs(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'emqx_bills_month_id_seq' as owned by integer column 'emqx_bills_month(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'dict_code_id_seq' as owned by integer column 'dict_code(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'timer_publish_id_seq' as owned by integer column 'timer_publish(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'actor_tasks_id_seq' as owned by integer column 'actor_tasks(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'resources_id_seq' as owned by integer column 'resources(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'login_logs_id_seq' as owned by integer column 'login_logs(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'app_api_logs_month_id_seq' as owned by integer column 'app_api_logs_month(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'emqx_bills_day_id_seq' as owned by integer column 'emqx_bills_day(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'history_alerts_id_seq' as owned by integer column 'history_alerts(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'app_api_logs_day_id_seq' as owned by integer column 'app_api_logs_day(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'services_id_seq' as owned by integer column 'services(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'device_count_month_id_seq' as owned by integer column 'device_count_month(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'system_info_id_seq' as owned by integer column 'system_info(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'current_alerts_id_seq' as owned by integer column 'current_alerts(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'device_count_hour_id_seq' as owned by integer column 'device_count_hour(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'app_api_logs_hour_id_seq' as owned by integer column 'app_api_logs_hour(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'messages_id_seq' as owned by integer column 'messages(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'codec_id_seq' as owned by integer column 'codec(id)', assuming SERIAL and omitting
INFO  [alembic.ddl.postgresql] Detected sequence named 'permissions_id_seq' as owned by integer column 'permissions(id)', assuming SERIAL and omitting
INFO  [alembic.env] No changes in schema detected.
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
           

終于可以把資料标建立了:

進入到 postgresql 當中執行:

docker exec -it postgres sh
/ # psql -U actorcloud
psql (13.11)
Type "help" for help.

actorcloud=# 
actorcloud=# \c actorcloud

actorcloud=# \d
                     List of relations
 Schema |           Name            |   Type   |   Owner    
--------+---------------------------+----------+------------
 public | actions                   | table    | actorcloud
 public | actions_id_seq            | sequence | actorcloud
 public | actor_tasks               | table    | actorcloud
 public | actor_tasks_id_seq        | sequence | actorcloud
 public | alembic_version           | table    | actorcloud
 public | app_api_logs              | table    | actorcloud
 public | app_api_logs_day          | table    | actorcloud
 public | app_api_logs_day_id_seq   | sequence | actorcloud
 public | app_api_logs_hour         | table    | actorcloud
 public | app_api_logs_hour_id_seq  | sequence | actorcloud
 public | app_api_logs_id_seq       | sequence | actorcloud
 public | app_api_logs_month        | table    | actorcloud
 public | app_api_logs_month_id_seq | sequence | actorcloud
 public | applications              | table    | actorcloud
 public | applications_groups       | table    | actorcloud
 public | applications_id_seq       | sequence | actorcloud
 public | certs                     | table    | actorcloud
 public | certs_devices             | table    | actorcloud
 public | certs_id_seq              | sequence | actorcloud
 public | codec                     | table    | actorcloud
 public | codec_id_seq              | sequence | actorcloud
 public | connect_logs              | table    | actorcloud
 public | current_alerts            | table    | actorcloud
 public | current_alerts_id_seq     | sequence | actorcloud
 public | data_points               | table    | actorcloud
 public | data_points_id_seq        | sequence | actorcloud
 public | data_streams              | table    | actorcloud
 public | data_streams_id_seq       | sequence | actorcloud
 public | device_count_day          | table    | actorcloud
 public | device_count_day_id_seq   | sequence | actorcloud
 public | device_count_hour         | table    | actorcloud
 public | device_count_hour_id_seq  | sequence | actorcloud
 public | device_count_month        | table    | actorcloud
 public | device_count_month_id_seq | sequence | actorcloud
 public | device_events             | table    | actorcloud
 public | device_events_day         | table    | actorcloud
 public | device_events_hour        | table    | actorcloud
 public | device_events_latest      | table    | actorcloud
 public | device_events_month       | table    | actorcloud
 public | devices                   | table    | actorcloud
 public | devices_id_seq            | sequence | actorcloud
 public | dict_code                 | table    | actorcloud
 public | dict_code_id_seq          | sequence | actorcloud
 public | emqx_bills                | table    | actorcloud
 public | emqx_bills_day            | table    | actorcloud
 public | emqx_bills_day_id_seq     | sequence | actorcloud
 public | emqx_bills_hour           | table    | actorcloud
 public | emqx_bills_month          | table    | actorcloud
 public | emqx_bills_month_id_seq   | sequence | actorcloud
 public | end_devices               | table    | actorcloud
 public | gateways                  | table    | actorcloud
 public | groups                    | table    | actorcloud
 public | groups_devices            | table    | actorcloud
 public | groups_id_seq             | sequence | actorcloud
 public | history_alerts            | table    | actorcloud
 public | history_alerts_id_seq     | sequence | actorcloud
 public | invitations               | table    | actorcloud
 public | invitations_id_seq        | sequence | actorcloud
 public | login_logs                | table    | actorcloud
 public | login_logs_id_seq         | sequence | actorcloud
 public | lwm2m_items               | table    | actorcloud
 public | lwm2m_items_id_seq        | sequence | actorcloud
 public | lwm2m_objects             | table    | actorcloud
 public | lwm2m_objects_id_seq      | sequence | actorcloud
 public | messages                  | table    | actorcloud
 public | messages_id_seq           | sequence | actorcloud
 public | permissions               | table    | actorcloud
 public | permissions_id_seq        | sequence | actorcloud
 public | products                  | table    | actorcloud
 public | products_id_seq           | sequence | actorcloud
 public | publish_logs              | table    | actorcloud
 public | resources                 | table    | actorcloud
 public | resources_id_seq          | sequence | actorcloud
 public | roles                     | table    | actorcloud
 public | roles_id_seq              | sequence | actorcloud
 public | rules                     | table    | actorcloud
 public | rules_actions             | table    | actorcloud
 public | rules_id_seq              | sequence | actorcloud
 public | services                  | table    | actorcloud
 public | services_id_seq           | sequence | actorcloud
 public | streams_points            | table    | actorcloud
 public | system_info               | table    | actorcloud
 public | system_info_id_seq        | sequence | actorcloud
 public | tenants                   | table    | actorcloud
 public | tenants_id_seq            | sequence | actorcloud
 public | timer_publish             | table    | actorcloud
 public | timer_publish_id_seq      | sequence | actorcloud
 public | upload_info               | table    | actorcloud
 public | upload_info_id_seq        | sequence | actorcloud
 public | users                     | table    | actorcloud
 public | users_groups              | table    | actorcloud
 public | users_id_seq              | sequence | actorcloud
(92 rows)
                                                        
# select * from roles;
 id |          createAt          | updateAt |      roleName       |                     description                      | roleType | isShare | tenantID 
----+----------------------------+----------+---------------------+------------------------------------------------------+----------+---------+----------
  1 | 2023-05-22 14:00:48.369222 |          | super_admin_role    | 平台管理者                                           |        1 |       0 | 
  2 | 2023-05-22 14:00:48.400963 |          | company_admin_role  | 公司使用者管理者                                       |        1 |       0 | 
  3 | 2023-05-22 14:00:48.455674 |          | personal_admin_role | 個人使用者管理者                                       |        1 |       0 | 
  4 | 2023-05-22 14:00:48.490984 |          | system_user_role    | 使用者擁有平台全部功能的權限                           |        1 |       1 | 
  5 | 2023-05-22 14:00:48.521896 |          | common_user_role    | 使用者僅能檢視所有資源資訊                             |        1 |       1 | 
  6 | 2023-05-22 14:00:48.531339 |          | device_user_role    | 使用者能管理裝置、産品、分組等資訊                     |        1 |       1 | 
  7 | 2023-05-22 14:00:48.546975 |          | admin_app_role      | 應用能調用平台提供的所有API                          |        2 |       1 | 
  8 | 2023-05-22 14:00:48.564569 |          | display_app_role    | 應用僅能檢視裝置、産品、分組、證書、政策、日志等資訊 |        2 |       1 | 
  9 | 2023-05-22 14:00:48.571691 |          | device_app_role     | 應用能檢視、建立、編輯、删除、控制裝置               |        2 |       1 | 
(9 rows)
           

可以看到已經有了 92 個資料标和 seq。但是沒有資料。

然後就可以創使用者了,其中還校驗了下email 的格式:

臨時先注釋掉這個校驗行。然後就可以登陸成功啦!

split_email = value.split('@')[0]
            #if split_email in current_app.config.get('RESERVED'):
            #    raise FormInvalid(field='email')
           
開源物聯網Actorcloud配置postgres庫,使用flask初始化55張表!

看産品的建立支援非常多的協定:

開源物聯網Actorcloud配置postgres庫,使用flask初始化55張表!

然後就可以建立裝置資訊了:

開源物聯網Actorcloud配置postgres庫,使用flask初始化55張表!

4,總結

終于解決資料庫的問題了,原來使用的是flask的指令執行就可以了。

資料庫的表非常的多,原來以為隻有少數幾個表,但是看結果吓壞了。

一共有 55 張表,後續得繼續研究下。

actions
actor_tasks
alembic_version
app_api_logs
app_api_logs_day
app_api_logs_hour
app_api_logs_month
applications
applications_groups
certs
certs_devices
codec
connect_logs
current_alerts
data_points
data_streams
device_count_day
device_count_hour
device_count_month
device_events
device_events_day
device_events_hour
device_events_latest
device_events_month
devices
dict_code
emqx_bills
emqx_bills_day
emqx_bills_hour
emqx_bills_month
end_devices
gateways
groups
groups_devices
history_alerts
invitations
login_logs
lwm2m_items
lwm2m_objects
messages
permissions
products
publish_logs
resources
roles
rules
rules_actions
services
streams_points
system_info
tenants
timer_publish
upload_info
users
users_groups           

繼續閱讀