Zhen

self-hosting is good

2020-11-26

最近折腾整理了一下服务器上自建的服务,顺便给添加上了 https,下面简单记录一下,推荐自建服务的同时,也大致给同样想要折腾的人提供一点记录。

密码管理服务

自从 2009 年 CSDN 爆出明文存储密码,密码泄漏事件之后,便开始使用密码管理软件。最初使用 LastPass,之后长期使用 Keepass,最近一年迁移到了 1Password,在论坛发现对 Bitwarden 的推荐后,顺手在服务器上部署了,目前使用几个月,体验良好。

推荐使用 docker 部署,官方仓库对性能要求比较高,推荐使用 Rust 重写的服务端 bitwarden_rs,采用 docker-compose 方式部署,注意为了使后面部署的其他服务也能使用 Caddy,我们不采用上面这个 repo 提供的 docker-compose.yaml,采用以下

$ cat docker-compose.yml 
# docker-compose.yml
version: '3'

services:
  bitwarden:
    image: bitwardenrs/server
    restart: always
    volumes:
      - ./bw-data:/data
    environment:
      WEBSOCKET_ENABLED: 'true' # Required to use websockets
      SIGNUPS_ALLOWED: 'false'   # set to false to disable signups
    ports:
      - "127.0.0.1:3012:3012"
      - "127.0.0.1:3011:80"

最后我们统一采用 Caddy 进行反向代理。

RSS 阅读器

2010 年前后开始使用 RSS 订阅,经历了 2012 年 Google Reader 关闭带来的晴天霹雳,后来在 Digg, feedly, inoreader 之间辗转,目前是 inoreader 的 Pro 付费用户,前几天在推上看到有人提到 miniflux,遂去瞄了一眼,看起来比较简洁,本着尝试的态度部署了一下,体验还可以,虽然暂时无法替代 inoreader,采用官方提供的 docker-compose.yaml 即可,如下:

$ cat miniflux/docker-compose.yml 
version: '3'
services:
  miniflux:
    image: miniflux/miniflux:latest
    ports:
        - "127.0.0.1:8080:8080"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=xx
      - ADMIN_PASSWORD=xx
  db:
    image: postgres:latest
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=secret
    volumes:
      - miniflux-db:/var/lib/postgresql/data
volumes:
  miniflux-db:

最后我们统一采用 Caddy 进行反向代理。

RSShub 服务器

不多说,在这个 RSS 衰落的年代,能有这样一个开源项目简直是人间希望,非常感谢开发者。使用官方提供的 docker-compose 部署方式即可。

Caddy 反向代理服务器

最近因为可以自动申请 https 证书了解到这个使用 go 写的 web 服务器,折腾了一下将上述部署的所有服务都采用了反向代理,免费省心上了 https,美哉。由于不想折腾,Caddy 没有采用 Docker 方式,只需要 apt 安装一下设置下配置文件即可,不用 Docker 也不麻烦。我使用的配置文件如下:

(common) {
  header {
    # Enable HSTS. https://mdn.io/HSTS
    Strict-Transport-Security max-age=31536000;
    # Prevent MIME-sniffing. https://mdn.io/X-Content-Type-Options
    X-Content-Type-Options "nosniff"
    # Prevent clickjacking. https://mdn.io/X-Frame-Options
    X-Frame-Options "DENY"
    Referrer-Policy no-referrer-when-downgrade
  }
  encode gzip
  log
}

xx.wogong.net {
    import common
    tls hi@wogong.net
    reverse_proxy localhost:8080
}

xx.wogong.net {
    import common
    tls hi@wogong.net
    reverse_proxy localhost:1200
}

xx.wogong.net {
    import common
    tls hi@wogong.net
    reverse_proxy /notifications/hub/negotiate localhost:3011
    reverse_proxy /notifications/hub localhost:3012
    reverse_proxy localhost:3011
}

可能有读者会质疑,为什么要采用自建服务?免费或者付费的商业服务他不香么?确实,自建无论体验优劣,肯定是比商业服务要多折腾一些(当然可以argue部署这些服务其实并不难,但是大部分普通用户可能连自己的服务器都没有),对我而言,主要组建的服务不是太劣于商业服务,我还是倾向于使用开源方案自己部署。

支持开源的意义在于,可以对商业服务说 fuck you. 在这个个人和大企业力量完全不对等的时代,保护自己的数据和隐私显然非常困难,正因为如此,作为有能力的个人,更要在反思之余,亲自去实践。这些自建服务,不止可以自己使用,还可以分享给家人,身边的朋友。以一己的微薄之力,做点小小的贡献。

最后,感谢 Docker,感谢 Caddy,感谢这些开源项目的开发者。希望这个世界变得更好,至少自己变得更好 XD


上一篇 关于笔记软件

Comments

Content