使用docker部署Firefox auth server与sync server

发布于 2022-12-01  908 次阅读


Chrome? Who?

关于Firexfox auth server与sync server

最近打算把主力浏览器从Chrome换成Firefox,主要是因为Manifest V3,既然Google不想让我们用adblock,那我不用Chrome就是了。

以前对Firefox的印象是有点慢,不过就算现在依旧慢,总好过看广告是吧。

既然要迁移到Firefox,反正都是开源的,也有现成的文档,干脆就自己跑auth和sync呗。其实是也没什么必要,Mozilla怎么着都比Google值得信任,不过谁让我爱折腾呢。

现成的文档有不少:

Run your own Sync-1.5 Server

https://mozilla-services.readthedocs.io/en/latest/howtos/run-fxa.html

Development Setup

新的sync server

不过似乎没看到docker相关的文档,有一些相关的讨论和repo,但似乎都比较老或者只包含一个,比如:

Self-Host Your Browser Data

另外有一个让我觉得很奇怪的事情,Auth Server的fxa是mozilla账户下的repo,Sync Server的Syncstorage-rs却属于mozilla-services账户。mozilla的账户里面也有不少不知道用来干啥的或者看说明有点重复的repo,总感觉管理有些混乱。

搜索过后发现sync官方在docker hub有镜像,但是没有相关文档。Syncstorage-rs repo中有docker-compose模板,修改之后可以用。fxa的官方repo实在是十分混乱和复杂,一番尝试后我选择放弃。

fxa有很多组件,具体可见additional-docs。docker hub上有一些很老的镜像,但现在只有fxa一个repo了,官方也没有提供docker镜像,在_dev文件夹下有一些docker相关的文件,但几乎没有文档,似乎也没有维护。

部署fxa与sync

我最后选择了fxa-selfhosting这个项目来部署fxa,虽然更新不频繁,但这个项目至少有在跟进官方repo。

首先用git clone https://github.com/jackyzy823/fxa-selfhosting.git拉取代码。

根据github页面Installation的说明创建DNS记录,这里并没有提到所有域名,所有需要的域名在config.yml.sample的domain中都有,如果不需要某一个服务,可以跳过对应的域名。

我因为想要用我现有的Nginx来反代服务,不想另外运行Nginx,这里先配置Nginx反代并签发证书。反代的配置在/example文件夹下有模板。

配置完反代后,把config模板config.yml.sample复制到一个新文件config.yml并根据需要修改。我发现smtp不能用STARTTLS,不然会报错error:1408F10B:SSL routines:ssl3_get_record:wrong version number。建议使用465端口,smtp_secure改为true。

运行init.sh,并且每次修改config.yml后都需要重新运行该脚本。把脚本最后输出的内容复制下来保存,这是设置firefox需要的信息。

脚本运行后进入./dest文件夹,检查里面的docker-compose.yml,如果没有问题就可以用docker-compose up -d启动。

启动后访问设置的根域名,看到登录页面就代表成功了。可能会出现502错误,可以尝试停止并删除nginx容器,然后重新用docker-compose up -d启动nginx,或者可以给channelserver部分手动加上container_name: channelserver并向nginx块中的depends_on加上channelserver。

使用正确的channelserver镜像

目前最新的channelserver镜像有bug,错误为:

channelserver_1                     | /app/bin/channelserver: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /app/bin/channelserver)
channelserver_1                     | /app/bin/channelserver: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /app/bin/channelserver)

使用mozilla/channelserver@sha256:01f9251637cc3679b8cf31493569a79a27b41f952d4eb3d5306e1ee8d9d3feea避免这个问题。

使用IOS客户端

IOS客户端没有被默认加入oauth列表,需要手动在template添加。

在/_init/auth/oauthserver-prod.tmpl.yml中加入:

  - id: 1b1a3e44c54fbb58
    name: Client iOS
    hashedSecret: 88716ed2927c96cdc0fb7efe57d5f124fb4161066c1ff7f4263069822256ec66
    redirectUri: #@ "https://{content}.{domain_name}/oauth/success/1b1a3e44c54fbb58".format(content=data.values.domain.content,domain_name=data.values.domain.name)
    imageUri: ''
    publicClient: true
    canGrant: true
    termsUri: ''
    privacyUri: ''
    trusted: true
    allowedScopes: https://identity.mozilla.com/apps/oldsync https://identity.mozilla.com/tokens/session

重新运行init.sh。


Sup