Cara Install CKAN untuk Open Data Portal di Ubuntu 20.04

Install CKAN Open Data Portal

Comprehensive Knowledge Archive Network (CKAN) adalah perangkat lunak open source untuk portal open data, CMS yang dapat membantu kita dalam mengelola dan menerbitkan sekumpulan data. CKAN digunakan oleh pemerintah pusat dan daerah, lembaga penelitian, dan organisasi lain untuk mempublikasikan data.

Contoh pemakaian di Indonesia yaitu Satu Data Indonesia (SDI) yang merupakan kebijakan tata kelola data pemerintah dengan tujuan untuk menciptakan data berkualitas, mudah diakses, dan dapat dibagipakaikan antar instansi pusat dan daerah. Kebijakan SDI ini tertuang dalam Peraturan Presiden No. 39 Tahun 2019 tentang Satu Data Indonesia. Melalu SDI, seluruh data pemerintah dan data instansi lain yang terkait dapat bermuara di Portal Satu Data Indonesia (data.go.id). Contoh pemerintah daerah yang memiliki portal open data yaitu Open Data Jakarta, Open Data Bandung, dan Open Data Kalimantan Barat.

Tech Stack

CKAN dikembangkan dengan menggunakan bahasa pemrograman Python sebagai backend, JavaScript sebagai frontend, database PostgreSQL dan search engine Solr. CKAN memungkinkan untuk ditambahkan ekstensi atau fitur tambahan karena memakai arsitektur modular. Selain itu CKAN juga memiliki fitur API.

System Requirements

Hardware Requirements

Untuk portal dengan skala nasional dengan trafik tinggi:

  • 2 server dengan RAM 8GB. Satu server untuk web dan satunya lagi untuk database/Solr
  • Storage 160GB. Web server bisa saja lebih besar, sesuai kebutuhan, seberapa banyak data yang ingin disimpan
  • Quad core processor. Lebih cepat lebih baik

Untuk portal level daerah dengan trafik lebih rendah:

  • 2 server dengan RAM 2GB
  • Storage 80GB
  • Dual core processor

Web dan database dapat digabungkan dalam satu server yang sama, tetapi CKAN merekomendasikan memisahkannya demi alasan keamanan.

Software Requirements

Operating system
Direkomendasikan menggunakan Ubuntu 16.04 64bit, CKAN tersedia dalam paket .deb. CKAN juga sudah diuji di CentOS dan distribusi Linux utama lainnya.

Web server

  • Apache
  • Nginx, untuk https dan caching
  • Python 2.7.x

Database server

  • Postgres 9.3+
  • Redis
  • Tomcat/Jetty + Solr

System requirements di atas berdasarkan hosting guidelines CKAN, update terakhir 20-12-2017.

Perangkat Tutorial

Perangkat yang digunakan di tutorial ini:

  • VPS 1CPU, RAM 2GB, Disk 50GB
  • Ubuntu 20.04
  • Nginx 1.18
  • Python 3.8.5
  • Supervisor 4.1.0
  • PostgreSQL 12.4
  • Redis 5.0.7
  • Solr 3.6.2
  • CKAN package 2.9.1

Port yang digunakan:

ServicePortUsed for
Nginx80Proxy
uWSGI8080Web server
uWSGI8800DataPusher
Solr/Jetty8983Search
PostgreSQL5432Database
Redis6379Search

1. Install CKAN package

Update Ubuntu.

Install package dependencies.

Download CKAN package.

Install CKAN package.

2. Install PostgreSQL

Install PostgreSQL database.

Cek apakah PostgresSQL terinstall dengan baik dengan cara menampilkan database yang ada.

Membuat user PostgreSQL dengan nama ckan_default.

Membuat database PostgreSQL dengan nama ckan_default.

Cek apakah database ckan_default berhasil dibuat.

Hasilnya.

3. Install Solr

Install Solr engine.

Buka file konfigurasi Tomcat.

Ubah default port Tomcat dari 8080 ke nomor 8983.

Ganti file default schema.xml dengan symlink ke file CKAN schema yang disertakan di dalam sources.

Restart Solr dengan merestart tomcat.

4. Konfigurasi CKAN

Buka file konfigurasi CKAN.

Aktifkan opsi solr_url dengan menghapus hashtag (#).

URL untuk CKAN site, misalnya memakai subdomain data.defnex.com.

Opsi untuk koneksi ke database PostgreSQL, misalnya username = ckan_default, password = secretpassword, dan database = ckan_default.

Inisialisasi database CKAN.

Hasilnya.

Restart Supervisor dan cek statusnya.

Hasilnya.

Restart Nginx.

5. Pengujian

Uji dengan browse http://localhost atau http://data.defnex.com.

CKAN web frontpage
CKAN web frontpage

6. Install SSL

Backup file default konfigurasi server block ckan.

Buka file konfigurasi ckan.

Masukkan opsi server_name dan log.

Tes konfigurasi Nginx.

Restart Nginx.

Uji kembali mengakses http://data.defnex.com, apakah tidak ada masalah setelah konfigurasi Nginx diubah.

Install certbot untuk Let’s Encrypt SSL.

Request SSL untuk data.defnex.com.

Uji browse https://data.defnex.com.

CKAN dengan protokol https
CKAN dengan protokol https

7. Membuat sysadmin user

Gunakan CKAN command line interface untuk membuat sysadmin user pertama kali dan bisa juga untuk membuat test data.

Mengaktifkan virtualenv.

Membuat user baru dengan nama musa dan menjadikannya sebagai sysadmin.

Hasilnya.

Atau jika ingin menjadikan user yang sudah ada sebagai sysadmin.

Uji sysadmin user yang baru dibuat dengan login di web CKAN.

CKAN dashboard
CKAN dashboard

8. Pemakaian Resources

Mengecek pemakaian resources VPS yang terpakai dengan menggunakan htop.

Resources VPS yang terpakai
Resources VPS yang terpakai

Selamat mencoba 🙂

51 Comments

  1. instalnya di linux server apa gmana? soalnya selalu gagal saat instal database psotgresql nya, mohon bantuannya

  2. Saya udah coba install di linux server dan berhasil. Tetapi setelah beberapa waktu tiba-tiba terjadi Internal Server Error ketika mengakses website tersebut. Mohon bantuannya

  3. Mas mau nanya krn masih awam jg nih
    Apa CKAN ini bisa diinstal macOS atau mmg khusus untuk ubuntu ya, klo ada untuk macOS bisa share petunjuk nya mas, terima kasih

  4. Saya sudah berhasil menginstall ckan dan mengoperasikannya, kemudian saya upgrade ckan dari http menjadi https. Setelah menjadi https, ketika login dan logout di-url nya masih mengakses link http sehingga menyebabkan error. Mohon pencerahannya. Terima kasih.

  5. om klo kasusx begini apa yg salah….???
    trus ngatasinx gimana…???

    sudo dpkg -i python-ckan_2.9-py3-focal_amd64.deb
    (Reading database … 192624 files and directories currently installed.)
    Preparing to unpack python-ckan_2.9-py3-focal_amd64.deb …
    Unpacking python-ckan (2.9.5-py3-focal1) over (2.9.5-py3-focal1) …
    Setting up python-ckan (2.9.5-py3-focal1) …
    Traceback (most recent call last):
    File “/usr/lib/ckan/default/bin/ckan”, line 11, in
    load_entry_point(‘ckan’, ‘console_scripts’, ‘ckan’)()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/pkg_resources/__init__.py”, line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/pkg_resources/__init__.py”, line 2852, in load_entry_point
    return ep.load()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/pkg_resources/__init__.py”, line 2443, in load
    return self.resolve()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/pkg_resources/__init__.py”, line 2449, in resolve
    module = __import__(self.module_name, fromlist=[‘__name__’], level=0)
    File “/usr/lib/ckan/default/src/ckan/ckan/cli/cli.py”, line 13, in
    from ckan.config.middleware import make_app
    File “/usr/lib/ckan/default/src/ckan/ckan/config/middleware/__init__.py”, line 12, in
    from ckan.config.middleware.flask_app import make_flask_stack
    File “/usr/lib/ckan/default/src/ckan/ckan/config/middleware/flask_app.py”, line 24, in
    from fanstatic import Fanstatic
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/fanstatic/__init__.py”, line 1, in
    from fanstatic.core import (Library,
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/fanstatic/core.py”, line 7, in
    import fanstatic.registry
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/fanstatic/registry.py”, line 1, in
    from fanstatic.compiler import NullCompiler
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/fanstatic/compiler.py”, line 8, in
    import setuptools.command.sdist
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/setuptools/__init__.py”, line 6, in
    import distutils.core
    ModuleNotFoundError: No module named ‘distutils.core’

  6. Pas instalasi ckan muncul pesan error “No module named ‘pkg_resources’ ” cara mengatasinya gimana ya bang, udh coba cari internet dan pake reinstall pkg_resources nya ga ngaruh

  7. sudo supervisorctl reload
    sudo supervisorctl status
    ckan-datapusher:ckan-datapusher-00 RUNNING pid 5695, uptime 0:00:16
    ckan-uwsgi:ckan-uwsgi-00 RUNNING pid 5696, uptime 0:00:16
    ckan-worker:ckan-worker-00 FATAL Exited too quickly (process log may have details)

    Itu kenapa ya? pas buka web nya lagi, cuman keluar Internal Server Error.
    Trims.

  8. File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/base.py”, line 2262, in _wrap_pool_connect
    return fn()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 363, in connect
    return _ConnectionFairy._checkout(self)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 760, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 492, in checkout
    rec = pool._do_get()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/impl.py”, line 139, in _do_get
    self._dec_overflow()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py”, line 68, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/compat.py”, line 154, in reraise
    raise value
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/impl.py”, line 136, in _do_get
    return self._create_connection()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 308, in _create_connection
    return _ConnectionRecord(self)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 437, in __init__
    self.__connect(first_connect_check=True)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 639, in __connect
    connection = pool._invoke_creator(self)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py”, line 114, in connect
    return dialect.connect(*cargs, **cparams)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/default.py”, line 451, in connect
    return self.dbapi.connect(*cargs, **cparams)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/psycopg2/__init__.py”, line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    psycopg2.OperationalError: could not connect to server: Connection refused
    Is the server running on host “10.10.7.50” and accepting
    TCP/IP connections on port 5432?

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
    File “/usr/lib/ckan/default/bin/ckan”, line 11, in
    load_entry_point(‘ckan’, ‘console_scripts’, ‘ckan’)()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 829, in __call__
    return self.main(*args, **kwargs)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 781, in main
    with self.make_context(prog_name, args, **extra) as ctx:
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 700, in make_context
    self.parse_args(ctx, args)
    File “/usr/lib/ckan/default/src/ckan/ckan/cli/cli.py”, line 116, in parse_args
    result = super(ExtendableGroup, self).parse_args(ctx, args)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 1212, in parse_args
    rest = Command.parse_args(self, ctx, args)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 1048, in parse_args
    value, args = param.handle_parse_result(ctx, opts, args)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 1630, in handle_parse_result
    value = invoke_param_callback(self.callback, ctx, self, value)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/click/core.py”, line 123, in invoke_param_callback
    return callback(ctx, param, value)
    File “/usr/lib/ckan/default/src/ckan/ckan/cli/cli.py”, line 126, in _init_ckan_config
    _add_ctx_object(ctx, value)
    File “/usr/lib/ckan/default/src/ckan/ckan/cli/cli.py”, line 135, in _add_ctx_object
    ctx.obj = CtxObject(path)
    File “/usr/lib/ckan/default/src/ckan/ckan/cli/cli.py”, line 57, in __init__
    self.app = make_app(self.config)
    File “/usr/lib/ckan/default/src/ckan/ckan/config/middleware/__init__.py”, line 56, in make_app
    load_environment(conf)
    File “/usr/lib/ckan/default/src/ckan/ckan/config/environment.py”, line 123, in load_environment
    p.load_all()
    File “/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”, line 161, in load_all
    unload_all()
    File “/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”, line 208, in unload_all
    unload(*reversed(_PLUGINS))
    File “/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”, line 236, in unload
    plugins_update()
    File “/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”, line 153, in plugins_update
    environment.update_config()
    File “/usr/lib/ckan/default/src/ckan/ckan/config/environment.py”, line 306, in update_config
    model.init_model(engine)
    File “/usr/lib/ckan/default/src/ckan/ckan/model/__init__.py”, line 152, in init_model
    Table(‘alembic_version’, meta.metadata, autoload=True)
    File “”, line 2, in __new__
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/deprecations.py”, line 130, in warned
    return fn(*args, **kwargs)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/sql/schema.py”, line 496, in __new__
    metadata._remove_table(name, schema)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py”, line 68, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/compat.py”, line 154, in reraise
    raise value
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/sql/schema.py”, line 491, in __new__
    table._init(name, metadata, *args, **kw)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/sql/schema.py”, line 580, in _init
    self._autoload(
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/sql/schema.py”, line 620, in _autoload
    bind.run_callable(
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/base.py”, line 2146, in run_callable
    with self._contextual_connect() as conn:
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/base.py”, line 2226, in _contextual_connect
    self._wrap_pool_connect(self.pool.connect, None),
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/base.py”, line 2265, in _wrap_pool_connect
    Connection._handle_dbapi_exception_noconnection(
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/base.py”, line 1536, in _handle_dbapi_exception_noconnection
    util.raise_from_cause(sqlalchemy_exception, exc_info)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/compat.py”, line 399, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/compat.py”, line 153, in reraise
    raise value.with_traceback(tb)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/base.py”, line 2262, in _wrap_pool_connect
    return fn()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 363, in connect
    return _ConnectionFairy._checkout(self)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 760, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 492, in checkout
    rec = pool._do_get()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/impl.py”, line 139, in _do_get
    self._dec_overflow()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py”, line 68, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/util/compat.py”, line 154, in reraise
    raise value
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/impl.py”, line 136, in _do_get
    return self._create_connection()
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 308, in _create_connection
    return _ConnectionRecord(self)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 437, in __init__
    self.__connect(first_connect_check=True)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/pool/base.py”, line 639, in __connect
    connection = pool._invoke_creator(self)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py”, line 114, in connect
    return dialect.connect(*cargs, **cparams)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/sqlalchemy/engine/default.py”, line 451, in connect
    return self.dbapi.connect(*cargs, **cparams)
    File “/usr/lib/ckan/default/lib/python3.8/site-packages/psycopg2/__init__.py”, line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
    Is the server running on host “10.10.7.50” and accepting
    TCP/IP connections on port 5432?

    (Background on this error at: http://sqlalche.me/e/e3q8)

    assalamu’alaikum bang musa…salam kenal.
    bisa dibantu error tsb mengatasinya gmn ? terimakasih

      • ckan-datapusher:ckan-datapusher-00 RUNNING pid 20410, uptime 0:13:49
        ckan-uwsgi:ckan-uwsgi-00 RUNNING pid 20411, uptime 0:13:49
        ckan-worker:ckan-worker-00 FATAL Exited too quickly (process log may have details)

        malah terjadi FATAL exited, itu knp bang dan solusi gmn?

  9. saya merubah templating CKAN, namun di browser tidak ter-update tampilannya, Bagaimana ya solusinya?

  10. Mas kalau ssl nya install menggunakan DigiCert bagaimana ya? saya mempunyai file ssl nya namun saat mengaplikasikannya saya belum bisa

  11. Pak, saya sudah mengikuti dokumentasinya, tapi ketika login interface menampilkan login failed namun url yang ditampilkan adalah user/logged_in, apakah hal tersebut disebabkan karena saya blm mengubah http menjadi https atau bagaimana? mohon pencerahannya, terimakasih

  12. Maaf pak mau tanya, klo udh berhasil install tapi gkbisa login gmn ya? muncul error “Login failed. Bad username or password” padahal sudah saya isi dengan benar, kemudian dibalik eror tsb urlnya sudah user/logged_in, terimakasih

  13. Permisi pak, mohon bantuannya, saya sudah mengikuti tutorial bapak untuk memasang ckan di server saya, awalnya tampilannya sudah baik, beberapa hari setelahnya saya buka kembali namun ckan.ini tdk berfungsi pak? tampilan yang awalnya ckan 2.9 menjadi ckan 2.10, (sebagai contoh, permalink harus dibuat sendiri tidak otomatis generate) mohon arahannya, terimakasih

  14. ijin bertanya apakah untuk versi ini, file tidak di upload ke ckan melainkan hanya link file

  15. permisi bang Musa Amin, saya Install dan sudah Running CKAN 2.10 di server Ubuntu 22.04 menggunakan docker compose. nah mencoba mengubah title CKAN itu masih belum ke ubah padahal sudah di reboot server Ubuntunya tapi tetep tidak ke update dan jikalau saya ingin mengubah tampilan FE CKAN sesuai keinginan sendiri itu bagaimana caranya, saya sudah mencari source codenya di dalam ckan-docker tapi masih belum ditemukan. mohon bantuannya bang …

  16. Bang musa, ijin bertanya dikarenakan saya lupa saat config register yg di nonakttifkan, sekarang ingin di aktifkan lagi bang.. mohon petunjuk langkah-langkah configurenya apa saja bang?

Leave a Reply

Your email address will not be published. Required fields are marked *