GNU/Linux >> Belajar Linux >  >> Linux

Panduan Lengkap Ghost CMS Self-hosting Dengan Docker

Ghost adalah sistem manajemen konten sumber terbuka yang cocok untuk blog, buletin, atau situs web keanggotaan.

Ini sangat cepat dan SEO dioptimalkan. Kami menyukainya di sini di Buku Pegangan Linux. Situs web kami menggunakan Ghost, tentu saja.

Sekarang, Anda dapat memilih instance Ghost terkelola dari pembuat Ghost itu sendiri. Ini akan menghabiskan banyak biaya, tetapi Anda tidak perlu berusaha keras dalam menyebarkan Ghost, memperbaruinya, dan memeliharanya. Dan tentu saja, ini membantu pengembangan proyek Ghost.

Jika Anda ingin menghindari menghabiskan banyak uang atau menangani masalah dengan pendekatan 'lakukan sendiri', Anda dapat menghosting sendiri Ghost di server Anda.

Dalam tutorial ini, saya akan menunjukkan langkah-langkah untuk men-deploy Ghost dengan Docker.

Hosting-sendiri Ghost dengan Docker

Inilah masalahnya. Beberapa penyedia server cloud seperti DigitalOcean juga menyediakan penyebaran Ghost sekali klik. Itu bisa menjadi jalan keluar yang mudah jika Anda tidak ingin masalah dengan pengaturan dan konfigurasi Ghost awal.

Selain itu, mari kita lihat apa yang Anda butuhkan untuk men-deploy Ghost dengan Docker di server Linux.

Persyaratan

Selain terbiasa dengan perintah Linux, mengetahui dasar-dasar Docker Compose juga akan membantu di sini.

  • Server Linux. Anda dapat menggunakan server fisik, mesin virtual, atau server cloud. Anda dapat mendaftar dengan mitra kami Linode dan mendapatkan kredit gratis sebesar $100.
  • Docker dan Docker Compose terinstal di server Anda.
  • Akses ke DNS domain tempat Anda ingin menerapkan Ghost.
  • Pengaturan proxy terbalik Nginx dengan pengalihan www/non-www dan batas unggah yang diizinkan.

Langkah 0:Siapkan penyiapan awal

Anda harus menginstal Docker dan Docker Compose di sistem Anda. Anda dapat merujuk ke tutorial ini untuk mendapatkan instruksi untuk Ubuntu.

Selain itu, Anda juga harus memiliki pengaturan proxy terbalik Ngnix. Ini bermanfaat jika Anda ingin menginstal lebih dari satu Ghost atau beberapa layanan web lain di server yang sama.

Sekarang, saya telah membahas topik ini secara rinci dalam tutorial yang ditautkan di bawah ini, jadi saya tidak akan mengulangi langkah yang sama di sini. Namun, Anda harus memiliki pengaturan ini di sistem Anda.

Ikuti tutorial ini sampai Langkah 4:

Langkah 1:Mempersiapkan penerapan Ghost

Saya menggunakan metode proxy terbalik Jwilder di sini karena metode ini memperhitungkan sertifikat SSL, pengalihan www/non-www, dan batas unggah yang diizinkan.

Cara menangani sertifikat SSL sudah dijelaskan di tautan yang dibagikan di atas di bagian persyaratan. Selain itu, saya akan menjelaskan cara mengaktifkan pengalihan www/non-www dan meningkatkan batas unggahan yang diizinkan.

Pengalihan WWW/non-WWW

Tergantung pada preferensi SEO Anda, Anda mungkin ingin mengatur pengalihan www ke non-www atau sebaliknya. Misalnya, jika blog Anda dihosting di domain.com, pengguna yang mengunjungi www.domain.com harus diarahkan ke sana (cara kerja domain GitHub).

Demikian pula, jika Anda menghostingnya di www.domain.com, pengguna yang mengunjungi domain.com harus dialihkan (cara kerja domain Linode).

WWW ke non-WWW

Buat file bernama www.domain.com dalam direktori penulisan nginx docker dengan konten berikut dan simpan:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Non-WWW ke WWW

Buat file bernama domain.com dalam direktori penulisan nginx docker dengan konten berikut dan simpan:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Sekarang, misalkan Anda ingin menggunakan WWW ke pengalihan non-WWW. Yang harus Anda lakukan adalah mengikat mount file di bagian volume dari konfigurasi layanan Nginx Anda:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Tingkatkan Batas Upload yang Diizinkan

Unggahan gambar dapat dipengaruhi oleh ukuran unggahan maksimum default 50 MB. Untuk menetapkan batas unggah maksimum dan menghindari masalah saat mengunggah gambar di Docker, katakanlah untuk 1 GB, buat file bernama client_max_upload_size.conf dan simpan dengan konten berikut:

client_max_body_size 1G;

Nanti Anda perlu memasangnya seperti yang dijelaskan dengan file sebelumnya:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Jalankan docker-compose up -d dari direktori Nginx untuk memperbarui konfigurasi Nginx Anda.

Pertama-tama, konfigurasi penyebaran Ghost pada dasarnya terdiri dari dua komponen utama:

  • Backend basis data MariaDB
  • Ghost itu sendiri sebagai antarmuka web

Karena Anda men-deploy Ghost dengan Docker, semua komponen di atas disiapkan sebagai container masing-masing.

Untuk layanan database, saya akan menggunakan jaringan internal bernama ghost karena hanya perlu terlihat untuk layanan Ghost.

networks:
  - ghost

Tapi untuk layanan Ghost tentunya sama net jaringan yang digunakan pada konfigurasi proxy terbalik harus ditentukan bersama dengan ghost jaringan, dan baru setelah itu dimungkinkan untuk menjalankannya dengan container Nginx Docker.

networks:
  - net
  - ghost

Sekarang pertimbangkan bagaimana mereka dikonfigurasi secara individual dengan Docker Compose:

Untuk MariaDB, saya menggunakan gambar resmi MariaDB 10.5.3 yang tersedia di Docker Hub:

    ghostdb:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        env_file:
            - ./mariadb.env
        networks:
            - ghost

Di sini saya menggunakan volume yang disebut ghostdb untuk menyimpan data database di /var/lib/mysql . Saya juga menyetel  variabel lingkungan yang relevan di env_file disebut mariadb.env :

MYSQL_RANDOM_ROOT_PASSWORD=1
MYSQL_USER=mariadbuser
MYSQL_PASSWORD=mariadbpassword
MYSQL_DATABASE=ghost

Untuk layanan Ghost itu sendiri, daripada menggunakan latest tag, saya secara khusus lebih suka menggunakan nomor versi yang ditandai di Docker Hub yang diluncurkan oleh pengembang sebagai rilis stabil. Di sini, saat penulisan ini, adalah 4.5.0 :

    ghost:
        image: ghost:4.5.0
        volumes:
            - ghost:/var/lib/ghost/content
            - ./config.json:/var/lib/ghost/config.production.json
        env_file:
            - ./ghost-mariadb.env
        restart: on-failure
        depends_on: ghostdb
        networks:
            - net
            - ghost

config.json yang dipasang mengikat file terdiri dari pengaturan SMTP(Mailgun) dan rotasi log penting (fokus kesalahan):

{
  "url": "http://localhost:2368",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "mail": {
    "transport": "SMTP",
    "options": {
        "service": "Mailgun",
        "host": "smtp.eu.mailgun.org",
        "port": 465,
        "secureConnection": true,
        "auth": {
            "user": "replace-me-with-a-mailgun-configured-email-address",
            "pass": "replace-me-with-the-relevant-mailgun-apikey-of-50-characters"
        }
    }
  },
  "logging": {
    "path": "content/logs/",
    "level": "error",
    "rotation": {
      "enabled": true,
      "count": 10,
      "period": "1d"
  },
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

Jika harus menggunakan MySQL/MariaDB, layanan Ghost harus mengandalkan ghostdb layanan agar bisa beroperasi. Ini dapat dipastikan hanya jika Anda telah mengikat ghost-mariadb.env file (ditampilkan di bagian volume layanan database Ghost) dengan konfigurasi database yang benar sesuai dengan mariadb.env dalam layanan database, yang akan menjadi:database__client , database__connection__host , database__connection__user , database__connection__password dan database__connection__database .

Saya juga akan menetapkan setiap variabel lingkungan VIRTUAL_HOST dan LETSENCRYPT_HOST ke keduanya domain.com serta www.domain.com masing-masing, untuk memastikan keduanya ada. Ini benar-benar memastikan pengalihan dan sertifikat SSL bekerja dengan lancar tanpa masalah. Saya ingin URL utama saya tanpa www jadi saya menetapkannya sebagai url=https://domain.com . Karena Anda akan menggunakan penyiapan ini untuk penggunaan tingkat produksi, NODE_ENV variabel diatur ke mode produksi. Detail ini juga perlu ditambahkan.

Oleh karena itu, file lingkungan lengkap(ghost-mariadb.env ) untuk layanan Ghost adalah:

VIRTUAL_HOST=domain.com,www.domain.com
LETSENCRYPT_HOST=domain.com,www.domain.com
url=https://domain.com
NODE_ENV=production

database__client=mysql
database__connection__host=ghostdb
database__connection__user=mariadbuser
database__connection__password=mariadbpassword
database__connection__database=ghost

Inkonsistensi dalam data di atas dapat membuat Ghost keliru beralih ke SQLite. Anda tidak ingin itu. Jadi pastikan semua parameter di atas sesuai dengan benar dengan layanan database yang dibahas untuk mariadb.env di atas.

Setiap layanan database akan memiliki volume Docker masing-masing untuk menyimpan data pengguna dan konten. Saya akan membuatnya sebagai volume eksternal:

docker volume create ghostdb
docker volume create ghost

Sekarang Anda perlu menyertakan  volumes bagian dalam file penulisan buruh pelabuhan dengan  detail berikut:

volumes:
  ghost:
    external: true
  ghostdb:
    external: true

Anda sekarang memiliki komponen yang diperlukan untuk menerapkan Ghost.

Langkah 2:Menyebarkan Ghost

Sekarang Anda harus menyiapkan file  docker-compose. Saatnya menggunakan file ini.

Buat direktori penulisan Ghost docker di server Anda:

mkdir ghost

Masuk ke direktori untuk mengedit file yang diperlukan:

cd ghost

Sekarang buat file docker-compose berikut berdasarkan diskusi kita sejauh ini:

version: '3.7'
services:
    ghostdb:
       image: mariadb:10.5.3
       volumes:
          - ghostdb:/var/lib/mysql
       restart: on-failure
       env_file:
          - ./mariadb.env
       networks:
          - ghost

    ghost:
      image: ghost:4.5.0
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost
volumes:
  ghost:
    external: true
  ghostdb:
    external: true

networks:
  net:
    external: true
  ghost:
    internal: true

Juga, jangan lupa untuk membuat file konfigurasi lain seperti yang dibahas di atas:config.json , mariadb.env dan ghost-mariadb.env dalam direktori yang sama.

Mulai instance Ghost:

docker-compose up -d

Akses domain Ghost yang ditentukan dalam konfigurasi menggunakan URL domain yang Anda tentukan.

Langkah 3:Menyiapkan akun Ghost Admin Anda

Perhatikan bahwa untuk menyiapkan akun administrator, Anda harus membuka domain.com/ghost dan ikuti petunjuk di layar hingga Anda mengklaim situs Anda sebagai admin hantu.

Untuk memeriksa ulang, konfirmasikan bahwa Anda memang menggunakan MySQL/MariaDB dan bukan SQLite. Navigasikan ke ikon pengguna Anda di kiri bawah:

Sekarang Anda dapat yakin bahwa Anda benar-benar menggunakan wadah basis data terpisah yang akan ditampilkan sebagai mysql terlepas dari apakah Anda menggunakan gambar MySQL atau MariaDB Docker:

Anda juga dapat melihat bahwa tiga parameter lainnya:Versi, Lingkungan, dan Surat, disetel seperti yang diharapkan berdasarkan langkah-langkah kami yang disebutkan di atas. Jadi itu saja! Anda telah berhasil menerapkan Ghost sebagai instance yang dihosting sendiri di server Anda!

Kiat untuk mempertahankan instance Ghost yang dihosting sendiri

Berikut adalah beberapa tips yang akan membantu Anda dalam memelihara instance Ghost Anda.

Memantau Log Hantu secara Real-time

Jika Anda ingin memeriksa log container saat di-deploy secara real time, Anda dapat menjalankan:

docker logs -f ghost_ghost_1

Cadangkan dan Pulihkan Volume Hantu tanpa Waktu Henti

Dengan menggunakan pendekatan cloud + lokal, Anda dapat mencadangkan dan memulihkan volume hantu tanpa waktu henti.

Perbarui Penampung Hantu tanpa Waktu Henti

Dengan --scale flag di Docker Compose, Anda dapat membuat wadah baru berdasarkan versi terbaru dari Ghost. Setelah selesai, Anda dapat menghapus yang lama. Ini menghasilkan nol waktu henti.

Ada beberapa tips lagi yang bisa Anda baca di artikel di bawah ini.

Anda mungkin juga ingin Menyebarkan &Mengelola Tema Hantu Menggunakan Tindakan GitHub untuk menyederhanakan pekerjaan Anda.

Jika Anda menemukan bug, memiliki masalah, atau memiliki saran, beri tahu saya dengan meninggalkan komentar di bawah.


Linux
  1. Cara Menginstal WordPress dengan Docker, Panduan yang Mudah Diikuti

  2. Panduan Lengkap Pemula untuk Docker Logging

  3. 7 Tips Berguna untuk Menghosting Sendiri Instance Hantu Dengan Docker

  1. Grep Regex:Panduan Lengkap

  2. Panduan Lengkap untuk Self-hosting Rocket.Chat Dengan Docker

  3. Cara Memperbarui Kontainer Docker dengan Zero Downtime

  1. Panduan Docker:Menyebarkan Blog Hantu dengan MySQL dan Traefik dengan Docker

  2. Perintah Linux - Panduan Lengkap

  3. Panduan Lengkap untuk Memasang Linux di Chromebook