HomeServer 服务梳理

笔记服务Leanote

MacOS原生安装,过程与linux类似,下载mac版本的二进制包即可。数据迁移主要是mongodb的迁移,不是很复杂。安装过程可见【LEANOTE-笔记服务】。

内网穿透frp

MacOS原生安装,具体见【使用FRP暴露内网服务】。

云盘服务seafile

Docker-Compose安装,有seafile/seafile-mysql/seafile-memcached三个容器。数据迁移一个是mysql的数据,导入导出即可;seafile文件的映射就比较麻烦,最后没有搞。数据量不太大,本地也都有备份,就当是个新网盘用了。Seafile相关可参考【SEAFILE 文件同步服务】。
docker-compose.yml:

version: '2.0'
services:
  db:
    image: mariadb:10.1
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=PWD  # Requested, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - ~/seafile/seafile-mysql/db:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net

  memcached:
    image: memcached:1.5.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:latest
    container_name: seafile
    ports:
      - "80:80"
    volumes:
      - ~/seafile/seafile-data:/shared   # Requested, specifies the path to Seafile data persistent store.
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=PWD  # Requested, the value shuold be root's password of MySQL service.
      - TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - SEAFILE_ADMIN_EMAIL=xx@xx.com # Specifies Seafile admin user, default is 'me@example.com'.
      - SEAFILE_ADMIN_PASSWORD=PWD     # Specifies Seafile admin password, default is 'asecret'.
      - SEAFILE_SERVER_LETSENCRYPT=false   # Whether use letsencrypt to generate cert.
      - SEAFILE_SERVER_HOSTNAME=DOMAIN # Specifies your host name.
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net
networks:
  seafile-net:

代码管理gitlab

Docker安装。gitlab使用docker安装还是比较方便的,本身gitlab的服务都集成在里边了,需要调整配置的地方也不多;更新的时候也是,直接删掉旧的container,pull新的image,再启动新的container就可以了,非常简便。
启动脚本:

docker run \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --volume ~/gitlab/data:/var/opt/gitlab \
    --volume ~/gitlab/logs:/var/log/gitlab \
    --volume ~/gitlab/config:/etc/gitlab \
    gitlab/gitlab-ce

媒体服务Jellyfin

Docker安装,具体见【JELLYFIN ON DOCKER OF MACOS】。

下载服务aria2-pro/ariang

Docker安装。docker安装与原生安装区别不大,可参考【ARIA2 + ARIANG构建可视化VPS下载工具】。这次安装使用了一个大佬改的aria2-pro和AriaNG。
启动脚本:

docker run -d \
    --name aria2-pro \
    --restart unless-stopped \
    --log-opt max-size=1m \
    -e PUID=$UID \
    -e PGID=$GID \
    -e RPC_SECRET=TOKEN \
    -e RPC_PORT=RPORT \
    -p RPORT:RPORT \
    -e LISTEN_PORT=LPORT \
    -p LPORT:LPORT \
    -p LPORT:LPORT/udp \
    -v ~/aria2/config:/config \
    -v ~/aria2/data:/downloads \
    p3terx/aria2-pro
docker run -d \
    --name ariang \
    --restart unless-stopped \
    --log-opt max-size=1m \
    -p PORT:PORT \
    p3terx/ariang

监控服务

Docker-compose安装。具体组件有prometheus/cadvisor/node-exporter/grafana。


Prometheus相关可见【PROMETHEUS】。cadvisor用来监控docker容器资源信息,它会收集本机所有docker container的资源信息,并发布到x.x.x.x:port/metric页面,可供prom拉取。node-exporter用来监控主机信息,一般不使用docker安装,在mac docker上安装后,收集的资源信息其实是我们为docker desktop分配的资源利用信息。不过这些信息也能反应出资源的相对使用状况,倒是也ok;在云上主机安装的话收集的资源信息就比较准确。grafana用来将prom收集的数据可视化,可以在官方的grafana.com上搜寻感兴趣的dashboard,有不少有意思的用法。


由于这四个服务都属于监控服务栈,部署时就采用了docker-compose,建立了monitor网络,避免因容器之间通信不畅造成的问题。
docker-compose.yml:

version: '2.0'
services:
  cadvisor:
    image: google/cadvisor:latest
    container_name: monitor-cadvisor
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - ~/docker/Data:/var/lib/docker:ro
    networks:
      - monitor-compose

  node-exporter:
    image: prom/node-exporter:latest
    container_name: monitor-node-exporter
    ports:
      - "9100:9100"
    volumes:
      - /:/host:ro
    environment:
      - path.rootfs=/host
    networks:
      - monitor-compose

  prometheus:
    image: prom/prometheus:latest
    container_name: monitor-prometheus
    ports:
      - "9090:9090"
    volumes:
      - ~/monitor/prom-config:/etc/prometheus
      - ~/monitor/prom-data:/prometheus
    networks:
      - monitor-compose

  grafana:
    image: grafana/grafana:latest
    container_name: monitor-grafana
    ports:
      - "3000:3000"
    volumes:
      - ~/monitor/grafana-data:/var/lib/grafana
    networks:
      - monitor-compose

networks:
  monitor-compose:

容器更新服务watchtower

Docker安装。Watchtower会监控主机上运行的docker container,并且查看是否有更新的镜像可供使用,如果有则自动更新image,启动新的container。

在启动的时候可以定义运行计划,类似crontab,定时执行更新任务,而不必如默认一样5s检查一次,太过于频繁;要注意一点这个schedule写法和crontab不一样,这个是六位,crontab是五位。

另外也可以选择性更新,不必更新所有镜像,因为有些服务需要长时稳定运行,不必更新版本,这时需要将需要更新的镜像名称写在watchtower.list文件中,watchtower在运行时则只更新文件中列出来的镜像。示例文件内容:

aria2-pro
node-exporter
grafana

启动脚本:

docker run -d \
    --name watchtower \
    --restart unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --schedule "0 0 2 * * *" \
    $(cat .watchtower.list)

Watchtower也可以单次运行,每次更新一个镜像,可以用来手动更新服务:

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --run-once \
    CONTAINER-NAME

内网代理Nginx

MacOS原生安装,近期可能会迁移至docker。主要负责在内网代理seafile/leanote/jellyfin/prom/等服务。具体可参考【NGINX安装配置】。

发表评论

您的电子邮箱地址不会被公开。