部署说明

本说明文档针对的是cenos 7.9版本,官方文档地址:https://superset.apache.org/docs/installation/docker-compose

  • 第一步:创建一个用户来部署superset,例如用户名就叫superset。

    1
    
    useradd -m superset
    
  • 第二步:给创建的superset用户sudo权限,且执行sudo命令时不用输入密码。

    • 方法1:编辑修改/etc/sudoers文件

      在文件中找到类似 root ALL=(ALL) ALL 的行,下面添加一行为 superset 用户配置 sudo 权限:

      1
      
      superset ALL=(ALL) NOPASSWD:ALL
      
    • 方法2:在 /etc/sudoers.d/ 下创建文件

      1. 以 root 用户或具有 sudo 权限的用户登录。

      2. 创建一个新文件,以 superset 为例(文件名可以任意,只要没有特殊字符,推荐使用用户名简单易懂):

        1
        
        sudo visudo -f /etc/sudoers.d/superset
        
      3. 在打开的文件中添加以下内容:

        1
        
        superset ALL=(ALL) NOPASSWD:ALL
        
      4. 保存并关闭编辑器。

  • 第三步:下载代码:可以在部署的服务器上直接git clone或者GitHub下载后上传到服务器指定目录

    1
    
    git clone --depth=1  https://github.com/apache/superset.git
    

    通过使用 --depth 选项,可以告诉 Git 仅下载最近的几次提交。--depth=1 表示仅下载最新的一次提交。这样,克隆的仓库将不包含完整的提交历史,从而大大减少了下载数据的大小,加快了克隆速度,并降低了磁盘空间的占用。

  • 第四步:进入第一步下载的superset目录里,在docker-compose-image-tag.yml所在的目录执行如下语句:

    1
    2
    3
    4
    
    # 启动superset服务,-d表示以后台模式运行
    sudo docker compose -f docker-compose-image-tag.yml up -d
    # 查看容器服务的启动情况
    sudo docker compose ps 
    
  • 第五步:浏览器打开http://ip:8088,ip对应部署服务器的ip地址,然后输入默认用户名admin/admin登录即可。

安装database驱动

比如要连接clickhouse,需要安装clickhouse-driver

https://superset.apache.org/docs/configuration/databases#clickhouse

在superset的代码主目录的./docker目录下新建一个requirements-local.txt文件,里面内容如下:

1
2
3
4
echo "clickhouse-connect>=0.6.8" >> ./docker/requirements-local.txt
docker compose -f docker-compose-image-tag.yml down 
# 执行up命令会下载requirements-local.txt里的clickhouse driver
docker compose -f docker-copose-image-tag.yml up -d 

设置开机自启动

通过systemd来设置superset开机自启动

  • 执行docker compose命令的用户加到docker组,执行docker命令就不用在前面加sudo

    1
    
    sudo usermod -aG docker superset
    
  • 创建superset.service文件,路径是:/etc/systemd/system/superset.service

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    [Unit]
    Description=Superset service with Docker Compose
    Requires=docker.service
    After=docker.service network.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    User=superset
    # 如果你的服务需要一个特定的组,可以取消注释并修改下一行
    # Group=superset
    WorkingDirectory=/home/superset/superset/superset-master
    # 确保这里的路径正确指向了你的Docker和Docker Compose的安装位置
    ExecStart=/usr/bin/docker compose -f docker-compose-image-tag.yml up -d
    ExecStop=/usr/bin/docker compose -f docker-compose-image-tag.yml down
    
    [Install]
    WantedBy=multi-user.target
    
  • 让superset.servivce生效

    1
    
    sudo systemctl daemon-reload
    
  • 设置开机自启动

    1
    2
    
    sudo systemctl enable superset # 设置开机自启动
    sudo systemctl is-enabled superset # 查看设置是否生效
    
  • 使用systemctl命令来进行服务启停

    1
    2
    3
    4
    
    sudo systemctl stop superset
    sudo systemctl start superset
    sudo systemctl restart superset
    docker compose ps ## docker compose命令要在yml文件的当前目录执行
    
  • 然后就可以关机再开机来验证superset是否正常启动了。

日常运维

  • 服务启停

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 停止容器
    docker compose stop
    # 启动容器
    docker compose start
    # 停止并移除容器,移除由 docker-compose up 创建的网络,但保留卷。
    sudo systemctl docker compose down
    # 除了停止并移除容器、移除网络外,还会移除所有相关的数据卷。
    sudo systemctl docker compose up
    
  • 查看容器运行情况

    1
    
    docker compose ps
    
  • 查看容器日志:参数service_name是容器的服务名,对应的是docker compose ps里的SERVICE这一列的值

    1
    
    docker compose logs service_name
    

常见问题

  • docker compose stop/start和docker compose down/up区别

    stop/start是停止/启动容器,down/up是删除容器及容器里的网络/重建容器及容器里的网络

  • docker compose down和docker compose down -v区别

    后者的v是指volume,会删除容器里的数据卷,如果容器里的数据要保留要切记先备份再操作。前者没有-v是不会删除容器里的数据。

  • superset通过docker compose部署,db这个service的日志里显示 ls: cannot open directory '/docker-entrypoint-initdb.d/': Permission denied

    可以看docker-compose-image-tag.yml里db的配置如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    db:
        env_file:
          - path: docker/.env # default
            required: true
          - path: docker/.env-local # optional override
            required: false
        image: postgres:15
        container_name: superset_db
        restart: unless-stopped
        volumes:
          - db_home:/var/lib/postgresql/data
          - ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    

    可以看出/docker-entrypoint-initdb.d对应的是宿主机的./docker/docker-entrypoint-initdb.d路径,修改这个路径的权限如下即可:

    1
    
    chmod 755 -R ./docker/docker-entrypoint-initdb.d/
    
  • docker compose -f docker-compose-image-tag.yml提示:services.db.env_file.0 must be a string

    这是因为docker compose版本比较旧,不支持yml的新语法,需要升级docker和docker compose,参考下面的步骤来。

  • 查看docker和docker compose版本

    1
    2
    3
    
    docker info
    docker version
    docker compose version
    
  • docker更新

    centos 7.9已经不支持清华的yum源了。

    1
    2
    
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum update docker
    
  • docker compose更新:docker compose是docker的一个plugin插件,按照如下方式指定docker compose版本进行更新

    1
    2
    3
    
    sudo mkdir -p /usr/local/lib/docker/cli-plugins
    sudo curl -SL https://github.com/docker/compose/releases/download/v2.30.1/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
    sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
    

开源地址

文章和示例代码开源地址在GitHub: https://github.com/jincheng9/disributed-system-notes

公众号:coding进阶

个人网站:https://jincheng9.github.io/

References