Login

Navigation

This articles is published 243 days ago and last updated 243 days ago, some information may be out of date.

VPC Network Diagram

OPC.png

前言:
我之前的博客是部署在家中的機器,發現Oracle 提供雲免費套餐服務,包括2 個基於 AMD 的計算虛擬機,每個虛擬機配備 2Core CPU 和 1 GB 內存,對於私人博客是夠用,開始嘗試將部份服務轉移到Oracle的VPC內,於是就有了這篇記錄。

目錄內容:

Docker

DNMP (Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一鍵安裝程序

我主要是用於建立私人博客,用文字記錄生活。

默認支持pdo_mysqlmysqlimbstringgdcurlopcache等常用熱門擴展,根據環境靈活配置。

version: "3"
services:
  nginx:
    build:
      context: ./services/nginx
      args:
        NGINX_VERSION: nginx:${NGINX_VERSION}
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS}
    container_name: nginx
    ports:
        #- "${NGINX_HTTP_HOST_PORT}:80"
        #- "${NGINX_HTTPS_HOST_PORT}:443"
      - "1080:1080"
      - "2080:2080"
      - "3080:3080"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_FASTCGI_PHP_CONF}:/etc/nginx/fastcgi-php.conf:ro
      - ${NGINX_FASTCGI_PARAMS}:/etc/nginx/fastcgi_params:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    environment:
      TZ: "$TZ"
    restart: always
    networks:
      - default

  php:
    build:
      context: ./services/php
      args:
        PHP_VERSION: php:${PHP_VERSION}-fpm-alpine
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        PHP_EXTENSIONS: ${PHP_EXTENSIONS}
        TZ: "$TZ"
    container_name: php
    expose:
      - 9501
    extra_hosts:
      - "www.site1.com:172.17.0.1"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
      - ${PHP_LOG_DIR}:/var/log/php
      - ${DATA_DIR}/composer:/tmp/composer
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default


  mysql:
    image: mysql:${MYSQL_VERSION}
    container_name: mysql
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${DATA_DIR}/mysql:/var/lib/mysql/:rw
    restart: always
    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      TZ: "$TZ"

networks:
  default:

返回目錄內容

輕量型容器,可定期為多個 DNS 供應商更新 DNS A 和/或 AAAA 記錄,主要更新自己的域名,還可以查看DDNS更新狀態,非常方便。

DDNS_2022-01-26_105400.png

version: "3.7"
services:
  ddns-updater:
    image: qmcgaw/ddns-updater
    container_name: ddns-updater
    network_mode: bridge
    ports:
      - 8000:8000/tcp
    volumes:
      - ./data:/updater/data
    environment:
      - CONFIG=
      - PERIOD=5m
      - IP_METHOD=cycle
      - IPV4_METHOD=cycle
      - IPV6_METHOD=cycle
      - HTTP_TIMEOUT=10s

      # Web UI
      - LISTENING_PORT=8000
      - ROOT_URL=/

      # Backup
      - BACKUP_PERIOD=0 # 0 to disable
      - BACKUP_DIRECTORY=/updater/data

      # Other
      - TZ=Asia/Hong_Kong
    restart: always

data/config.json配置

{
  "settings": [
    {
      "provider": "cloudflare",
      "zone_identifier": "%RoL['a0fw>9Gxu", #自行穫取
      "domain": "kingtam.win",
      "host": "@",
      "ttl": 600,
      "token": "%RoL['a0fw>9Gxu", #自行穫取
      "ip_version": "ipv4"
    }
  ]
}

返回目錄內容

ACME
acme.sh 實現了 acme 協議, 可以從 letsencrypt 生成免費的證書,如果是使用 freenom 域名,可配合 luolongfei 大佬的域名自動續期,無論是域名還是TLS證書也變得全自動,永不過期。

最後使用nginx服務器, 反代自己的博客。

https://github.com/acmesh-official/acme.sh

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m [email protected]

ACME_2021-10-15_123100.png

返回目錄內容

VPN

利用 VPN 可以簡單部署及測試 VPC ,就像內網機器使用一樣。
  • ZeroTier
ZeroTier 結合了 VPN SD-WAN 的功能,簡化了網路管理。

我在使用功能ZeroTier 實現遠端訪問局域網,因為好多大佬編譯OpenWRT已經build-in ZeroTIer軟件,在設定和使用上變得簡單。

  • Tailscale
ZerotierTailSale 非常類似,我使用 TailSale 主要是透過Zerotier 訪問內網段20.13.3.0/24 失效,誤判為外網網段而不能訪問。而使用 TailSale 的設定可以實現遠端訪問網段為 20.13.3.0/24 的局域網。

我使用 TailSale 的功能和設定,TailScale 實現遠端訪問整段局域網 (ZeroTier 另一選擇)TailScale 實現「出口節點」"Exit Node"(導向所有流量經這出口節點)

返回目錄內容

Rclone
Rclone 是一個命令行程式,用於管理雲存儲上的檔。主要是定期備份 VPC 的內容到雲端上。

RCLONE_2022-01-26_105552.png

備份腳本配置: (參考鳥哥的每週系統備份的 script)

#!/bin/bash
# =========================================================
# Source Folder
BaseDir=/home/opc/backup/
Weekly=/home/opc/backup/Weekly

# =========================================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C

# 判斷目錄是否存在,若不存在則予以建立。
for dirs in $BaseDir $Weekly
do
            [ ! -d "$dirs"  ] && mkdir -p $dirs
done

# Stop the Docker-Compose
cd /home/opc/apps/dnmp
    docker-compose stop

# Differential Backup (DNMP)
cd /home/opc/apps
tar -N '2021-12-25' -czv -f $Weekly/dnmp.$(date +%Y-%m-%d).tar.gz dnmp

# Start the Docker-Compose
cd /home/opc/apps/dnmp
    docker-compose up -d

# Sychonizztion OPC Apps to Cloud(LWCPS) Folder
rclone sync --progress $BaseDir LWCPS:/Cloud/OPC/Apps


# Delete Files older Than 180 Days
find $Weekly/* -mtime +180 -exec rm {} \;

加入到排程 crontab

30 2 * * 1 "/home/opc/script/sync.sh" > /dev/null

返回目錄內容

結語:
VPC可以實現功能是太過豐富,我所使用的只是冰山一角。如可實現安裝路由器功能,代理軟件供404區以外用戶翻過來等等。