作者: 张端旭

  • 用 Docker 搭建WordPress 网站

    1.升级系统+安装docker+安装compose

    apt update && apt install docker.io docker-compose -y

    2.docker开机自启+启动docker

    sudo systemctl enable docker
    sudo systemctl start docker

    3.创建项目目录并进入目录

    mkdir wordpress-docker && wordpress-docker

    4.创建并编辑docker-compose.yml文件

    nano docker-compose.yml

    5.编辑yml文件内容

    version: "3.8"  # Compose 文件语法版本,3.8 是常用稳定版本
    
    services:
      mariadb: # 数据库服务(使用 MariaDB)
        image: bitnami/mariadb:latest              # 使用 Bitnami 官方 MariaDB 镜像
        container_name: wp-mariadb                 # 容器名字,方便 docker ps 时识别
        restart: unless-stopped                    # 除非手动停止,否则异常会自动重启
        environment:                               # 数据库相关配置
          - MARIADB_ROOT_PASSWORD=changeme-root    # root 密码(要改)
          - MARIADB_DATABASE=wordpress             # WordPress 使用的数据库名
          - MARIADB_USER=wpuser                    # 专门给 WordPress 用的账号
          - MARIADB_PASSWORD=changeme-password     # 上面账号的密码(要改)
        volumes:
          - mariadb_data:/bitnami/mariadb          # 把数据库数据持久化到卷里
    
      wordpress: # WordPress 服务
        image: bitnami/wordpress:latest            # 使用 Bitnami 官方 WordPress 镜像
        container_name: wp-wordpress               # 容器名字
        depends_on:                                # 确保先启动数据库
          - mariadb
        restart: unless-stopped
        ports:
          - "80:8080"                            # 本机 8080 端口 -> 容器 8080(HTTP)
          # 如想用 80 端口访问,可以改成 "80:8080"
        environment:
          # 告诉 WordPress 如何连接数据库
          - WORDPRESS_DATABASE_HOST=mariadb        # 这里用的是上面服务名,不是 IP
          - WORDPRESS_DATABASE_USER=wpuser         # 必须与 mariadb 服务里的保持一致
          - WORDPRESS_DATABASE_PASSWORD=changeme-password
          - WORDPRESS_DATABASE_NAME=wordpress
    
          # 基本站点配置(可选,但建议写上,方便以后看)
          - WORDPRESS_USERNAME=admin               # WP 后台管理员账号
          - WORDPRESS_PASSWORD=changeme-admin      # 管理员密码(要改)
          - WORDPRESS_EMAIL=[email protected]      # 管理员邮箱(可以随便先填)
          - WORDPRESS_BLOG_NAME=My Docker Site     # 站点名称,随便起
    
        volumes:
          - wordpress_data:/bitnami/wordpress      # WordPress 程序和上传内容持久化
    
    volumes:
      mariadb_data:  # 数据库持久化卷
      wordpress_data: # WordPress 文件持久化卷
    

    6.启动docker的wordpress和mariadb

    docker-compose up -d

    7.启动成功浏览器访问

    http://你的服务器IP

    8.按照提示进行剩下配置

    9.如果迁移网站只需要备份wp目录db目录和yml配置文件

  • 手动WordPress 网站迁移详细步骤

    
    

    1.mac系统快捷ssh方式

    访达打开/Users/你的用户名/.ssh

    按command+.显示隐藏文件

    编辑.ssh文件

    此时终端输入 ssh japan可以直接连接服务器

    2.备份原服务器网站数据(3 个核心文件)

    /var/www/wordpress/wp-content //主题、插件、上传媒体

    /var/www/wordpress/wp-config.php //数据库配置

    数据库sql //文章

    使用安全拷贝命令把这个config文件拷贝到本地家目录

    scp 快捷名:/var/www/wordpress/wp-config.php ~/

    把content这个文件夹压缩

    tar -czvf ~/wp-content.tar.gz /var/www/wordpress/wp-content

    使用安全拷贝命令把这个.gz文件拷贝到本地家目录

    scp 快捷名:~/wp-content.tar.gz ~/

    备份数据库(黄色部分填用户名和数据库名,在config文件里查看)

    mysqldump -u DB_USER -p DB_NAME > ~/wordpress-db.sql

    使用安全拷贝命令把这个sql文件拷贝到本地家目录

    scp 快捷名:~/wordpress-db.sql ~/

    此时备份完成三个文件

    ssh新服务器配置运行环境安装四件套nginx+mariadb+php+wordpress

    安装Nginx

    sudo apt update
    sudo apt install -y nginx

    安装MariaDB

    sudo apt install -y mariadb-server
    

    安装PHP

    sudo apt install -y php-fpm php-mysql php-xml php-mbstring php-gd php-curl php-zip
    

    安装wordpress并且设置目录权限为www-data

    sudo wget https://wordpress.org/latest.tar.gz
    sudo tar -xzvf latest.tar.gz -C /var/www/
    sudo chown -R www-data:www-data /var/www/wordpress
    

    配置nginx站点

    sudo nano /etc/nginx/sites-available/wordpress.conf
    
    server {
        listen 80;
        listen 443 ssl http2;
        server_name zhangduanxu.com www.zhangduanxu.com;
    
        root /var/www/wordpress;
        index index.php index.html index.htm;
    
        ssl_certificate     /etc/letsencrypt/live/zhangduanxu.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/zhangduanxu.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        }
    
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
            expires max;
            log_not_found off;
        }
    }
    

    启用站点配置并重新加载

    sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/
    sudo systemctl reload nginx
    

    进入mariadb创建wordpress数据库

    sudo mysql
    CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    

    创建数据库用户名和密码

    CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '密码';
    GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
    FLUSH PRIVILEGES;
    

    上传并导入sql备份

    本地操作

    scp ~/wordpress-db.sql 快捷名:~/
    

    服务器操作

    mysql -u wpuser -p wordpress < /root/wordpress-db.sql
    

    恢复wp-content和wp-config.php

    scp ~/wp-content.tar.gz 快捷名:~/
    scp ~/wp-config.php 快捷名:/var/www/wordpress/wp-config.php

    删除旧的目录,解压备份到指定目录

    sudo rm -rf /var/www/wordpress/wp-content
    sudo tar -xzvf ~/wp-content.tar.gz -C /var/www/wordpress/
    

    把配置文件和content文件夹权限改一下

    chown root:www-data /var/www/wordpress/wp-config.php
    chmod 640 /var/www/wordpress/wp-config.php
    sudo chown -R www-data:www-data /var/www/wordpress/wp-content
    sudo chmod -R 755 /var/www/wordpress/wp-content
    
    

    重启一下服务

    sudo systemctl reload nginx
    sudo systemctl restart php-fpm
    

    开启防火墙ufw

    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    
    
    sudo ufw enable
    
    sudo ufw status verbose
    

    安装certbot

    sudo apt update
    sudo apt install -y certbot python3-certbot-nginx
    

    申请证书

    sudo certbot --nginx -d zhangduanxu.com -d www.zhangduanxu.com
    

    重启nginx

    sudo systemctl reload nginx
    

    用cloudflare做cdn加速

    把cloudflare里的域名解析设置成新的网站ip和域名

    在域名申请处设置ns解析为cloudflare

    wordpress设置界面把网址设置为域名

  • sui搭建hy2+vless两个协议

    系统:debian10.3+bbr2

    面板:s-ui

    协议1:hysteria 2(高速)

    协议2:vless+reality(防封)

    1.系统为debian10.3 自带bbr2

    2.查看系统正在使用的算法

    sysctl net.ipv4.tcp_congestion_control

    3.debian系统版本低,官方源无法升级

    # 1️⃣ 备份旧的软件源配置
    mv /etc/apt/sources.list /etc/apt/sources.list.bak
    
    # 2️⃣ 写入 Debian 10 的归档源
    cat <<EOF > /etc/apt/sources.list
    deb http://archive.debian.org/debian buster main contrib non-free
    deb-src http://archive.debian.org/debian buster main contrib non-free
    deb http://archive.debian.org/debian-security buster/updates main contrib non-free
    deb-src http://archive.debian.org/debian-security buster/updates main contrib non-free
    EOF
    
    # 3️⃣ 禁用过期校验
    echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99disable-check-valid-until
    
    # 4️⃣ 更新并安装 curl
    apt update -y
    apt install -y curl
    

    4.一键安装s-ui

    bash <(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/master/install.sh)

    5.设置面板端口、面板路径、账号密码

    6.打开sui的web面板中需要设置3个内容,用户管理+入站管理+tls

    7.用户管理

    8.tls设置reality

    9.tls设置tls

    9.入站管理hy2协议

    10.入站管理vless协议

    11.粘贴用户管理的链接到客户端启用

  • AWS的VPC架构资源图

    6个子网:2公有+2私有+2数据库

    2个可用区:ap-east-1a+ap-east-1b

    5个路由表:1默认+2私网路由表+1公网路由表+1数据库路由表

    4个出口:IGW+NAT1+NAT2+S3

  • VPN配置拓扑和域名IP策略路由

    网络结构拓扑图:

    如果用sdwan的方式,不需要手工f12抓域名和ip,手动配置vpn隧道,sdwan可以直接自动识别。目前采用传统vpn方式

    访问范围:分部用户访问指定网站

    出口要求:必须通过总部专线出口访问

    原因:网站启用了 IP 白名单,总部专线的公网 IP 已在白名单内,分部由于无固定公网 IP,无法直接加入白名单

    1.总部与分部建立vpn隧道:总部建立vpn服务器,分部建立vpn客户端,选择相同的vpn协议,如l2tp、pptp,建立好vpn隧道,设置用用户名密码。

    2.总部访问指定网站获取域名和ip:先用总部电脑访问目标网站aaa.com,按f12进入网络选项,查看所有域名,包括因cdn加速出现的cdn域名,登录账号密码后ctrl+r刷新后页面,继续查看补充域名。然后进入分部电脑查看是否有加载失败的红色的域名,如果有把这个域名在电脑做tracert查看具体ip,并把这个ip加入分部的静态路由列表,路由到vpn隧道。

    3.配置分部路由策略:记录的所有域名加入域名分流,分流到vpn隧道,记录的所有ip地址加入静态路由,路由到vpn隧道。

    4.设置多线路dns:为分部路由wan口设置dns,为vpn设置dns,保证分流规则可以正确解析到指定出口。

    5.测试:分部电脑访问目标网站,确认所有页面和验证码可以正常加载,如果有加载失败的,重复F12查看失败的域名和对应ip,加入到域名策略和静态路由

  • 自建Hysteria2+TLS代理-基于Sing-box+S-UI面板完整教程

    需要自行购买vps,并且需要基础linux操作和ssh登录服务器

    1.购买一个服务器开机并通过ssh连接root权限(ubuntu系统)

    2.s-ui面板一键安装脚本 系统自动安装singbox和s-ui

    bash <(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/master/install.sh)
    

    3.安装完成按照英文提示设置 用户名,密码,面板端口,面板路径,订阅端口,订阅路径。默认面板端口为8080

    4.浏览器访问 http://服务器ip:端口/面板路径/

    4.1访问失败在服务器安全组防火墙放行面板端口和tcp协议,如果还是失败在ssh查看错误日志并检查服务器ip是否国内可ping通

    journalctl -u s-ui -n 50 --no-pager

    5.添加tls模板

    5.1名称自定定义,点右边钥匙生成证书,允许不安全

    6.进入s-ui面板添入站规则

    6.1类型选择hy2,标签自定义,地址0.0.0.0,端口任意高位端口8443或者其他,监听选项点开,把udp选项打开,hy2选项打开,把混淆密码打开,填写混淆密码自定义

    7.用户管理添加用户,名称自定义,流量日期自定义,入站标签选择刚才添加的入站配置

    7.1点开配置选项,找到hy2列对应的密码复制

    8.v2rayn客户端设置,添加hy2协议,别名自定义,地址为服务器ip,端口为刚才设置的高位端口8443或者其他,密码为配置选项复制的,混淆密码为入站列表的混淆密码,tls选择跳过证书验证true

    9.(可选)最后v2rayn客户端目录下的.json配置文件可以编辑打开,在密码和混淆密码后面添加bbr加速,拥塞控制算法。

    "fast_open": true,
    "congestion_control": "bbr"

    9.完成

    hy2基于quic+udp,连接速度快,重传机制在网络不稳定的环境中,比tcp协议的vless更稳定,延迟低,可以做游戏加速器。但是防封隐蔽性不如vless+reality。

  • AWS混合云+微服务+EKS on Fargate部署高可用架构

    整体框架流程概念

    保留 Lightsail 实例作为混合架构的一个节点,同时部署到AWS VPC中ec2实例并配置高可用架构

    1.lightsail和aws ec2做VPC Peering

    2.vpc创建公有子网10.0.1.0/24,私有子网10.0.2.0/24,创建IGW,创建公共路由表,配置安全组,lightsail防火墙规则。

    3.数据库与web服务分离,在aws中创建一个rds数据库实例,并开启mulit-az提高可用性,使用DMS数据库迁移服务从lightsail迁移到RDS实例中。

    4.数据同步,创建efs文件系统挂载到ec2实例中,把lightsail中所需要共享的文件目录复制到efs卷中

    5.创建AMI镜像,创建启动模板,挂载efs脚本,创建ASG,配置ALB

    6.route 53前端部署CDN(amazon cloudfront),配置DNS解析

    后续扩展

    1.事件驱动的微服务-解耦 自动处理一系列任务,

    核心技术栈:

    Amazon S3,存储桶,事件来源

    AWS Lambda,触发策略执行

    Amazon SNS,简单通知服务,消息中心

    Amazon SQS,简单队列服务,接收来自sns消息并保留在队列中

    2.eks+fargate架构方案

    1.本地构建镜像把应用容器化(网站),上传到amazon ecr(aws的docker仓库)

    2.创建eks集群,指定vpc、子网、iam角色

    3.本地安装kubectl(k8s命令行工具),连接eks

    4.配置fargate profile

    5.编写deployment.yaml,k8s指令,编写service.yaml创建统一内部入口,本地将指令发送给eks集群

    6.vpc的私有子网创建rds数据库将rds的地址用户名密码发给pod

    7.创建efs文件系统用来共享文件,在eks集群安装efs csi driver插件,通过k8s持久卷和持久卷声明,让pod挂载efs文件系统,完成文件共享

    8.部署ALB,在eks集群中安装aws load banlancer controller(负载均衡控制器)插件。编写ingress.yaml,将域名的所有流量转发给pod(网站容器),配置dns,在route 53 里将域名指向alb的dns地址

    9.网站访问过程

    用户浏览器—zhangduanxu.com—route53解析dns—aws alb应用负载均衡—EKS集群—blog-service—网站pod

  • 链式代理部署入口ipv6,第一层代理Vless+Reality+第二层代理Wireguard隧道,IPv4/v6双栈出口

    1.本地路由器开启ipv6协议

    2.全链路需要支持ipv6

    3.部署第一层代理服务器设置vless+reality协议

    4.代理1和代理2设置通过3xui分别设置入站出站规则

    5.部署第二层代理服务器与第一层通过wireguard-vpn加密连接

    6.第二层服务器出口选择ipv4+ipv6双栈出口

    7.最后效果为目标网站显示ip为第二层服务器ip,中国防火墙显示ip为第一层服务器ip,如果ip被检测异常封禁,那么更换第一层服务器即可,如果启用ipv6直接换ipv6地址即可。第二层服务器ip不会被封。