准备工作

最近把服务器后端面板由aapanel换到了1panel,面板对于网站数据的备份功能深深吸引了我,恰好手上有Oracle免费账户,恰好免费帐户又有20GB的免费存储桶,好上加好的是兼容s3协议,美中不足是1panel面板自带的s3备份设置不支持Oracle存储桶,本篇文章就围绕以“曲线救国”的方式挂载Oracle存储桶,使1panel备份的内容能够自动备份到Oracle存储桶【生命在于折腾、免费的就是香、20GB永久免费空间不比AWS的5GB空间好吗】

必要的软件

首先本次是以Ubuntu-server 20.04系统为基础做的

安装rclone:curl https://rclone.org/install.sh | sudo bash

安装fuse、fuse3

apt install fuse
apt install fuse3

必要的资料

  • 打开Oracle后台面板,点击左上角菜单,选择存储--存储桶,进入存储桶管理面板新建一个存储桶,名称改不改都行,默认存储层选择标准,加密选择使用 Oracle 管理的密钥进行加密,其余默认即可

  • 点击进入刚创建的存储桶,打开你的记事本记录以下内容:存储桶名称名称空间OCID,查看你的网址末尾一段,会看到类似【objects?region=ap-sydney-1】这样的字段,把=号后面的值例如ap-sydney-1复制下来记录好,这是区域ID,将会用到它

  • 点击右上角你的头像,进入我的概要信息,然后左下角点击客户密钥,点击生成密钥,名称任意取,把生成的密钥值【一般称作Secret Key】复制下来记录好,此时关闭密钥页面会看到多了一个你刚才生成的密钥,鼠标移动到访问密钥上,把弹出来的访问密钥值【一般称作Access Key ID】复制下来记录好

  • 继续点击左下角的API密钥,点击添加API密钥下载私钥文件后点击添加,你将会看到类似下面这样的提示信息,不要犹豫,复制下来记录好【不复制也可以,这段信息可以重新查看】把最末尾一行修改成:key_file=/root/.oci/oracle.pem

[DEFAULT]
user=ocid1.user.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
fingerprint=4e:b2:b4:ee:26:f1:3d:1a:5e:d6:10:18:0c:0d:57:71
tenancy=ocid1.tenancy.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
region=ap-sydney-1
key_file=这里按照上文要求修改
  • 接下来回到服务器段操作,把刚才下载的私钥文件修改名称为oracle.pem并且上传到服务器的/root/.oci/文件夹下,文件夹不存在自己创建即可mkdir /root/.oci在此文件夹下新建一个名为config的文件nano config,如果出错请安装nanoapt install nano -y,把上方修改好的文本内容直接粘贴到config文件中,按下ctrl+x,按y再按回车保存文件修改

rclone挂载Oracle存储桶

以下教程根据rclone官网对于Oracle存储桶挂载文档的说明进行配置https://rclone.org/oracleobjectstorage/

  • 回到root用户根目录,执行rclone config,输入n新建一个连接,提示Enter name for new remote.直接输入自定义名称即可,例如oracle

  • 第二步选择存储,找到Oracle Cloud Infrastructure Object Storage这个存储的编号,当前教程中编号为37,如果有发生编号改变应该也在37号附近,输入37按下回车

  • 第三步选择认证方式,这里选择2即可

Option provider.
Choose your Auth Provider
Choose a number from below, or type in your own string value.
Press Enter for the default (env_auth).
 1 / automatically pickup the credentials from runtime(env), first one to provide auth wins
   \ (env_auth)
   / use an OCI user and an API key for authentication.
 2 | you’ll need to put in a config file your tenancy OCID, user OCID, region, the path, fingerprint to an API key.
   | https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm
   \ (user_principal_auth)
   / use instance principals to authorize an instance to make API calls. 
 3 | each instance has its own identity, and authenticates using the certificates that are read from instance metadata. 
   | https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/callingservicesfrominstances.htm
   \ (instance_principal_auth)
 4 / use resource principals to make API calls
   \ (resource_principal_auth)
 5 / no credentials needed, this is typically for reading public buckets
   \ (no_auth)
  • 第四步输入你的名称空间

  • 第五步输入你的OCID

  • 第六步输入你的区域ID

  • 第七步留空直接回车,这是要求输入连接所需的api地址,rclone会根据区域ID自动匹配

  • 第八步输入你的config文件路径,按照教程走,文件路径应该是/root/.oci/config

  • 第九步直接回车即可

  • 第十步直接回车

  • 第十一步确认你的连接信息,一般输入y按下回车即可,最后这步会列出我们以上输入的内容,看到类似下图这样的输出就是配置成功了

最后,可以在Oracle后台面板随意上传一个文件到存储桶中,回到Linux执行rclone ls oracle:这里填写你的存储桶名称【这里的oracle是刚才创建rclone连接的时候设置的名称,下一步挂载到本地磁盘也会再次看到这段代码】,如果看到有刚才上传的文件名输出返回就证明连接成功;最后可以用以下代码把存储桶挂载到Linux本地,

rclone mount oracle:你的存储桶名称 /mnt/oracle/ --allow-other --allow-non-empty --vfs-cache-mode writes --daemon --umask 000
参数解释:
/mnt/oracle/  挂载到本地的此路径
--allow-other 允许其他用户访问复制的文件
--allow-non-empty 允许复制非空目录
--vfs-cache-mode writes 设置 VFS 缓存模式为写入
--daemon 将 Rclone 运行为守护进程
--umask 000 设置文件的权限掩码为 000

最后打开1panel面板,进入面板设置--备份账号,编辑备份目录,例如修改成/mnt/oracle,然后创建一个计划任务,选择备份到服务器磁盘并且执行任务,稍等一会【一般几秒钟时间】即可看到备份成功,打开Oracle存储桶刷新一下,也能在Oracle后台面板看到备份的文件

进阶操作

这多一步的操作目的是为了文件多地备份,如果你设置了其他的备份方式那么可以不需要继续往下看,如果你拥有一台synology nas设备同时也跟我想法一样希望备份到Oracle存储桶的文件自动同步到nas上那就接着往下看

基础思路

通过本地部署alist且alist挂载Oracle存储桶,synology上安装cloud sync程序通过webdav方式同步alist挂载的Oracle存储桶【是的,cloud sync配置Oracle存储桶似乎不太行】

基础的设备架构

当然可以选择在synology内安装docker app通过docker部署alist效果也是一样的,具体的部署不做额外说明,说说alist如何挂载Oracle存储桶

alist挂载Oracle存储桶

  • 驱动:对象存储

  • 访问密钥:填写Access Key ID

  • 安全访问密钥:填写Secret Key

  • 存储桶:填写名称空间

  • 地区:填写区域ID

  • Endpoint:填写Oracle对应区域的API链接,参考下方不同区域链接查找,也可以打开Oracle官方文档查看【若是未来更新区域或者API失效的情况】https://docs.oracle.com/en-us/iaas/api/#/en/s3objectstorage/20160918/

    • 你所需要的区域API就是上方教程要你复制的区域ID,例如我的是ap-sydney-1,就是对应下方第11条API,具体区域可以查看API链接末尾类似ap-sydney-1.oraclecloud.com这样的信息

    • alist中区域API填写不需要加https,例如我的API应该填写compat.objectstorage.ap-sydney-1.oraclecloud.com这样的格式即可,从compat开始复制到末尾就是你所需要填写的

    • 在API末尾需要加上你的存储桶名称,例如我的存储桶是默认名称bucket-20220804-1007,那么完整的Endpoint应该是如下compat.objectstorage.ap-sydney-1.oraclecloud.com/bucket-20220804-1007,注意API与存储桶名称之间加上/符号

API Endpoints:

https://<object_storage_namespace>.compat.objectstorage.af-johannesburg-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-chuncheon-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-hyderabad-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-melbourne-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-mumbai-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-osaka-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-seoul-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-singapore-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-sydney-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ap-tokyo-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ca-montreal-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.ca-toronto-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-amsterdam-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-frankfurt-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-jovanovac-1.oraclecloud20.com
https://<object_storage_namespace>.compat.objectstorage.eu-madrid-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-marseille-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-milan-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-paris-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-stockholm-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.eu-zurich-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.il-jerusalem-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.me-abudhabi-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.me-dubai-
https://<object_storage_namespace>.compat.objectstorage.me-jeddah-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.mx-monterrey-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.mx-queretaro-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.sa-bogota-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.sa-santiago-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.sa-saopaulo-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.sa-valparaiso-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.sa-vinhedo-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.uk-cardiff-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.uk-london-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.us-ashburn-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.us-chicago-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.us-phoenix-1.oraclecloud.com
https://<object_storage_namespace>.compat.objectstorage.us-sanjose-1.oraclecloud.com

同步操作

打开synology设备的cloud sync程序,选择webdav进行添加,服务器地址即是你的alist地址,末尾加上/dav即是alist定义的webdav链接,进阶一点可以多加上路径参数,例如我只想同步Oracle存储桶的内容,那么我增加一些路径用作限制,账户和密码即是alist管理后台的账号

最后是同步的效果,可以检查到完整的备份数据已经自动同步到本地文件夹

写在最后

Q:为什么要搞这么麻烦?

A:Oracle最近几年开放申请免费使用的账户后也在大规模进行封号,万一备份数据还在存储桶账号给封禁了那就很麻烦了

Q:为什么不用其他的备份方式?

A:Oracle存储桶免费空间足够大、其他的1panel支持的备份大多需要额外花钱,sftp或者webdav方式直接备份到synology也可以,但因为服务器和synology设备在不同国家,跨国际传输速度太慢

Q:还有什么问题请在页面评论区留言,有空会一一答复