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.