Menggunakan services-config.yaml

Saat Anda menggunakan pengelola layanan Linux yang disederhanakan untuk melakukan migrasi, Migrate to Containers akan membuat file artefak baru, services-config.yaml. Gunakan file ini untuk mengontrol inisialisasi aplikasi pada container yang di-deploy.

Misalnya, setelah Anda memigrasikan penampung, edit file services-config.yaml untuk mengontrol inisialisasi aplikasi ke:

  • Menghapus aplikasi dari file
  • Tambahkan aplikasi ke file
  • Mengedit properti inisialisasi aplikasi

Berikut adalah contoh file services-config.yaml:

version: v1beta1
env:
  - name: KEY1
    value: VALUE1
  - name: KEY2
    value: VALUE2
applications:
    - name: nginx
      type: forking
      envfile: /path/to/file.txt
      env:
        - name: KEY3
          value: VALUE3
      start:
      - cmd: /usr/sbin/nginx -g 'daemon on; master_process on;'
      pidfile: /run/nginx.pid
    - name: ssh@
      type: simple
      start:
      - cmd: /usr/sbin/sshd -i $SSHD_OPTS
        ignore_errors: true
      runtime_directories:
        mode: "0755"
        paths:
          - /run/sshd
        preserve: true
    - name: suitecrm
      type: exec
      start:
      - cmd: /etc/init.d/suitecrm start
      status:
        cmd: /etc/init.d/suitecrm status
    - name: phpsessionclean
      type: oneshot
      start:
        - cmd: /usr/lib/php/sessionclean
      timers:
        - name: phpsessionclean.timer
          on_calendar:
            - cron: 09,39 * * * *
    - name: mariadb
      type: notify
      prestart:
        - cmd: /usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld
        - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
        - cmd: /bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1"
      start:
      - cmd: /usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
      poststart:
        - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
        - cmd: /etc/mysql/debian-start
      user: mysql
      group: mysql

Dalam file ini:

  • env: Menentukan variabel lingkungan di tingkat global atau di tingkat aplikasi. Jika Anda menentukan variabel lingkungan yang sama di tingkat global dan aplikasi, variabel lingkungan di tingkat aplikasi akan lebih diutamakan.

    • Untuk variabel lingkungan yang ditetapkan pada tingkat global, gunakan env untuk menentukan pasangan name/value. Nama dapat berisi huruf ASCII, angka, dan karakter garis bawah. Nama tidak boleh diawali dengan angka.

    • Untuk variabel lingkungan yang ditetapkan di tingkat aplikasi, gunakan env untuk menentukan pasangan name/value. Atau, gunakan envfile untuk menentukan jalur ke file teks yang berisi baris dalam formulir:

      # Comments allowed
      KEY=VALUE

      Jika file teks berisi definisi variabel lingkungan yang menduplikasi definisi yang ditentukan oleh env, definisi yang ditentukan oleh env akan lebih diutamakan.

  • applications: Menentukan daftar aplikasi yang akan dimulai saat Anda men-deploy container dan menetapkan properti inisialisasi aplikasi.

    • name: Menentukan nama aplikasi.

    • type menentukan jenis aplikasi, sebagai salah satu dari berikut ini:

      • forking: Menjalankan file yang ditentukan oleh start tanpa membuat fork. Layanan yang dapat dieksekusi diharapkan akan melakukan fork. Sebaiknya Anda juga menetapkan pidfile.

      • exec: Fork untuk menjalankan layanan. Layanan dianggap dimulai setelah exec dipanggil di file yang dapat dieksekusi.

      • simple - Sama seperti exec. Layanan simple berperilaku berbeda dengan definisi systemd karena menunggu fork dan exec, bukan fork.

      • notify: Sama seperti exec, kecuali untuk systemd, variabel lingkungan NOTIFY_SOCKET tidak ditetapkan sehingga panggilan sd_notify systemd tidak berfungsi.

      • oneshot: Layanan dianggap dimulai setelah exec dipanggil di file yang dapat dieksekusi. Statusnya adalah error jika layanan keluar dengan kode error yang tidak sama dengan 0.

    • Perintah prestart, start, poststart, dan status untuk layanan.

      Untuk memulai layanan, Migrate to Containers menjalankan perintah prestart (jika ada), lalu perintah start, dan terakhir perintah poststart (jika ada). Jika perintah gagal, dan Anda belum mengonfigurasi perintah tersebut untuk menggunakan ignore_errors, layanan akan dihentikan dan Anda akan melihat pesan error dalam status layanan.

      Perintah yang digunakan untuk melakukan operasi tertentu pada aplikasi memiliki bentuk:

        command-type:
          cmd: command
          shell: /bin/sh
          ignore_errors: false
          ignore_environment_variables: false

      Dengan keterangan:

      • command-type: Menentukan jenis perintah sebagai prestart, start, poststart, atau status.

        Untuk start, Anda dapat memiliki satu perintah kecuali jika type adalah oneshot.

        Jika type=forking atau type=oneshot, perintah poststart dijalankan setelah fork perintah start. Jika tidak, eksekusi akan langsung dijalankan setelah perintah start dijalankan.

      • command: Menentukan perintah yang akan dijalankan untuk menjalankan operasi.

      • shell (Opsional): Secara default, semua perintah dijalankan di shell /bin/sh. Anda dapat menetapkan shell ke /bin/bash secara opsional.

      • ignore_errors (Opsional): Jika true, kode keluar dari perintah yang biasanya dianggap gagal akan dicatat, tetapi perintah dianggap berhasil. Nilai defaultnya adalah false.

        Secara default, Migrate to Containers menetapkan ignore_errors ke true untuk setiap file systemd yang dapat dieksekusi yang menyertakan awalan "-".

      • ignore_environment_variables (Opsional): Jika true, penggantian variabel lingkungan tidak diterapkan. Nilai defaultnya adalah false.

        Secara default, Migrate to Containers menetapkan ignore_environment_variables ke true untuk setiap file systemd yang dapat dieksekusi yang menyertakan awalan ":".

    • pidfile: Menentukan file pid yang berisi ID proses layanan yang digunakan untuk memeriksa apakah proses masih berjalan.

    • chdir: Menentukan direktori kerja dari proses yang dimulai.

    • user: Menentukan nama pengguna tempat proses baru dimulai.

    • group: Menentukan nama grup tempat proses baru dimulai.

    • timers: Menentukan daftar timer aplikasi. Aplikasi akan diaktifkan setiap kali salah satu timer yang ditentukan berlalu.

      version: v1beta1
      env: []
      Applications:
      - name: service_name
        type: service_type
        start:
          - cmd: service_exec_command
        timers:
          - name: timer_name
            on_calendar:
              - cron: realtime_time
            on_startup:
              - duration: monotonic_time
            on_service_start:
              - duration: monotonic_time
            on_service_stop:
              - duration: monotonic_time
      
      • name: Menentukan nama timer.

      • on_calendar: Menentukan daftar acara kalender untuk timer.

        • cron: Waktu yang ditentukan menggunakan format cron. Contoh:

          cron: 0 0 * * *
          cron: @daily
          
      • on_startup: Menentukan daftar durasi (relatif terhadap kapan Anda men-deploy container).

        • duration: Waktu yang ditentukan menggunakan format durasi. Contoh:
        duration: 30m
        duration: 1sec
        
      • on_service_start: Menentukan daftar durasi, relatif terhadap kapan status aplikasi Anda berubah menjadi aktif.

        • duration: Waktu yang ditentukan menggunakan format durasi.
      • on_service_stop: Menentukan daftar durasi, relatif terhadap kapan status aplikasi Anda berubah menjadi tidak aktif.

        • duration: Waktu yang ditentukan menggunakan format durasi.
    • Gunakan properti berikut untuk menentukan paths ke direktori yang dibuat sebelum memulai layanan:

      • runtime_directories: Menentukan daftar paths ke direktori yang dibuat di /run/.

      • state_directories: Menentukan daftar paths ke direktori yang dibuat di /var/lib/.

      • cache_directories: Menentukan daftar paths ke direktori yang dibuat di /var/cache/.

      • logs_directories: Menentukan daftar paths ke direktori yang dibuat di /var/log/.

      • configuration_directories: Menentukan daftar paths ke direktori yang dibuat di /etc/.

      Setiap properti ini menggunakan opsi berikut:

      • mode: Menentukan mode file. Defaultnya adalah 0755, yang berkaitan dengan akses baca dan eksekusi untuk semua orang, dan akses tulis untuk pemilik.
      • preserve: Jika false, direktori akan dibersihkan saat layanan dihentikan. Defaultnya adalah true.

Menambahkan atau menghapus layanan ke file services.yaml

Anda dapat menambahkan atau menghapus layanan dari file services.yaml dengan mengeditnya secara manual. Setiap kali menambahkan layanan baru, Anda harus mengisi kolom berikut:

  • name
  • type
  • start

Untuk informasi selengkapnya tentang kolom wajib dan opsional untuk layanan, lihat definisi services.yaml di atas.

Tambahkan layanan

Untuk menambahkan layanan ke file services.yaml, ikuti langkah-langkah berikut:

  1. Buka file services.yaml Anda di editor teks untuk memodifikasi.

  2. Di services.yaml, buka atribut applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    
  3. Tambahkan layanan yang diinginkan pada baris di bawah atribut applications yang dimulai dengan kolom name, diikuti dengan kolom wajib dan opsional lainnya yang sesuai dengan aplikasi Anda:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
        - cmd:
      ...
    

    Jika file services.yaml sudah memiliki definisi layanan di atribut applications, Anda dapat menambahkan layanan baru yang dimulai dengan kolom name pada baris di bawah entri terakhir layanan sebelumnya:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
    - name:
      type:
      start:
        ...
    
  4. Simpan file services.yaml Anda.

Menghapus layanan

Untuk menghapus layanan dari file services.yaml, ikuti langkah-langkah berikut:

  1. Buka file services.yaml Anda di editor teks untuk memodifikasi.

  2. Di services.yaml, buka atribut applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    ...
    
  3. Hapus layanan yang diinginkan yang dimulai dengan kolom name, diikuti dengan kolom wajib dan opsional lainnya yang sesuai untuk aplikasi Anda. Contoh:

    Sebelum layanan dihapus:

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      type:
      start:
        - cmd:
    - name:
      ...
    
    

    Setelah layanan dihapus:

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      ...
    
  4. Simpan file services.yaml Anda.