【fly-iot飞驰物联】(8):Actorcloud使用postgres数据库存储,使用flask初始化数据库55张表,可以进行用户注册登陆,终于把前后端连调成功,终于可以登陆啦,支持很多IOT协议

前言


本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/108971807
fly-iot飞驰物联专栏:
https://blog.csdn.net/freewebsys/category_12219758.html

未经博主允许不得转载。
博主CSDN地址是:https://blog.csdn.net/freewebsys
博主掘金地址是:https://juejin.cn/user/585379920479288
博主知乎地址是:https://www.zhihu.com/people/freewebsystem

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')

在这里插入图片描述
看产品的创建支持非常多的协议:
在这里插入图片描述

然后就可以创建设备信息了:
在这里插入图片描述

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

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/108971807

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/freewebsys/article/details/130814901