Skip to content

Deployment

Overview

Setelah dokumentasi selesai ditulis, langkah berikutnya adalah mempublikasikan website agar dapat diakses oleh pengguna.

Pada panduan ini, website dijalankan menggunakan NGINX Container. Image nginx-image hanya berperan sebagai runtime, sedangkan konten website disediakan secara terpisah. Dengan pendekatan ini, image tetap bersifat generik dan dapat digunakan untuk berbagai jenis static website tanpa perlu membangun ulang image setiap kali konten berubah.

                Static Website
        (MkDocs / Hugo / React / HTML)
                      β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚             β”‚             β”‚
        β–Ό             β–Ό             β–Ό
   Local Disk      Object Storage     NFS
        β”‚             β”‚             β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚
                      β–Ό
                 nginx-image
                      β”‚
                      β–Ό
                   Browser

Pada implementasi dalam handbook ini, static website berasal dari hasil build MkDocs (site/) yang disimpan pada Local Disk dan di-mount ke dalam container menggunakan bind mount. Namun pendekatan yang sama dapat diterapkan apabila konten website disimpan pada NFS, NAS, maupun Object Storage.

Best Practice

Pisahkan runtime dan content. Image bertanggung jawab menyediakan web server, sedangkan website dikelola secara terpisah sehingga perubahan konten tidak memerlukan proses build image kembali.


Deployment Architecture

Implementasi deployment pada panduan ini menggunakan hasil build MkDocs sebagai sumber static website.

          DevOps Handbook
          (MkDocs Project)
                  β”‚
          mkdocs build
                  β”‚
                  β–Ό
               site/
                  β”‚
                  β”‚ Bind Mount
                  β–Ό
          /var/www/html
                  β”‚
                  β–Ό
     localhost/nginx-image:1.0
                  β”‚
                  β–Ό
          Podman Container
                  β”‚
                  β–Ό
              Web Browser

Deployment Workflow

Secara umum proses deployment terdiri dari beberapa tahapan.

Markdown Files
       β”‚
       β–Ό
 mkdocs build
       β”‚
       β–Ό
site/
       β”‚
       β–Ό
Run Container
       β”‚
       β–Ό
NGINX
       β”‚
       β–Ό
Browser

Build the Website

Bangun website statis menggunakan perintah berikut.

mkdocs build

Apabila berhasil, MkDocs akan membuat direktori site/.

devops-handbook/
β”œβ”€β”€ docs/
β”œβ”€β”€ mkdocs.yml
└── site/

Direktori site/ berisi seluruh file HTML, CSS, JavaScript, gambar, dan aset lain yang dihasilkan oleh MkDocs.

Sebelum melakukan deployment, sinkronkan seluruh isi direktori site/ ke lokasi yang akan digunakan sebagai sumber static website.

Sebagai contoh, pada implementasi ini hasil build disalin ke repository deployment.

rsync -av --delete site/ ~/git/devops-handbook-site/site/

Setelah proses sinkronisasi selesai, struktur repository deployment akan menjadi seperti berikut.

devops-handbook-site/
β”œβ”€β”€ CONFIG
β”œβ”€β”€ PROJECT
β”œβ”€β”€ VERSION
β”œβ”€β”€ run.sh
β”œβ”€β”€ stop.sh
β”œβ”€β”€ README.md
└── site/
    β”œβ”€β”€ index.html
    β”œβ”€β”€ assets/
    β”œβ”€β”€ css/
    β”œβ”€β”€ images/
    β”œβ”€β”€ js/
    └── search/

Direktori site/ pada repository deployment inilah yang nantinya di-mount ke dalam container sebagai document root NGINX.

Engineering Notes

Pada panduan ini, hasil build MkDocs disimpan pada repository deployment untuk memudahkan proses deployment menggunakan bind mount. Namun pendekatan yang sama dapat diterapkan pada media penyimpanan lain seperti NFS, NAS, maupun Object Storage. Yang terpenting adalah runtime (nginx-image) memiliki akses ke direktori yang berisi static website.

Best Practice

Pisahkan source dokumentasi dan hasil build. Repository MkDocs digunakan untuk menyimpan source dokumentasi, sedangkan lokasi deployment hanya menyimpan static website hasil proses build. Pendekatan ini membuat proses deployment lebih fleksibel dan memudahkan integrasi dengan media penyimpanan lain maupun pipeline CI/CD.


Deployment Project

Deployment dilakukan menggunakan repository terpisah yang bertugas menjalankan container.

devops-handbook-site/
β”œβ”€β”€ CONFIG
β”œβ”€β”€ PROJECT
β”œβ”€β”€ VERSION
β”œβ”€β”€ run.sh
β”œβ”€β”€ stop.sh
└── README.md

Repository ini tidak membangun container image.

Sebaliknya, deployment menggunakan image runtime yang telah dibuat sebelumnya.

localhost/nginx-image:1.0

Configure Deployment

Lokasi static website dikonfigurasi melalui file CONFIG.

IMAGE_NAME=localhost/nginx-image:1.0

WEB_ROOT="$HOME/git/devops-handbook-site/site"

Keterangan.

Parameter Description
IMAGE_NAME Runtime image yang digunakan untuk menjalankan website.
WEB_ROOT Lokasi static website pada host yang akan di-mount ke container.

Pada implementasi ini, WEB_ROOT menunjuk ke direktori hasil build MkDocs.


Run the Container

Jalankan deployment.

./run.sh

Container akan melakukan bind mount.

Host
-------------------------------------
~/git/devops-handbook-site/site
            β”‚
            β–Ό
Container
-------------------------------------
/var/www/html

NGINX kemudian menyajikan seluruh file yang berada pada direktori tersebut.


Verification

Pastikan container berhasil dijalankan.

podman ps

Pastikan volume berhasil di-mount.

podman inspect devops-handbook-site

Pastikan document root berisi static website.

podman exec -it devops-handbook-site ls -lah /var/www/html

Contoh output.

index.html
404.html
assets/
css/
images/
js/
search/

Selanjutnya akses website menggunakan browser.

http://localhost:8080

Verification

Deployment dinyatakan berhasil apabila:

  • Container berhasil dijalankan.
  • Direktori site/ berhasil di-mount ke /var/www/html.
  • File index.html tersedia pada document root.
  • Website dapat diakses melalui browser.

References

Dokumentasi resmi.


Summary

Pada bab ini kita telah mempelajari:

  • Konsep pemisahan antara runtime dan content.
  • Arsitektur deployment menggunakan NGINX Container.
  • Membangun static website menggunakan mkdocs build.
  • Menjalankan website menggunakan bind mount.
  • Memverifikasi hasil deployment.

Next Steps

Pada bab berikutnya kita akan membahas berbagai praktik terbaik dalam mengelola dokumentasi menggunakan MkDocs, mulai dari struktur direktori, penamaan halaman, pengelolaan repository, hingga standar penulisan dokumentasi.