Sourcegraph Docker安装和配置Azure AD登录

Sourcegraph

暂时用systemd来管理Docker service。因为我们要用Nginx来做反代,所有端口都监听本地即可。

Nginx SSL卸载

证书签发的问题就不细讲了,以certbot自动签发为例。涉及的文件参见oh-my-nginx

创建管理员

打开sourcegraph.example.com,创建一个管理员账号。如果你之后想合并这个账号和Azure AD账号,可以使用你的sAMAccountName作为用户名,并且添加一个userPrincipleName作为邮箱地址。

设置Azure AD登录

那这里我们还是用OpenID Connect登录流程。首先去Azure AD创建新应用程序,callback URL填写:

  • https://sourcegraph.example.com/.auth/callback

拿到:

  • tenant ID
  • client ID
  • client secret

然后打开Sourcegraph的管理控制台(用户名随便填,密码在第一次启动的时候log会打出来),填入:

这里需要注意的是externalURL要准确填写。完成以后重启一下Sourcegraph以使externalURL生效。

添加Azure DevOps的Git repo

在External Services里面添加一个Single Git repositories,填入:

注意Sourcegraph目前不支持project name中出现空格,详见sourcegraph/issues/2867

向ASA导入证书

准备一个私钥(.pem)和对应的证书(.crt)文件。注意证书里面只能有私钥对应的那个证书,不应该有证书链。需要证书链的话单独放一个文件里面。

先用OpenSSL把它转成PKCS#12格式。

输入任意密码两次。如果是用ASDM导入证书的话,就可以直接选中生成的pfx文件导入了。如果要从命令行导入的话继续往下看。

然后Base64一下:

导入ASA:

换上新的证书:

删掉原来的证书:

然后记得把根证书导入一下。ASDM的话在Device Management -> Certificate Management -> CA Certificates里面导入PEM格式的证书链即可,会自动应用上。

在systemd unit里执行需要TTY的程序

总有那么几个程序一定要用ncurses在终端画窗口,即使它完全可以在后台运行。这时候我们就需要欺骗它一下,假装它在一个TTY里面运行。有两点需要设置:

  • 设置环境变量TERM=linux
  • 用script程序来假装外面有个TTY

例如一个简单的rtorrent (<0.9.7) systemd unit设置:


注:rtorrent 0.9.7开始可以用-o system.daemon.set=true,所以不需要这么麻烦: