如何在Ubuntu 18.04 LTS上使用Docker安装Mastodon社交网络
如何在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之前,我们需要对其进行配置。
启用SSH和我们刚刚创建的端口,以免被锁定。
$ 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_KEY和VAPID_PUBLIC_KEY的值。
$ docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key
打开.env.production文件。
$ sudo nano ./.env.production
在文件中搜索VAPID_PRIVATE_KEY和VAPID_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服务器的用户连接的完整用户名是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的主页打招呼,您可以在其中开始发布自己的心声。
您可以从“首选项”菜单访问设置和管理区域。
步骤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/
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/32236.html