Mastodon là một mạng xã hội miễn phí, phi tập trung và mã nguồn mở. Nó được tạo ra như một giải pháp thay thế cho Twitter. Giống như Twitter, mọi người có thể theo dõi nhau và đăng tin nhắn, hình ảnh và video. Nhưng không giống như Twitter, không có kho lưu trữ hoặc thẩm quyền trung tâm nào cho nội dung.
Thay vào đó, Mastodon hoạt động trên hàng nghìn máy chủ khác nhau, mỗi máy chủ do nhiều thành viên khác nhau trong cộng đồng điều hành. Người dùng đã đăng ký trên một máy chủ có thể dễ dàng kết nối với người dùng trên mạng khác và theo dõi nhau trên các phiên bản.
Bất kỳ ai cũng có thể cài đặt phiên bản máy chủ Mastodon của họ. Hướng dẫn này sẽ hướng dẫn bạn cách thiết lập phiên bản Mastodon của mình trên máy chủ có Debian 12 bằng Docker. Docker giúp bạn dễ dàng cài đặt Mastodon bằng cách chứa tất cả các gói và dịch vụ cần thiết trong các vùng chứa.
[*]
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Kiểm tra xem tường lửa có đang chạy không.
Bạn sẽ nhận được kết quả sau.
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Cho phép cả cổng HTTP và HTTPS.
Kích hoạt Tường lửa
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy trạng thái tương tự đầu ra.
Tạo kho lưu trữ Docker tập tin.
Cập nhật danh sách kho lưu trữ hệ thống.
Cài đặt phiên bản mới nhất của Docker.
Xác minh rằng nó đang chạy.
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng
Bạn cần đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng để bật thay đổi này hoặc sử dụng lệnh sau.
Xác nhận rằng người dùng của bạn đã được thêm vào nhóm Docker.
Bạn sẽ nhận được kết quả sau.
Tăng giá trị bằng cách sử dụng lệnh sau lệnh.
Thiết lập đúng quyền sở hữu đối với Elasticsearch, web và các thư mục sao lưu.
Chuyển sang thư mục Mastodon.
Tạo và mở tệp Docker compose để chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tại thời điểm viết hướng dẫn, phiên bản mới nhất có sẵn của Mastodon là v4.2.3. Kiểm tra trang Mastodon GitHub Releases và điều chỉnh phiên bản trong tệp Docker compose cho phù hợp. Chúng tôi cũng đang sử dụng các phiên bản mới nhất của PostgreSQL và Redis. Bạn có thể điều chỉnh chúng theo yêu cầu của mình. Hiện tại, chúng tôi đang sử dụng Elasticsearch 7.17.16.
Tạo
Bạn cũng có thể sử dụng tiện ích
Tạo
Bạn sẽ nhận được kết quả tương tự.
Sử dụng
Dán các dòng sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chúng tôi đã bật dịch vụ gửi thư Amazon SES. Nếu bạn không cần, bạn có thể xóa phần đó. Theo mặc định, Mastodon giữ lại địa chỉ IP trong 1 năm, nhưng chúng tôi đã thay đổi thành 30 ngày (2592000 giây). Bạn có thể thay đổi tùy theo yêu cầu của mình. Hãy đảm bảo giữ nó trong hơn 2 ngày, nếu không, bạn sẽ cần phải mày mò thêm một chút, điều này nằm ngoài phạm vi hướng dẫn của chúng tôi.
Mở tệp
Dán các dòng sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mở lớp dữ liệu.
Kiểm tra trạng thái của container.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2262%22%3E%3C/svg%3E
Đợi
Nếu bạn gặp lỗi về cơ sở dữ liệu
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản chính của Nginx.
Cập nhật hệ thống kho lưu trữ.
Cài đặt Nginx.
Xác minh cài đặt. Trên hệ thống Debian, bạn cần
Khởi động Nginx máy chủ.
Kiểm tra trạng thái của máy chủ.
Debian 12 không đi kèm Snapd được cài đặt. Cài đặt gói Snapd.
Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật. Đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Cài đặt Certbot.
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot chạy bằng cách tạo liên kết tượng trưng đến
Xác minh cài đặt.
Chạy lệnh sau để tạo Chứng chỉ SSL.
Lệnh trên sẽ tải xuống chứng chỉ vào
Tạo chứng chỉ nhóm Diffie-Hellman.
Kiểm tra trình lập lịch gia hạn Certbot dịch vụ.
Bạn sẽ thấy
Chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
Nếu không thấy lỗi, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.
Thêm dòng sau vào trước dòng
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tạo và mở tệp
Dán mã sau vào đó.
Sau khi hoàn tất, hãy lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh tệp cấu hình Nginx cú pháp.
Khởi động lại máy chủ Nginx.
Tạo tệp
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Cấp quyền thực thi cho tệp.
Tạo và mở tệp dịch vụ Mastodon để chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tải lại daemon hệ thống để khởi tạo tệp dịch vụ.
Bật và khởi động dịch vụ Mastodon.
Kiểm tra trạng thái của Docker container.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22143%22%3E%3C/svg%3E
Khi trạng thái của container thay đổi thành
Tạo người dùng quản trị cho Mastodon và ghi lại mật khẩu được cung cấp.
Nếu bạn muốn đóng đăng ký người dùng, hãy sử dụng lệnh sau lệnh.
Để mở lại các đăng ký, hãy đưa ra lệnh sau.
Bạn có thể gặp lỗi sau.
Trong trường hợp này, hãy nhập vùng chứa trang web shell.
Chạy lệnh sau.
Thoát khỏi container vỏ.
Chạy lại lệnh triển khai Elasticsearch. Đôi khi lệnh có thể hoạt động sau đó. Đây là vấn đề đang diễn ra tại Mastodon, do đó hiện tại không có cách khắc phục chắc chắn nào.
Tạo và mở dịch vụ xóa phương tiện Mastodon cho chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Nếu bạn muốn lên lịch xóa phương tiện, bạn có thể thiết lập dịch vụ hẹn giờ cho nó.
Dán mã sau.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Bạn có thể thiết lập một dịch vụ khác để xóa các thẻ xem trước Rich được tạo bằng OpenGraph thẻ.
Dán mã sau.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Đặt bộ hẹn giờ tương ứng dịch vụ.
Dán mã sau.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tải lại hệ thống daemon.
Bật và bắt đầu bộ hẹn giờ.
Liệt kê tất cả các bộ hẹn giờ để kiểm tra lịch trình của Mastodon dịch vụ.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22477%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có 0 người dùng. Điều này là do chúng tôi chưa đăng nhập. Ngay cả khi bạn tạo tài khoản quản trị viên, nó cũng không hiển thị trên trang chính khi chạy lần đầu. Để thực hiện điều đó, hãy đăng nhập vào phiên bản của bạn và bạn sẽ được đưa đến trang sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22477%22%3E%3C/svg%3E
Nhấp vào tùy chọn Tùy chọn từ thanh bên phải để truy cập cài đặt. Từ đó, nhấp vào tùy chọn Quản trị từ menu bên trái để truy cập bảng quản trị của Mastodon.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22602%22%3E%3C/svg%3E
Nhấp vào tùy chọn Cài đặt máy chủ từ thanh bên trái.
Tại đây, hãy điền tên người dùng liên hệ và email doanh nghiệp của bạn, giờ đây chúng sẽ được phản ánh trên trang chủ của máy chủ. Ngoài ra, hãy điền nhiều thông tin khác bao gồm mô tả máy chủ, logo và quy tắc máy chủ để tùy chỉnh phiên bản Mastodon của bạn.
Tại đây, bạn có thể xem danh sách nhiều quy trình và tác vụ theo lịch trình liên quan đến phiên bản Mastodon của mình. Bạn cũng có thể kiểm tra các tác vụ không thành công trong phần Đã chết hoặc Thử lại. Nó cũng sẽ cho bạn biết mức sử dụng bộ nhớ của phiên bản của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22421%22%3E%3C/svg%3E
Bạn có thể kiểm tra tình trạng cơ sở dữ liệu của phiên bản của bạn từ
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22412%22%3E%3C/svg%3E
Bạn có thể thực hiện bảo trì cơ sở dữ liệu, chạy truy vấn SQL và xóa các chỉ mục không sử dụng. Để bật thống kê truy vấn, hãy nhấp vào nút Bật trên trang ở trên và bạn sẽ nhận được thông tin sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22498%22%20height=%22209%22%3E%3C/svg%3E
Chuyển sang người dùng gốc.
Chuyển sang
Mở
Tìm dòng
Thêm dòng sau vào cuối tệp.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Khởi động lại các thùng chứa Mastodon.
Thoát khỏi gốc shell.
Nếu bạn kiểm tra trang tình trạng cơ sở dữ liệu, bạn có thể xem hiện tại có bất kỳ truy vấn chậm nào không.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22312%22%3E%3C/svg%3E
Lưu ý: Bạn cũng có thể khởi chạy URL PgHero và Sidekiq từ Tùy chọn menu.
Nếu trang web của bạn không tải vì lý do nào đó, bạn có thể kiểm tra nhật ký do Docker tạo ra.
Tạo và mở tệp danh sách kho lưu trữ để chỉnh sửa.
Dán các dòng sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Cài đặt Restic.
Tạo kho lưu trữ sao lưu và tạo bản sao lưu ban đầu. Chúng tôi đang sao lưu dữ liệu của mình vào dịch vụ S3.
Tạo bộ đếm thời gian dịch vụ sao lưu Mastodon và mở để chỉnh sửa.
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tạo tệp dịch vụ sao lưu Mastodon và mở tệp đó để chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tiếp theo, tạo và mở tệp
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Cấp quyền thực thi cho bản sao lưu script.
Tải lại daemon dịch vụ và khởi động dịch vụ sao lưu và bộ đếm thời gian.
Xác nhận rằng các bản sao lưu hàng giờ đang diễn ra và có thể truy cập được bằng cách sử dụng các mục sau lệnh.
Kéo hình ảnh container mới nhất cho Mastodon.
Thực hiện bất kỳ thay đổi nào đối với
Thực hiện tất cả các lần di chuyển cơ sở dữ liệu.
Cập nhật các bản sao tĩnh của bạn tệp.
Khởi động lại các thùng chứa Mastodon.
Các hướng dẫn trên là hướng dẫn cập nhật chung. Luôn kiểm tra trang phát hành GitHub của Mastodon để tìm kiếm bất kỳ tác vụ cập nhật và lệnh cụ thể nào giữa các phiên bản để đảm bảo mọi thứ diễn ra suôn sẻ.
Thay vào đó, Mastodon hoạt động trên hàng nghìn máy chủ khác nhau, mỗi máy chủ do nhiều thành viên khác nhau trong cộng đồng điều hành. Người dùng đã đăng ký trên một máy chủ có thể dễ dàng kết nối với người dùng trên mạng khác và theo dõi nhau trên các phiên bản.
Bất kỳ ai cũng có thể cài đặt phiên bản máy chủ Mastodon của họ. Hướng dẫn này sẽ hướng dẫn bạn cách thiết lập phiên bản Mastodon của mình trên máy chủ có Debian 12 bằng Docker. Docker giúp bạn dễ dàng cài đặt Mastodon bằng cách chứa tất cả các gói và dịch vụ cần thiết trong các vùng chứa.
Điều kiện tiên quyết
-
Một máy chủ chạy Debian 12 với tối thiểu 2 lõi CPU và 2GB bộ nhớ. Bạn sẽ cần nâng cấp máy chủ theo yêu cầu.
-
Người dùng không phải root có quyền sudo.
-
Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ của bạn. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụngmastodon.example.com
làm tên miền.
-
Mastodon gửi thông báo qua email cho người dùng. Chúng tôi khuyên bạn nên sử dụng dịch vụ thư giao dịch của bên thứ 3 như Mailgun, SendGrid, Amazon SES hoặc Sparkpost. Hướng dẫn trong hướng dẫn sẽ sử dụng Amazon SES.
-
Đảm bảo mọi thứ đều được cập nhật.
Mã:
$ sudo apt update
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên là cấu hình tường lửa. Debian đi kèm với ufw (Uncomplicated Firewall) theo mặc định.Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Mã:
Status: inactive
Mã:
$ sudo ufw allow OpenSSH
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Mã:
$ sudo ufw status
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Bước 2 - Cài đặt Docker và Docker Compose
Debian 12 đi kèm với phiên bản Docker cũ hơn. Để cài đặt phiên bản mới nhất, trước tiên, hãy nhập khóa GPG của Docker.
Mã:
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
Mã:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Mã:
$ sudo apt update
Mã:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Mã:
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled) Active: active (running) since Mon 2024-01-01 09:00:14 UTC; 17s ago
TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 1839 (dockerd) Tasks: 9 Memory: 27.6M CPU: 598ms CGroup: /system.slice/docker.service ??1839 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
sudo
mỗi khi bạn chạy lệnh docker
, hãy thêm tên người dùng của bạn vào docker
nhóm.
Mã:
$ sudo usermod -aG docker $(whoami)
Mã:
$ su - ${USER}
Mã:
$ groups
navjot sudo users docker
Bước 3 - Chuẩn bị cài đặt
Giới hạn mặc định của số lượng mmap rất thấp đối với Elasticsearch. Chạy lệnh sau để kiểm tra giá trị mặc định.
Mã:
$ sudo sysctl vm.max_map_count
Mã:
vm.max_map_count = 65530
Mã:
$ echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/90-max_map_count.conf
vm.max_map_count=262144
$ sudo sysctl --load /etc/sysctl.d/90-max_map_count.conf
vm.max_map_count=262144
Bước 4 - Cài đặt Mastodon
Tạo thư mục và thiết lập quyền sở hữu
Tạo thư mục cho Mastodon và các dịch vụ liên quan.
Mã:
$ sudo mkdir -p /opt/mastodon/database/{postgresql,pgbackups,redis,elasticsearch}
$ sudo mkdir -p /opt/mastodon/web/{public,system}
$ sudo mkdir -p /opt/mastodon/branding
Mã:
$ sudo chown 991:991 /opt/mastodon/web/{public,system}
$ sudo chown 1000 /opt/mastodon/database/elasticsearch
$ sudo chown 70:70 /opt/mastodon/database/pgbackups
Mã:
$ cd /opt/mastodon
Tạo môi trường và các tệp docker compose
Tạo các tệp môi trường cho ứng dụng và cơ sở dữ liệu.
Mã:
$ sudo touch application.env database.env
Mã:
$ sudo nano docker-compose.yml
Mã:
services: postgresql: image: postgres:16-alpine env_file: database.env restart: always shm_size: 512mb healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres'] volumes: - postgresql:/var/lib/postgresql/data - pgbackups:/backups networks: - internal_network redis: image: redis:7-alpine restart: always healthcheck: test: ['CMD', 'redis-cli', 'ping'] volumes: - redis:/data networks: - internal_network redis-volatile: image: redis:7-alpine restart: always healthcheck: test: ['CMD', 'redis-cli', 'ping'] networks: - internal_network elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.16 restart: always env_file: database.env environment: - cluster.name=elasticsearch-mastodon - discovery.type=single-node - bootstrap.memory_lock=true - xpack.security.enabled=true - ingest.geoip.downloader.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true" - xpack.license.self_generated.type=basic - xpack.watcher.enabled=false - xpack.graph.enabled=false - xpack.ml.enabled=false - thread_pool.write.queue_size=1000 ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 healthcheck: test: ["CMD-SHELL", "nc -z elasticsearch 9200"] volumes: - elasticsearch:/usr/share/elasticsearch/data networks: - internal_network ports: - '127.0.0.1:9200:9200' website: image: tootsuite/mastodon:v4.2.3 env_file: - application.env - database.env command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" restart: always depends_on: - postgresql - redis - redis-volatile - elasticsearch ports: - '127.0.0.1:3000:3000' networks: - internal_network - external_network healthcheck: test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1'] volumes: - uploads:/mastodon/public/system shell: image: tootsuite/mastodon:v4.2.3 env_file: - application.env - database.env command: /bin/bash restart: "no" networks: - internal_network - external_network volumes: - uploads:/mastodon/public/system - static:/static streaming: image: tootsuite/mastodon:v4.2.3 env_file: - application.env - database.env command: node ./streaming restart: always depends_on: - postgresql - redis - redis-volatile - elasticsearch ports: - '127.0.0.1:4000:4000' networks: - internal_network - external_network healthcheck: test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1'] sidekiq: image: tootsuite/mastodon:v4.2.3 env_file: - application.env - database.env command: bundle exec sidekiq restart: always depends_on: - postgresql - redis - redis-volatile - website networks: - internal_network - external_network healthcheck: test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"] volumes: - uploads:/mastodon/public/system
networks: external_network: internal_network: internal: true
volumes: postgresql: driver_opts: type: none device: /opt/mastodon/database/postgresql o: bind pgbackups: driver_opts: type: none device: /opt/mastodon/database/pgbackups o: bind redis: driver_opts: type: none device: /opt/mastodon/database/redis o: bind elasticsearch: driver_opts: type: none device: /opt/mastodon/database/elasticsearch o: bind uploads: driver_opts: type: none device: /opt/mastodon/web/system o: bind static: driver_opts: type: none device: /opt/mastodon/web/public o: bind
Tại thời điểm viết hướng dẫn, phiên bản mới nhất có sẵn của Mastodon là v4.2.3. Kiểm tra trang Mastodon GitHub Releases và điều chỉnh phiên bản trong tệp Docker compose cho phù hợp. Chúng tôi cũng đang sử dụng các phiên bản mới nhất của PostgreSQL và Redis. Bạn có thể điều chỉnh chúng theo yêu cầu của mình. Hiện tại, chúng tôi đang sử dụng Elasticsearch 7.17.16.
Tạo Application Secrets
Bước tiếp theo là tạo các giá trị application secret.Tạo
SECRET_KEY_BASE
và OTP_SECRET
bằng cách chạy lệnh sau hai lần. Lần đầu tiên sẽ mất một thời gian vì nó sẽ kéo hình ảnh.
Mã:
$ docker compose run --rm shell bundle exec rake secret
349623c049e3b856f6848638146e459857862b908ed387bbef372a30d9bd7c604fc4de5338addc86bd369a99d38ef59bacfa28e02a1750f7094ea6ede05457b8
openssl
cho tương tự.
Mã:
$ openssl rand -hex 64
ae01cf7d4dfae0182461a1345f1f2bf159658a27339ffafe7d356bef9ee8d4fa015ab2e72a608f236bd8e3f9b2af2dcb1d55ee5c8e43646959112c7da5582f4b
VAPID_PRIVATE_KEY
và VAPID_PUBLIC_KEY
giá trị bằng cách sử dụng lệnh sau.
Mã:
$ docker compose run --rm shell bundle exec rake mastodon:webpush:generate_vapid_key
Mã:
VAPID_PRIVATE_KEY=u2qsCs5JdmdmMLnUuU0sgmFGvZedteJz-lFB_xF4_ac=
VAPID_PUBLIC_KEY=BJXjE2hIXvFpo6dnHqyf1i-2PcP-cBoL95UCmhhxwlAgtFw_vnrYp4GBneR7_cmI9LZUYjHFh-TBAPSb9WTqH9A=
openssl
tiện ích để tạo mật khẩu PostgreSQL và Elasticsearch.
Mã:
$ openssl rand -hex 15
dd0bd7a95960623ed8e084a1fb7d5c
$ openssl rand -hex 15
0fb52834c991b5e296c647166185bc
Tệp môi trường Mastodon
Mởapplication.env
tệp để chỉnh sửa.
Mã:
$ sudo nano application.env
Mã:
# environment
RAILS_ENV=production
NODE_ENV=production
# domain
LOCAL_DOMAIN=mastodon.example.com
# redirect to the first profile
SINGLE_USER_MODE=false
# do not serve static files
RAILS_SERVE_STATIC_FILES=false
# concurrency
WEB_CONCURRENCY=2
MAX_THREADS=5
# pgbouncer
#PREPARED_STATEMENTS=false
# locale
DEFAULT_LOCALE=en
# email, not used
SMTP_SERVER=email-smtp.us-west-2.amazonaws.com
SMTP_PORT=587
SMTP_LOGIN=AKIA3FIG4NVFB343PZEI
SMTP_PASSWORD=AZX01WiA6JGbeZ2pwVXnyC9DhEa2nKcmXSu/zbLp
[emailprotected]
# secrets
SECRET_KEY_BASE=349623c049e3b856f6848638146e459857862b908ed387bbef372a30d9bd7c604fc4de5338addc86bd369a99d38ef59bacfa28e02a1750f7094ea6ede05457b8
OTP_SECRET=ae01cf7d4dfae0182461a1345f1f2bf159658a27339ffafe7d356bef9ee8d4fa015ab2e72a608f236bd8e3f9b2af2dcb1d55ee5c8e43646959112c7da5582f4b
# Changing VAPID keys will break push notifications
VAPID_PRIVATE_KEY=oNe_4BEL7Tpc3iV8eMtLegfLwrzA7ifitGJ2YOg3dUM=
VAPID_PUBLIC_KEY=BKBgmB90vIrJg6Ifq3cCHixalyPghJDkui9vm1wscxvAfNNoAQL0KinoxRTLDp0UFlGK_ahUG2n4W2n4x9AUAWM=
# IP and session retention
# -----------------------
# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml
# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800).
# -----------------------
IP_RETENTION_PERIOD=2592000
SESSION_RETENTION_PERIOD=2592000
Chúng tôi đã bật dịch vụ gửi thư Amazon SES. Nếu bạn không cần, bạn có thể xóa phần đó. Theo mặc định, Mastodon giữ lại địa chỉ IP trong 1 năm, nhưng chúng tôi đã thay đổi thành 30 ngày (2592000 giây). Bạn có thể thay đổi tùy theo yêu cầu của mình. Hãy đảm bảo giữ nó trong hơn 2 ngày, nếu không, bạn sẽ cần phải mày mò thêm một chút, điều này nằm ngoài phạm vi hướng dẫn của chúng tôi.
Mở tệp
database.env
để chỉnh sửa.
Mã:
$ sudo nano database.env
Mã:
# postgresql configuration
POSTGRES_USER=mastodon
POSTGRES_DB=mastodon
POSTGRES_PASSWORD=0fb52834c991b5e296c647166185bc
PGPASSWORD=0fb52834c991b5e296c647166185bc
PGPORT=5432
PGHOST=postgresql
PGUSER=mastodon
# pgbouncer configuration
#POOL_MODE=transaction
#ADMIN_USERS=postgres,mastodon
#DATABASE_URL="postgres://mastodon:0fb52834c991b5e296c647166185bc@postgresql:5432/mastodon"
# elasticsearch
ELASTIC_PASSWORD=dd0bd7a95960623ed8e084a1fb7d5c
# mastodon database configuration
#DB_HOST=pgbouncer
DB_HOST=postgresql
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=0fb52834c991b5e296c647166185bc
DB_PORT=5432
REDIS_HOST=redis
REDIS_PORT=6379
CACHE_REDIS_HOST=redis-volatile
CACHE_REDIS_PORT=6379
ES_ENABLED=true
ES_HOST=elasticsearch
ES_PORT=9200
ES_USER=elastic
ES_PASS=dd0bd7a95960623ed8e084a1fb7d5c
Chuẩn bị Mastodon
Chuẩn bị các tệp tĩnh để Nginx phục vụ. Bước này sẽ mất một chút thời gian vì Docker sẽ kéo tất cả hình ảnh lần đầu tiên.
Mã:
$ docker compose run --rm shell bash -c "cp -r /opt/mastodon/public/* /static/"
Mã:
$ docker compose up -d postgresql redis redis-volatile
Mã:
$ watch docker compose ps
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2262%22%3E%3C/svg%3E
Đợi
running (healthy)
, sau đó nhấn Ctrl + C
và khởi tạo cơ sở dữ liệu bằng lệnh sau lệnh.
Mã:
$ docker compose run --rm shell bundle exec rake db:setup
mastodon
đã tồn tại, hãy chạy lệnh sau lệnh.
Mã:
$ docker compose run --rm shell bundle exec rake db:migrate
Bước 5 - Cài đặt Nginx
Debian 12 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
sudo
để chạy lệnh sau.
Mã:
$ sudo nginx -v
nginx version: nginx/1.25.3
Mã:
$ sudo systemctl start nginx
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Mon 2024-01-01 10:17:38 UTC; 4s ago Docs: https://nginx.org/en/docs/ Process: 8972 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 8973 (nginx) Tasks: 3 (limit: 4637) Memory: 2.9M CPU: 17ms CGroup: /system.slice/nginx.service ??8973 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??8974 "nginx: worker process" ??8975 "nginx: worker process"
Jan 01 10:17:38 mastodon systemd[1]: Starting nginx.service - nginx - high performance web server...
Jan 01 10:17:38 mastodon systemd[1]: Started nginx.service - nginx - high performance web server.
Bước 6 - Cài đặt SSL
Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Debian hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.Debian 12 không đi kèm Snapd được cài đặt. Cài đặt gói Snapd.
Mã:
$ sudo apt install snapd
Mã:
$ sudo snap install core
$ sudo snap refresh core
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ certbot --version
certbot 2.8.0
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d mastodon.example.com
/etc/letsencrypt/live/mastodon.example.com
thư mục trên máy chủ của bạn.Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ systemctl list-timers
snap.certbot.renew.service
là một trong những dịch vụ được lên lịch chạy.
Mã:
NEXT LEFT LAST PASSED UNIT ACTIVATES
-----------------------------------------------------------------------------------------------------------------------------------------
Mon 2024-01-01 20:03:52 UTC 9h left Mon 2023-12-11 21:56:24 UTC 2 weeks 6 days ago apt-daily.timer apt-daily.service
Mon 2024-01-01 21:06:00 UTC 10h left - - snap.certbot.renew.timersnap.certbot.renew.service
Tue 2024-01-02 00:00:00 UTC 13h left - - dpkg-db-backup.timer dpkg-db-backup.service
Mã:
$ sudo certbot renew --dry-run
Bước 7 - Cấu hình Nginx
Mở tệp/etc/nginx/nginx.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
Tạo và mở tệp
/etc/nginx/conf.d/mastodon.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/mastodon.conf
Mã:
map $http_upgrade $connection_upgrade { default upgrade; '' close;
}
upstream backend { server 127.0.0.1:3000 fail_timeout=0;
}
upstream streaming { server 127.0.0.1:4000 fail_timeout=0;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;
server { listen 80 default_server; server_name mastodon.example.com; location / { return 301 https://$host$request_uri; }
}
server { listen 443 ssl; server_name mastodon.example.com; access_log /var/log/nginx/mastodon.access.log; error_log /var/log/nginx/mastodon.error.log; http2 on; # Enable HTTP/2 - works only on Nginx 1.25.1+ ssl_certificate /etc/letsencrypt/live/mastodon.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mastodon.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/mastodon.example.com/chain.pem; ssl_session_timeout 1d; # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; keepalive_timeout 70; sendfile on; client_max_body_size 80m; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; add_header X-Early-Data $tls1_3_early_data; root /opt/mastodon/web/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 image/svg+xml image/x-icon; add_header Strict-Transport-Security "max-age=31536000" always; location / { try_files $uri @proxy; } location ~ ^/(system/accounts/avatars|system/media_attachments/files) { add_header Cache-Control "public, max-age=31536000, immutable"; add_header Strict-Transport-Security "max-age=31536000" always; root /opt/mastodon/; try_files $uri @proxy; } location ~ ^/(emoji|packs) { add_header Cache-Control "public, max-age=31536000, immutable"; add_header Strict-Transport-Security "max-age=31536000" always; try_files $uri @proxy; } location /sw.js { add_header Cache-Control "public, max-age=0"; add_header Strict-Transport-Security "max-age=31536000" always; 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 $scheme; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_pass http://backend; proxy_buffering on; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_cache CACHE; proxy_cache_valid 200 7d; proxy_cache_valid 410 24h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cached $upstream_cache_status; add_header Strict-Transport-Security "max-age=31536000" always; 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 $scheme; proxy_set_header Proxy ""; proxy_pass http://streaming; 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;
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default "";
}
Xác minh tệp cấu hình Nginx cú pháp.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Mã:
$ sudo systemctl restart nginx
Bước 8 - Khởi động Mastodon
Công cụ Tootctl CLI
Công cụ Tootctl CLI được sử dụng để thực hiện các tác vụ quản trị trên Mastodon. Chúng ta cần làm cho nó có thể truy cập được trên shell máy chủ.Tạo tệp
/usr/local/bin/tootctl
và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /usr/local/bin/tootctl
Mã:
#!/bin/bash
docker compose -f /opt/mastodon/docker-compose.yml run --rm shell tootctl "$@"
Cấp quyền thực thi cho tệp.
Mã:
$ sudo chmod +x /usr/local/bin/tootctl
Tệp dịch vụ Mastodon
Bạn có thể bắt đầu Các container Mastodon sử dụng lệnh Docker compose nhưng dễ thực hiện hơn thông qua tệp đơn vị systemd.Tạo và mở tệp dịch vụ Mastodon để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/mastodon.service
Mã:
[Unit]
Description=Mastodon service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/mastodon
ExecStart=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml up -d
ExecStop=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml down
[Install]
WantedBy=multi-user.target
Tải lại daemon hệ thống để khởi tạo tệp dịch vụ.
Mã:
$ sudo systemctl daemon-reload
Mã:
$ sudo systemctl enable --now mastodon.service
Mã:
$ watch docker compose -f /opt/mastodon/docker-compose.yml ps
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22143%22%3E%3C/svg%3E
Khi trạng thái của container thay đổi thành
running (healthy)
, thoát khỏi màn hình bằng cách nhấn Ctrl + C.Tạo người dùng quản trị cho Mastodon và ghi lại mật khẩu được cung cấp.
Mã:
$ tootctl accounts create navjot --email [emailprotected] --confirmed --role Owner
OK
New password: 1338afbe1b4e06e823b6625da80cb537
Mã:
$ tootctl settings registrations close
Mã:
$ tootctl settings registrations open
Khởi tạo Tìm kiếm
Bạn sẽ cần phải thực hiện một lệnh trước khi có thể tạo và điền thông tin vào các chỉ mục Elasticsearch. Sau khi bạn đã thực hiện một cú đánh, hãy đưa ra lệnh sau.
Mã:
$ tootctl search deploy
Mã:
/opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/progress.rb:76:in `total=': You can't set the item's total value to less than the current progress. (ProgressBar::InvalidProgressError) from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/base.rb:178:in `block in update_progress' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/output.rb:43:in `with_refresh' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/base.rb:177:in `update_progress' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/ruby-progressbar-1.11.0/lib/ruby-progressbar/base.rb:101:in `total=' from /opt/mastodon/lib/mastodon/search_cli.rb:67:in `deploy' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:116:in `invoke' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor.rb:243:in `block in subcommand' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' from /opt/mastodon/vendor/bundle/ruby/3.0.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start' from /opt/mastodon/bin/tootctl:8:in `'
Mã:
$ docker exec -it mastodon-website-1 /bin/bash
Mã:
$ sed -E '/progress.total = /d' -i lib/mastodon/search_cli.rb
Mã:
$ exit
Mã:
$ tootctl search deploy
Done! 1/?? |-=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=| ETA: ??:??:?? (0 docs/s)
Indexed 1 records, de-indexed 0
Dịch vụ trợ giúp bổ sung
Chúng ta hãy tạo một dịch vụ khác để xóa các tệp phương tiện đã tải xuống.Tạo và mở dịch vụ xóa phương tiện Mastodon cho chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/mastodon-media-remove.service
Mã:
[Unit]
Description=Mastodon - media remove service
Wants=mastodon-media-remove.timer
[Service]
Type=oneshot
StandardError=null
StandardOutput=null
WorkingDirectory=/opt/mastodon
ExecStart=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml run --rm shell tootctl media remove
[Install]
WantedBy=multi-user.target
Nếu bạn muốn lên lịch xóa phương tiện, bạn có thể thiết lập dịch vụ hẹn giờ cho nó.
Mã:
$ sudo nano /etc/systemd/system/mastodon-media-remove.timer
Mã:
[Unit]
Description=Schedule a media remove every week
[Timer]
Persistent=true
OnCalendar=Sat *-*-* 00:00:00
Unit=mastodon-media-remove.service
[Install]
WantedBy=timers.target
Bạn có thể thiết lập một dịch vụ khác để xóa các thẻ xem trước Rich được tạo bằng OpenGraph thẻ.
Mã:
$ sudo nano /etc/systemd/system/mastodon-preview_cards-remove.service
Mã:
[Unit]
Description=Mastodon - preview cards remove service
Wants=mastodon-preview_cards-remove.timer
[Service]
Type=oneshot
StandardError=null
StandardOutput=null
WorkingDirectory=/opt/mastodon
ExecStart=/usr/bin/docker compose -f /opt/mastodon/docker-compose.yml run --rm shell tootctl preview_cards remove
[Install]
WantedBy=multi-user.target
Đặt bộ hẹn giờ tương ứng dịch vụ.
Mã:
$ sudo nano /etc/systemd/system/mastodon-preview_cards-remove.timer
Mã:
[Unit]
Description=Schedule a preview cards remove every week
[Timer]
Persistent=true
OnCalendar=Sat *-*-* 00:00:00
Unit=mastodon-preview_cards-remove.service
[Install]
WantedBy=timers.target
Tải lại hệ thống daemon.
Mã:
$ sudo systemctl daemon-reload
Mã:
$ sudo systemctl enable --now mastodon-preview_cards-remove.timer
$ sudo systemctl enable --now mastodon-media-remove.timer
Mã:
$ systemctl list-timers
.....
Sat 2024-01-06 00:00:00 UTC 4 days left - - mastodon-media-remove.timer mastodon-media-remove.service
Sat 2024-01-06 00:00:00 UTC 4 days left - - mastodon-preview_cards-remove.timer mastodon-preview_cards-remove.service
Truy cập Mastodon
Truy cập URLhttps://mastodon.example.com
để truy cập phiên bản của bạn và bạn sẽ thấy một trang tương tự.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22477%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có 0 người dùng. Điều này là do chúng tôi chưa đăng nhập. Ngay cả khi bạn tạo tài khoản quản trị viên, nó cũng không hiển thị trên trang chính khi chạy lần đầu. Để thực hiện điều đó, hãy đăng nhập vào phiên bản của bạn và bạn sẽ được đưa đến trang sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22477%22%3E%3C/svg%3E
Nhấp vào tùy chọn Tùy chọn từ thanh bên phải để truy cập cài đặt. Từ đó, nhấp vào tùy chọn Quản trị từ menu bên trái để truy cập bảng quản trị của Mastodon.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22602%22%3E%3C/svg%3E
Nhấp vào tùy chọn Cài đặt máy chủ từ thanh bên trái.
Tại đây, hãy điền tên người dùng liên hệ và email doanh nghiệp của bạn, giờ đây chúng sẽ được phản ánh trên trang chủ của máy chủ. Ngoài ra, hãy điền nhiều thông tin khác bao gồm mô tả máy chủ, logo và quy tắc máy chủ để tùy chỉnh phiên bản Mastodon của bạn.
Bước 9 - Bảo trì Mastodon
Để xem hiệu suất và nhật ký của phiên bản Mastodon, hãy truy cậphttps://mastodon.example.com/sidekiq/
.Tại đây, bạn có thể xem danh sách nhiều quy trình và tác vụ theo lịch trình liên quan đến phiên bản Mastodon của mình. Bạn cũng có thể kiểm tra các tác vụ không thành công trong phần Đã chết hoặc Thử lại. Nó cũng sẽ cho bạn biết mức sử dụng bộ nhớ của phiên bản của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22421%22%3E%3C/svg%3E
Bạn có thể kiểm tra tình trạng cơ sở dữ liệu của phiên bản của bạn từ
https://mastodon.example.com/pghero/
.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22412%22%3E%3C/svg%3E
Bạn có thể thực hiện bảo trì cơ sở dữ liệu, chạy truy vấn SQL và xóa các chỉ mục không sử dụng. Để bật thống kê truy vấn, hãy nhấp vào nút Bật trên trang ở trên và bạn sẽ nhận được thông tin sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22498%22%20height=%22209%22%3E%3C/svg%3E
Chuyển sang người dùng gốc.
Mã:
$ sudo -i su
/opt/mastodon/database/postgresql
thư mục.
Mã:
$ cd /opt/mastodon/database/postgresql
postgresql.conf
tệp.
Mã:
$ nano postgresql.conf
#shared_preload_libraries = '' # (change requires restart)
và thay thế bằng nội dung sau.
Mã:
shared_preload_libraries = 'pg_stat_statements'
Mã:
pg_stat_statements.track = all
Khởi động lại các thùng chứa Mastodon.
Mã:
$ systemctl restart mastodon.service
Mã:
$ exit
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22312%22%3E%3C/svg%3E
Lưu ý: Bạn cũng có thể khởi chạy URL PgHero và Sidekiq từ Tùy chọn menu.
Nếu trang web của bạn không tải vì lý do nào đó, bạn có thể kiểm tra nhật ký do Docker tạo ra.
Mã:
$ docker logs
Bước 10 - Sao lưu Mastodon
Chúng tôi sẽ sử dụng một công cụ của bên thứ 3 có tên là Restic để sao lưu Mastodon. Bước đầu tiên để sao lưu bằng Restic là thêm tất cả các tệp và thư mục vào danh sách kho lưu trữ.Tạo và mở tệp danh sách kho lưu trữ để chỉnh sửa.
Mã:
$ sudo nano /opt/mastodon/backup-files
Mã:
/etc/nginx
/etc/letsencrypt
/etc/systemd/system
/root
/opt/mastodon/database/pgbackups
/opt/mastodon/*.env
/opt/mastodon/docker-compose.yml
/opt/mastodon/branding
/opt/mastodon/database/redis
/opt/mastodon/web/system
/opt/mastodon/backup-files
/opt/mastodon/mastodon-backup
Cài đặt Restic.
Mã:
$ sudo apt install restic
Mã:
$ restic -r s3:https://$SERVER:$PORT/mybucket init
$ restic -r s3:https://$SERVER:$PORT/mybucket backup $(cat /opt/mastodon/backup-files) --exclude /opt/mastodon/database/postgresql
Mã:
$ sudo nano /etc/systemd/system/mastodon-backup.timer
Mã:
[Unit]
Description=Schedule a mastodon backup every hour
[Timer]
Persistent=true
OnCalendar=*:00:00
Unit=mastodon-backup.service
[Install]
WantedBy=timers.target
Tạo tệp dịch vụ sao lưu Mastodon và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/mastodon-backup.service
Mã:
[Unit]
Description=Mastodon - backup service
# Without this, they can run at the same time and race to docker compose,
# double-creating networks and failing due to ambiguous network definition
# requiring `docker network prune` and restarting
After=mastodon.service
[Service]
Type=oneshot
StandardError=file:/var/log/mastodon-backup.err
StandardOutput=file:/var/log/mastodon-backup.log
WorkingDirectory=/opt/mastodon
ExecStart=/bin/bash /opt/mastodon/mastodon-backup
[Install]
WantedBy=multi-user.target
Tiếp theo, tạo và mở tệp
/opt/mastodon/mastodon-backup
để chỉnh sửa. Điều này chứa các lệnh sao lưu thực tế.
Mã:
$ sudo nano /opt/mastodon/mastodon-backup
Mã:
#!/bin/bash
set -e
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
SERVER=
PORT=
RESTIC_PASSWORD_FILE=/root/restic-pasword
docker compose -f /opt/mastodon/docker-compose.yml run --rm postgresql sh -c "pg_dump -Fp mastodon | gzip > /backups/dump.sql.gz"
restic -r s3:https://$SERVER:$PORT/mybucket --cache-dir=/root backup $(cat /opt/mastodon/backup-files) --exclude /opt/mastodon/database/postgresql
restic -r s3:https://$SERVER:$PORT/mybucket --cache-dir=/root forget --prune --keep-hourly 24 --keep-daily 7 --keep-monthly 3
Cấp quyền thực thi cho bản sao lưu script.
Mã:
$ sudo chmod +x /opt/mastodon/mastodon-backup
Mã:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now mastodon-backup.service
$ sudo systemctl enable --now mastodon-backup.timer
Mã:
$ restic -r s3:https://$SERVER:$PORT/mybucket snapshots
$ restic -r s3:https://$SERVER:$PORT/mybucket mount /mnt
Bước 11 - Nâng cấp Mastodon
Việc nâng cấp Mastodon cần thực hiện một số bước. Đầu tiên, chuyển sang thư mục.
Mã:
$ cd /opt/mastodon
Mã:
$ docker compose pull
docker-compose.yml
nếu bạn muốn.Thực hiện tất cả các lần di chuyển cơ sở dữ liệu.
Mã:
$ docker compose run --rm shell bundle exec rake db:migrate
Mã:
$ docker compose run --rm shell bash -c "cp -r /opt/mastodon/public/* /static/"
Mã:
$ sudo systemctl restart mastodon.service