SMF2 转换与 Rake 到 S3 的帮助

我搜索过,但找不到关于如何将文件从 DigitalOcean 迁移到 S3 的基础概述。几个月前,我已经成功为新的上传和备份配置了 S3。现在我想将我们的上传文件(约 1.4GB)完整迁移到 S3。

我们的系统从一开始就是从 SMF2 转换过来的。目前我们有两个上传文件夹:一个位于 SMF2 的根目录,另一个位于 /var/discourse。SMF2 目录的大小为 2.8GB。我猜测这可能涉及两个步骤?我是否需要分别执行从 SMF2 目录和从 /var/discourse 目录迁移的操作?

我发现了 rake to s3 相关工具,但除了看到很多人讨论遇到的错误以及纠正建议外,找不到任何指南。是否有现成的指南可供参考?

请阅读这篇文章,它应能指导你如何设置任务:

你应重点查看 hooks 部分的配置,并使用环境变量来设置存储桶,以避免你已了解的相关问题。

太好了!谢谢!

我只对 CDN 不太了解。我看到可以使用 Amazon CloudFront。我猜在之前的 S3 设置步骤中并没有配置它。我会查找相关指南来了解如何设置它。

您可以使用您的上传存储桶作为源来设置 CloudFront,一旦设置完成,即可将其作为 S3 CDN 链接。只需完成这些步骤即可。

谢谢。我按照这个视频完成了 Cloudfront 的设置:

我正在运行 rake posts:rebake。共有 8.4 万篇帖子,所以需要一些时间。

哎呀……正在尝试重新启动……

root@discourse-app:/var/www/discourse# rake posts:rebake
正在为 ‘default’ 重新生成帖子 Markdown
10027 / 83358 ( 12.0%)/usr/local/bin/rake: 第 2 行:959 被终止 RAILS_ENV=production sudo -H -E -u discourse bundle exec bin/rake “$@”

又发生了……有什么建议吗?

root@discourse-app:/var/www/discourse# rake posts:rebake
正在为 ‘default’ 重新烘焙帖子 Markdown
12901 / 83359 ( 15.5%)/usr/local/bin/rake: line 2: 2569 Killed RAILS_ENV=production sudo -H -E -u discourse bundle exec bin/rake “$@”

有些帖子现在正在从 Cloudfront 拉取内容,所以至少这部分算是有点作用了。

看起来这种情况在我没有重新烘焙的情况下就发生了?Sidekiq 正在拼命抓取热链接的图片。

好的,网站已重建,S3 设置步骤也已按说明完成。

现在所有内容应该都是从 S3 加载的。那我该如何验证这一点呢?我现在可以删除 droplet 上的旧 uploads 目录以释放空间吗?

我显然做错了什么。我现在占用的磁盘空间比以前多了。

上传到 S3 的操作应在重建过程中进行。您应该能够在 S3 存储桶中浏览网站资源,并且所有网站资源都应从提供的 S3 或 CDN 链接加载。如果无法正常工作,那肯定是您的配置方式存在问题。您是否收到任何错误信息?

我怀疑当时可能出了问题。我的重建过程耗时太短,不足以在期间上传几 GB 的数据。

编辑:
几个月前的所有上传都已直接前往 S3。我想迁移的是切换到 S3 之前的遗留数据。

请记住,服务器的处理速度比您的宽带连接快几个数量级。从您的主机上传图片到 S3 不应超过几分钟。但您应仔细查看重建日志,以确认上传是否成功。

或者,您可以运行 ./discourse-doctor 生成日志以供审查。

这是脚本的输出结果:

我注意到的唯一问题是 DNS 部分中加粗标记的内容。

> root@discourse:/var/discourse# ./discourse-doctor
> DISCOURSE DOCTOR Thu May 14 11:35:17 UTC 2020
> OS: Linux discourse 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
> 
> 
> Found containers/app.yml
> 
> ==================== YML SETTINGS ====================
> DISCOURSE_HOSTNAME=
> SMTP_ADDRESS=
> DEVELOPER_EMAILS=
> SMTP_PASSWORD=
> SMTP_PORT=
> SMTP_USER_NAME=
> LETSENCRYPT_ACCOUNT_EMAIL=
> 
> ==================== DOCKER INFO ====================
> DOCKER VERSION: Docker version 18.09.6, build 481bc77
> 
> DOCKER PROCESSES (docker ps -a)
> 
> CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                      NAMES
> db900fc77ebe        local_discourse/app   "/sbin/boot"        15 hours ago        Up 15 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
> 
> db900fc77ebe        local_discourse/app   "/sbin/boot"        15 hours ago        Up 15 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
> 
> Discourse container app is running
> 
> 
> ==================== PLUGINS ====================
>             exec: {cd: $home/plugins, cmd: ['git clone https://github.com/discourse/docker_manager.git', 'git clone https://github.com/procourse/procourse-static-pages.git', 'git clone https://github.com/discourse/discourse-bbcode.git', 'git clone https://github.com/discourse/discourse-adplugin.git']}
> 
> No non-official plugins detected.
> 
> See https://github.com/discourse/discourse/blob/master/lib/plugin/metadata.rb for the official list.
> 
> ========================================
> Discourse version at : NOT FOUND
> Discourse version at localhost: Discourse 2.5.0.beta4
**> ==================== DNS PROBLEM ====================**
**> This server reports Discourse 2.5.0.beta4 , but  reports NOT FOUND.**
**> This suggests that you have a DNS problem or that an intermediate proxy is to blame.**
**> If you are using Cloudflare, or a CDN, it may be improperly configured.**
> 
> 
> ==================== MEMORY INFORMATION ====================
> RAM (MB): 1008
> 
>               total        used        free      shared  buff/cache   available
> Mem:            985         636          69         121         279          88
> Swap:          2047         775        1272
> 
> ==================== DISK SPACE CHECK ====================
> ---------- OS Disk Space ----------
> Filesystem      Size  Used Avail Use% Mounted on
> /dev/vda1        25G   20G  4.8G  81% /
> 
> ---------- Container Disk Space ----------
> Filesystem      Size  Used Avail Use% Mounted on
> overlay          25G   20G  4.8G  81% /
> /dev/vda1        25G   20G  4.8G  81% /shared
> /dev/vda1        25G   20G  4.8G  81% /var/log
> 
> ==================== DISK INFORMATION ====================
> Disk /dev/vda: 25 GiB, 26843545600 bytes, 52428800 sectors
> Units: sectors of 1 * 512 = 512 bytes
> Sector size (logical/physical): 512 bytes / 512 bytes
> I/O size (minimum/optimal): 512 bytes / 512 bytes
> Disklabel type: gpt
> Disk identifier: 02CBFCD2-7495-4A08-A11B-28E7D3872FAA
> 
> Device      Start      End  Sectors  Size Type
> /dev/vda1  227328 52428766 52201439 24.9G Linux filesystem
> /dev/vda14   2048    10239     8192    4M BIOS boot
> /dev/vda15  10240   227327   217088  106M Microsoft basic data
> 
> Partition table entries are not in disk order.
> 
> ==================== END DISK INFORMATION ====================
> 
> ==================== MAIL TEST ====================
> For a robust test, get an address from http://www.mail-tester.com/
> Or just send a test message to yourself.
> Email address for mail test? ('n' to skip) []: n
> Mail test skipped.
> Replacing: SMTP_PASSWORD
> Replacing: LETSENCRYPT_ACCOUNT_EMAIL
> Replacing: DEVELOPER_EMAILS
> Replacing: DISCOURSE_DB_PASSWORD
> Replacing: Sending mail to
> 
> ==================== DONE! ====================
> Would you like to serve a publicly available version of this file? (Y/n)n
> root@discourse:/var/discourse#

以下是 app.yml 中的相关部分:

> 
>     DISCOURSE_USE_S3: true
>     DISCOURSE_S3_REGION: us-east-1
>     DISCOURSE_S3_ACCESS_KEY_ID: <MY KEY>
>     DISCOURSE_S3_SECRET_ACCESS_KEY: <MY SECRET KEY>
>     DISCOURSE_S3_CDN_URL: 'https://d2hneyr8lp58j4.cloudfront.net'
>     DISCOURSE_S3_BUCKET: brcuploads
>     DISCOURSE_S3_BACKUP_BUCKET: bcruploads-backups
>     DISCOURSE_BACKUP_LOCATION: s3

这是否意味着我在 DigitalOcean 上设置的 DNS 有误?我已经添加了来自 Cloudfront 的 CNAME 记录。

哇,这没什么帮助。你选择了 n

你能生成一个公开版本吗?你可以在私信中分享链接,我或许能验证迁移到 S3 是否因某种原因成功或失败。

我会私信发给你网址。