Menginstal Mastodon pada CentOS 7

Mastodon adalah server mikroblogging dan jejaring sosial open source yang dikelola sendiri. Ini menyediakan fitur seperti Twitter; tetapi alih-alih dikendalikan oleh satu perusahaan, itu adalah federasi dari server terdesentralisasi yang terhubung bersama untuk membuat seluruh sistem jejaring sosial. Sebuah tim kecil dapat memulai instance server Mastodon mereka untuk berkomunikasi di antara mereka sendiri dan juga dengan pengguna lain dari komunitas gabungan. Ini juga memungkinkan Anda untuk memilih kebijakan privasi dan moderasi Anda sendiri dan menentukan cara Anda berkomunikasi dengan pengguna lain dari server yang berbeda. Konten yang dibuat dan dilanggan oleh pengguna secara individu dihosting di server tempat akunnya dibuat. Pengguna dapat mengikuti satu sama lain meskipun mereka tidak di-host di server yang sama. Setiap pengguna dalam jaringan Mastodon memiliki nama atau ID uniknya yang ada di@username@domain-name.comformat. Aplikasi klien untuk Mastodon tersedia untuk hampir semua platform.

Prasyarat

Catatan: Kami akan menggunakan social.example.comsebagai nama domain yang digunakan untuk instance Mastodon. Ganti semua kemunculan social.example.comdengan nama domain Anda yang sebenarnya yang ingin Anda gunakan untuk aplikasi Mastodon Anda .

Perbarui sistem basis Anda menggunakan panduan Cara Memperbarui CentOS 7 , jika perlu. Setelah sistem Anda diperbarui, lanjutkan untuk menginstal dependensi yang diperlukan.

Menginstal Dependensi

Mastodon membutuhkan beberapa dependensi untuk berfungsi. Instal versi terbaru Node.js, yang akan digunakan untuk mengkompilasi file JavaScript.

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
sudo yum -y install nodejs

Instal Yarn, yang merupakan aplikasi manajer ketergantungan yang cepat, andal, dan aman. Kami akan menggunakan Benang untuk menginstal dependensi Node.js.

sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
sudo yum -y install yarn

Instal Redis. Redis adalah aplikasi penyimpanan dan cache data struktur dalam memori.

sudo yum -y install redis

Mulai Redis dan aktifkan untuk memulai saat boot secara otomatis.

sudo systemctl start redis
sudo systemctl enable redis

Instal beberapa dependensi lagi yang diperlukan untuk membangun Rubyinstalasi dan dependensi lainnya.

sudo yum -y install ImageMagick git libxml2-devel libxslt-devel gcc bzip2 openssl-devel zlib-devel gdbm-devel ncurses-devel autoconf automake bison gcc-c++ libffi-devel libtool patch readline-devel sqlite-devel glibc-headers glibc-devel libyaml-devel libicu-devel libidn-devel

Anda juga perlu menginstal alat pengembangan.

sudo yum -y groupinstall 'Development Tools'

Menginstal dan Mengkonfigurasi PostgreSQL

PostgreSQL adalah sistem database relasional objek. Anda perlu menambahkan repositori PostgreSQL ke sistem Anda karena yumrepositori default berisi versi aplikasi yang lebih lama.

sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

Instal server database PostgreSQL.

sudo yum -y install postgresql96-server postgresql96-contrib postgresql96-devel

Inisialisasi basis data.

sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

Edit pg_hba.conffile untuk mengaktifkan MD5otentikasi berbasis.

sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf

Temukan baris berikut dan ubah peerke trustdan identke md5.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

Setelah diperbarui, konfigurasi akan terlihat seperti ini.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Mulai server PostgreSQL dan aktifkan untuk memulai saat boot secara otomatis.

sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6

Ubah kata sandi untuk pengguna PostgreSQL default.

sudo passwd postgres

Login ke shell sebagai PostgreSQLpengguna.

sudo su - postgres

Buat PostgreSQLpengguna baru untuk Mastodon.

createuser mastodon

PostgreSQL menyediakan psqlshell untuk menjalankan query pada database. Beralih ke shell PostgreSQL dengan menjalankan.

psql

Tetapkan kata sandi untuk pengguna yang baru dibuat untuk basis data Mastodon dan berikan izin untuk menambahkan basis data baru.

ALTER USER mastodon WITH ENCRYPTED password 'DBPassword' CREATEDB;

Ganti DBPassworddengan kata sandi yang kuat. Keluar dari psqlshell:

\q

Beralih ke sudopengguna.

exit

Instal beberapa dependensi PostgreSQL yang diperlukan.

sudo yum -y install libpqxx-devel protobuf-devel

Instal Ruby

Buat pengguna baru untuk Mastodon dan beralih ke pengguna yang baru dibuat.

sudo adduser mastodon -d /opt/mastodon
sudo su - mastodon

Kami akan menginstal Ruby versi terbaru menggunakan Ruby Version Manager, atau RVM. Ini digunakan untuk menginstal dan mengelola beberapa versi Ruby.

Tambahkan GPGkunci RVM ke server Anda.

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Pasang RVM.

curl -sSL https://get.rvm.io | bash -s stable
source /opt/mastodon/.rvm/scripts/rvm

Sekarang ambil daftar versi Ruby yang tersedia.

rvm list known

Anda akan melihat output berikut.

[mastodon@vultr ~]$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head

...

Sekarang instal versi terbaru Ruby dari daftar.

rvm install 2.4

Gunakan versi Ruby yang diinstal.

rvm use 2.4

Anda harus dapat memverifikasi versinya.

ruby -v

Anda akan melihat output yang serupa.

[mastodon@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

Instal bundler, yang merupakan manajer dependensi untuk aplikasi Ruby.

gem install bundler

Sekarang beralihlah ke direktori home pengguna Mastodon dan tirukan file repositori aplikasi dari Github.

cd ~
git clone https://github.com/tootsuite/mastodon.git app

Pindahkan direktori aplikasi dan checkout rilis terbaru dari aplikasi.

cd ~/app
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)

Konfigurasikan bundleuntuk menggunakan jalur khusus untuk konfigurasi PostgreSQL. Juga, instal dependensi Ruby.

bundle config build.pg --with-pg-config=/usr/pgsql-9.6/bin/pg_config
bundle install --deployment --without development test

Instal dependensi Node.js menggunakan Benang.

yarn install --pure-lockfile

Anda perlu membuat file konfigurasi untuk aplikasi Mastodon. Salin file konfigurasi sampel.

cd ~/app
cp .env.production.sample .env.production

Sebelum mengedit file, buat tiga berbeda secretsdengan menjalankan perintah berikut tiga kali. Anda perlu mengatur rahasia ini di file konfigurasi.

RAILS_ENV=production bundle exec rake secret

Anda harus mendapatkan hasil yang serupa.

[mastodon@vultr app]$ RAILS_ENV=production bundle exec rake secret
0f17dab1cf4a07f6fac671ecd5815adcb59d012b338dae9350c66402250c6c729dccd6182b1a8f75c4fde55453ce283ea66e07ed4466cdc6d4d6974c98512967

Edit file konfigurasi menggunakan nanoeditor.

nano .env.production

Temukan baris berikut dan ubah nilainya.

REDIS_HOST=127.0.0.1
REDIS_PORT=6379

Berikan kredensial basis data, sesuai dengan pengguna basis data yang telah Anda buat selama instalasi PostgreSQL. Berikan nama apa pun untuk nama basis data karena Mastodon akan secara otomatis membuat basis data dengan nama yang Anda berikan.

DB_HOST=127.0.0.1
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=DBPassword
DB_PORT=5432

Tetapkan nama domain aplikasi.

LOCAL_DOMAIN=social.example.com

Temukan baris berikut dan tetapkan nilainya ke rahasia yang telah Anda hasilkan.

PAPERCLIP_SECRET=
SECRET_KEY_BASE=
OTP_SECRET=

Simpan file dan keluar dari editor.

Sekarang, jalankan perintah berikut untuk menghasilkan Web Push VAPIDkunci. Anda akan mendapatkan kesalahan saat membuat kunci Web Push VAPID jika Anda belum menetapkan rahasia dalam file konfigurasi yang disebutkan di atas.

RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key

Anda akan melihat output berikut.

[mastodon@vultr app]$ RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key
VAPID_PRIVATE_KEY=DCMQdSPkdm-mepsNh4F3suc-UIvsABCvwFd03jSVemM=
VAPID_PUBLIC_KEY=BMMVcVXmqnV0C8S_ybZ7eQH-MXBEX2exqfdPSYQiMMUF2rRxfhoEtVF931i26ebMgmslHB_nvVadOdcBPhaFEjw=

Buka file konfigurasi lagi dan atur kunci yang dihasilkan di masing-masing baris.

VAPID_PRIVATE_KEY=
VAPID_PUBLIC_KEY=

Terakhir, berikan informasi server surat SMTP Anda sehingga aplikasi dapat mengirim email ke pengguna. Adalah penting bahwa Anda menggunakan server SMTP yang berfungsi karena, pada saat pendaftaran baru, pengguna akan dikirimi email dengan tautan aktivasi. Pengguna baru harus mengklik tautan aktivasi untuk mengaktifkan akun mereka.

SMTP_SERVER=mail.example.com
SMTP_PORT=456
SMTP_LOGIN=mail@example.com
SMTP_PASSWORD=MailPassword
SMTP_FROM_ADDRESS=notifications@example.com
SMTP_TLS=true

Setelah selesai, simpan file dan keluar dari editor. Anda telah melakukan konfigurasi dasar instance Mastodon.

Setup database PostgreSQL untuk pertama kalinya.

RAILS_ENV=production bundle exec rails db:setup

Pertama, perintah di atas akan membuat database baru dengan nama yang disebutkan dalam konfigurasi. Kemudian, itu akan menulis database sesuai dengan konfigurasi.

Mengkompilasi semua CSSdan JavaScriptfile untuk membuat cache.

RAILS_ENV=production bundle exec rails assets:precompile

Mastodon sekarang diinstal di server Anda. Sekarang Anda perlu mengatur Nginxserver web untuk melayani aplikasi dan Systemdlayanan pengaturan untuk menjalankan layanan Mastodon.

Mulai sekarang, kita perlu menjalankan perintah menggunakan sudopengguna.

Instal Nginx dengan Let's Encrypt SSL

Kami akan menggunakan server web Nginx sebagai proxy terbalik untuk melayani aplikasi kepada pengguna. Kami juga akan mendapatkan dan menginstal sertifikat SSL dari Let's Encrypt.

Instal Nginx dan Certbot. Certbot adalah klien yang mengeluarkan sertifikat resmi untuk Let's Encrypt CA.

sudo yum -y install nginx certbot

Sesuaikan pengaturan firewall Anda untuk memungkinkan standar HTTPdan HTTPSport melalui firewall karena Certbot perlu membuat koneksi HTTP untuk memverifikasi otoritas domain.

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Catatan: Untuk mendapatkan sertifikat dari Let's Encrypt CA, Anda harus memastikan bahwa domain yang Anda inginkan untuk menghasilkan sertifikat diarahkan ke server. Jika tidak, maka buat perubahan yang diperlukan pada catatan DNS domain Anda dan tunggu sampai DNS menyebar sebelum membuat permintaan sertifikat lagi. Certbot memeriksa otoritas domain sebelum memberikan sertifikat .

Sekarang gunakan server web builtin di Certbot untuk menghasilkan sertifikat untuk domain Anda.

sudo certbot certonly --standalone -d social.example.com

Sertifikat yang dihasilkan cenderung disimpan di /etc/letsencrypt/live/social.example.com/direktori. Sertifikat SSL akan dipertahankan sebagai fullchain.pemdan kunci pribadi akan disimpan sebagai privkey.pem.

Mari Enkripsi sertifikat kedaluwarsa dalam 90 hari, jadi disarankan untuk mengatur perpanjangan otomatis untuk sertifikat menggunakan pekerjaan Cron. Cron adalah layanan sistem yang digunakan untuk menjalankan tugas-tugas berkala.

Buka file tugas cron.

sudo crontab -e

Tambahkan baris berikut.

0 0 * * * /usr/bin/certbot renew --quiet

Pekerjaan cron di atas akan berjalan setiap hari di tengah malam. Jika sertifikat jatuh tempo, sertifikat akan diperpanjang secara otomatis.

Sekarang buat blok server Nginx baru untuk situs Mastodon.

sudo nano /etc/nginx/conf.d/mastodon.conf

Isi file dengan ini.

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name social.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name social.example.com;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/social.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/social.example.com/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 0;

  root /opt/mastodon/app/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

Pastikan untuk mengubah nama domain dan jalur ke sertifikat SSL.

Sekarang Anda dapat memulai server web Nginx dan mengaktifkannya untuk memulai saat boot secara otomatis.

sudo systemctl start nginx
sudo systemctl enable nginx

Anda juga akan diminta untuk mengizinkan port 4000melalui firewall karena port akan menyediakan layanan streaming API.

sudo firewall-cmd --permanent --zone=public --add-port=4000/tcp
sudo firewall-cmd --reload

Berikan izin eksekusi untuk direktori Mastodon.

sudo chmod +x /opt/mastodon

Menyiapkan Layanan Systemd

Anda harus memulai tiga proses berbeda untuk memulai server Mastodon dengan sukses. Menggunakan layanan Systemd akan memastikan bahwa server Mastodon secara otomatis dimulai saat boot dan memproses kegagalan.

Buat layanan systemd baru untuk menjalankan layanan web Mastodon. Layanan ini akan meluncurkan server web built-in pada port 3000.

sudo nano /etc/systemd/system/mastodon-web.service

Isi file dengan konten berikut.

[Unit]
Description=Mastodon Web Service
After=network.target

[Service]
Type=simple
User=mastodon
Group=mastodon
WorkingDirectory=/opt/mastodon/app
Environment="RAILS_ENV=production"
Environment="PORT=3000"
ExecStart=/bin/bash -lc 'bundle exec puma -C config/puma.rb'
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Buat layanan Systemd kedua untuk menjalankan layanan antrian latar belakang Mastodon. Layanan antrian Mastodon menangani semua tugas latar belakang.

sudo nano /etc/systemd/system/mastodon-queue.service

Isi file dengan konten berikut.

[Unit]
Description=Mastodon Queue Service
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/opt/mastodon/app
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=/bin/bash -lc 'bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push'
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Terakhir, buat file layanan terakhir untuk layanan API streaming Mastodon.

sudo nano /etc/systemd/system/mastodon-api.service

Isi file dengan konten berikut.

[Unit]
Description=Mastodon Streaming
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/opt/mastodon/app
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/bin/npm run start
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Aktifkan layanan Mastodon untuk memulai saat boot secara otomatis.

sudo systemctl enable mastodon-web mastodon-queue mastodon-api 

Untuk memulai layanan Mastodon, Anda dapat menjalankan ini.

sudo systemctl start mastodon-web mastodon-queue mastodon-api 

Untuk memeriksa status layanan, Anda dapat menjalankan ini.

sudo systemctl status mastodon-web mastodon-queue mastodon-api 

Kesimpulan

Anda sekarang dapat mengakses aplikasi Mastodon dengan masuk ke https://social.example.com. Buat akun pengguna baru di server Anda dan verifikasi akun pengguna dengan membuka tautan yang dikirim dalam email. Untuk memberikan hak administrator ke akun yang baru saja Anda buat, jalankan ini.

sudo su - mastodon && cd ~/app
RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=<user_name>

Ganti <user_name>dengan nama pengguna aktual yang Anda gunakan untuk membuat akun di antarmuka Mastodon.

Contoh Mastodon Anda sekarang diinstal dan dikonfigurasi untuk dijalankan. Mulailah dengan mengundang teman-teman Anda untuk bergabung dengan instance Anda dan menjelajahi fitur-fitur yang disediakan oleh Mastodon. Anda dapat menggunakan situs jejaring sosial di ponsel dengan mengunduh aplikasi apa pun yang tersedia untuk berbagai platform.

Tinggalkan Komentar

Cara Memasang Panel Kontrol Hosting Mudah di Ubuntu 16.04

Cara Memasang Panel Kontrol Hosting Mudah di Ubuntu 16.04

Pelajari langkah-langkah untuk memasang Panel Kontrol Hosting Mudah (EHCP) di Ubuntu 16.04 dengan panduan ini.

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Wawasan tentang 26 Teknik Analisis Data Besar: Bagian 1

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Fungsionalitas Lapisan Arsitektur Referensi Big Data

Baca blog untuk mengetahui berbagai lapisan dalam Arsitektur Big Data dan fungsinya dengan cara yang paling sederhana.

6 Hal yang Sangat Menggila dari Nintendo Switch

6 Hal yang Sangat Menggila dari Nintendo Switch

Banyak dari Anda tahu Switch keluar pada Maret 2017 dan fitur-fitur barunya. Bagi yang belum tahu, kami sudah menyiapkan daftar fitur yang membuat 'Switch' menjadi 'gadget yang wajib dimiliki'.

Janji Teknologi Yang Masih Belum Ditepati

Janji Teknologi Yang Masih Belum Ditepati

Apakah Anda menunggu raksasa teknologi untuk memenuhi janji mereka? periksa apa yang belum terkirim.

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Bagaimana AI Dapat Membawa Otomatisasi Proses ke Tingkat Selanjutnya?

Baca ini untuk mengetahui bagaimana Kecerdasan Buatan menjadi populer di antara perusahaan skala kecil dan bagaimana hal itu meningkatkan kemungkinan untuk membuat mereka tumbuh dan memberi keunggulan pada pesaing mereka.

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Singularitas Teknologi: Masa Depan Peradaban Manusia yang Jauh?

Saat Sains Berkembang dengan kecepatan tinggi, mengambil alih banyak upaya kita, risiko menundukkan diri kita pada Singularitas yang tidak dapat dijelaskan juga meningkat. Baca, apa arti singularitas bagi kita.

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA: Berapa Lama Itu Bisa Tetap Menjadi Teknik yang Layak Untuk Perbedaan Human-AI?

CAPTCHA telah berkembang cukup sulit bagi pengguna untuk dipecahkan dalam beberapa tahun terakhir. Apakah itu akan tetap efektif dalam deteksi spam dan bot di masa mendatang?

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Telemedicine Dan Perawatan Kesehatan Jarak Jauh: Masa Depan Ada Di Sini

Apa itu telemedicine, perawatan kesehatan jarak jauh dan dampaknya terhadap generasi mendatang? Apakah itu tempat yang bagus atau tidak dalam situasi pandemi? Baca blog untuk menemukan tampilan!

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Pernahkah Anda Bertanya-tanya Bagaimana Hacker Menghasilkan Uang?

Anda mungkin pernah mendengar bahwa peretas menghasilkan banyak uang, tetapi pernahkah Anda bertanya-tanya bagaimana cara mereka mendapatkan uang sebanyak itu? mari berdiskusi.