웹사이트 검색

Ubuntu 20.04에 Mastodon을 설치하는 방법


소개

Mastodon은 연합이라고도 하는 분산형 모델을 사용하는 마이크로블로깅 소셜 네트워킹 애플리케이션입니다. Mastodon은 오픈 소스이며 각 서버가 자체 인스턴스가 되는 모든 서버에서 누구나 배포할 수 있습니다. 각 인스턴스에는 고유한 정책과 조정이 있을 수 있습니다. 모든 Mastodon 서버의 연합 내에서 각 Mastodon 인스턴스는 다른 인스턴스를 인식할 수 있습니다. 이를 통해 단일 서버 및 여러 인스턴스에서 다른 사용자와 상호 작용할 수 있습니다.

이 튜토리얼에서는 이 글을 쓰는 시점에 4.0.2인 Mastodon의 최신 버전을 설치합니다. 공식 Mastodon 설치 리포지토리를 구성하고 다른 모든 종속성을 설치하도록 환경을 설정합니다. 대화형 설정을 사용하여 저장소, 이메일, 자산 및 관리자 계정에 대한 사용자 지정 Mastodon 인스턴스를 설정합니다. 마지막으로 Let’s Encrypt로 인스턴스를 보호합니다.

참고: 이 튜토리얼은 Mastodon 팀에서 권장하는 대로 베어메탈 서버에 설치하는 방법을 자세히 설명합니다. 이 대체 Mastodon 설치 방법을 고려할 수도 있습니다.

  • Marketplace의 1-Click 솔루션입니다. 시작하려면 DigitalOcean Marketplace 1-Click으로 Mastodon을 설치하는 방법에 대한 자습서를 따를 수 있습니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • sudo가 활성화된 루트가 아닌 사용자 및 방화벽이 있는 Ubuntu 20.04 서버. Ubuntu 20.04 자습서로 초기 서버 설정에 따라 이를 설정할 수 있습니다.
  • Ubuntu 20.04에서 PostgreSQL을 설치하고 사용하는 방법에 대한 가이드의 1단계에 따라 서버에 PostgreSQL을 설치했습니다.
  • Node.js 버전 16.xx가 서버에 설치되어 있습니다. Ubuntu 20.04에 Node.js를 설치하는 방법 자습서에서 옵션 2를 사용하세요.
  • Ubuntu 20.04에 Nginx를 설치하는 방법 자습서의 1단계에 따라 서버에 Nginx를 설치했습니다.
  • 등록된 도메인 이름. 이 자습서에서는 전체적으로 your_domain을 사용합니다. Freenom에서 무료로 받거나 선택한 도메인 등록 기관을 사용할 수 있습니다.
  • 서버의 공용 IP 주소를 가리키는 your_domain이 있는 A DNS 레코드. DigitalOcean 계정을 사용하여 도메인 및 DNS 레코드를 관리할 수 있습니다.

모든 것을 설정했으면 첫 번째 단계를 시작할 준비가 된 것입니다.

1단계 - mastodon 시스템 사용자 및 PostgreSQL 역할 생성

Mastodon의 소스 코드는 mastodon이라는 특정 시스템 사용자를 사용하여 서버를 관리한다고 가정합니다. 이것은 현재 Mastodon의 많은 부분에 하드코딩되어 있습니다. 이 자습서에서는 시스템 수준과 PostgreSQL 데이터베이스의 역할로 mastodon 사용자를 만들고 사용하는 권장 사항을 따릅니다.

이 자습서에서는 전제 조건의 초기 서버 설정에서 사용자를 생성했다고 가정하지만 다음 명령은 명령 앞에 sudo를 생략하여 루트로 실행할 수도 있습니다. 먼저 adduser를 사용하여 mastodon 사용자를 만듭니다.

  1. sudo adduser mastodon

다음으로 mastodon 사용자를 sudo 그룹에 추가하여 관리 권한을 부여합니다.

  1. sudo usermod -aG sudo mastodon

시스템 수준 mastodon 사용자가 생성되면 다음으로 데이터베이스에서 일치하는 역할을 생성합니다. PostgreSQL은 생성된 역할을 일치하는 시스템 사용자와 연결하는 피어 인증을 사용합니다. 일치하는 이름이 mastodon인 사용자를 생성합니다.

  1. sudo -u postgres createuser --interactive

interactive 플래그는 새 역할 mastodon의 이름을 선택할 수 있는 다음 프롬프트를 표시합니다. 새 역할을 수퍼유저로 만들려면 y를 입력해야 합니다.

Output
Enter name of role to add: mastodon Shall the new role be a superuser? (y/n) y

이제 새로 만든 mastodon 사용자로 로그인할 수 있습니다.

  1. su - mastodon

이 자습서의 나머지 부분에서는 이 mastodon 사용자로 모든 명령을 실행하게 됩니다.

2단계 - 종속성 설치 및 Mastodon 복제

대부분의 Mastodon 구성은 이후 단계에서 수행할 대화식 설정을 통해 처리됩니다. 먼저 종속 항목을 설치해야 합니다. Mastodon은 Linux 환경에서 작동하면서 Ruby 및 Node.js를 기반으로 하는 프로젝트이므로 세 가지 패키지 관리자가 필요합니다. Node.js용 Yarn 패키지. 소스에서 설치하려면 Mastodon 리포지토리를 복제해야 합니다. 프로세스는 다음 순서로 진행됩니다.

  • APT 종속성을 설치합니다.
  • 소스에서 마스토돈을 복제합니다.
  • Ruby 및 Mastodon의 Ruby 의존성을 설치합니다.
  • Node.js 종속성을 설치합니다.

첫 번째 단계는 apt를 통해 종속성을 설치하는 것입니다. 여기에는 TLS/SSL 암호화를 처리하기 위한 Certbot과 빌드, 컴파일 및 이미지 처리를 위한 기타 라이브러리가 포함됩니다. 이를 설치하려면 apt update를 사용하여 패키지 색인을 업데이트하십시오.

  1. sudo apt update

그런 다음 apt install로 패키지를 설치합니다.

  1. sudo apt install \
  2. imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev \
  3. libprotobuf-dev protobuf-compiler pkg-config \
  4. redis-server redis-tools \
  5. certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

복제 마스토돈

이제 서버가 공식 저장소에서 Mastodon 소스를 복제할 준비가 되었습니다. 이전에 언급한 바와 같이 이 튜토리얼에서는 가장 최신 기능, 보안 및 버그 수정을 위해 이 작성 시점에 v4.0.2인 Mastodon의 최신 버전을 사용합니다.

먼저 서버의 Mastodon 리포지토리를 live라는 새 디렉터리에 복제합니다.

  1. git clone https://github.com/mastodon/mastodon.git live

이 디렉토리 명명 규칙은 Mastodon의 문서 전체에서 사용되며 일관성을 위해 권장됩니다. 다음으로, 생성한 디렉터리로 이동합니다. 이 디렉터리가 나머지 자습서의 프로젝트 디렉터리가 됩니다.

  1. cd live

이제 git을 사용하여 최신 버전인 v4.0.2를 확인할 수 있습니다.

  1. git checkout v4.0.2

Ruby 및 Mastodon의 Ruby 의존성 설치

Mastodon 소스 코드가 준비되었으므로 이제 Ruby 및 Mastodon의 Ruby 종속성 설치를 진행할 수 있습니다. Ruby 프로그래밍 언어를 설치하는 데 사용할 버전 관리자 도구인 rbenv를 설치합니다. rbenv는 시스템 수준이 아닌 사용자 수준에서 설치되기 때문에 mastodon 사용자를 생성하고 전환한 후 여기에서 이 단계를 수행해야 합니다. Ubuntu 20.04에서 rbenv로 Ruby on Rails를 설치하는 방법 튜토리얼의 1~3단계에 따라 Ruby 버전 3.0.4를 설치합니다. 2단계의 버전 3.0.4는 명시적으로 나열된 옵션이 아니지만 설치 명령에서 이 버전을 지정하면 여전히 작동합니다. 이 튜토리얼은 Ruby on Rails용이지만 rbenv를 사용하여 Ruby를 설치하는 데 중점을 둔 단계만 사용할 것임을 명심하십시오.

Ruby 종속성은 Bundler에서 관리합니다. Bundler는 Mastodon에 필요한 모든 Ruby gem을 설치하지만 먼저 프로덕션을 염두에 두고 설치하도록 구성해야 합니다.

구성 시스템과 인터페이스하려면 Bundler의 bundle config 명령을 사용하십시오. 이를 사용하여 deploymenttrue로 설정합니다.

  1. bundle config deployment 'true'

다음으로 without을 사용하여 개발 및 테스트에 대한 종속성이 설치되지 않도록 합니다.

  1. bundle config without 'development test'

이제 install을 사용하여 Ruby 종속성을 설치할 수 있습니다. 이것은 정상적인 동작이지만 몇 번의 일시 중지로 시간이 걸릴 수 있습니다.

  1. bundle install
Output
Fetching gem metadata from https://rubygems.org/......... Fetching https://github.com/ClearlyClaire/webpush.git Fetching rake 13.0.6 Installing rake 13.0.6 Fetching concurrent-ruby 1.1.10 Installing concurrent-ruby 1.1.10 . . .

이 작업이 완료되면 끝에 조치를 취해야 하는 것처럼 보일 수 있는 많은 출력이 있습니다. 그러나 추가 조치 없이 안전하게 진행할 수 있습니다.

Mastodon의 JavaScript 의존성 설치

Mastodon의 Ruby 종속성 설치가 완료되면 JavaScript 종속성으로 이동할 수 있습니다. Mastodon은 npm 대신 JavaScript 패키지를 관리하고 설치하기 위해 원사를 사용합니다. Node.js 설치 버전 16.10 이상에서는 기본적으로 corepack을 통해 yarn을 사용할 수 있습니다.

yarn에 액세스하려면 Node.js에 포함된 corepack을 활성화하세요.

  1. sudo corepack enable

Yarn은 classic이라고도 하는 버전 1.0과 버전 2.0 사이에 다양한 개발 역사를 가지고 있습니다. Mastodon에는 원사 세트 버전을 사용하여 활성화하는 원사의 클래식 버전이 필요합니다.

  1. yarn set version classic

이제 yarn install을 사용하여 Mastodon의 JavaScript 종속성을 설치할 수 있습니다. 추가 플래그는 yarn.lock 파일이 생성되지 않도록 합니다.

  1. yarn install --pure-lockfile
Output
yarn install v1.22.19 [1/6] Validating package.json... [2/6] Resolving packages... [3/6] Fetching packages... [4/6] Linking dependencies... warning Workspaces can only be enabled in private projects. [5/6] Building fresh packages... [6/6] Cleaning modules... Done in 50.84s.

이제 서버에 대한 사용자 지정 Mastodon 구성 파일을 만들 준비가 되었습니다.

3단계 - 대화형 설정으로 Mastodon 구성 파일 생성

Mastodon은 .env 파일의 변형을 구성 파일로 사용합니다. ~/live/.env.production.sample에서 볼 수 있는 샘플이 있지만 해당 파일을 복사하는 대신 대화형 설정 프로세스를 사용합니다. 완료되면 사용자 지정 파일이 ~/live/.env.production에 생성됩니다. 이 대화형 설정은 기본 서버 정보를 다루고, PostgreSQL 및 Redis 연결을 설정하고, 클라우드 스토리지 및 이메일 처리를 설정하고, CSSJavaScript 자산을 컴파일하고, Mastodon 내에서 관리자 계정을 만듭니다.

다단계 설정 프로세스를 시작하기 전에 방화벽이 적절한 포트를 통해 SMTP 트래픽을 허용하는지 확인하십시오. 보안 TLS 연결을 위한 기본 SMTP 포트는 포트 587이며 나중에 이메일 설정 부분에서 설명합니다. 지금은 방화벽 내에서 이 포트에 대한 액세스를 허용하십시오.

  1. sudo ufw allow 587

대화형 설정을 시작하려면 bundle exec rake를 사용하여 "production:

  1. RAILS_ENV=production bundle exec rake mastodon:setup

도메인 이름을 입력합니다. 사후에 이를 변경하는 것은 어려우므로 입력 내용이 정확한지 다시 한 번 확인하십시오.

Output
Your instance is identified by its domain name. Changing it afterward will break things. Domain name: your_domain

Mastodon에는 등록이 비활성화된 단일 사용자 모드가 있습니다. 다른 사람과 공유 공간을 만들 목적으로 서버를 설정한 경우 단일 사용자 모드를 활성화하면 안 됩니다.

Output
Single user mode disables registrations and redirects the landing page to your public profile. Do you want to enable single user mode? No

이 튜토리얼은 베어메탈 서버에서의 일반적인 설치를 다루므로 Docker 사용에 대한 프롬프트에 아니오로 대답하십시오.

Output
Are you using Docker to run Mastodon? no

데이터베이스 구성

모든 PostgreSQL 설정은 각 프롬프트에 대해 Enter를 눌러 기본값으로 유지할 수 있습니다. 귀하의 데이터베이스는 암호를 사용하여 인증하는 것이 아니라 피어 인증을 사용합니다. 이에 대해서는 나중에 설명하겠습니다. 지금은 비워 둘 수 있습니다.

Output
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 설정은 비밀번호 필드를 비워두고 기본값을 유지할 수도 있습니다. 이 데이터베이스는 이 서버에서만 로컬로 액세스할 수 있도록 되어 있기 때문에 암호를 설정하지 않습니다. 각 프롬프트에 대해 Enter를 누를 수 있습니다.

Output
Redis host: localhost Redis port: 6379 Redis password: Redis configuration works!

두 데이터베이스에 대한 연결이 작동하는 것으로 테스트됩니다.

스토리지 구성

다음으로 클라우드 저장소에 파일을 업로드하는 방법에 대해 묻는 메시지가 나타납니다. Mastodon 스토리지는 로컬 스토리지를 사용하거나 여러 공급자를 통해 클라우드 스토리지를 사용하여 설정할 수 있습니다. 로컬 스토리지를 사용하고 싶거나 클라우드 스토리지 즉시 솔루션이 준비되어 있지 않은 경우 아니요로 대답하십시오.

그러나 이는 장기 스토리지 솔루션으로 지속 가능하지 않으며 프로덕션 목적으로 오브젝트 스토리지 솔루션을 권장합니다. Mastodon은 DigitalOcean Spaces 및 자체 DigitalOcean Space 및 액세스 키를 생성하는 방법과 같은 기타 S3 호환 솔루션을 포함하여 널리 사용되는 여러 객체 스토리지 솔루션을 지원합니다.

Do you want to store uploaded files on the cloud? yes
Provider DigitalOcean Spaces
Space name: your_spaces_name
Space region: your_spaces_region
Space endpoint: your_spaces_endpoint
Space access key: your_spaces_access_key
Space secret key: your_spaces_secret_key
Do you want to access the uploaded files from your own domain? No

클라우드 저장소에 대한 직접 링크를 사용하는 대신 도메인의 링크를 사용하여 Mastodon 인스턴스에 업로드된 파일에 액세스할 수 있는 옵션도 제공됩니다. 원하는 경우 이 옵션을 선택할 수 있지만 이 자습서에서는 아니요를 선택합니다. 스토리지와 관련하여 마음이 바뀌면 나중에 돌아가서 생성된 구성 파일을 편집할 수 있습니다. 파일 저장소의 구성 파일 매개변수는 공식 Mastodon 문서를 확인하십시오.

아웃바운드 이메일 구성

Mastodon은 이메일을 보내는 방법으로 SMTP 이메일 서버에 대한 액세스가 필요합니다. 직접 운영하는 대신 외부 이메일 서비스 제공업체를 사용하는 것이 좋습니다. Mastodon은 예제에서 Mailgun을 사용합니다. 안전하고 안정적인 이메일 서버를 유지하는 것은 힘든 일이므로 외부 타사 이메일 서비스 제공업체에 의존하는 것이 좋습니다. 그러나 대부분의 타사 이메일 서비스 제공업체는 볼륨에 따라 요금을 부과하며 특정 사용량 임계값 미만의 프리 티어가 있을 수도 있고 없을 수도 있음을 알고 있어야 합니다. 이 시나리오에서는 귀하의 재량권이 권장됩니다.

참고: 이 자습서는 즉각적인 SMTP 솔루션 없이 완료할 수 있지만 모든 자격 증명 필드를 공백 또는 기본값으로 남겨두면 Mastodon의 전체 기능을 방해하므로 권장되지 않습니다. 이메일 공급자로 계정을 설정하고 나중에 구성 파일에 자격 증명을 추가할 수 있는 옵션이 있습니다. 그러나 이렇게 할 때까지 Mastodon의 이메일이 전송되지 않으며 다른 계정 팔로우와 같은 일부 기능을 사용할 수 없습니다.

Output
Do you want to send e-mails from localhost? No

모든 이메일 제공업체에서 계정을 만들고 구성해야 합니다. 이는 공급자에 따라 다릅니다. 도메인에 DNS 레코드를 추가하는 과정에서 이메일을 보낼 수 있도록 하려면 가입 후 제공업체를 통해 도메인을 확인해야 할 가능성이 높습니다. 또한 보안 인증을 위한 자격 증명으로 API 키를 얻거나 생성해야 합니다.

이 자습서에서는 Mailgun을 예로 사용하지만 전자 메일 서비스 공급자를 선택해도 됩니다. 이러한 선택 사항은 다른 이메일 서비스 제공업체에 대한 지침으로도 사용할 수 있습니다. 특히 Mailgun은 추가된 모든 도메인에 대한 SMTP 자격 증명을 자동으로 생성합니다. 다시 말하지만 이것은 사용하는 이메일 서비스에 따라 다르며 해당 문서를 확인해야 합니다.

Output
SMTP server: smtp.mailgun.org SMTP port: 587 SMTP username: your_smtp_username SMTP password: your_smtp_password SMTP authentication: plain SMTP OpenSSL verify mode: peer Enable STARTTLS: auto E-mail address to send e-mails "from": Mastodon <notifications@your_domain>

plain의 기본값은 SMTP 인증에 맞지 않는 것처럼 보이지만 이메일 서비스 공급자가 지원하는 SMTP 인증의 일반적인 옵션에는 plainlogin 가 있습니다. , 둘 다 Base64로 인코딩됩니다. Base64 인코딩만으로는 충분한 보안 수단이 아닙니다. 오히려 중요한 것은 안전한 TLS/SSL 연결을 통해 이메일 제공업체에 요청을 제출하는 것입니다. 포트 587의 SMTP 연결은 이메일 공급자와의 TLS 연결에 대한 기본값입니다. 이 선택은 TLS가 적절하게 보호될 때 안전하지만 이메일 서비스 제공업체의 공식 문서를 참조하면 SMTP 서비스와 안전하게 인터페이스하는 방법에 대한 보다 상세하고 구체적인 답변을 얻을 수 있습니다.

SMTP 자격 증명이 작동하는지 테스트 이메일을 보낸 다음 개인 이메일과 같이 액세스할 수 있는 수신자 이메일을 지정합니다.

Output
Send a test e-mail with this configuration right now? yes

이 테스트 이메일은 이메일 서비스에 따라 도착하는 데 몇 분 정도 걸릴 수 있습니다. 다시 말하지만 나중에 돌아와서 생성된 Mastodon 구성 파일에서 SMTP 자격 증명을 변경할 수 있습니다.

구성 마무리

다음으로 구성을 저장하라는 메시지가 표시됩니다. Mastodon은 이를 사용하여 데이터베이스를 생성합니다.

Output
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 Running `RAILS_ENV=production rails db:setup` ... Created database 'mastodon_production' Done!

그런 다음 Mastodon의 CSSJavaScript 자산을 컴파일하라는 메시지가 표시됩니다. 시간 및 리소스 소비에 대한 경고에 유의하십시오.

Output
The final step is compiling CSS/JS assets. This may take a while and consume a lot of RAM. Compile the assets now? Yes Running `RAILS_ENV=production rails assets:precompile` ... yarn install v1.22.19 [1/6] Validating package.json... [2/6] Resolving packages... [3/6] Fetching packages... [4/6] Linking dependencies... . . . All done! You can now power on the Mastodon server

이제 Mastodon 서버가 준비되었지만 아직 실행되지 않았습니다. Mastodon 서버에 로그인하기 위해 관리자 계정을 생성하라는 또 다른 프롬프트가 있습니다.

Output
Do you want to create an admin user straight away? Yes Username: mastodon E-mail: your_email You can login with the password: your_generated_password You can change your password once you login.

지금은 관리자 계정의 암호를 선택할 수 있는 옵션이 없습니다. 다른 곳에 기록해 두어야 하는 고유하게 생성된 비밀번호가 제공됩니다. 관리자 UI에 액세스하면 비밀번호를 변경할 수 있습니다.

생성된 Mastodon 구성 파일을 열어 nano 또는 선호하는 텍스트 편집기에서 내용을 확인합니다.

  1. nano ~/live/.env.production

내용은 다음과 유사합니다.

# Generated with mastodon:setup on 2022-11-22 18:22:25 UTC

# Some variables in this file will be interpreted differently whether you are
# using docker-compose or not.

LOCAL_DOMAIN=your_domain
SINGLE_USER_MODE=false
SECRET_KEY_BASE=your_generated_key_base
OTP_SECRET=your_generated_secret
VAPID_PRIVATE_KEY=your_generated_private_key
VAPID_PUBLIC_KEY=your_generated_public_key
DB_HOST=/var/run/postgresql
DB_PORT=5432
DB_NAME=mastodon_production
DB_USER=mastodon
DB_PASS=
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
S3_ENABLED=true
S3_PROTOCOL=https
S3_BUCKET=your_spaces_name
S3_REGION=your_spaces_region
S3_HOSTNAME=your_spaces_endpoint
S3_ENDPOINT=https://your_spaces_endpoint
AWS_ACCESS_KEY_ID=your_spaces_access_key
AWS_SECRET_ACCESS_KEY=your_spaces_secret_key
SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=587
SMTP_LOGIN=your_smtp_username
SMTP_PASSWORD=your_smtp_password
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=peer
SMTP_ENABLE_STARTTLS=auto
SMTP_FROM_ADDRESS='Mastodon <notifications@test.do-community.com>'

대화형 설정 프로세스 후에 이 파일을 수동으로 편집할 수 있습니다. 검사가 완료되면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL + X를 누른 다음 메시지가 표시되면 Y를 누른 다음 Enter 를 누릅니다. .

4단계 - Certbot 및 Let's Encrypt로 Mastodon용 Nginx 구성

Mastodon 애플리케이션 서버는 현재 로컬에서만 액세스할 수 있습니다. 인터넷을 통해 액세스를 허용하려면 리버스 프록시를 사용하여 노출해야 합니다. Nginx는 Mastodon 애플리케이션을 제공하기 위한 리버스 프록시로 권장됩니다. 리버스 프록시 주제에 대해 자세히 알아보려면 프록시 소개에 대한 자습서를 확인하세요.

Mastodon 저장소는 사용할 수 있는 기본 Nginx 구성 파일과 함께 제공되지만 이를 자신의 도메인과 일치시키고 Certbot 및 Let's Encrypt로 보호하려면 몇 가지 변경이 필요합니다. Mastodon이 제공하는 Nginx 파일은 전체 배포에 필요한 블록 및 지시문으로 완전히 채워져 있지만 기본 SSL/TLS 설정은 Certbot과의 원활한 상호 작용을 방해합니다. 이 단계에서는 Certbot 사용 전후에 이 제한을 우회하기 위해 Nginx 구성 파일을 두 번 편집합니다.

먼저 Nginx 서버에 대한 HTTP 및 HTTPS 트래픽을 모두 허용하도록 방화벽 설정을 조정합니다.

  1. sudo ufw allow 'Nginx Full'

이것은 사용자가 Mastodon 웹 사이트에 액세스하는 데 필요하지만 Certbot이 인증서에 필요한 확인을 수행하는 데에도 필요합니다. 다음으로 Mastodon 리포지토리에서 제공된 Nginx 구성을 복사합니다.

  1. sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon

Nginx는 심볼릭 링크 또는 심볼릭 링크라는 일반적인 방법을 사용하여 활성화된 서버 블록을 추적합니다. 심볼릭 링크를 생성하는 것은 디스크에 바로 가기를 만드는 것과 같으므로 나중에 서버 블록을 sites-available에 유지하면서 sites-enabled 디렉토리에서 바로 가기를 삭제할 수 있습니다. 가능하게 하고 싶었습니다. 새로 만든 파일로 링크를 만듭니다.

  1. sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

이제 Nginx는 이 구성 파일의 설정이 Mastodon 웹 사이트를 제공하는 데 사용되어야 한다는 것을 알고 있습니다. 그러나 Nginx 구성에 필요한 변경을 하지 않았습니다. 원하는 텍스트 편집기로 복사한 구성 파일을 엽니다.

  1. sudo nano /etc/nginx/sites-enabled/mastodon

server_name 지시문이 도메인과 도메인의 www. 버전을 가리키는지 확인해야 합니다. server_name의 두 인스턴스가 있습니다. 하나는 HTTP용 포트 80에서 수신 대기 중인 서버 블록에 있고 두 번째 인스턴스는 포트 443 에서 수신 대기 중인 블록에 있습니다. HTTPS의 경우. 두 server_name 지시문이 도메인을 가리키는지 확인하십시오.

또한 줄 시작 부분에 # 기호를 추가하여 두 번째 server 블록의 listen 지시문을 주석 처리해야 합니다. SSL 인증서가 아직 설정되지 않은 상태에서 이 listen 지시문에 대한 ssl 매개변수가 있으면 Nginx가 이 구성을 유효하지 않은 것으로 감지합니다. 이는 Certbot이 인증서를 생성하지 않음을 의미합니다. 이 문제를 해결하려면 이 지시문을 일시적으로 주석 처리하고 인증서를 만든 후 다시 활성화하십시오.

. . .
server {
  listen 80;
  listen [::]:80;
  server_name your_domain www.your_domain;
  root /home/mastodon/live/public;
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
   # listen 443 ssl http2;
   # listen [::]:443 ssl http2;
  server_name your_domain www.your_domain;
. . .

완료되면 파일을 저장하고 닫습니다. 이제 안전한 SSL/TLS 액세스를 위한 인증서를 만들 준비가 되었습니다. 미리 채워진 Mastodon의 기본 Nginx 구성 파일을 사용하고 있기 때문에 Certbot 명령은 certonly로 호출됩니다. 이렇게 하면 구성 파일을 수동으로 구성할 수 있습니다. 그렇지 않으면 Certbot이 Mastodon과 호환되지 않는 Nginx 환경에 대해 가정할 수 있습니다.

  1. sudo certbot certonly --nginx -d your_domain -d www.your_domain
Output
. . . IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem . . .

생성된 인증서 및 키 파일의 경로를 기록해 둡니다. 이것을 구성 파일에 추가해야 합니다. 원하는 텍스트 편집기로 구성 파일을 다시 엽니다.

  1. sudo nano /etc/nginx/sites-enabled/mastodon

이전에 포트 443에 대해 주석 처리한 listen 지시문을 기억하십시오. 이제 안전하게 주석을 제거할 수 있습니다. 이전에는 인증서가 없기 때문에 이러한 줄에 오류가 발생했습니다. Certbot을 통해 새로 생성된 인증서를 사용하면 이제 이 줄이 유효합니다.

또한 동일한 블록에서 ssl_certificatessl_certificate_key 지시문의 주석 처리를 제거하십시오. Certbot이 이전에 생성한 인증서의 파일 경로와 일치하는지 확인하십시오.

. . .
server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
  server_name your_domain www.your_domain;
. . . 
  # Uncomment these lines once you acquire a certificate:
   ssl_certificate 	/etc/letsencrypt/live/your_domain/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
. . .

파일을 저장하고 텍스트 편집기를 종료합니다. 다음 명령을 사용하여 Nginx 구성 파일이 유효한지 확인합니다.

  1. sudo nginx -t

마지막으로 Nginx를 다시 시작하여 변경 사항을 적용합니다.

  1. sudo systemctl reload nginx

이제 Mastodon 서버가 Nginx에서 제공되고 있지만 웹사이트를 확인하기 전에 일부 서비스를 설정해야 합니다.

5단계 - Mastodon 서비스 설정

Mastodon은 기능과 가동 시간을 유지하기 위해 mastodon-web, mastodon-sidekiqmastodon-streaming의 세 가지 시스템 서비스로 구성됩니다. 이를 통해 Mastodon은 웹 애플리케이션 및 비동기 작업 스케줄링을 항상 다시 시작하고 활성 상태로 유지할 수 있습니다. Mastodon은 이러한 서비스와 함께 제공되며 올바른 위치에 배치하고 활성화해야 합니다.

먼저 Mastodon 소스에서 서비스를 복사합니다.

  1. sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

이러한 파일은 mastodon을 사용자로 사용하는 것과 같이 기본값을 염두에 두고 모든 것이 설치되었다고 가정합니다. 이 자습서의 기본값이나 권장 사항과 다른 것을 사용한 경우 선호하는 텍스트 편집기에서 이러한 파일을 열고 변경해야 하는 사용자 이름이나 경로를 확인할 수 있습니다.

  1. sudo nano /etc/systemd/system/mastodon-*.service

이 자습서의 단계를 따랐다면 아무 것도 변경할 필요가 없습니다. 파일을 검사한 후 파일을 닫고 이러한 서비스 활성화를 진행합니다. 먼저 daemon-reload를 호출하여 다음을 인식해야 합니다.

  1. sudo systemctl daemon-reload

그런 다음 새로 인식된 서비스를 활성화할 수 있습니다.

  1. sudo systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
Created symlink /etc/systemd/system/multi-user.target.wants/mastodon-web.service → /etc/systemd/system/mastodon-web.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mastodon-sidekiq.service → /etc/systemd/system/mastodon-sidekiq.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mastodon-streaming.service → /etc/systemd/system/mastodon-streaming.service.

이제 Mastodon 설치가 완료되었습니다. https://your_domain으로 이동하여 브라우저에서 Mastodon을 열 수 있습니다. 브라우저에서 Mastodon을 처음 열면 페이지가 로드될 때까지 완료되지 않을 수 있는 일부 백엔드 초기화가 트리거되어 죄송합니다. 이 시나리오에서는 몇 초 동안 기다린 다음 Shift를 누른 상태에서 브라우저를 새로 고쳐 강제 새로 고침을 수행합니다. 이렇게 하면 문제가 해결되며 Mastodon이 처음 로드될 때만 발생합니다.

이전에 생성된 관리자 사용자 이름과 비밀번호를 사용하여 로그인하고 시작할 수 있습니다.

결론

이 튜토리얼에서는 자체 Mastodon 서버를 설정합니다. 여기에는 Mastodon에 특정한 모든 요구 사항 및 종속성과 함께 리버스 프록시를 사용하여 데이터베이스 및 웹 서버를 설정하는 작업이 포함되었습니다. Mastodon 내에서 첫 번째 관리자 계정을 만들기 전에 이메일, 스토리지 및 자산을 설정합니다. 마지막으로 Certbot 및 Let's Encrypt를 사용하여 SSL/TLS로 설정을 보호했습니다.

이제 새 Mastodon 서버에서 비밀번호와 관리 설정을 변경하는 것이 좋습니다. 새 Mastodon 인스턴스를 사용하고 해당 기능을 탐색하는 방법에 대해 알아보려면 DigitalOcean Marketplace 1-Click 자습서로 Mastodon을 설치하는 방법의 4~6단계를 확인하십시오.