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 di penampung yang di-deploy.

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

  • Menghapus aplikasi dari file
  • Menambahkan 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 diprioritaskan.

    • Untuk variabel lingkungan yang ditetapkan di 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 bentuk:

      # Comments allowed
      KEY=VALUE

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

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

    • name: Menentukan nama aplikasi.

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

      • forking: Jalankan file yang ditentukan oleh start tanpa melakukan forking. File yang dapat dieksekusi layanan diharapkan akan melakukan fork. Sebaiknya Anda juga menetapkan pidfile.

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

      • simple - Sama seperti exec. Perilaku layanan simple 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 pada 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, Migrasi ke Penampung akan mengeksekusi perintah prestart (jika ada), lalu perintah start, dan terakhir perintah poststart (jika ada). Jika perintah gagal, dan Anda belum mengonfigurasi perintah 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 akan dijalankan setelah perintah start melakukan fork. Jika tidak, perintah tersebut akan langsung dieksekusi setelah menjalankan perintah start.

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

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

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

        Secara default, Migrate to Containers menetapkan ignore_errors ke true untuk 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 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 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 saat Anda men-deploy penampung).

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

        • duration: Waktu yang ditentukan menggunakan format durasi.
      • on_service_stop: Menentukan daftar durasi, relatif terhadap saat 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. Nilai default-nya adalah 0755, yang sesuai dengan akses baca dan eksekusi untuk semua orang, serta 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 di editor teks untuk diubah.

  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 Anda sudah memiliki definisi layanan di bagian 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 di editor teks untuk diubah.

  2. Di services.yaml, buka atribut applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    ...
    
  3. Hapus layanan yang diinginkan mulai dari kolom name, diikuti dengan kolom wajib dan opsional lainnya yang sesuai dengan 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.