GNU/Linux >> Belajar Linux >  >> Linux

Menyebarkan Sistem Komentar Isso Di Bawah Nginx Dengan Docker

Isso adalah perangkat lunak komentar sumber terbuka yang dapat berfungsi sebagai alternatif hebat untuk Disqus berpemilik.

Anda dapat menggunakannya untuk menambahkan sistem komentar ke blog atau situs web Anda.

Ini bekerja dengan WordPress, Ghost, dan banyak kerangka kerja lainnya berkat penyematan JavaScript. Di sini, saya menggunakan Ghost sebagai contoh demonstratif.

Menginstal Isso dengan Docker dengan containerization hybrid

Dokumen ini berfokus pada penerapan Isso di bawah container Nginx dengan hal-hal penting dan mengambil pendekatan yang disederhanakan dengan mengadopsi cara Docker Compose. Konfigurasi menggunakan gambar yang dihasilkan dari pembuatan Dockerfile resmi yang disediakan oleh pengembang di GitHub.

Panduan resmi menyebutkan penggunaan Nginx, yang didasarkan pada instalasi sisi host. Di sini, seperti biasa, saya menggunakan konfigurasi Nginx berbasis Docker.

Dokumentasi resmi memberikan contoh satu baris dasar untuk Docker. Tapi itu perlu dielaborasi secara ekstensif jika dipertimbangkan untuk penggunaan produksi.

Oleh karena itu, saya telah menyesuaikan versi Docker Compose berdasarkan contoh yang sama dan pengaturan Isso berdasarkan Docker Compose. Yang terakhir tidak lagi dipertahankan, tetapi masih merupakan referensi yang bermanfaat.

Dengan panduan ini, Anda dapat membangun kembali Dockerfile dan membuat image baru setiap kali pembaruan untuk Isso dirilis.

Prasyarat

Ini tidak wajib, tetapi tutorialnya akan lebih mudah Anda ikuti jika Anda memiliki:

  • Beberapa pengetahuan tentang Docker
  • Memahami Docker Compose

Anda akan menerapkan Isso di belakang wadah proxy terbalik, dengan subdomain berkemampuan SSL.

Terlepas dari pengetahuan topikal yang disebutkan di atas, Anda memerlukan persyaratan infrastruktur berikut:

  • Sebuah Server Ubuntu Linux yang menghadap publik . Anda dapat menggunakan penyedia layanan cloud seperti Linode. Server Nano dengan RAM 1 GB akan cukup untuk penerapan ini.
  • Akses ke domain dan setelan DNS-nya
  • Docker dan Docker Compose terinstal di server Linux Anda.
  • Proxy terbalik Nginx sudah disiapkan (File Docker Compose telah disertakan dalam tutorial ini)

Jika Anda membutuhkan bantuan, Anda dapat mengikuti panduan kami di:

  • Menginstal Docker di Ubuntu
  • Menginstal penulisan Docker di Ubuntu
  • Pembalikan penyiapan buruh pelabuhan proxy

Saya akan menggunakan isso.domain.com sebagai contoh untuk blog Ghost tersedia di domain.com . Ubah mereka dengan tepat sesuai kebutuhan. Saya menggunakan konfigurasi Nginx berikut di Docker Compose:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-proxy-companion
    environment:
      DEFAULT_EMAIL: "[email protected]"
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

Buat jaringan eksternal menggunakan docker create network net dan terapkan menggunakan docker-compose up -d dari direktori yang sesuai. Silakan periksa artikel Nginx Docker yang ditautkan di atas untuk detail lengkapnya.

Langkah 1:Ubah setelan DNS

Pada panel kontrol penyedia DNS Anda, pastikan data A/AAAA domain Anda mengarah ke alamat IP server Linux Anda.

Katakanlah Anda ingin meng-host Isso di isso.domain.com untuk blog Ghost Anda yang dihosting di domain.com, Anda harus menambahkan catatan A berikut menggantikan xxx.xxx.xxx.xxx dengan alamat IP server Anda.

Jenis Tuan rumah Nilai TTL
Rekor isso xxx.xxx.xxx.xxx 5 menit

Langkah 2:Unduh Isso

Sebelum Anda menyiapkan file penulisan untuk wadah Nginx, Anda harus mengunduh Isso dengan Git.

Mari kita ambil di /opt/isso .

Gunakan git untuk mengunduh Isso dan meletakkannya di bawah direktori /opt:

sudo git clone https://github.com/posativ/isso /opt/isso

Sekarang pindah ke direktori ini:

cd /opt/isso

Sekarang Anda siap untuk membangun Dockerfile resmi untuk menghasilkan image Isso yang diperlukan melalui Docker Compose:

Langkah 3:Edit nilai konfigurasi

Sebelum membuat image, lebih baik menyetel file konfigurasi dengan parameter minimum yang diperlukan untuk penggunaan produksi.

sudo nano isso.cfg

Setelan Section-wise untuk file konfigurasi:

[general] bagian:

  • Gunakan dbpath untuk menyetel jalur basis data seperti yang terlihat dari dalam wadah yang akan digunakan.
  • Tetapkan nama domain untuk host parameter, yang akan menjadi blog atau situs web Anda tempat Anda ingin menyematkan kotak komentar Isso Anda pada posting blog. Perhatikan bahwa jika Anda menggunakan pengalihan non-www ke www untuk blog Anda, setel www.domain.com sebagai host alih-alih domain.com karena itulah titik akhir di mana komentar pada akhirnya akan diposting.
  • Dengan max-age , Anda dapat menyetel rentang waktu yang memungkinkan pengguna mengedit/menghapus komentar mereka sendiri dalam waktu 15 menit (default).
  • Saya menggunakan smtp sebagai metode pemberitahuan (melalui email) ketika komentar baru akan diposting di blog.

[moderation] bagian:

Setel nilai ini ke "true" untuk mengaktifkan moderasi untuk semua komentar yang diposting di situs web Anda.

[guard] bagian:

Setel nilai ini ke "true" untuk mengaktifkan perlindungan spam dasar untuk semua komentar yang diposting.

[server] bagian:

  • Dengan listen , Anda menentukan server untuk mendengarkan. Isso mendukung soket domain TCP/IP dan unix.

[smtp] bagian:

Mungkin bagian yang paling penting, Anda mengatur kredensial dasar di sini berdasarkan penyedia layanan SMTP Anda. Dengan pengaturan ini, setiap kali pengunjung memposting komentar baru, Anda akan menerima pemberitahuan email berjudul “Komentar baru diposting”. Ini memungkinkan Anda untuk mendapatkan pemberitahuan tentang komentar baru dan memoderasinya dengan mudah langsung dari kotak surat Anda. Parameter untuk SendGrid adalah:

  • username secara harfiah adalah apikey sebagai nilai (umum untuk semua pengguna SendGrid).
  • password adalah Kunci API unik Anda khusus untuk ID Kunci API Anda.
  • host akan menjadi smtp.sendgrid.net
  • port seharusnya 587
  • to adalah alamat email Anda tempat Anda ingin diberi tahu tentang komentar baru.
  • from adalah nama dan alamat yang akan Anda lihat di kotak masuk Anda. Untuk mempermudah, saya telah mengatur nama pengirim sebagai "Komentator Baru" dengan alamat email [email protected] .

Jika Anda tidak menggunakan SendGrid tetapi beberapa penyedia layanan SMTP lainnya, nama pengguna, sandi, host, dan metrik port harus diubah sesuai dengan nilainya.

Untuk meringkas, berikut adalah file konfigurasi lengkap untuk Anda mulai:

[general]
dbpath = /db/comments.db
host = https://domain.com/
max-age = 15m
notify = smtp
[moderation]
enabled = true
[guard]
enabled = true
[server]
listen = http://0.0.0.0:8080/
[smtp]
username = apikey
password = replace-me-with-sendgrid-apikey
host = smtp.sendgrid.net
port = 587
to = [email protected]
from = New Commenter <[email protected]>

Langkah 4:Bangun image Isso Docker berdasarkan Official Dockerfile

Karena Anda telah mengunduh Isso dari repo GitHub-nya di /opt/isso , Dockerfile sudah ada.

Jadi, mari kita buat gambarnya dan beri nama isso:0.12.2 :

docker build . -t isso:0.12.2

Gambar ini akan dibuat secara lokal dengan 0.12.2 menandai. Saatnya menggunakannya di Docker Compose:

version: '3.7'

services:
  isso:
    image: isso:0.12.2
    restart: on-failure
    volumes:
      - ./:/config
      - ./:/db
    environment:
     - UID=4242
     - GID=4242
     - VIRTUAL_HOST=isso.domain.com
     - LETSENCRYPT_HOST=isso.domain.com
    networks:
     - net

networks:
  net:
    external: true

Pertama, Anda menetapkan nama gambar dan menggunakan on-failure memulai kembali kebijakan. Berdasarkan bagaimana volume dipasang seperti yang ditunjukkan oleh pengembang, baik /config dan /db direktori adalah bagaimana hal itu terlihat di dalam wadah Isso. UID dan GID nilai 4242 digunakan untuk menjalankan wadah sebagai pengguna yang tidak memiliki hak istimewa.

VIRTUAL_HOST digunakan untuk membuat file Isso JS dapat diakses secara online untuk disematkan di situs Anda, dan LETSENCRYPT_HOST memberikan sertifikat SSL gratis untuk akses HTTPS. Kontainer Nginx kami menggunakan jaringan yang disebut net . Oleh karena itu, konfigurasi ini juga harus menggunakan jaringan yang sama.

Anda sekarang siap untuk men-deploy Isso dengan Docker!

Langkah 5:Terapkan file Docker Compose

Sekarang, poin penting yang perlu diingat adalah:

  • Kontainer ini harus berbagi jaringan yang sama dengan Isso agar dapat berkomunikasi satu sama lain. Karena Isso akan menggunakan net jaringan, seperti wadah proxy terbalik Anda, ini akan menggunakan hal yang sama. Jika Anda memiliki jaringan lain yang dikonfigurasi, pastikan Anda menggunakannya.
  • Anda harus menyetel kebijakan mulai ulang "saat gagal".
  • Anda harus melindungi data persisten dengan menggunakan volume (sisi host di bawah /opt/isso ) yang dipasang di lokasi masing-masing di dalam wadah.

Wadah membutuhkan variabel lingkungan untuk disetel di luar file penulisan buruh pelabuhan. Ini adalah nilai penting yang dibaca dari sisi host, itulah sebabnya Isso adalah contoh yang baik dari penyiapan dockerization hybrid.

Mari kita putar instance Isso:

docker-compose up -d

Cari tahu bagaimana penerapan berjalan dengan pemeriksaan waktu nyata:

docker logs -f isso_isso_1

Jika semuanya berjalan dengan baik, Anda akan mendapatkan output seperti ini, seperti yang ditunjukkan di bawah ini:

2021-08-23 14:48:21,334 INFO: connected to SMTP server
2021-08-23 14:48:21,750 INFO: connected to https://domain.com/
[2021-08-23 14:48:21 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2021-08-23 14:48:21 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[2021-08-23 14:48:21 +0000] [1] [INFO] Using worker: sync
[2021-08-23 14:48:21 +0000] [8] [INFO] Booting worker with pid: 8
[2021-08-23 14:48:21 +0000] [9] [INFO] Booting worker with pid: 9
[2021-08-23 14:48:21 +0000] [10] [INFO] Booting worker with pid: 10
[2021-08-23 14:48:21 +0000] [11] [INFO] Booting worker with pid: 11

Langkah 6:Sematkan kode Isso di situs web Anda

Berdasarkan konfigurasi yang dibahas pada langkah 3, Anda sekarang harus memperbarui situs web Anda dengan kode sematan Isso.

Anda dapat mengetahui di mana Anda harus menyematkan JavaScript di situs web Anda.

<script data-isso="https://isso.domain.com/"
                data-isso-avatar="true"
                data-isso-vote="true"               
                data-isso-vote-levels="-5,5"
                src="https://isso.domain.com/js/embed.min.js"></script><
        <section id="isso-thread"></section>

Langkah-langkah untuk Ghost

Pada penyebaran Ghost berbasis Docker, prosesnya berjalan seperti ini:

Masuk ke server hantu Anda dan masuk ke direktori hantu:

cd ~/ghost

post.hbs file berada di /var/lib/ghost/current/content/themes/theme-name/post.hbs . Ingatlah untuk hanya menggunakan post.hbs untuk tema yang sedang Anda gunakan agar penyematan dapat diterapkan. Di sini saya menggunakan tema Casper. Jadi theme-name di sini akan menjadi casper . Anda dapat memeriksa ulang dengan memasukkan shell wadah Ghost Anda:

[email protected]:~$ docker exec -ti ghost_ghost_1 bash -c "ls /var/lib/ghost/current/content/themes/casper/"
LICENSE    author.hbs	  error.hbs    package.json  post.hbs
README.md  default.hbs	  gulpfile.js  page.hbs      tag.hbs
assets	   error-404.hbs  index.hbs    partials      yarn.lock

Salin file menggunakan perintah docker cp:

docker cp ghost_ghost_1:/var/lib/ghost/current/content/themes/casper/post.hbs post.hbs

Sekarang setelah Anda memilikinya di dalam direktori Ghost yang di-host sendiri tempat file Docker Compose berada, buka file itu dan di dalam bagian artikel-komentar, sematkan kode berikut:

    <section class="article-comments gh-canvas">
        <script data-isso="https://isso.domain.com/"
                data-isso-avatar="true"
                data-isso-vote="true"               
                data-isso-vote-levels="-5,5"
                src="https://isso.domain.com/js/embed.min.js"></script><
        <section id="isso-thread"></section>
    </section>

Di sini, data-isso-vote="true" memungkinkan pemungutan suara untuk pengunjung dan data-isso-vote-levels="-5,5" memungkinkan pengaturan rentang untuk nilai tersebut (-5 hingga 5 dalam kasus ini):

Pasang file yang baru dimodifikasi pada konfigurasi Ghost Docker Compose Anda di bagian volume dan perbarui sebagai berikut:

- ./post.hbs:/var/lib/ghost/current/content/themes/casper/post.hbs

Tingkatkan instance Ghost baru berdasarkan konfigurasi ini:

docker-compose up -d --scale ghost=2 --no-recreate

Setelah sekitar satu menit, hapus wadah Ghost lama yang masih berjalan:

docker rm -f ghost_ghost_1

Turunkan ke mode wadah tunggal:

docker-compose up -d --scale ghost=1 --no-recreate

Pada titik ini, Anda telah berhasil menyelesaikan penyiapan Isso di blog Anda!

Langkah 7:Akses kotak komentar Isso Anda di situs

Tunggu beberapa menit dan arahkan browser ke domain Ghost tempat Anda baru saja mengonfigurasi Isso.

Misalnya, jika Anda meng-host blog Anda di domain.com , gulir ke bawah ke bagian bawah entri blog mana pun, dan Anda akan menemukan kotak komentar siap digunakan!

Menghentikan kontainer

Jika Anda ingin menurunkan wadah, Anda dapat melakukannya dengan masuk ke direktori tempat Anda mengunduh Isso (/opt/isso dalam kasus kami) dengan Git dan menggunakan perintah ini:

docker-compose down

Untuk memulai penerapan lagi, pastikan Anda bekerja di bawah /opt/isso yang sama direktori dan jalankan:

docker-compose up -d

Tips Bonus

Berikut adalah beberapa tips tambahan yang akan berguna dengan penyiapan Isso Anda:

Antarmuka Administrasi Web

Tahukah Anda bahwa Anda juga dapat mengakses dan memoderasi komentar Isso di antarmuka web? URL terkait yang melayani tujuan itu adalah isso.domain.com/admin . Di sini, saya telah menggunakan isso untuk sub-domain. Tetapi untuk mengaktifkannya, Anda harus mengatur bagian tambahan yang disebut [admin] dalam file konfigurasi (dibahas pada langkah 3) dengan konten berikut:

[admin]
enabled = true
password = plain-text-password

Perhatikan bahwa plain-text-password terlihat di atas secara harfiah adalah nilai yang Anda gunakan sebagai kata sandi:

Setelah login, tampilan web interface seperti di bawah ini:

Jika Anda mengaktifkan Kepercayaan Konten Docker

Dockerfile menggunakan node:dubnium-buster sebagai gambar dasar yang tampaknya tidak memiliki data kepercayaan yang valid ketika saya mencoba membangunnya. Kepercayaan konten dinonaktifkan secara default di Docker. Tetapi jika Anda mengaktifkannya, Anda mungkin mendapatkan kesalahan seperti ini:

[email protected]:/opt/isso$ docker build . -t isso:0.12.2
WARN[0013] targets metadata is nearing expiry, you should re-sign the role metadata 
WARN[0013] snapshot is nearing expiry, you should re-sign the role metadata 
ERRO[0013] Can't add file /opt/isso/ansible/site.yml to tar: io: read/write on closed pipe 
Sending build context to Docker daemon    2.8MB
ERRO[0013] Can't close tar writer: io: read/write on closed pipe 
error during connect: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.41/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=isso%3A0.12.2&target=&ulimits=null&version=1: No valid trust data for dubnium-buster

Jadi, pastikan untuk sementara mengatur DOCKER_CONTENT_TRUST sebagai 0 sebelum membuat gambar (langkah 4):

export DOCKER_CONTENT_TRUST=0

Setel kembali ke 1 setelah Anda mendapatkan gambar:

export DOCKER_CONTENT_TRUST=1

Memperbarui Isso

Setiap kali versi baru Isso dirilis, Anda dapat mengkloning repositori di lokasi terpisah:

git clone https://github.com/posativ/isso.git isso-update
cd isso-update

Setelah pindah ke lokasi terpisah ini(isso-update ), Anda dapat membuat gambar baru dengan menggunakan nomor versi terbaru seperti yang ditunjukkan pada langkah 4. Setelah selesai, edit file Isso Docker Compose dan perbarui nomor versi gambar di sana juga.

Sekarang, tingkatkan wadah Isso baru, tunggu sekitar satu menit dan keluarkan wadah lama. Terakhir, turunkan skala ke mode penampung tunggal (seperti yang dibahas di bagian akhir langkah 6).

Memastikan pemungutan suara berhasil

Butuh beberapa saat bagi saya untuk mencari tahu mengapa upvoting atau downvoting pada komentar tidak berhasil ketika saya mencobanya. Isso cukup waspada dan pilih-pilih tentang hal-hal ini.

Saya berhasil menguji upvoting/downvoting hanya setelah mengakses komentar dari alamat IP yang berbeda (yang dalam kasus saya adalah data seluler saya). Untuk menguji pemungutan suara komentar di Isso, sebaiknya gunakan VPN.

Catatan akhir

Untuk referensi lengkap tentang aplikasi Isso dan semua fiturnya, Anda dapat merujuk ke dokumentasi resmi Isso, khususnya subbagian server dan klien untuk menggunakannya secara ekstensif dan memaksimalkan produktivitasnya. Semoga panduan ini berguna dalam menghosting sendiri sistem komentar Anda sendiri di situs Anda. Jika Anda memiliki saran, umpan balik, atau pertanyaan, Anda dapat membagikannya di bagian komentar di bawah.


Linux
  1. Memahami panggilan sistem di Linux dengan strace

  2. Cara Menyebarkan Layanan Mikro dengan Docker

  3. Cara Menyebarkan Wadah nginx dengan Docker di Linode

  1. nginx - 413 Permintaan Entitas Terlalu Besar

  2. Perbaiki citra sistem dengan DISM

  3. Instal WordPress dengan Docker Compose, Nginx, Apache dengan SSL

  1. Dockerizing Wordpress dengan Nginx dan PHP-FPM di Ubuntu 16.04

  2. Cara Memasang Forum Wacana dengan Nginx di CentOS 7

  3. Menjelajahi sistem file kontainer Docker