首页 > 其他分享 >828华为云征文|华为云Flexus云服务器X实例部署immich相片管理系统

828华为云征文|华为云Flexus云服务器X实例部署immich相片管理系统

时间:2024-09-29 09:52:53浏览次数:11  
标签:immich 华为 实例 828 服务器 docker Flexus

828华为云征文|华为云Flexus云服务器X实例部署immich相片管理系统

前言


在数字化时代,个人和企业对于数据隐私和安全的需求日益增长,Immich 作为一个开源的、自托管的照片和视频备份解决方案,为用户提供了一个私密且可控的媒体文件存储选项。华为云Flexus云服务器X实例凭借其卓越的柔性算力和专为中小企业及开发者设计的特性,成为部署此类应用的理想选择。通过结合Immich的强大功能与华为云的高性能基础设施,用户不仅能够享受到高效的数据管理和访问体验,还能确保数据的安全性和隐私性。本文将详细介绍如何在华为云Flexus云服务器X实例上部署Immich相片管理系统,展示华为云在提供可靠、灵活云计算服务方面的卓越表现。


一、Flexus云服务器X实例介绍

1.1 Flexus云服务器X实例简介

华为云Flexus云服务器X实例是新一代面向中小企业和开发者的柔性算力云服务器。它能够智能感知业务负载的变化,自动调整资源配置。这款服务器特别适用于中低负载的应用场景,例如电商直播、企业网站建设、开发测试环境、游戏服务器以及音视频服务等。X实例的设计理念旨在为用户提供更加灵活和高效的计算资源管理方式。通过智能调整,它可以更好地满足不同业务的需求,提高资源利用率。

在这里插入图片描述

1.2 Flexus云服务器X实例特点

  • 提供丰富的公共镜像:Flexus云服务器X实例提供多种公共镜像供用户选择,方便快速部署各种应用和服务。

  • 可灵活自定义vCPU内存配比:用户可以根据自己的需要灵活调整虚拟CPU和内存的配比,以满足不同场景的需求。

  • 智能感知业务动态升降配:Flexus云服务器X实例能够智能感知业务的负载情况,并根据需要自动升降配,以满足业务的需求,提高系统的稳定性和性能。

  • 负载范围更高:相对于Flexus应用服务器L实例,Flexus云服务器X实例能够处理更高的负载,适用于更复杂和繁忙的场景。

1.3 Flexus云服务器X实例使用场景

Flexus云服务器X实例针对不同的使用场景展现出其独特的优势:

  1. 电商直播:利用X实例搭建电商交易平台,可以有效应对电商市场的瞬息万变,从容处理业务压力波动,确保交易过程顺畅无阻。

  2. 企业建站:面向博客、论坛和企业门户等应用场景,X实例帮助企业高效传播价值信息,促进信息共享与交流,支持构建多功能传播和交互平台。

  3. 个人开发测试:开发者在开发和测试过程中所需的环境资源可以通过X实例便捷获取,不仅提高了搭建效率,而且降低了成本。

  4. 游戏服务器:适用于搭建游戏后台服务器,强大的计算能力可以轻松应对大量玩家同时在线的情况,同时支持平滑扩容,快速应对玩家数量增长的需求,以及提供出色的网络加速能力以提升用户体验。

二、immich介绍

2.1 immich简介

Immich 是一个开源的、自托管的照片和视频备份解决方案,它允许用户在自己的服务器上存储和管理媒体文件。Immich 旨在为用户提供一种私密且可控的方式来保存个人照片和视频,避免了将数据上传到第三方云服务可能带来的隐私问题。

2.2 immich注意事项

该项目正在非常积极的开发中。

  • ⚠️预计会出现错误和重大更改。
  • ⚠️ 请勿将该应用程序用作存储照片和视频的唯一方式。
  • ⚠️始终遵循 3-2-1 备份计划,为您珍贵的照片和视频!

2.3 主要特点

  • 开源与自托管:Immich 是完全开源的,这意味着任何人都可以查看其代码,并根据需要进行修改或扩展。通过自托管的方式,用户可以在自己控制的服务器上部署Immich,确保了数据的安全性和隐私性。

  • 跨平台兼容:Immich 提供了适用于iOS、Android以及Web端的应用程序,使得用户能够方便地从各种设备访问和管理他们的媒体库。

  • 自动备份:用户可以通过设置来实现手机上的照片和视频自动备份到自己的服务器上,从而保证珍贵记忆的安全。

  • 智能功能:Immich 支持基于人工智能的面部识别技术,帮助用户组织并标记他们的照片集。此外,还提供了基于地理位置和时间的搜索功能,便于快速查找特定的照片或视频。

  • 易于安装与配置:借助Docker等容器化技术,Immich 可以相对容易地被部署到任何支持Docker的服务器上,包括但不限于Linux、macOS以及Windows系统。

  • 丰富的API接口:对于开发者来说,Immich 提供了RESTful API,允许创建自定义应用程序或者集成到现有的项目中去。

  • 社区驱动:作为一款活跃发展的开源项目,Immich 拥有一个积极贡献和支持的社区,持续不断地改进软件特性并解决遇到的问题。

2.4 使用场景

  • 家庭媒体库:家庭成员可以将各自的照片和视频自动备份到一个中央服务器上,方便全家共享和浏览。
  • 小型企业资料管理:小型企业利用Immich来存储和组织公司活动、产品图片等重要业务资料,便于团队访问和协作。
  • 个人隐私保护:注重隐私的个人用户通过在自己的服务器上部署Immich,确保照片和视频的安全存储,远离第三方云服务的数据泄露风险。
  • 旅行者与摄影师:经常旅行或专业摄影师使用Immich即时备份大量高分辨率照片和视频,保证旅途中的珍贵记忆安全无虞。
  • 教育机构资源分享:学校和培训机构使用Immich建立多媒体教育资源库,供教师上传教学材料,并让学生轻松访问这些学习资源。
  • 远程工作团队协作:分布在全球各地的工作团队通过Immich平台共享项目相关的视觉素材,促进高效沟通与合作。

三、本次实践介绍

3.1 本次实践简介

1.本次实践为个人测试学习环境,旨在快速部署应用,生产环境请谨慎;
2.本次实践环境为华为云Flexus云服务器X实例,使用的操作系统为openEuler 22.03 LTS
3.在Docker环境下部署immich相片管理系统。

3.2 本次环境规划

服务器类别公共镜像选择内网IP地址Docker版本操作系统版本
华为云Flexus云服务器X实例openEuler192.168.0.16926.1.3openEuler 22.03 LTS

四、购买华为云Flexus云服务器X实例

4.1 登录华为云

进入华为云官网:https://activity.huaweicloud.com/,登录自己的华为云账号,进入华为云首页。

在这里插入图片描述
在这里插入图片描述

4.2 进入Flexus云服务器X实例购买页面

我们在华为云官网首页,精选推荐模块中,可以看到Flexus云服务器X实例,点击进入Flexus云服务器X实例主页。

在这里插入图片描述
在这里插入图片描述

点击页面中的“购买”选项,进入Flexus云服务器X实例购买页面。

在这里插入图片描述

4.3 购买Flexus云服务器X实例配置

  • 镜像选择:本次实践使用openEuler作为公共镜像,请根据实际需求自定义选择合适的操作系统镜像。
  • 镜像切换说明:参考的公共镜像原为Huawei Cloud EulerOS,但本次实践中已切换至openEuler。
  • 基础配置参考:购买时可参考以下基础配置进行选择。
项目配置说明
计费模式包年/包月
区域华北—北京四,可用区:随机即可
实例规格关闭性能模式,选择自定义,4vCPUs | 12GiB
镜像公共镜像,openEuler,版本:openEuler 2.0 Standard 64 bit (10GiB)
应用加速不加速
存储系统盘,通用型SSD 100G
网络选择默认即可
安全组选择默认即可
弹性公网IP选择“现在购买”,全动态BGP,带宽3Mbit/s
云服务器名称可自定义设置,这里选择默认的名称
登录凭证自定义设置密码
云备份暂不购买
  • 确认配置及购买:在确认配置页面仔细检查Flexus云服务器X实例的各项设置,确保无误后点击“立即购买”,完成付款流程即可成功购买。

在这里插入图片描述

4.4 使用Xshell远程连接

进入华为云Flexus云服务的控制台,选择Flexus云服务器X实例,可以看到已经正在运行的Flexus云服务器X实例。

在这里插入图片描述

  • 复制Flexus云服务器X实例的弹性公网IP地址

在这里插入图片描述

  • 主要填写Flexus云服务器X实例的弹性公网IP地址,输入其登录用户和密码,连接即可。

在这里插入图片描述

在这里插入图片描述

五、检查Docker环境

5.1 检查操作系统版本

检查Flexus云服务器X实例的操作系统版本,本次实践选择的版本为openEuler 22.03 LTS

[root@flexusx-51a1 ~]# cat /etc/os-release
NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"

5.2 检查内核版本

检查当前操作系统的内核版本,当前内核版本为5.10.0-60.139.0.166.oe2203.x86_64

[root@flexusx-51a1 ~]# uname -r
5.10.0-60.139.0.166.oe2203.x86_64

5.3 检查Docker版本

部署该项目需要提前安装Docker环境,检查Docker版本,当前安装的Docker版本为 26.1.3

[root@flexusx-51a1 ~]# docker -v
Docker version 26.1.3, build b72abbb

检查Docker服务状态,确保Docker服务正常。

[root@flexusx-51a1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
     Active: active (running) since Mon 2024-09-23 20:27:32 CST; 12min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 18484 (dockerd)
      Tasks: 10
     Memory: 240.2M
     CGroup: /system.slice/docker.service
             └─ 18484 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

5.5 检查Docker compose版本

检查docker compose版本,当前默认安装版本为v2.27.0

[root@flexusx-51a1 ~]# docker compose version
Docker Compose version v2.27.0

六、部署immich应用

6.1 拉取immich镜像

从 Google 容器仓库(Google Container Registry, GCR)和 Docker Hub 拉取 Immich 相关镜像时,请参考以下镜像名称及版本。请注意,由于镜像版本的更新和 Immich 的持续迭代,部署文件和步骤可能会有所变化。如果在部署过程中遇到问题,请参阅官方最新文档以获取最新的指导和支持。

docker pull ghcr.io/immich-app/immich-server:release

docker pull  ghcr.io/immich-app/immich-machine-learning:release

docker pull docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792

docker pull docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0

查看本地已经下载的4个immich相关镜像

docker images

在这里插入图片描述

6.2 创建部署目录

在命令行终端上,我们需要创建部署目录/data/immich

mkdir -p /data/immich && cd /data/immich

6.3 编辑docker-compose.yaml文件

本次实践使用docker compose方式部署immich应用,编辑docker-compose.yaml文件,可自行修改映射端口部分。

vim docker-compose.yaml
# WARNING: Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
    restart: always

volumes:
  model-cache:



6.4 编辑.env文件

编辑.env文件,可参考如下配置:

vim .env

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
DB_DATA_LOCATION=./postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
~

6.5 创建immich容器

执行以下命令,使用docker-compose.yaml文件创建immich服务。

[root@flexusx-51a1 immich]# docker compose up -d
[+] Running 6/6
 ✔ Network immich_default             Created                                                                                                          0.0s
 ✔ Volume "immich_model-cache"        Created                                                                                                          0.0s
 ✔ Container immich_postgres          Started                                                                                                          0.3s
 ✔ Container immich_machine_learning  Started                                                                                                          0.2s
 ✔ Container immich_redis             Started                                                                                                          0.2s
 ✔ Container immich_server            Started                                                                                                          0.4s

在这里插入图片描述

6.6 检查immich容器状态

检查immich容器状态,确保immich容器正常启动。

[root@flexusx-51a1 immich]# docker compose ps
NAME                      IMAGE                                                                                                                  COMMAND              SERVICE                   CREATED         STATUS                   PORTS
immich_machine_learning   ghcr.io/immich-app/immich-machine-learning:release                                                                     "tini -- ./start.sh"     immich-machine-learning   5 minutes ago   Up 5 minutes (healthy)
immich_postgres           docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0   "docker-entrypoint.s…"   database                  5 minutes ago   Up 5 minutes (healthy)   5432/tcp
immich_redis              docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792                     "docker-entrypoint.s…"   redis                     5 minutes ago   Up 5 minutes (healthy)   6379/tcp
immich_server             ghcr.io/immich-app/immich-server:release                                                                               "tini -- /bin/bash s…"   immich-server             5 minutes ago   Up 5 minutes (healthy)   0.0.0.0:2283->3001/tcp, :::2283->3001/tcp

七、访问前准备工作

7.1 关闭selinux和防火墙

  • 关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  • 停止防火墙
systemctl stop firewalld
systemctl disable firewalld

7.2 Flexus云服务器X实例安全组配置

进入Flexus云服务器X实例控制台,进行安全组规则配置。入方向上放行2283端口,确认配置即可。

在这里插入图片描述

八、访问immich服务

8.1 访问immich初始页

浏览器访问地址:http://服务器IP地址:2283,将IP替换为自己云服务器弹性公网IP地址。浏览器打开后,进入immich初始页。

在这里插入图片描述

8.2 注册账号

点击“Getting Started”,进入账号注册页面。

在这里插入图片描述

在账号注册页,自定义填写账号信息即可。

在这里插入图片描述

8.3 登录immich

在immich登录页,输入刚才注册的账号密码,登录即可。

在这里插入图片描述

在这里插入图片描述

九、immich的基本使用

9.1 上传图片

点击上传选项,上传本地图片。

在这里插入图片描述

上传完成后,可以看到刚上传的图片效果。

在这里插入图片描述

9.2 新建相册

在相册管理页面,点击创建相册。

在这里插入图片描述

填写相册名称:自定义填写即可,可选择将已上传的图片加入该新建相册。

在这里插入图片描述

在这里插入图片描述

9.3 查看统计数据

点击Administration,进入系统设置页面,选择“Server status”,可以看到相关统计信息。

在这里插入图片描述

十、使用体验与总结

通过在华为云Flexus云服务器X实例上成功部署Immich相片管理系统,我们不仅体验到了高效稳定的自托管照片和视频备份解决方案,还深刻感受到了华为云提供的卓越性能和灵活性。华为云的柔性算力确保了即使在高负载情况下,系统依然能够流畅运行,为用户提供无缝的使用体验。此外,华为云丰富的文档和支持资源极大地简化了部署过程,使得即使是技术新手也能轻松上手。此次实践再次证明了华为云作为领先云计算服务提供商,在支持创新应用和服务方面的强大能力和专业性。


在华为云828 B2B企业节期间,Flexus X实例带来了极具吸引力的优惠活动。华为云凭借其顶级的云服务和卓越的性能,为企业提供了稳定可靠的支持,成为推动业务增长的理想选择。我们诚挚邀请各行各业的伙伴加入华为云的大家庭,共同见证技术创新带来的无限潜力。让我们携手并进,开启云端发展的新篇章,共享科技进步所带来的丰硕成果!


在这里插入图片描述

标签:immich,华为,实例,828,服务器,docker,Flexus
From: https://blog.csdn.net/jks212454/article/details/142520834

相关文章

  • 华为OD机试真题---猜字谜
    题目描述小王设计了一个简单的猜字谜游戏,游戏的谜面是一个或多个错误的单词(如"nesw"),玩家需要猜出谜底库中正确的单词。猜中的要求如下:变换顺序:谜面和谜底单词变换顺序后相同,例如"nwes"和"news"。字母去重:谜面和谜底单词去重后的字母序列相同,例如"woood"和"wood",去重后都......
  • 华为OD机试真题---手机App防沉迷系统
    题目概述智能手机在方便我们生活的同时,也侵占了大量时间。手机App防沉迷系统旨在帮助用户合理规划手机App使用时间,确保在正确的时间做正确的事。系统的主要功能包括:在一天24小时内,可注册每个App的允许使用时段。一个时段只能使用一个App,即不能同时注册多个App在同一时间段......
  • 华为OD机试2024年E卷-转骰子[200分]( Java | Python3 | C++ | C语言 | JsNode | Go )实
    题目描述骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(......
  • 华为OD机试2024年E卷-矩阵匹配[200分]( Java | Python3 | C++ | C语言 | JsNode | Go )
    题目描述从一个N*M(N≤M)的矩阵中选出N个数,任意两个数字不能在同一行或同一列,求选出来的N个数中第K大的数字的最小值是多少。输入描述输入矩阵要求:1≤K≤N≤M≤150输入格式:NMKN*M矩阵输出描述N*M的矩阵中可以选出M!/N!种组合数组,每个组合......
  • 华为OD机试真题---孙悟空吃蟠桃
    题目描述孙悟空来到了蟠桃园偷吃蟠桃。蟠桃园有N棵桃树,每棵树上都有一定数量的蟠桃。守卫将在H小时后回来。孙悟空每小时可以选择吃一棵树上的所有蟠桃(如果数量少于他选择的速度,则全部吃掉),并且在这一个小时内不会吃其他树上的桃子。孙悟空希望以尽可能慢的速度吃蟠桃,但又要......
  • 华为OD机试真题---增强的strstr
    题目描述C语言中的strstr函数用于在字符串haystack中查找第一次出现字符串needle的位置,如果未找到则返回NULL。现在要求实现一个增强的strstr函数,该函数可以使用带可选段的字符串来模糊查询。可选段使用[]标识,表示该位置可以是可选段中的任意一个字符即可满足匹配条件。例......
  • 华为9.27笔试
    第一题给出员工(\(n\leq100\))和对应的亲属关系,询问能否将其分为两个组合,要求亲属不在同一侧。要求两个组合中第一个数尽量小。一眼并查集,即员工i的亲属属于同一个集合,生成一个集合编号j。记录员工i以及与之互斥的点,用于后续获取员工i互斥的集合编号j。由于要求组合中第一......
  • 华为云技术专家分享4大举措,助力开发者开启鸿蒙原生应用开发
    本文分享自华为云开发者联盟公众号《DTSETechTalk|第66期:鸿蒙上云,加速开发者成长。》本期DTSETechTalk直播主题是《鸿蒙上云,加速开发者成长》,华为云HarmonyOSDTSE技术布道师芝诺在本议题中与开发者们交流华为开发者生态、鸿蒙生态愿景与进展,以及华为云开发者创新中心为开......
  • 《华为云DTSE》期刊免费下载:10个案例读懂云上架构升级策略
    本文分享自华为云社区《《华为云DTSE》期刊第四期赋能云专刊,赋能云场景下DTSE服务各类开发者的案例分享》,作者:HuaweiCloudDeveloper。 把公司的开发者平台统一在一起,是华为云所担负的任务,其最终目的是要汇聚开发者、做厚“黑土地”,支撑三大根生态的发展壮大。这也意味着,作为支......
  • 华为申请鸿蒙甄选、鸿蒙优选商标,加词的注意!
    近日华为在35类广告销售上申请鸿蒙智选、鸿蒙优选、鸿蒙精品,鸿蒙甄选等商标,后面所加的词智选、优选、精品、甄选等基本上是属于通用词。 这样在35类拿到鸿蒙+通用词商标,需要先拿到“鸿蒙“商标,经普推知产商标老杨检索发现,早在2019年华为就申请鸿蒙35类商标,拿下部分核心小类......