Chào các bạn,
Bài viết hôm nay sẽ hướng dẫn các bạn cài đặt Mastodon trên CentOS 7.
Giới thiệu
Mastodon là một ứng dụng mạng xã hội mã nguồn mở, cho phép bạn cài đặt lên server các nhân nào và tự tạo cho mình một nơi để sống ảo. Các chức năng và giao diện của Mastodon khá giống với Twitter, đến cả nút đăng status cũng bắt chước âm thanh Tweet – Toot!.
Cài đặt các thành phần cần thiết
NodeJS & Yarn
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash - yum -y install nodejs
wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo yum -y install yarn
Redis
yum -y install redis systemctl start redis systemctl enable redis
Các Library cần thiết
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
Development Tools
yum -y groupinstall 'Development Tools'
Cài đặt và cấu hình PostgreSQL
rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm yum -y install postgresql96-server postgresql96-contrib postgresql96-devel
Khởi tạo database cho PostgreSQL
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Sau khi cài đặt thành công, các bạn mở file /var/lib/pgsql/data/pg_hba.conf và đổi các giá trị từ ident qua md5 như sau
# 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 ------>
# 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
Restart PostgreSQL
systemctl restart postgresql
Đổi password cho User Postgres
passwd postgres
Đăng nhập vào user Postgres để tạo User mới cho Mastodon
su - postgres createuser mastodon psql
Đặt password cho User mới
ALTER USER mastodon WITH ENCRYPTED password 'Password' CREATEDB; \q exit
Sau đó các bạn cài đặt thêm 1 số thư viện cho Postgres
yum -y install libpqxx-devel protobuf-devel
Cài đặt Ruby
adduser mastodon -d /opt/mastodon su - mastodon
Add GPG key của RVM
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Tiến hành cài đặt RVM
curl -sSL https://get.rvm.io | bash -s stable source /opt/mastodon/.rvm/scripts/rvm
Sau khi cài đặt RVM thành công, các bạn cài tiếp phiên bản Ruby 2.5.2
rvm install 2.5.2 rvm use 2.5.2
Tiếp theo cài đặt Bunbler và cài đặt các library cần thiết cho ứng dụng Mastodon
gem install bundler
Cài đặt và cấu hình dịch vụ Mastodon
Download mã nguồn Mastodon từ Github
cd ~ git clone https://github.com/tootsuite/mastodon.git app cd app bundle install --deployment --without development test
Cài đặt các dependencies cho NodeJS
yarn install --pure-lockfile
Sau đó tiến hành cấu hình ứng dụng Mastodon bằng lệnh sau:
RAILS_ENV=production bundle exec rake mastodon:setup
Lệnh trên sẽ hướng dẫn bạn cấu hình Mastodon step by step, ví dụ cấu hình như sau:
Your instance is identified by its domain name. Changing it afterward will break things. Domain name: mastodon.domain.com Single user mode disables registrations and redirects the landing page to your public profile. Do you want to enable single user mode? No Are you using Docker to run Mastodon? No PostgreSQL host: /var/run/postgresql PostgreSQL port: 5432 Name of PostgreSQL database: mastodon_production Name of PostgreSQL user: mastodon Password of PostgreSQL user: Database configuration works! Redis host: localhost Redis port: 6379 Redis password: Redis configuration works! Do you want to store uploaded files on the cloud? No Do you want to send e-mails from localhost? No SMTP server: smtp.domain.com SMTP port: 587 SMTP username: admin@mastodon.com SMTP password: SMTP authentication: plain SMTP OpenSSL verify mode: none E-mail address to send e-mails "from": Mastodon <notifications@mastodon.domain.com> Send a test e-mail with this configuration right now? Yes Send test e-mail to: admin@domain.com This configuration will be written to .env.production Save configuration?: Yes Now that configuration is saved, the database schema must be loaded. If the database already exists, this will erase its contents. Prepare the database now? Yes The final step is compiling CSS/JS assets. This may take a while and consume a lot of RAM. Compile the assets now? Yes All done! You can now power on the Mastodon server Do you want to create an admin user straight away? Yes Username: admin E-mail: admin@domain.com You can login with the password: 80b4aA233adaeS86d095Scbf79302f81 You can change your password once you login.
Sau khi hoàn thành việc cấu hình và compile Mastodon, các bạn logout ra khỏi User Mastodon, trở về root và cấu hình tiếp cho Nginx và tạo file startup cho Systemd
Cài đặt Nginx và Certbot
yum -y install nginx certbot
Nếu bạn có dùng Firewalld, thêm các rules sau để Allow HTTP/HTTPS
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
Cấp phát SSL Let’s Encrypt sử dụng Certbot
certbot certonly --standalone -d mastodon.domain.com
Sau khi Certbot cấp phát, chúng ta tạo thêm Cronjob để tự động renew Certificate
crontab -e
Thêm vào danh sách Cronjob cấu hình sau
0 0 * * * /usr/bin/certbot renew --quiet
Tạo file cấu hình Nginx /etc/nginx/conf.d/mastodon.conf và thêm vào nội dung config như sau:
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen [::]:80; server_name mastodon.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_namemastodon.domain.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/mastodon.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mastodon.domain.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; }
Thay đổi nội dung domain của bạn và đường dẫn tới các file SSL Let’s Encrypt cấp phát trước đó.
Start và Enable Nginx
systemctl start nginx systemctl enable nginx
Các bạn allow thêm port 4000 cho service API của Mastodon
firewall-cmd --permanent --zone=public --add-port=4000/tcp firewall-cmd --reload
Và thêm permission cho folder chạy Nginx
chmod +x /opt/mastodon
Tạo file khởi động cho Systemd, tạo file mới /etc/systemd/system/mastodon-web.service và thêm vào nội dung sau:
[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
Tiếp theo tạo file /etc/systemd/system/mastodon-queue.service và thêm vào nội dung sau:
[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
Cuối cùng tạo file startup cho API service /etc/systemd/system/mastodon-api.service
[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
Enable các file config vừa tạo
systemctl enable mastodon-web mastodon-queue mastodon-api
Khởi động các dịch vụ
systemctl start mastodon-web mastodon-queue mastodon-api
Kiểm tra status của các dịch vụ
systemctl status mastodon-web mastodon-queue mastodon-api
Sau đó các bạn truy cập vào đường dẫn domain của bạn để kiểm tra dịch vụ đã hoạt động
Như vậy là các bạn đã cài đặt Mastodon thành công, tiến hành đăng nhập và bắt đầu Toot! thôi nào 😀
Leave A Comment?