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ó Ubuntu 22.04 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 sẽ cần phải đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng để kích hoạ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ả đầu ra 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 các thư mục Elasticsearch, web và 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.0.2. 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.x. Không có phiên bản chính nào của Elasticsearch mà bạn có thể theo dõi trên trang Docker Hub, vì vậy bạn sẽ phải tiếp tục cập nhật thủ công để có các bản cập nhật bảo mật liên quan đến Java.
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 tiện ích
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.
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.
Đợi
Nhập khóa ký của Nginx.
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Cập nhật kho lưu trữ hệ thống.
Cài đặt Nginx.
Xác minh cài đặt.
Khởi động máy chủ Nginx.
Kiểm tra trạng thái của server.
Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng 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
Chạy lệnh sau để tạo SSL Chứng chỉ.
Lệnh trên sẽ tải chứng chỉ xuống thư mục
Tạo nhóm Diffie-Hellman chứng chỉ.
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Nếu không thấy lỗi nào, 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 cú pháp tệp cấu hình Nginx.
Khởi động lại Nginx máy chủ.
Tạo 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 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.
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 đã cung cấp.
Nếu bạn muốn đóng đăng ký người dùng, hãy sử dụng lệnh sau.
Để mở lại đăng ký, hãy đưa ra lệnh sau lệnh.
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 shell.
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 để 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 việc này.
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 dịch vụ khác để xóa thẻ xem trước Rich được tạo bằng Thẻ OpenGraph.
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ộ đếm thời gian 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=%22598%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có 2 người dùng và 1 trong số họ (tôi) được đặt làm quản trị viên. Thông thường thì không phải vậy. Ngay cả khi bạn tạo tài khoản quản trị viên, tài khoả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=%22646%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=%22626%22%3E%3C/svg%3E
Nhấp vào tùy chọn Cài đặt trang web từ thanh bên trái.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22439%22%3E%3C/svg%3E
Tại đây, hãy điền tên người dùng liên hệ và email công việc của bạn, thông tin này 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 các quy trình khác nhau và các tác vụ theo lịch trình liên quan đến phiên bản Mastodon của bạn. 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=%22508%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=%22409%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=%22552%22%20height=%22210%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=%22304%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 nó.
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 lệnh 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 trong
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ó Ubuntu 22.04 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 Ubuntu 22.04 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 wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring 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. Ubuntu đ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
Ubuntu 22.04 đ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ã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Mã:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) 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-compose-plugin
Mã:
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-12-30 15:55:17 UTC; 29min ago
TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 1966 (dockerd) Tasks: 8 Memory: 20.8M CPU: 740ms CGroup: /system.slice/docker.service ??1966 /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 wheel 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ã:
$ 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
$ sudo sysctl --load /etc/sysctl.d/90-max_map_count.conf
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ã:
version: '3'
services: postgresql: image: postgres:15-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.7 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.0.2 env_file: - application.env - database.env command: bash -c "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.0.2 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.0.2 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.0.2 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.0.2. 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.x. Không có phiên bản chính nào của Elasticsearch mà bạn có thể theo dõi trên trang Docker Hub, vì vậy bạn sẽ phải tiếp tục cập nhật thủ công để có các bản cập nhật bảo mật liên quan đến Java.
Tạo Application Secret
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 các hình ảnh.
Mã:
$ docker compose run --rm shell bundle exec rake secret
openssl
cho tương tự.
Mã:
$ openssl rand -hex 64
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
để tạo PostgreSQL và Elasticsearch mật khẩu.
Mã:
$ openssl rand -hex 15
Tệp Môi trường Mastodon
Mở tệpapplication.env
để 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=AES_USER
SMTP_PASSWORD=AES_PWD
[emailprotected]
# secrets
SECRET_KEY_BASE=c09fa403575e0b431e54a2e228f20cd5a5fdfdbba0da80598959753b829a4e3c0266eedbac7e3cdf9f3345db36c56302c0e1bc5bfc8c5d516be59a2c41de7e37
OTP_SECRET=febb7dbb0d3308094083733fc923a430e52ccec767d48d7d2e0c577bfcb6863dbdfc920b1004b1f8c2967b9866bd7a0b4a15460f9fc7687aa4a42acf54e5a3d4
# Changing VAPID keys will break push notifications
VAPID_PRIVATE_KEY=13RgrfOY2tkwuUycylDPOkoHennkJ0ZAPV_fUwDy7-g=
VAPID_PUBLIC_KEY=BDAQuGwPbh1kbCV904adYXHvz9lLRaJHkiQkihRDPyBn3QmkAYbR21WHYoP8TkyG6dylG6IXpEVfLwdoW7fJVns=
# 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=15ff12dcb93aa60680d2aadb4032ee
PGPASSWORD=15ff12dcb93aa60680d2aadb4032ee
PGPORT=5432
PGHOST=postgresql
PGUSER=mastodon
# pgbouncer configuration
#POOL_MODE=transaction
#ADMIN_USERS=postgres,mastodon
#DATABASE_URL="postgres://mastodon:15ff12dcb93aa60680d2aadb4032ee@postgresql:5432/mastodon"
# elasticsearch
ES_JAVA_OPTS=-Xms512m -Xmx512m
ELASTIC_PASSWORD=13382e99f6b2d4dc7f3d66e4b9872d
# mastodon database configuration
#DB_HOST=pgbouncer
DB_HOST=postgresql
DB_USER=mastodon
DB_NAME=mastodon
DB_PASS=15ff12dcb93aa60680d2aadb4032ee
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=13382e99f6b2d4dc7f3d66e4b9872d
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
running (healthy)
, sau đó nhấn Ctrl + C
và khởi tạo cơ sở dữ liệu bằng lệnh sau.
Mã:
$ docker compose run --rm shell bundle exec rake db:setup
Bước 5 - Cài đặt Nginx
Ubuntu 22.04 đ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 arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Mã:
$ sudo apt update
Mã:
$ sudo apt install nginx
Mã:
$ nginx -v
nginx version: nginx/1.22.1
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; vendor preset: enabled) Active: active (running) since Sat 2022-12-31 02:23:12 UTC; 6s ago Docs: https://nginx.org/en/docs/ Process: 22129 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 22130 (nginx) Tasks: 3 (limit: 4575) Memory: 2.5M CPU: 17ms CGroup: /system.slice/nginx.service ??22130 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??22131 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ??22132 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
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 Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo rằng 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.
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ã:
$ 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
trên máy chủ của bạn.Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
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 http2; server_name mastodon.example.com; access_log /var/log/nginx/mastodon.access.log; error_log /var/log/nginx/mastodon.error.log; http2_push_preload on; # Enable HTTP/2 Server Push 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 cú pháp tệp cấu hình Nginx.
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
Dịch vụ Mastodon Tệp
Bạn có thể khởi động các container Mastodon bằng lệnh Docker compose nhưng sẽ dễ dàng hơn nếu thực hiệ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
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 đã 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 lệnh toot trước khi có thể tạo và điền thông tin vào 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
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 để 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 việc này.
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 dịch vụ khác để xóa thẻ xem trước Rich được tạo bằng Thẻ OpenGraph.
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ộ đếm thời gian 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 2023-01-07 00:00:00 UTC 6 days left n/a n/a mastodon-media-remove.timer mastodon-media-remove.service
Sat 2023-01-07 00:00:00 UTC 6 days left n/a n/a 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=%22598%22%3E%3C/svg%3E
Trong ảnh chụp màn hình ở trên, bạn có thể thấy có 2 người dùng và 1 trong số họ (tôi) được đặt làm quản trị viên. Thông thường thì không phải vậy. Ngay cả khi bạn tạo tài khoản quản trị viên, tài khoả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=%22646%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=%22626%22%3E%3C/svg%3E
Nhấp vào tùy chọn Cài đặt trang web từ thanh bên trái.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22439%22%3E%3C/svg%3E
Tại đây, hãy điền tên người dùng liên hệ và email công việc của bạn, thông tin này 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 các quy trình khác nhau và các tác vụ theo lịch trình liên quan đến phiên bản Mastodon của bạn. 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=%22508%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=%22409%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=%22552%22%20height=%22210%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 dòng 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=%22304%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. Nội dung 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