Superset を本番環境として構築する
Superset を本番環境として運用できるよう環境構築します。
ここでは、 WSGI サーバーに Superset のドキュメントで推奨されている Gunicorn を使用し、リバースプロキシに NGINX の組み合わせで用意します。また、Superset 用のユーザーを用意することでセキュリティ面についても検討していきたいと思います。
構築環境
- Ubuntu 24.04 LTS
- Python 3.11
- Superset 5.0.0
- PostgreSQL 16.9
- Gunicorn
- NGINX
準備
動作確認のため一時的に 8088 ポートを開けておきます。
$ sudo ufw allow 8088
メタデータデータベース PostgreSQL をインストールする
Superset では、管理情報を保存するデータベースが必要になります。本番環境の推奨は、 PostgreSQL か MySQL と記載されていますので PostgreSQL をインストールします。
ドキュメントに記載されている、 PostgreSQL のサポートされるバージョンは「10.X、11.X、12.X、13.X、14.X、15.X、16.X」で Ubuntu の公式パッケージが 16 でしたので、公式パッケージをインストールします。
インストールを始める前にパッケージリストを更新して、インストール済みのパッケージを更新します。
$ sudo apt update
$ sudo apt upgrade
それでは、 PostgreSQL をインストールします。
$ sudo apt install postgresql
念のため PostgreSQL のバージョンを確認します。
$ psql --version
psql (PostgreSQL) 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1)
Superset 用にデータベースとユーザーを作成します。
$ sudo -u postgres psql
[sudo] password for hoge:
psql (16.9 (Ubuntu 16.9-0ubuntu0.24.04.1))
Type "help" for help.
対話モードになるので、データベールの作成やユーザーの作成を次のようの実施します。
postgres=# create database superset owner postgres;
CREATE DATABASE
postgres=# create user superset with password 'パスワードを指定';
CREATE ROLE
postgres=# grant all privileges on database superset to superset;
GRANT
postgres=# \connect superset postgres
You are now connected to database "superset" as user "postgres".
postgres=# grant all privileges on schema public to superset;
GRANT
postgres=# grant all privileges on all tables in schema public to superset;
GRANT
postgres=# grant all privileges on all sequences in schema public to superset;
GRANT
postgres=# \q
データベースの準備は以上です。
Python 3.11 をインストールする
ここからは、「Ubuntu 24.04.2 LTS へ Superset をインストールする」と同じように Superset がサポートしている python と Superset をインストールしていきます。 少し違うのは、 Superset 用にユーザーを作成しセキュリティ対策が行いやすいようにしていきます。
まずは、 Python からインストールします。
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-dev python3.11-venv build-essential libssl-dev libffi-dev libsasl2-dev libldap2-dev default-libmysqlclient-dev
Superset 用ユーザーを作成する
Superset 用のユーザー・グループを作成します。作成した supersetgrp グループに superset ユーザーを所属させます。
$ sudo adduser superset
$ sudo groupadd supersetgrp
$ sudo usermod -aG supersetgrp superset
$ sudo usermod -aG sudo superset
Superset をインストールするディレクトリを作成し、所有者やパーミッションを設定します。
$ sudo mkdir /home/superset/superset
$ sudo chown -R superset:supersetgrp /home/superset/superset
$ sudo chmod -R 770 /home/superset/superset
作成した Superset 用のユーザーへ切り替えます。
$ su - superset
$ cd ~/superset/
Superset をインストールする
Superset のドキュメントに Python の仮想環境で構築することが推奨されています。
次のコマンドを実行し、仮想環境を構築していきます。
$ python3.11 -m venv venv
$ source venv/bin/activate
有効化すると、プロンプトの前に仮想環境名が表示されます。
(venv) superset@host:~/superset$
pip で Superset をインストールします。 「 superset db upgrade 」でエラーにならないよう「 marshmallow 」の古いバージョンをインストールします。
(venv) superset@host:~/superset$ pip install --upgrade pip
(venv) superset@host:~/superset$ pip install apache_superset
(venv) superset@host:~/superset$ pip install marshmallow==3.20.1
いったん環境変数 FLASK_APP と設定ファイルのパスである SUPERSET_CONFIG_PATH を設定します。
(venv) superset@host:~/superset$ echo 'export FLASK_APP=superset' >> ~/.bashrc
(venv) superset@host:~/superset$ echo 'export SUPERSET_CONFIG_PATH=/home/superset/superset_config/superset_config.py' >> ~/.bashrc
source ~/.bashrc
設定ファイルを作成します。
(venv) superset@host:~/superset$ mkdir /home/superset/superset_config
vi /home/superset/superset_config/superset_config.py
メタデータを格納する PostgreSQL の接続文字と秘密キーを設定します。
キーの生成は、「openssl rand -base64 42」を使用します。
SQLALCHEMY_DATABASE_URI="postgresql://<UserName>:<DBPassword>@localhost:5432/<Database Name>"
SECRET_KEY="qAsIRG/kq+XPy1s0vjPbzuVv3SBTTc8oOUR2ZF1XTWLKebpjAjPegg8o"
LANGUAGES = {
"en": {"flag": "us", "name": "English"},
"ja": {"flag": "jp", "name": "Japanese"},
}
※参照:Config
Database Drivers をインストールする
警告が出たりするため、パッケージ管理関係を更新しておきます。
$ pip install --upgrade setuptools wheel pip
PosgreSQL 用のデータベース接続ドライバーをインストールします。
(venv) superset@host:~/superset$ pip install psycopg2
次のようなエラーが発生し、うまくインストールできませんでした。
Collecting psycopg2
Downloading psycopg2-2.9.10.tar.gz (385 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: psycopg2
Building wheel for psycopg2 (pyproject.toml) ... error
error: subprocess-exited-with-error
調べてみたところ、 libpq-dev が必要という事でしたのでインストールしていきます。
$ sudo apt install libpq-dev python3-dev
もう一度、 psycopg2 をインストールします。
(venv) superset@host:~/superset$ pip install psycopg2
今度は正常にインストールされました。
それでは、 Superset を初期化して行きます。
(venv) superset@host:~/superset$ superset db upgrade
(venv) superset@host:~/superset$ superset fab create-admin
(venv) superset@host:~/superset$ superset load_examples
(venv) superset@host:~/superset$ superset init
Superset が動作するか確認します。
(venv) superset@host:~/superset$ superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger
ブラウザからアクセスしてログイン画面が表示されれば、 Superset のインストールは完了です。
Gunicorn をインストールする
問題がないようでしたら、 WSGI server をインストールします。
(venv) superset@host:~/superset$ pip install gunicorn
次のコマンドを実行し、 gunicorn 経由で Superset を実行します。
(venv) superset@host:~/superset$ gunicorn -w 2 --timeout 60 -b 0.0.0.0:8088 "superset.app:create_app()"
こちらも問題が無ければ外部のブラウザからアクセスできます。
NGINX をインストールする
NGINX をインストールします。
$ su -
$ sudo apt install nginx
正常に動作しているか確認します。
$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-08-06 13:26:39 UTC; 3min 10s ago
Docs: man:nginx(8)
Process: 12254 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 12255 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 12285 (nginx)
Tasks: 3 (limit: 4548)
Memory: 2.4M (peak: 5.2M)
CPU: 13ms
CGroup: /system.slice/nginx.service
├─12285 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─12288 "nginx: worker process"
└─12289 "nginx: worker process"
NGINX と Gunicorn が連携するよう NGINX の設定を行います。
「/etc/nginx/sites-available/」に設定ファイルを作成します。
$ sudo vi /etc/nginx/sites-available/superset
Gunicorn へ向かうよう次のように設定します。
server {
listen 80;
server_name ドメインまたはIPアドレス;
location / {
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
client_max_body_size 50M;
}
「/etc/nginx/sites-enabled/」にシンボリックリンクを作成すると、先ほど作成した設定ファイルが適用されます。
$ sudo ln -s /etc/nginx/sites-available/superset /etc/nginx/sites-enabled/
$ sudo nginx -t
$ sudo systemctl restart nginx
systemd のユニットファイルを作成
ログの出力先として次のディレクトリを作成します。
$ sudo mkdir /var/log/superset
systemd のユニットファイルを作成します。
$ sudo vi /etc/systemd/system/superset.service
作成するファイルに次のように追加します。
[Unit]
Description=Apache Superset
After=network.target
[Service]
User=superset
Group=supersetgrp
WorkingDirectory=/home/superset/superset
Environment="PATH=/home/superset/superset/venv/bin"
Environment="SUPERSET_CONFIG_PATH=/home/superset/superset_config/superset_config.py"
Environment="FLASK_APP=superset"
ExecStart=/home/superset/superset/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8088 "superset.app:create_app()"
Restart=always
StandardOutput=append:/var/log/superset/superset.log
StandardError=append:/var/log/superset/superset-error.log
[Install]
WantedBy=multi-user.target
作成したユニットファイルを有効にして、実行します。
$ sudo systemctl daemon-reload
$ sudo systemctl restart superset
$ sudo systemctl enable superset
ファイアウォールの設定で 80 ポートを開け、ブラウザからアクセスしログイン画面が表示されれば設定完了です。
8088 ポートが開いたままなので、忘れないで削除します。