目錄
- 前言
- 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')
看産品的建立支援非常多的協定:
然後就可以建立裝置資訊了:
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