又一个简单漂亮的静态个人导航站 Homer

Homer 是一款简单漂亮的静态个人导航站,通过简单的 YAML 配置就可以快速生成一个个人导航站。

homer

特性:

  • 支持通过 YAML 配置
  • 支持 PWA
  • 支持搜索
  • 支持分组
  • 自定义主题
  • 快捷键支持,/ 搜索,Escape 退出搜索,Enter 打开第一个匹配,Alt/Option + Enter 在新标签页打开

安装

Docker 命令:

docker run -d \
  --name homer \
  -p 8080:8080 \
  -v </your/local/assets/>:/www/assets \
  --restart=always \
  b4bz/homer:latest

docker-compose 配置见 GitHub

配置

Homer 通过 YAML 配置:

---
title: "Homelab Dash"
subtitle: "always-on"
documentTitle: "Homelab Dash"
logo: "logo.png"

columns: 3
header: true
footer: false
connectivityCheck: false

theme: default
colors:
  light:
    highlight-primary: "#3367d6"
    highlight-secondary: "#4285f4"
    highlight-hover: "#5a95f5"
    background: "#f5f5f5"
    card-background: "#ffffff"
    text: "#363636"
    text-header: "#ffffff"
    text-title: "#303030"
    text-subtitle: "#424242"
    card-shadow: rgba(0, 0, 0, 0.1)
    link-hover: "#363636"
  dark:
    highlight-primary: "#1B3E88"
    highlight-secondary: "#1b4d9e"
    highlight-hover: "#2b579e"
    background: "#121212"
    card-background: "#1D1D1D"
    text: "#eaeaea"
    text-header: "#f7f7f7"
    text-title: "#fafafa"
    text-subtitle: "#f5f5f5"
    card-shadow: rgba(0, 0, 0, 0.4)
    link-hover: "#ffdd57"

links:
  - icon: "far fa-edit"
    url: "http://files.svr2:9800/files/homer/config.yml"
    
  - icon: "fab fa-docker"
    url: "http://files.server:9800/files/compose.yml"
    
  - name: 2
    icon: "fab fa-docker"
    url: "http://files.svr2:9800/files/compose.yml"
    
  #- icon: "fas fa-file-download"
#    url: "http://torrent.svr2/"
    
  - icon: "fas fa-fire"
    url: "http://prometheus.server" # Prometheus
    
  - icon: "fas fa-wifi"
    url: "http://routerlogin.net"

  - icon: "fas fa-satellite-dish"
    url: "http://satellite.lan"

  - icon: "fas fa-cloud-download-alt"
    url: "http://qbt-oc1.svr2/" # qBittorrent (oracle1)
    
  - icon: "fas fa-project-diagram"
    url: "http://oracle1:81/" # Nginx proxy manager
    
 # - icon: "fas fa-shield-alt"
 #   url: "http://oracle1:3000" # AdGuard Home
    
#   - icon: "fas fa-traffic-light"
#     url: "http://oracle1:90/" # Traefik
    
  - icon: "fas fa-play-circle"
    url: "http://oracle1:31337/" # Kitana
    
#  - name: "Page 2"
#    icon: "fas fa-columns"
#    url: "#additionnal-page"

services:
  - name: "Media"
    icon: "fas fa-film"
    items:
    
      - name: Radarr
        subtitle: "Movie collection manager"
        url: "http://radarr.server/"
        logo: "assets/homer-icons/png/radarr.png"

      - name: Radarr4K
        subtitle: "Manage 4K movies"
        url: "http://radarr4k.server/"
        logo: "assets/img2/4k-film-2.svg"
        tag: oc1

      - name: Sonarr
        subtitle: "TV shows automator"
        url: "http://sonarr.server/"
        logo: "assets/homer-icons/svg/sonarr.svg"

      - name: Overseerr
        subtitle: "Media discovery tool"
        url: "http://overseerr.server/"
        logo: "assets/homer-icons/svg/overseerr.svg"
        tag: oc1
        

      - name: Flood
        subtitle: "Beautiful torrent GUI"
        url: "http://flood-torrent.server/"
        logo: "assets/homer-icons/png/flood.png"
        
    #   - name: Petio
    #     subtitle: "Plex companion"
    #     url: "http://petio.svr2/"
    #     logo: "https://raw.githubusercontent.com/petio-team/petio/master/frontend/public/favicon/android-icon-192x192.png"
    #     tag: oc1

      - name: Tautulli
        subtitle: "Plex graps & stats"
        url: "http://tautulli.server/"
        logo: "assets/homer-icons/png/tautulli.png"

  - name: Hosted
    icon: "fas fa-rocket"
    items:

      - name: Speedtest tracker
        subtitle: "Automated speed tests"
        url: "http://speedtest.svr2/"
        logo: "assets/custom/speedtest-tracker.png"

      - name: Code-server
        subtitle: "Browser-based editor"
        url: "http://code.server/"
        logo: "assets/custom/code-server.png"

      - name: Mealie
        subtitle: "Pantry for recipes"
        url: "http://mealie.server/"
#        logo: "assets/homer-icons/png/mealie.png"
        logo: "assets/custom/food-2.png"

      - name: Nextcloud
        subtitle: "Cloud-hosted file storage"
        url: "https://agneev.duckdns.org/"
        logo: "assets/homer-icons/png/nextcloud.png"
        tag: oc1

      - name: Home Assistant
        subtitle: "Next-gen smart home"
        url: "http://assistant.server:8123/"
        logo: "assets/custom/home-assistant.png"
        
      - name: Homebridge
        subtitle: "HomeKit all things"
        url: "http://homebridge.svr2/"
        logo: "assets/homer-icons/png/homebridge.png"
        
  - name: Manage
    icon: "fas fa-user-shield"
    items:
    
      - name: AdGuard Home
        subtitle: "Network ad-blocker"
        url: "http://adguard.svr2/"
        logo: "assets/homer-icons/svg/adguardhome.svg"

      - name: Portainer
        subtitle: "Advanced Docker GUI"
        url: "http://portainer.svr2/"
        logo: "assets/homer-icons/png/portainer.png"

      - name: Grafana
        subtitle: "Visualized stats"
        url: "http://grafana.server/"
        logo: "assets/homer-icons/png/grafana.png"
        
      - name: Chronograf
        subtitle: "Metrics visualizations"
        url: "http://chronograf.server"
        logo: "assets/homer-icons/png/chronograf.png"
        
    #   - name: Smokeping
    #     subtitle: "Graph network latency"
    #     url: "http://smokeping.svr2/smokeping/?target=DNSPing"
    #     logo: "assets/custom/monitor.png"
    
      - name: Router
        subtitle: "Stats from router Netdata"
        url: "http://routerlogin.net:19999#menu_net_submenu_brwan;theme=slate"
        logo: "assets/homer-icons/png/netdata.png"

      - name: Nginx manager
        subtitle: "Main network proxy"
        url: "http://npm.svr2/nginx/proxy"
        logo: "assets/homer-icons/png/nginxproxymanager.png"
        
    #   - name: Pi-hole
    #     subtitle: "DNS blackhole"
    #     url: "http://pihole.svr2/admin"
    #     logo: "assets/homer-icons/png/pihole.png"
    #     tag: oc1
        
  - name: "Files"
    icon: "fas fa-hdd"
    items:
        
      - name: aria2
        subtitle: "Ultra-fast HTTP downloader"
        url: "http://aria.server/"
        logo: "assets/homer-icons/png/ariang.png"
        
    #   - name: Plexdrive
    #     subtitle: "Encrypted cloud drive"
    #     url: "http://plexdrive.svr2:9800/files/plexdrive/"
    #     logo: "assets/homer-icons/png/plexdrive.png"

      - name: File Browser
        subtitle: "Browse files on NAS server"
        url: "http://files.server:9800/files/"
        logo: "assets/homer-icons/svg/filebrowser.svg"
        
      - name: qBittorrent
        subtitle: "Best torrent client"
        url: "http://qbittorrent.server/"
        logo: "assets/homer-icons/png/qbittorrent.png"
        
      - name: Scrutiny
        subtitle: "Visualized SMART data"
        url: "http://scrutiny.server/"
        logo: "assets/homer-icons/png/scrutiny.png"

  - name: "Server"
    icon: "fas fa-server"
    items:

      - name: InfluxDB
        subtitle: "Modern metrics recorder"
        url: "http://influxdb.server"
        logo: "assets/custom/influxdb.png"
        
    #   - name: Uptime-kuma
    #     subtitle: "Status monitoring"
    #     url: "http://uptime.svr2/"
    #     logo: "https://github.com/louislam/uptime-kuma/raw/master/public/icon.svg"
        
      - name: always-on
        subtitle: "Netdata on DNS server"
        url: "http://netdata.svr2:19999/"
        logo: "assets/homer-icons/png/netdata.png"

      - name: falcon
        subtitle: "Netdata on media server"
        url: "http://netdata.server/"
#        logo: assets/img2/server-folder.svg
        logo: "assets/custom/netdata-alt.png"
        
      - name: NPM (falcon)
        subtitle: "Docker net reverse proxy"
        url: "http://npm.server/nginx/proxy/"
        logo: "assets/homer-icons/png/nginxproxymanager.png"

    #   - name: Cockpit
    #     subtitle: "Server manager"
    #     url: "http://cockpit.server:9090/"
    #     logo: "assets/homer-icons/png/cockpit.png"

  - name: "Tools"
    icon: "fas fa-toolbox"
    items:
        
      - name: Prowlarr
        subtitle: "Indexer manager"
        url: "http://prowlarr.server/"
        logo: "assets/homer-icons/svg/prowlarr.svg"

      - name: Bazarr
        subtitle: "Subtitles for all media"
        url: "http://bazarr.svr2/"
        logo: "assets/homer-icons/svg/bazarr.svg"
        tag: oc1

    #   - name: Node-RED
    #     subtitle: Programming tool
    #     url: "http://node-red.server/"
    #     logo: "assets/homer-icons/png/nodered.png"

      - name: Jackett
        subtitle: "All indexers in one place"
        url: "http://jackett.svr2/"
        logo: "assets/homer-icons/png/jackett.png"
        tag: oc1
        
      - name: OpenSpeedTest
        subtitle: "LAN speed tests"
        logo: "assets/homer-icons/png/openspeedtest.png"
        url: "http://openspeedtest.svr2:8200/"
        

更多的配置可以参考 官网

services:
  - name: "Media"
    icon: "fas fa-cloud"
    items:
      - name: "Plex"
        logo: "assets/tools/plex.png"
        subtitle: "TV Shows & Movie Collection"
        tag: "app"
        url: "http://192.168.68.137:32400/web/index.html"
        target: "_blank" # optional html a tag target attribute
      - name: "Netflix"
        logo: "assets/tools/netflix.png"
        subtitle: "Streaming Service"
        tag: "app"
        url: "https://netflix.com"
      - name: "Youtube"
        logo: "assets/tools/youtube.png"
        tag: "app"
        url: "https://youtube.com" 
  - name: "Downloads"
    icon: "fas fa-cloud-download-alt"
    items:
      - name: "Sonarr"
        logo: "assets/tools/sonarr.png"
        subtitle: "TV Show Indexer"
        tag: "app"
        url: "http://192.168.68.137:8989/"
        target: "_blank" # optional html a tag target attribute
      - name: "Radarr"
        logo: "assets/tools/radarr.png"
        subtitle: "Movie Indexer"
        tag: "app"
        url: "http://192.168.68.137:7878/"
      - name: "NZBGet"
        logo: "assets/tools/nzbget.png"
        subtitle: "Usenet Downloader"
        tag: "app"
        url: "http://192.168.68.137:6789/"

Icons

FontAwesome 搜索 Icon。

或者看看这里的 SuperTinyIcons 或者 homer-icons

  • [[homepage]] 是一个使用 JavaScript 编写,使用 YAML 作为配置的个人页面。

reference


2021-08-26 homer , navigation , website , docker , linux

macOS 间歇性休息提醒应用:Time out

前些天偶然间获知了一款叫做 Time out 的应用,他实现的功能特别简单,就是可以定时(15 分钟,50 分钟)来提醒使用 macOS 的用户起来休息一下,或者看看远方,不过它使用的方式有些一些强制,当时间到了之后电脑屏幕会缓缓升起一个屏保,虽然可以跳过,但会强制让使用者注意到时间的片段。之前,我曾经多次尝试番茄时钟工作法 ,但我常常发现,无法很好的遵守自己定下的阶段小任务,要不是任务比较大无法拆分,要不就是无法整理出思路卡顿很久,番茄时钟推荐的细分任务是 25 分钟一个小片段,但往往发现无法在单一一个 25 分钟内完成,于是一拖再拖,然后可能就在电脑前一坐就是几个小时。然后整个一天之后就非常疲惫。

U2mc

特性

Time out 的界面非常简单,功能用一句话也能说明,就是可以设置提醒间隔。免费版可以设置两个间隔时间点,默认的是每 15 分钟休息 15 秒,每 50 分钟休息 10 分钟。届时屏幕会强制升起屏幕保护。

  • 自定义时间间隔
  • 自定义屏幕保护内容
  • 记录软件的使用数据(赞助之后获得)
  • 记录间隔数据

最后

Time out 已经被收录在了 [[Setapp]] 中了,订阅了 Setapp 的用户可以直接下载使用,而其他用户也可以在作者的官网 或者 App Store 中下载使用。


2021-08-24 macos , mac , mac-app , mac-appli time-out , timer , mac-application

HostHatch VPS 测评及使用

两个礼拜前买过一个月 A400 互联 的 VPS,但是因为其提供商不是非常靠谱,所以尽管在使用,但还只是用作流量转发,并没有把重要的数据放在上面。这两天在 LowEndTalk 上正好看到 HostHatch 扩展新加坡业务,发布新机器 2核4G 1T流量的机器只需要 35$ 一年,而且两年付还可以得到两倍的内存,空间和流量,所以就立即下了一单。

2 CPU cores (50% dedicated, burstable up to 200%)
4 GB RAM
20 GB NVMe SSD
1 TB bandwidth
$35 per year
Pay for two years - get doubled RAM, storage, and bandwidth

中间还发生了一点小小问题,因为付款的 Paypal 很久没有使用,付款之后 HostHatch 没有处理,开了 Ticket 之后回复说因为 Paypal on-hold 了这笔订单需要等待 24 小时,等 Paypal 处理之后 HostHatch 才会开始处理。所以等待的期间我又用信用卡下了一单,然后过了一天,我突然发现账号下面有两台机器。不过也好,两台机器做个主备。

机器性能

bench 的结果:

----------------------------------------------------------------------
 CPU Model             : Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
 CPU Cores             : 2
 CPU Frequency         : 3000.000 MHz
 CPU Cache             : 16384 KB
 Total Disk            : 39.0 GB (18.0 GB Used)
 Total Mem             : 7976 MB (2120 MB Used)
 Total Swap            : 1023 MB (5 MB Used)
 System uptime         : 24 days, 17 hour 59 min
 Load average          : 0.21, 0.12, 0.10
 OS                    : Ubuntu 18.04.5 LTS
 Arch                  : x86_64 (64 Bit)
 Kernel                : 4.15.0-20-generic
 TCP CC                : cubic
 Virtualization        : Dedicated
 Organization          : AS63473 HostHatch, LLC
 Location              : Singapore / SG
 Region                : Singapore
----------------------------------------------------------------------
 I/O Speed(1st run)    : 495 MB/s
 I/O Speed(2nd run)    : 731 MB/s
 I/O Speed(3rd run)    : 715 MB/s
 Average I/O speed     : 647.0 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency     
 Speedtest.net    3295.69 Mbps      2583.03 Mbps        0.65 ms     
 Shanghai   CU    219.87 Mbps       629.33 Mbps         214.01 ms   
 Guangzhou  CT    18.45 Mbps        113.17 Mbps         229.08 ms   
 Guangzhou  CU    424.10 Mbps       587.32 Mbps         203.09 ms   
 Hongkong   CN    2560.67 Mbps      1094.98 Mbps        33.92 ms    
 Tokyo      JP    294.63 Mbps       614.84 Mbps         74.30 ms    
----------------------------------------------------------------------

YABS 的结果:

# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
#              Yet-Another-Bench-Script              #
#                     v2021-06-05                    #
# https://github.com/masonr/yet-another-bench-script #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #

Wed Aug 25 00:46:05 BST 2021

Basic System Information:
---------------------------------
Processor  : Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
CPU cores  : 2 @ 2999.998 MHz
AES-NI     : ✔ Enabled
VM-x/AMD-V : ❌ Disabled
RAM        : 3.9 GiB
Swap       : 1024.0 MiB
Disk       : 18.7 GiB

fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ----
Read       | 237.97 MB/s  (59.4k) | 1.78 GB/s    (27.9k)
Write      | 238.59 MB/s  (59.6k) | 1.79 GB/s    (28.0k)
Total      | 476.57 MB/s (119.1k) | 3.58 GB/s    (55.9k)
           |                      |
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ----
Read       | 2.85 GB/s     (5.5k) | 2.87 GB/s     (2.8k)
Write      | 3.00 GB/s     (5.8k) | 3.07 GB/s     (2.9k)
Total      | 5.85 GB/s    (11.4k) | 5.94 GB/s     (5.8k)

iperf3 Network Speed Tests (IPv4):
---------------------------------
Provider        | Location (Link)           | Send Speed      | Recv Speed
                |                           |                 |
Clouvider       | London, UK (10G)          | 1.11 Gbits/sec  | 412 Mbits/sec
Online.net      | Paris, FR (10G)           | 1.37 Gbits/sec  | 993 Mbits/sec
WorldStream     | The Netherlands (10G)     | 788 Mbits/sec   | 638 Mbits/sec
Biznet          | Jakarta, Indonesia (1G)   | 3.41 Gbits/sec  | 2.55 Gbits/sec
Clouvider       | NYC, NY, US (10G)         | 628 Mbits/sec   | 562 Mbits/sec
Velocity Online | Tallahassee, FL, US (10G) | 476 Mbits/sec   | 238 Mbits/sec
Clouvider       | Los Angeles, CA, US (10G) | 930 Mbits/sec   | 908 Mbits/sec
Iveloz Telecom  | Sao Paulo, BR (2G)        | busy            | 348 Mbits/sec

Geekbench 5 Benchmark Test:
---------------------------------
Test            | Value
                |
Single Core     | 593
Multi Core      | 1191
Full Test       | https://browser.geekbench.com/v5/cpu/9485985

使用

数据库

因为看 LET 上对 HostHatch 的评价还好,并且这是一家长期做生意的提供商,所以我就陆陆续续把其他平台上的 MySQL 数据迁移过来了,并且正好两台机器配置了一下Master Master Replication

应用

和之前在 A400 的机器一样,用 Docker 来管理各个服务。基本上也是同步一下数据,更改一下配置就可以起来。

❯ docker ps -a
CONTAINER ID   IMAGE                                    COMMAND                  CREATED        STATUS                    PORTS                                                                      NAMES
5c9f15d2f6fd   cflask_simple_worker                     "/bin/sh -c 'celery …"   4 days ago     Up 6 hours                                                                                           cflask_simple_worker_1
b9d05a0aab65   cflask-production                        "/bin/bash shell_scr…"   4 days ago     Up 6 hours                0.0.0.0:5000->5000/tcp, :::5000->5000/tcp                                  cflask_flask-prod_1
fe5babd77ff8   technosoft2000/calibre-web               "/bin/bash -c /init/…"   2 weeks ago    Up 2 days                 8083/tcp                                                                   calibre-web
27bb97742691   funkwhale/all-in-one:1.1.4               "/init"                  2 weeks ago    Up 2 days                 80/tcp                                                                     funkwhale
9f167b8f1a27   umputun/remark42:latest                  "/init.sh /srv/remar…"   2 weeks ago    Up 2 days (healthy)       8080/tcp                                                                   remark42
966776d9c62c   luminoleon/epicgames-claimer             "python3 -u main.py …"   2 weeks ago    Up 2 days                                                                                            epic
11f2ab0251a3   gogs/gogs:0.12.3                         "/app/gogs/docker/st…"   4 weeks ago    Up 2 days                 3000/tcp, 0.0.0.0:10022->22/tcp, :::10022->22/tcp                          gogs
2490f033f39d   wordpress:latest                         "docker-entrypoint.s…"   4 weeks ago    Up 2 days                 80/tcp                                                                     wordpress_blog
8f11b6177487   kmb32123/youtube-dl-server:latest        "python -u ./youtube…"   4 weeks ago    Up 2 days                 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                  youtube-dl-server_youtube-dl-server_1
ed9cc80eac6a   ghcr.io/naiba/nezha-dashboard            "/dashboard/app"         4 weeks ago    Up 2 days                 80/tcp, 0.0.0.0:5555->5555/tcp, :::5555->5555/tcp                          nezha_dashboard_1
6654066f6c09   wallabag/wallabag                        "/entrypoint.sh wall…"   4 weeks ago    Up 2 days (healthy)       80/tcp                                                                     wallabag
406190504fd3   phpmyadmin/phpmyadmin                    "/docker-entrypoint.…"   4 weeks ago    Up 2 days                 80/tcp                                                                     phpmyadmin_phpmyadmin_1
8c902e165528   chevereto:latest                         "docker-php-entrypoi…"   7 weeks ago    Up 2 days                 80/tcp                                                                     chevereto
fcca09be33e6   redis:4-alpine                           "docker-entrypoint.s…"   7 weeks ago    Up 2 days                 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                  redis
b7c7844143ed   fengkx/postgres:13-alpine                "docker-entrypoint.s…"   2 months ago   Up 2 days (healthy)       0.0.0.0:5432->5432/tcp, :::5432->5432/tcp                                  postgres
129bede6f06c   linuxserver/bookstack                    "/init"                  2 months ago   Up 2 days                 80/tcp, 443/tcp                                                            bookstack
6901eecc15c8   diygod/rsshub                            "dumb-init -- npm ru…"   2 months ago   Up 2 days                 1200/tcp                                                                   rsshub_rsshub_1
9229265c93de   yourls                                   "docker-entrypoint.s…"   2 months ago   Up 2 days                 80/tcp                                                                     yourls
4f935d65a3fc   hurlenko/filebrowser                     "/filebrowser --root…"   2 months ago   Up 2 days                 8080/tcp                                                                   filebrowser
8ab377d558e3   wordpress:latest                         "docker-entrypoint.s…"   2 months ago   Up 2 days                 80/tcp                                                                     wordpress
4fa2aad47f10   miniflux/miniflux:latest                 "/usr/bin/miniflux"      3 months ago   Up 2 days                 8080/tcp                                                                   miniflux
47b8ad4f0d41   netdata/netdata                          "/usr/sbin/run.sh"       3 months ago   Up 2 days (healthy)       0.0.0.0:19999->19999/tcp, :::19999->19999/tcp                              netdata
87f802cee469   f6f2296798e9                             "docker-entrypoint.s…"   3 months ago   Up 2 days                 6379/tcp                                                                   rsshub_redis_1
37898721ec5b   browserless/chrome:1.43-chrome-stable    "./start.sh"             3 months ago   Up 2 days                 3000/tcp                                                                   rsshub_browserless_1
79e7d9774b63   b4bz/homer                               "/bin/sh /entrypoint…"   3 months ago   Up 2 days                 8080/tcp                                                                   homer
f505c56e7a24   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   3 months ago   Up 2 days                                                                                            letsencrypt-nginx
97486b8aa958   jwilder/nginx-proxy                      "/app/docker-entrypo…"   3 months ago   Up 2 days                 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx-proxy

可以看到即使跑了这么多应用,内存连一半都没有用完。CPU 也不过刚刚 1/4,性能还是挺满意的。

hosthatch monitor

日常可以注册一下 HostHatch,通常会在论坛或者邮件中通知有优惠。

reference

  • [[HostHatch]]

2021-08-24 vps , linux , hosthatch , management , ubuntu

限制 Docker 容器日志的大小

今天回到家突然发现刚买的一台 VPS 根目录空间 100% 被占用了,使用 du 一层层查看占用最后发现是 /var/lib/docker/containers 下有一个 json 日志文件占用了 20G 大小。

简单的查了一下发现 Docker 容器的日志都会被记录在宿主机的 /var/lib/docker/containers/ 路径下。而我有一个容器因为不停地输出日志,没多久就占了很大空间。

Docker 容器日志

在默认情况下 Docker 容器的日志会输出到一个 json-file 文件中,容器输出到 stdoutstderr 的内容加上时间戳会被记录到宿主机。

这些日志文件在宿主机的 /var/lib/docker/containers/ 文件夹下,以这样的形式命名:

/var/lib/docker/containers/<container id>/<container id>-json.log

限制 Docker 容器日志大小

修改 Docker 配置 vi /etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

注意修改之后需要重启 Docker 使之生效 sudo systemctl restart docker

或者针对个别容器设置,在 docker-compose.yml 中:

注意需要版本2及以上

version: '2'
services:
  app:
    container_name: app
    image: node
    restart: always
    logging:
      driver: "json-file"
      options:
       max-file: "5"     // number of files or file count
       max-size: "10m"  // file size

或者命令行:

docker run --log-opt max-size=10m --log-opt max-file=5 my-app:latest

Docker 日志策略和最佳实践

通过应用自己管理日志

应用自己去管理自己的日志,比如使用 Logging Framework,在 Java 中通常使用 log4j 将日志打印到一个远端的中心化地方,这样就可以绕过 Docker 和操作系统。这种方式给予了开发者更多的控制权。

为了保存日志数据,你可以配置一个持久化的存储或将日志转发到一个远程日志的系统,比如 Elastic StackSematext Cloud,但是基于应用的日志框架存在的问题便是如果部署了多个容器,那么你需要一个方式来告诉日志系统,哪些日志属于哪个容器。

通过 Data Volumes 记录日志

你可以在容器内部创建一个目录,然后将该目录挂载到宿主机上,那么一些长期或共享使用的数据可以长久的存储。你可以复制,备份,或者从其他容器访问这些数据。也可以在多个容器之间共享这些 volume。

但是使用 Data Volume 存在的问题是,很难将这些容器迁移到其他宿主机而不丢失数据。

通过 Docker Logging Driver 记录日志

在 Docker 下,另外一个记录日志的方式是使用 logging drivers。不像 Data Volumes, Docker logging driver 会从容器的 stdout 和 stderr 输出中直接读取数据。默认的配置会将这些日志记录到宿主机的一个文件中,但是改变 logging driver 可以允许你将事件转发给 syslog, gelf, journald 或其他 endpoints。

因为容器不再需要读写日志文件,可以提升一定的性能。但是也有一些弊端,Docker log 命令只能在 json-file log driver 下使用;log diver 有一些功能限制,日志文件只能被传输而不能被解析;当 TCP 服务不可达时,容器会 shut down。

使用专用的日志容器记录日志

另一个解决方案是通过一个专用的、独立的日志容器来记录和手机日志,这非常适用于微服务架构。这个优势在于这完全不依赖与宿主机。相反,专用的日志容器可以允许你在 Docker 的环境中管理日志文件。他会自动从其他容器收集日志,监控,分析,并且将他们转存到一个中心存储上。

这种方式使得我们可以轻易地将容器在不同的宿主机中移动,并且可以非常轻松的扩展日志基础设施,只需要增加日志容器即可。

Logging Using the Sidecar Approach

和专用的日志容器类似,使用日志容器,但是不同点在于,每一个应用容器都有专用的日志容器,允许你对每一个应用的日志进行自定义。第一个容器会将日志文件打印到 volume,然后日志文件会日志容器打上标签,然后再被传送到日志管理系统。

使用 sidecar 的一个主要的优势是,你可以为每一个 log 增加额外自定义的标签,可以更好地确定其来源。

同样也有一些劣势,设置或扩容可能会变得非常复杂和困难,并且需要更多的资源。你需要确保应用容器和 sidecar 容器是一起进行工作的,否则可能会造成数据丢失。

复习一下日志相关命令:

  • docker logs containerName
  • docker logs -f containerName
  • 显示 CPU 和内存使用 docker stats
  • 显示具体容器的 CPU 和内存使用 docker stats containerName1 Name2
  • 显示容器中运行的进程 docker top containerName
  • Docker events: docker events
  • 显示存储使用:docker system df

Logging Driver

Logging driver 是 Docker 用来才运行的容器和服务中收集数据的机制,这使得数据更容易进行分析。当一个新的容器被创建,Docker 会自动使用 json-file log driver 作为默认。同时,你可以使用 logging driver plugins 来和其他日志工具进行交互。

下面是一个通过自定义 logging driver 来和 syslog 交互的例子:

docker run -–log-driver syslog –-log-opt syslog-address=udp://syslog-server:514  alpine echo hello world

如何配置 Docker Logging Driver

有两个选项:

  • 为所有的容器设置默认的 logging driver
  • 为每一个容器设置 logging driver

上面提过,默认的 logging driver 是 JSON 文件,其他选项有 logagent, syslog, fluentd, journald, splunk 等等。你可以通过修改 Docker configuration 文件 来进行配置:

# /etc/docker/daemon.json
{
  "log-driver": "journald"
}

然后再执行:

systemctl restart docker

使之生效。

或者,你可以通过命令来为每一个容器单独设置

docker run --log-driver syslog --log-opt syslog-address=udp://syslog-server:514 alpine echo hello word

Logging Driver 选项

选项解释:

  • logagent:这是一个通用的 log shipper,Logagent Docker image 是一个提前配置好 Log 收集的镜像,Logagent 不仅会收集日志,还会收集诸如镜像名字,容器ID,容器名字,Swarm service 等 meta-data 或 Kubernetes meta-data。并且它可以处理多行日志,可以解析容器的日志等等
  • syslog: 将日志转发到 syslog 服务
  • journald:将容器日志发送到 systemd journal
  • fluentd: 将日志信息发送到 Fluentd 收集器
  • elf:将容器的日志写到 Graylog Extended Log Format(GELF) 端,比如 GrayLog 或 Logstash
  • awslogs:将日志发送到 AWS CloudWatch Logs
  • splunk:通过 HTTP Event Collector(HEC)将日志写到 Splunk
  • cplogs:将日志发送到 Google Cloud Platform(GCP)Logging
  • logentries: 将日志写到 Rapid7 Logentries
  • etwlogs: 将日志写到 Event Tracing for Windows(ETW)

reference


2021-08-20 docker , log , log-framework , vps , linux , du , file-size

利用 n8n 实现个人自动化工作流

n8n 是一个开源自动化工作流程序,类似 IFTTT,发音为 nodemation,模仿了 k8s 的命名规则。

n8n 可以互联的服务包括 Github、Google、RSS、Slack、Telegram、Gitlab、Redis、RabbitMq、数据库等等上百种服务1

优点:

  • 开源
  • 可以自己架设
  • 强大,可以和数百种服务对接
  • Zapier / Tray.io / IFTTT 代替品

用过 IFTTT 的人都应该知道,IFTTT 可以非常方便的实现跨应用和服务的交互,我经常做的事情,比如在 Trello 中打开一个卡片,按一下空格,会自动加入该卡片,这个时候因为触发了加入卡片的动作,IFTTT 就会自动在我的 Google Calendar 上添加一个 Event,时间就是当下。

n8n 使用 TypeScript 编写,支持 npx 直接运行,安装 nodejs 运行以下命令即可运行。

n8n 的应用场景

任何可以自动化的流程都可以用其连接起来:

  • 定期备份任务
    • 自动将某些配置文件备份到另外的地方,或其他云服务
  • 需要反复手工执行的操作
    • 导入导出数据
  • 抓取聚合内容
    • 定时抓取内容,聚合之后发送到常用的通讯工具,比如 Telegram
  • 监控网页或其他内容的变化
    • 当价格降低的时候通知

n8n 上集成了上百个不同的服务,其功能强大程度完全取决于你的想象力。

如果你还没有想到你想做的自动化的事情,官方的 workflow 页面提供了一大批的流程可以参考。

Installation

使用 Docker 安装:

概念

节点

在 n8n 中节点是自动化的关键,节点可以做一些事情,通过节点和节点的连接就产生了流。

连接 Connections

在节点和节点之间通过 Connections 连接到一起,通过连接可以传输数据。

Start 节点

Start 节点是流程的第一个节点。

常用的工作流服务

cron 定时任务

reference


2021-08-19 open-source , automation , n8n , ifttt , slack , github , self-hosted , typescript

使用 Vagrant 自动创建配置虚拟机

Vagrant 是一个使用 Ruby 编写,基于纯文本文件自动化创建和配置虚拟机的工具。

基于 VirtualBox 和 [[VMware]] ,通过 Vagrant 去控制虚拟机。

Vagrant 是 hashicorp 公司的产品。该公司有大量的开源项目

Vagrant 提供了 vagrant 命令,通过 Vagrantfile 文件声明虚拟机配置。

Prerequisite

Terminology

  • Box,Vagrant 中的虚拟机镜像
  • Provider,为 Vagrant 提供虚拟化支持的具体工具,比如 VirtualBox,或 VMware
  • Provisioning,虚拟机实例启动后的初始化

安装 Vagrant

Linux

按照官网的介绍安装

macOS

brew cask install virtualbox
brew cask virtualbox-extension-pack
brew cask install vagrant

下载一个虚拟机:

vagrant box add ubuntu/trusty64

初始化一个 Ubuntu 镜像:

vagrant init ubuntu/trusty64

在初始化之后可以在当前目录下找到 Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
end

ubuntu/trusty64 是在 Vagrant 官网搜索到的虚拟机的镜像。

启动虚拟机:

vagrant up
❯ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/trusty64'
    default: URL: https://vagrantcloud.com/ubuntu/trusty64
==> default: Adding box 'ubuntu/trusty64' (v20190514.0.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20190514.0.0/providers/virtualbox.box
Download redirected to host: cloud-images.ubuntu.com
==> default: Successfully added box 'ubuntu/trusty64' (v20190514.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' version '20190514.0.0' is up to date...
==> default: Setting the name of the VM: vagrant_default_1630040745169_54425
==> default: Clearing any previously set forwarded ports...
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.3.40
    default: VirtualBox Version: 6.1
==> default: Mounting shared folders...
    default: /vagrant => /home/einverne/Git/vagrant

修改 Vagrant 可以自定义虚拟机网络,内存和 CPU 等等。

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  machine_box = "ubuntu/trusty64"

  config.vm.define "local-env-1" do |machine|
    machine.vm.box = machine_box
    machine.vm.hostname = "local-env-1"
    machine.vm.network "private_network", ip: "192.168.33.11"
    machine.vm.provider "virtualbox" do |node|
        node.name = "local-env-1"
        node.memory = 2048
        node.cpus = 2
    end
   end

   config.vm.define "local-env-2" do |machine|
    machine.vm.box = machine_box
    machine.vm.hostname = "local-env-2"
    machine.vm.network "private_network", ip: "192.168.33.12"
    machine.vm.network "forwarded_port", guest: 26379, host: 26380
    machine.vm.provider "virtualbox" do |node|
        node.name = "local-env-2"
        node.memory = 2048
        node.cpus = 2
    end
   end
end

启动之后可以通过 vagrant ssh $name 登录虚拟机。

在虚拟机启动后 /vagrant 目录会挂载宿主机的同级目录。文件是同步的,这样就可以通过该目录来共享文件。

执行额外的操作

在 Vagrantfile 中可以如下语法:

config.vm.provision :shell, path: "bootstrap.sh"

会执行 bootstrap.sh 脚本。

Vagrant Box

Vagrant Box 相对于 Vagrant,就像是 Docker Image 对应于 Docker。

可以使用:

vagrant box add name

来添加 Box。

升级 Box

vagrant box update --box name

删除 Box

vagrant box remove name

Vagrant 常用命令

常用命令有:

  • vagrant up
  • vagrant halt: 关闭虚拟机
  • vagrant destroy:销毁虚拟机
  • vagrant status
  • vagrant reload
  • vagrant restart
  • vagrant box list: 列出当前机器缓存的镜像

常用配置

网络配置

和 Docker 类似,Vagrant 也有几种不同的网络配置:

端口映射,将宿主机端口映射到虚拟机端口,宿主机 8080 端口映射到虚拟机 80 端口:

config.vm.network "forwarded_port", guest: 80, host: 8080

私有网络(host-only),只有宿主机能访问虚拟机,多个虚拟机在同一个网段,相互可以访问:

config.vm.network "private_network", ip: "192.168.21.4"

公有网络(bridge),虚拟机和宿主机相当于局域网中独立的主机,设置静态IP:

config.vm.network "public_network", ip: "192.168.1.120"

如果使用 public_network 而不配置 IP,那么会 DHCP 自动获取 IP 地址。

共享目录

设置共享目录,Vagrant 使用 rsync 来同步文件:

config.vm.synced_folder "/directory/of/host_machine", "/directory/of/guest_machine"

Provision

虚拟机实例启动之后,通过工具自动设置,支持 Shell,Puppet,Chef,Ansible 等等:

config.vm.provision "shell", run: "always", inline: <<-SHELL
    sudo yum install -y net-tools
SHELL

run: “always”表示每次vagrant up的时候,都执行Provision。

引用外部脚本:

config.vm.provision "shell", path: "script.sh

并非每次vagrant up的时候,都会执行Provision。只有在下面3种情况下Provision才会执行:

  • 首次执行vagrant up
  • 执行vagrant provision
  • 执行vagrant reload –provision

使用 Ansible

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end

使用虚拟机内部的 Ansible:

Vagrant.configure("2") do |config|
  # Run Ansible from the Vagrant VM
  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
  end
end

创建自己的虚拟机

vagrant package --output hadoop_master.box hadoop_master

hadoop_master是虚拟机实例名称,hadoop_master.box是box名。
在创建box的时候,如果虚拟机实例正在运行,vagrant会先halt,然后再export。

将box添加到本地仓库:

vagrant box add hadoop_master hadoop_master.box

查看本地仓库的box列表:

$ vagrant box list
centos7       (virtualbox, 0)
hadoop_master (virtualbox, 0)

创建并且切换到用于测试的项目目录:

mkdir ~/test_vagrant && cd ~/test_vagrant

创建Vagrantfile,并使用刚才新创建的hadoop_master.box作为box:

vagrant init -m hadoop_master

创建,并启动虚拟机:

vagrant up

登陆到虚拟机:

vagrant ssh

可以看到和创建box之前的虚拟机是一模一样的

延伸阅读


2021-08-14 vagrant , virtual-box , docker , linux , vmware

A400互联VPS简单测评及使用

昨天心血来潮,看到推送的主机优惠信息中有一条半价的优惠,A400 互联(带 AFF),查了一下是一家成立不久的国人主机服务提供商,顿时就失去了兴趣,不过后来看到其配置又有点心动。

洛杉矶 [[CN2 线路]]的 VPS:

  • 1 和 1G 30M 带宽, 20G 存储 1T 月流量,36 RMB/三个月
  • 1 核 2G 30M 带宽, 50G 存储 2T 月流量,17 RMB/month
  • 2 核 2G 50M 带宽, 60G 存储 1T 月流量,29 RMB/month
  • 2 核 4G 30M 带宽, 80G 存储 4T 月流量,33.5 RMB/month

都是 KVM 架构的。

随后我又找到两个测试的 IP:

  • 洛杉矶 CN2 GIA:103.150.215.12
  • 香港 CN2:45.195.69.36

最后让我订购的原因就是网络,虽然我对网络要求没有那么高,但是我之前的服务器要不就是在美国网络延迟超过 200ms,要不就是内存空间比较小,稍微吃一点资源的应用就没有办法用上。所以综上我就买了一个洛杉矶的 2 核 4G 配置,网络带宽 30M 我个人也差不多够用了。

因为是国人商家,还是对其抱有一点敬畏,所以重要的数据都不在上面保存,我计划就是用来作为数据中转,以及因为其网络比较满足我的需求,可能用来做一下 frp 端口映射, Gost 端口转发。

另外有一些自动化的服务,比如 Syncthing 文件同步, RSS 抓取(Miniflux),自动化任务(Huginn)等等。

同时定时备份一下相关数据,因为 Syncthing 本身就是多节点的,挂掉一个也不会有影响,我只不过用它来提升同步速度;另外 RSS 阅读器我只需要定期备份一下订阅源即可(如果想保留数据的话,把 PostgreSQL 数据库数据也备份一下即可;Huginn 我只需要备份我的 Task 即可,在新的机器上 Docker 其服务导入即可。

测评

使用 teddysun 的 benchmark 简单的测试一下:

执行:

wget -qO- bench.sh | bash

结果:

----------------------------------------------------------------------
 CPU Model             : Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
 CPU Cores             : 2
 CPU Frequency         : 2399.998 MHz
 CPU Cache             : 16384 KB
 Total Disk            : 109.4 GB (2.9 GB Used)
 Total Mem             : 3936 MB (146 MB Used)
 Total Swap            : 0 MB (0 MB Used)
 System uptime         : 0 days, 0 hour 3 min
 Load average          : 0.18, 0.35, 0.17
 OS                    : Ubuntu 20.04.1 LTS
 Arch                  : x86_64 (64 Bit)
 Kernel                : 5.4.0-42-generic
 TCP CC                : cubic
 Virtualization        : KVM
 Organization          : AS35251 Ziyin Lin trading as Netlab
 Location              : Los Angeles / US
 Region                : California
----------------------------------------------------------------------
 I/O Speed(1st run)    : 252 MB/s
 I/O Speed(2nd run)    : 248 MB/s
 I/O Speed(3rd run)    : 243 MB/s
 Average I/O speed     : 247.7 MB/s
----------------------------------------------------------------------
 Node Name        Upload Speed      Download Speed      Latency
 Speedtest.net    28.63 Mbps        27.18 Mbps          134.59 ms
 Shanghai   CT    13.73 Mbps        27.99 Mbps          125.49 ms
 Shanghai   CU    17.36 Mbps        28.36 Mbps          150.00 ms
 Guangzhou  CT    28.58 Mbps        1.33 Mbps           157.69 ms
 Guangzhou  CU    28.62 Mbps        19.46 Mbps          162.23 ms
 Shenzhen   CU    28.61 Mbps        25.36 Mbps          159.82 ms
 Hongkong   CN    27.79 Mbps        28.43 Mbps          253.90 ms
 Singapore  SG    28.59 Mbps        23.48 Mbps          198.68 ms
 Tokyo      JP    28.88 Mbps        15.75 Mbps          121.03 ms
----------------------------------------------------------------------

IO 性能一般,好一点的机器通常能到 700 MB/s,甚至超过 1GB/s,网络带宽除了一次广州的下载有点奇怪,还行,可以多跑几次看一下,没有虚标。

使用

所有的应用都使用 Docker 安装

如果看到这里,你也想购买,可以使用 链接

nginx-proxy

在执行下的 docker-compose 之前需要先创建 nginx-proxy 名字的网络。可以参考这里

docker network create nginx-proxy

miniflux

[[miniflux]] 是一款用 Go 写的开源 RSS 阅读器,比较轻量,但是功能都有。

version: '3'
services:
  miniflux:
    container_name: miniflux
    image: miniflux/miniflux:latest
    restart: always
    depends_on:
      db:
        condition: service_healthy
    environment:
      - DATABASE_URL=postgres://YOUR_USERNAME:YOUR_PASSWORD@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=MINIFLUX_USERNAME
      - ADMIN_PASSWORD=MINIFLUX_PASSWORD
      - VIRTUAL_HOST=YOUR_DOMAIN
      - VIRTUAL_PORT=8080
      - LETSENCRYPT_HOST=YOUR_DOMAIN
      - LETSENCRYPT_EMAIL=YOUR_EMAIL
  db:
    image: postgres:latest
    container_name: postgres
    restart: always
    environment:
      - POSTGRES_USER=YOUR_USERNAME
      - POSTGRES_PASSWORD=YOUR_PASSWORD
    volumes:
      - miniflux-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "miniflux"]
      interval: 10s
      start_period: 30s
volumes:
  miniflux-db:

networks:
  default:
    external:
      name: nginx-proxy

说明:

  • MINIFLUX_USERNAME: miniflux 后台登录域名
  • MINIFLUX_PASSWORD: miniflux 后台登录密码
  • YOUR_USERNAME: PostgreSQL 数据库用户名
  • YOUR_PASSWORD: PostgreSQL 数据库密码
  • YOUR_DOMAIN: 子域名/域名
  • YOUR_EMAIL: 申请 SSL 证书的邮箱

总结

A400 在我过去使用的两个月里面发生了近 5 次的服务中断问题,幸亏好我把大部分的服务已经迁移到了 HostHatch 后买的 VPS 上了。所幸网络延迟略好,拿来做个代理,做一些不需要 99.99% 在线的应用吧。

reference

  • [[VPS 商家合集]]

2021-08-13 vps , linux , docker , network , cn2 , miniflux

VPS 性能测试

VPS 性能测试的几个方面:

  • 综合性能测试
  • IO 性能测试
  • 网速
  • 路由

综合类测试

在运行这类测试脚本之前,最好先将脚本下载下来之后打开看一眼,以防止安装执行一些不可信的文件。

IPASN AIO Benchmark by mastervnc

The Ultimate Benchmark Script 相较于其他 benchmark 的优势在于可以测试全球不同地区的网络延迟情况。

sudo curl -sL -k https://ipasn.com/bench.sh | sudo bash

来自:LET

NodeBench

NodeBench 是一个聚合脚本

  • 自动测试 Yabs,三网线路,地区解锁情况
  • 输出 Markdown 格式
  • 自动复制到粘贴板
bash <(curl -sL https://raw.githubusercontent.com/LloydAsp/NodeBench/main/NodeBench.sh)

来自:nodeseek

bench.sh

teddysun 提供的综合脚本,检测 CPU,内存,负载,磁盘 IO,带宽:

wget -qO- bench.sh | bash
curl -Lso- bench.sh | bash

UnixBench 测试,UnixBench 跑分不一定代表真实性能,但可以提供一定参考。

wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh
chmod +x unixbench.sh
./unixbench.sh

Yet-Another-Bench-Script

Yet Another Bench Script 正如其名,也是一个用来全面测试 VPS 性能的脚本。

curl -sL yabs.sh | bash

默认情况下脚本会测试:

  • 磁盘读写
  • 网络带宽
  • Geekbench 5 Benchmark

可以通过如下参数来禁用一些检测。

格式:

curl -sL yabs.sh | bash -s -- -flags

将其中的 flags 替换:

  • -f/-d 禁用 fio 磁盘
  • -i 禁用 iperf 网络带宽检测
  • -g 禁用 Geekbench

比如只想检测磁盘读写,可以使用如下的命令:

curl -sL yabs.sh | bash -s -- -i -g

bench monster

Bench.monster 是一个服务器网络连接速度,I/O 速度等等的脚本。

curl -LsO bench.monster/speedtest.sh; bash speedtest.sh

nench

Nench

(curl -s wget.racing/nench.sh | bash; curl -s wget.racing/nench.sh | bash) 2>&1 | tee nench.log

Superspeed.sh

全国各地测速节点的一键测速脚本 Superspeed.sh

使用:

bash <(curl -Lso- https://git.io/superspeed)

Superbench

SuperBench.sh 是在 bench.sh 上的增强,增加了服务器类型检测,OpenVZ, KVM ,独立服务器通电时间检测等。

该脚本需要 root 运行:

wget -qO- https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash
#或者
curl -Lso- https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash

wget -qO- git.io/superbench.sh | bash
curl -Lso- git.io/superbench.sh | bash

Serverreview Benchmark

Serverreview Benchmark:

curl -LsO git.io/bench.sh; chmod +x bench.sh && ./bench.sh -a share

LemonBench

LemonBench,是一款针对 Linux 服务器设计的服务器性能测试工具。通过综合测试,可以快速评估服务器的综合性能,为使用者提供服务器硬件配置信息。

Speedtest

curl -LsO bench.monster/speedtest.sh; bash speedtest.sh -asia

CPU 测试

可以通过手工执行命令的方式查看 CPU 信息:

cat /proc/cpuinfo

同理可以查看内存:

cat /proc/meminfo

以及硬盘:

fdisk -l
df -lh

I/O test

The speed of read and write of your hard drive.

dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
dd if=/dev/zero of=test bs=8k count=256k conv=fdatasync

网速 Net speed

个人比较常用的是 speedtest-cli

pip install speedtest-cli
speedtest-cli

一键脚本测速

wget -qO- network-speed.xyz | bash

测试服务器到国内的速度,oooldking:

wget -qO- https://raw.githubusercontent.com/oooldking/script/master/superspeed.sh | bash

网络连通性

wget https://raw.githubusercontent.com/helloxz/mping/master/mping.sh && bash mping.sh

测试带宽

wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py
python speedtest.py --share

ping测试

全球各地 ping 测试网站:

或者

http://www.ipip.net/ping.php
wget https://raw.githubusercontent.com/helloxz/mping/master/mping.sh
bash mping.sh

路由测试

脚本:

wget -qO- https://raw.githubusercontent.com/zq/shell/master/autoBestTrace.sh | bash

一键检测VPS回程国内三网路由,root1

curl https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh|bash

支持的线路为:电信CN2 GT,电信CN2 GIA,联通169,电信163,联通9929,联通4837,移动CMI

BestTrace 工具。

wget https://cdn.ipip.net/17mon/besttrace4linux.zip
unzip besttrace*
chmod +x besttrace
./besttrace -q1 202.106.196.115

在线测试工具

http://ping.chinaz.com/

https://www.17ce.com/

http://www.webkaka.com/

http://ce.cloud.360.cn/

独立服务器检测 VPS 通电时间

安装检查工具:

sudo apt install -y smartmontools

使用 df -h 查看硬盘设备,然后执行:

smartctl -A /dev/sda | grep "Power_On_Hours"

后面的数字即为硬盘的通电时间小时数。如果通电时间比较长,就要做好备份工作了。

一键脚本:

wget -q https://github.com/Aniverse/A/raw/i/a && bash a

手动测试

CPU

# cpu
cat /proc/cpuinfo
lscpu

IO

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync

网速

# speed
wget http://cachefly.cachefly.net/100mb.test

流媒体解锁脚本

RegionRestrictionCheck

GitHub 地址:https://github.com/lmc999/RegionRestrictionCheck

执行命令:

bash <(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)

reference


2021-07-30 vps , benchmark , bench , cpu , io , net-speed , cli , vps-benchmark , vps-test

使用 Mailu 搭建邮件服务器

Mailu 是一个开源的邮件服务器,可以使用 Docker 部署安装,后台界面使用 Python & Flask 开发。

个人总结的优点

  • Mailu 非常轻量,相较于 Mailcow 非常轻量简洁
  • 自带域名昵称,转发等等常用功能
  • 支持两个 Webmail 分别是 roundcube/rainloop
  • 自动生成 DKIM/DMARC/SPF 记录
  • 可以使用官网的配置,使用 Docker 一键完成安装

建议在开始自建之前先阅读:

了解常用的 [[SPF]],[[DKIM]],[[DMARC]] 记录的作用。

Prerequisite

系统环境要求:

  • 一台 2GB 具有独立 IP 的 VPS,25 端口开放,可以通过 telnet smtp.gmail.com 25 来测试,返回 220 表示可以。
    • VPS 服务提供商可以设置 rDNS
    • VPS 的 IP 最好要比较干净,没有被拉入黑名单
  • 一个可以进行配置 DNS 的域名

本文在 Ubuntu 20.04 LTS 上进行。

确保 25 端口开放

可以使用如下命令测试 25 端口是否开放:

telnet smtp.gmail.com 25

如果返回超时需要向主机提供商申请开通 25 端口。

确保如下的端口可用:

netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995'

设置 hostname

example.com 为例:

sudo hostnamectl set-hostname mx.example.com

重启之后使用如下命令检查:

hostname
# 应该显示 mx
hostname -f
# 应该显示 mx.example.com

DNS 设置

假设 VPS 的域名是 1.1.1.1,以 example.com 为例:

  • 设置 A 记录, mx.example.com 到 1.1.1.1
  • 设置 SPF,TXT 记录,值为 v=spf1 mx ~all
  • DMARC,_dmarc.example.com TXT 记录,值为 v=DMARC1;p=none;pct100;rua=mailto: admin@example.com;ruf=mailto: admin@example.com

记得修改其中的 admin@example.com 为自己的域名。

设置 PTR 反向域名解析

这一步需要在 VPS 提供商后台进行设置,有一些服务器商不支持用户自行修改,那么需要用户 open ticket 来咨询,并设置 IP 到域名的解析记录。

设置完成之后可以通过 dig -x IP 来查看是否生效。

安装 Docker 和 docker-compose 命令

可以参考 Docker 官网安装。

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
systemctl enable docker

安装 Docker Compose

curl -fsSL https://get.docker.com | bash -s docker
curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Mailu 配置

Mailu 官方提供了一个自动配置生成网页

可以选择两种 Webmail

将配置下载之后查看配置,然后使用 Docker Compose 安装

docker-compose up -d

安装成功后:

  • 后台地址: http://example.com/admin
  • Webmail 地址: http://example.com/webmail

等待服务启动之后,登录后台,然后进行一定初始化配置。然后在界面中添加域名。

添加域名

在后台添加域名:

add domain

配置 DNS 解析

登录后台之后,点击 Mail Domains,然后在列表也点击最前面的按钮,进入域名详情之后点击右上角的 Regenerate Keys 生成 [[DKIM]] 和 [[DMARC]] 记录。

然后按照界面显示的内容,将 DNS 记录更新到域名的 DNS 中,等待一段时间生效即可。

mailu dkim

设置 DKIM

添加域名后在后台找到 DKIM,将其值拷贝出来,到 Cloudflare,或者任何 DNS 服务提供商添加 DKIM

添加信箱

在域名界面添加用户邮箱,这个用户邮箱之后就可以通过 [[webmail]] 来登录,发信或者收信。

email user

发信测试

最后可以使用 https://www.mail-tester.com/ 来发信测试。

推广

如果你不想自己搭建邮件服务器,那么也可以选购 EV Hosting 推出的域名邮箱托管服务,可以以极低的价格获得无限域名无限邮箱服务。


2021-07-30 mailu , email , email-host , linux , dkim , mail-server , 域名邮箱

k3s k3d kind minikube microk8s 对比

在本地运行一个 [[Kubernetes]] 可以确保应用可以运行生产环境中。所以可以在本地运行一个类似于 [[minikube]] 的服务,提供一个 Kubernetes 环境。

Kubernetes 是一个 Google 开源的容器编排平台,提供了强大的自动化部署,扩容,管理功能。它提供了非常简单的方式来管理多台机器上的容器,并且提供了负载均衡,资源分配等方式来确保每一个应用都以最优的方式运行。

虽然 Kubernetes 被设计跑在云上,但是很多开发人员依然需要在本地跑起一个 Kubernetes,这就需要一些工具来帮助我们在本地设置这样的一个环境。本文就对比一下这些常用的工具。

K3s

[[k3s]] 是一个轻量级工具,旨在为低资源和远程位置的物联网和边缘设备运行生产级 Kubernetes 工作负载。 K3s 帮助你在本地计算机上使用 VMware 或 VirtualBox 等虚拟机运行一个简单、安全和优化的 Kubernetes 环境。

K3s 提供了一个基于虚拟机的 Kubernetes 环境。如果要设置多个 Kubernetes 服务器,你需要手动配置额外的虚拟机或节点,这可能相当具有挑战性。

然而,它是为在生产中使用而设计的,这使它成为本地模拟真实生产环境的最佳选择之一。要设置多个 Kubernetes 服务器,你需要手动配置额外的虚拟机或节点,这可能相当具有挑战性。

k3s 可以运行在极低的资源下,只需要 512 MB 内存即可运行。

K3d

K3d 是一个平台无关的轻量级包装器,在 docker 容器中运行 K3s。它有助于快速运行和扩展单节点或多节点的 K3S 集群,无需进一步设置,同时保持高可用性模式。

作为 K3s 的一个实现,K3d 分享了 K3s 的大部分功能和缺点;但是,它排除了多集群的创建。K3s 是专门为使用 Docker 容器的多个集群运行 K3s 而构建的,使其成为 K3s 的可扩展和改进版本。

Kind

Kind(Kubernetes in Docker)主要是为了测试 Kubernetes,它可以帮助你在本地和 CI 管道中使用 Docker 容器作为 “节点 “运行 Kubernetes 集群。

它是一个开源的 CNCF 认证的 Kubernetes 安装程序,支持高可用的多节点集群,并从其源头构建 Kubernetes 的发布版本。

microK8s

microK8s 由 Canonical 创建,是一个 Kubernetes 发行版,旨在运行快速、自愈和高可用的 Kubernetes 集群。它为在多个操作系统(包括 macOS、Linux 和 Windows)上快速、轻松地安装单节点和多节点集群进行了优化。

它是在云、本地开发环境以及边缘和物联网设备中运行 Kubernetes 的理想选择。它还可以在使用 ARM 或英特尔的独立系统中高效工作,如 Raspberry Pi。

和 minikube 不同的是,microK8s 可以在本地 Kubernetes 集群中运行多个节点。但 microK8s 的问题在于,它运行在 snap package 之下,它很难运行在不支持 snap 的 Linux 发行版之上。

minikube

minikube 是一个使用最广泛的、可以让用户在本地运行 Kubernetes 的工具。它提供了非常方便的方式可以让用户在不同操作系统上安装和运行单一的 Kubernetes 环境。minikube 通过虚拟机实现。它具有很多功能,如负载平衡、文件系统挂载和 FeatureGates。

尽管 minikube 是本地运行 Kubernetes 的最佳选择,但主要缺点是,它只能运行在单一节点上,也也就意味着本地搭建的 Kubernetes 集群中只能有单个节点–这使得它离生产型多节点 Kubernetes 环境有点远。

Katacoda

也可以通过线上教学平台如 Katacoda 上的免费课程来学习 Kubernetes,它们都是云托管的,你不需要自己安装,只不过你需要云供应商的集群需要付费。

reference


2021-07-25 k8s , k3s , kubernetes , microk8s , google , kubectl

电子书

本站提供服务

最近文章

  • 总结一下 Fediverse 下的有趣的平台 联邦宇宙(Fediverse)是一个由一系列自由软件组成的、相互连接的服务器网络,用于社交媒体、博客、文件托管和其他现代网络活动。这个名字是由“联邦”(Federation)和“宇宙”(Universe)两个词组成的谐音。
  • 我在权益投资市场中犯过的几个错误 一直以来就有一个「话题」萦绕在我的脑海里面,那就是总结回顾一下我过去不长的了解,观察,试水权益市场(证券,期权,基金等)的经历已经在这个市场中犯过的几个致命的错误。
  • 新加坡盈立证券开户及通过 OCBC 入金 盈立证券是一家持牌的香港互联网券商,为全球投资者提供美股、港股、A 股、美股期权等金融产品交易服务。
  • 使用 PlanetScale 以及 Docker 搭建网站分析 Umami Umami 是一个可以自托管的数据统计服务,可以用来代替 [[Google Analytics]]。 “Umami”,源于 “Umai”,在日语里是“美味、鲜味”的意思。
  • 我购买了一张免月租的英国手机卡 GiffGaff giffgaff 是一家来自英国的低成本移动运营商,隶属于英国三大运营商之一的 O2 旗下。成立于 2009 年的 giffgaff,以无实体店面、无客服热线、灵活套餐等特色服务,为用户提供高性价比的移动体验。giffgaff 特别适合短期去英国的游客以及英国留学生,giffgaff 也支持全球漫游。