如何在Ubuntu 18.04 LTS上使用Docker安装Mastodon社交网络

Mastodon是一个免费的,分散的开源社会网络。它是Twitter的替代产品。就像Twitter一样,人们可以互相关注,发布消息,图像和视频。但是与Twitter不同,该内容没有中央存储或授权。

相反,Mastodon在数千个不同的服务器上运行,每个服务器运行社区的各个成员。在一台服务器上注册的用户可以轻松地连接到另一台网络上的用户,并可以跨实例相互跟踪。

任何人都可以安装自己的Mastodon服务器实例。本教程将教您如何使用Docker在具有Ubuntu 18.04的服务器上设置Mastodon实例。

先决条件

  • 基于Ubuntu 18.04的服务器,具有非root用户sudo用户。
  • 确保系统是最新的。
    $ sudo apt update
    $ sudo apt upgrade
    
  • Mastodon将电子邮件通知发送给用户。使它起作用的一种方法是设置自己的邮件服务器。您可以在要安装乳齿象的同一台服务器上进行安装,也可以在另一台服务器上进行安装。这样做超出了本指南的范围。我们建议您使用Mailgun,Sendgrid,Amazon SES或Sparkpost等第三方交易邮件服务。指南中的说明将使用Mailgun作为SMTP提供程序。
  • 确保您有一个指向服务器的域名。对于本教程,我们将使用example.com作为域。

第1步-安装依赖项

在安装Mastodon之前,我们需要确保我们的服务器具有某些需要正确安装的软件。运行以下命令以安装依赖项。

$ sudo apt update
$ sudo apt install ca-certificates curl ufw apt-transport-https software-properties-common git -y

上面的某些软件可能已为您预装。

由于我们安装了Git,因此我们应该在继续之前进行配置。

$ git config --global user.name "Your Name" 
$ git config --global user.email "youremail@domain.com"

第2步-配置防火墙

在上一步中,我们安装了ufw(不复杂的防火墙)。在继续安装Mastodon之前,我们需要对其进行配置。

启用S​​SH和我们刚刚创建的端口,以免被锁定。

$ sudo ufw allow OpenSSH

启用ufw防火墙。

$ sudo ufw enable

我们还需要启用http和https才能使Mastodon运行。

$ sudo ufw allow http
$ sudo ufw allow https

检查防火墙的状态。

$ sudo ufw status

您应该看到类似以下的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             

第3步-安装Docker

将Docker的GPG密钥添加到您的系统。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证下载密钥的指纹。

$ sudo apt-key fingerprint 0EBFCD88

您应该看到类似以下的输出。

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

添加Docker存储库。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新您的软件包数据库。

$ sudo apt update

安装Docker-CE。CE是Docker的社区版。

$ sudo apt install docker-ce -y

现在应该安装Docker。检查它是否正在运行。

$ 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 Tue 2019-10-22 18:26:29 UTC; 25min ago
     Docs: https://docs.docker.com
 Main PID: 3574 (dockerd)
    Tasks: 8
   CGroup: /system.slice/docker.service
   ??3574 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

q退出。

将您的受限Linux用户帐户添加到docker组,以便您无需sudo即可运行docker。

sudo usermod -aG docker $USER

$ USER变量将选择当前登录的用户并将其添加到docker组。如果您当前尚未使用该用户名登录,请用实际的用户名替换$ USER

切换到我们刚刚添加的用户。即使您已经登录,您仍然需要再次切换到它以重新加载权限。

$ su - ${USER}

通过运行内置的“ Hello World”程序,检查一切是否正常。

$ docker run hello-world

您应该看到以下输出,它将告诉Docker已安装并正常工作。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

步骤4-安装Docker Compose

可以跳过此步骤并继续,但是安装Docker Compose将使Mastodon的运行变得更加容易,特别是如果您想在多台服务器上进行操作。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

在撰写本教程时,1.24.1是Docker Compose的当前稳定版本。您可以从其Github页面上检查最新版本。

将可执行权限应用于docker compose二进制文件。

$ sudo chmod +x /usr/local/bin/docker-compose

将命令完成添加到Docker Compose。

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

验证安装是否成功。

$ docker-compose --version

它将输出以下输出。

docker-compose version 1.24.1, build 4667896b

步骤5-安装Mastodon

将Mastodon的存储库克隆到您的服务器。

$ git clone https://github.com/tootsuite/mastodon

导航到我们刚刚将文件复制到的目录。

$ cd mastodon

Mastodon附带了一个示例配置文件。我们需要重命名它以使Mastodon正常工作。

$ cp .env.production.sample .env.production

我们需要为我们的配置文件生成密钥。但是在此之前,我们需要构建Docker映像。

$ docker-compose build

现在已经成功构建了映像,您需要创建配置Mastodon所需的几个密钥。

首先生成SECRET_KEY_BASE

$ SECRET_KEY_BASE=$(docker-compose run --rm web bundle exec rake secret)

将以上密钥插入配置文件中。

$ sed -i -e "s/SECRET_KEY_BASE=/&${SECRET_KEY_BASE}/" .env.production

生成OTP_SECRET并将其插入配置文件。

$ OTP_SECRET=$(docker-compose run --rm web bundle exec rake secret)
$ sed -i -e "s/OTP_SECRET=/&${OTP_SECRET}/" .env.production

生成PAPERCLIP_SECRET并将其插入配置文件。

$ PAPERCLIP_SECRET=$(docker-compose run --rm web bundle exec rake secret)
$ sed -i -e "s/PAPERCLIP_SECRET=/&${PAPERCLIP_SECRET}/" .env.production

生成VAPID_PRIVATE_KEYVAPID_PUBLIC_KEY的值。

$ docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key

打开.env.production文件。

$ sudo nano ./.env.production

在文件中搜索VAPID_PRIVATE_KEYVAPID_PUBLIC_KEY,然后复制上一条命令的输出。

找到LOCAL_DOMAIN变量,并将其值从example.com更改为为Mastodon安装选择的域名。

输入从SMTP提供程序获得的值。

SMTP_SERVER = smtp.mailgun.org
SMTP_PORT = 587
SMTP_LOGIN = username
SMTP_PASSWORD = password
SMTP_FROM_ADDRESS = notifications@example.com

完成后,按Ctrl + X并保存文件。

您需要再次构建Docker映像以实现上述所有更改。

$ docker-compose build

设置数据库。

$ docker-compose run --rm web rails db:migrate

预编译Mastodon的资产。

$ docker-compose run --rm web rails assets:precompile

运行以下命令以执行容器。

$ docker-compose up -d

第6步-安装和配置Nginx

本指南的下一步是安装Nginx服务器,以使Mastodon的网站正常工作。

运行以下命令以安装Nginx服务器。

$ sudo apt install nginx -y

Nginx带有配置的默认站点。删除它。

$ sudo rm /etc/nginx/sites-available/default

另外,删除默认站点的符号链接。

$ sudo rm /etc/nginx/sites-enabled/default

为Mastodon创建一个Nginx配置文件。

$ sudo touch /etc/nginx/sites-available/mastodon

为Mastodon的配置创建符号链接。

$ sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

在Nano编辑器中打开Mastodon的配置。(您可以选择所需的任何编辑器)

$ sudo nano /etc/nginx/sites-available/mastodon

将以下文本复制粘贴到其中。

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

server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  root /home/user/mastodon/public;
  # Useful for Let's Encrypt
  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 example.com;

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

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

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/user/mastodon/public;

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

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

  location / {
    try_files $uri @proxy;
  }

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

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

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

    tcp_nodelay on;
  }

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

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

    tcp_nodelay on;
  }

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

上面的配置假定您使用“让我们加密”作为SSL提供程序。如果使用其他SSL服务,则需要编辑密钥的位置,并跳过本教程的下一部分。

步骤7-安装和配置让我们加密

确保Nginx已停止。

$ sudo systemctl stop nginx

添加Certbot存储库。

$ sudo add-apt-repository ppa:certbot/certbot

更新系统软件包。

$ sudo apt update

安装Certbot工具。

$ sudo apt install certbot

您需要创建两次证书-一次使用TLS SNI方法创建,第二次使用webroot方法创建。

sudo certbot certonly --standalone -d example.com

现在,使用webroot方法创建证书。这将需要Nginx才能运行。

sudo systemctl start nginx
sudo certbot certonly --webroot -d example.com -w /home/user/mastodon/public/

该工具将询问您是否要保留证书或续订证书。选择续订选项。

设置自动更新SSL证书

让我们加密证书的有效期为90天。之后,您需要再次更新它们。为此,您可以创建一个cron作业以自动为您完成。

创建一个cron作业。

$ sudo nano /etc/cron.daily/letsencrypt-renew

将以下内容复制并粘贴到文件中。

#!/usr/bin/env bash
certbot renew
systemctl reload nginx

通过按Ctrl + X并在出现提示时输入Y来保存并退出文件。

使脚本可执行,然后重新启动cron守护程序,以便我们的脚本每天运行。

$ sudo chmod +x /etc/cron.daily/letsencrypt-renew
$ sudo systemctl restart cron

步骤8-创建您的Mastodon用户

在浏览器中访问您的mastodon网站。您应该看到以下屏幕。

添加Mastodon用户

输入所需的用户名,电子邮件地址和密码,以在Mastodon实例上创建一个新帐户。您需要与其他Mastodon服务器的用户连接的完整用户名是howtoforge@ example.com。

Mastodon将向您发送确认邮件以验证注册。

您也可以手动确认注册。为此,您将需要SSH进入您的Docker实例。列出所有当前的Docker实例。

$ docker ps

您将看到类似以下的输出。

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                  PORTS                      NAMES
32f2c4cd2598        tootsuite/mastodon    "/tini -- bash -c 'r…"   16 hours ago        Up 16 hours (healthy)   127.0.0.1:3000->3000/tcp   mastodon_web_1
76beca2b858d        tootsuite/mastodon    "/tini -- node ./str…"   16 hours ago        Up 16 hours (healthy)   127.0.0.1:4000->4000/tcp   mastodon_streaming_1
08f7a42b75ac        tootsuite/mastodon    "/tini -- bundle exe…"   16 hours ago        Up 16 hours                                        mastodon_sidekiq_1
bacaa8c09a85        redis:5.0-alpine      "docker-entrypoint.s…"   17 hours ago        Up 17 hours (healthy)                              mastodon_redis_1
62e9b2175a53        postgres:9.6-alpine   "docker-entrypoint.s…"   17 hours ago        Up 17 hours (healthy)                              mastodon_db_1

要进行所需的更改,我们需要访问流容器。SSH进入mastodon_streaming_1容器。

$ docker exec -it mastodon_streaming_1 /bin/bash

这将在您的容器内启动一个Bash shell。

运行以下命令以批准新创建的用户名。

mastodon@76beca2b858d:~$ RAILS_ENV=production bin/tootctl accounts modify howtoforge --confirm

运行以下命令以使您新创建的帐户成为管理员。

mastodon@76beca2b858d:~$ RAILS_ENV=production bin/tootctl accounts modify howtoforge --role admin

退出容器。

mastodon@76beca2b858d:~$ exit

使用用户名和密码登录到您的实例,将看到以下屏幕。

Mastodon的第一步

单击“开始吧”,您将进入以下页面,使您了解Mastodon的工作原理。

Mastodon如何运作

回复-提升-收藏

单击完成教程,与Mastodon的主页打招呼,您可以在其中开始发布自己的心声。

玛士顿仪表板

您可以从“首选项”菜单访问设置和管理区域。

步骤9-维护

要查看Mastodon实例的性能和日志,请转到https://example.com/sidekiq/

在这里,您可以查看与Mastodon实例相关的各种过程和计划任务的列表。您还可以在“失效”或“重试”部分下检查失败的任务。它还会告诉您实例的内存使用情况。

乳齿象维护

您可以从https://example.com/pghero/检查实例数据库的运行状况

菲格罗

您可以执行数据库维护,运行SQL查询以及删除未使用的索引。

如果您的站点由于某种原因根本无法加载,则可以检查Docker生成的日志。

为此,请先关闭容器。

$ docker-compose down

在附加状态下运行Docker compose,以便您可以查看每个容器生成的日志。

$ docker-compose up

步骤10升级您的Mastodon

切换到您的mastodon目录。

$ cd /home/user/mastdon

从资源库下载更新

$ git fetch

如果由于某种原因更改了docker-compose.yml文件,则需要首先运行以下命令。

$ git status

这将告诉您对其所做的所有更改。如果文件被修改,则先存储您的更改。

$ git stash

签出最新的Mastodon版本。从发布页面检查最新版本。

$ git checkout <version/tag>

如果您之前运行了git stash,请运行以下命令将更改重做到docker-compose.yml文件。

$ git stash pop

构建泊坞窗映像。

$ docker-compose build

执行数据库迁移。

$ docker-compose run --rm web rails db:migrate

预编译Mastodon的资产。

$ docker-compose run --rm web rails assets:precompile

运行以下命令以执行容器。

$ docker-compose up -d

这就是本教程的全部内容。要了解有关Mastodon的更多信息,请遵循他们的文档

原文:https://www.howtoforge.com/how-to-install-mastodon-social-network-with-docker-on-ubuntu-1804/

发表评论
  • 发表评论
  • 评论列表
     
     

    为你推荐
    Ta的个人站点

    Ubar发布文章114篇

    与他人进行分享是一种快乐!当你的分享可以帮助到他们,会感觉更快乐!