笔记服务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安装配置】。