博客网站搭建

最近把网站迁移到国内的云服务厂商上,之前几次迁移部署都是采用编译安装的方式,非常的不方便,此次采用的是docker方式搭建环境的配置,前端也不再采用nginx,采用了能够自动生成和替换证书的ca#ddy来实现的。

安装workpress

安装docker和docker-compose

# 安装docker
...
# 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

编写wordpress的docker-compose.yml文件

version: "3.9"
    
services:
  db:
    image: mysql:8.0.25
    volumes:
      - ~/docker/mysql/data:/var/lib/mysql
    # docker的重启策略:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: unless-stopped
    command:
      # MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
      # 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
    environment:
      MYSQL_ROOT_PASSWORD: {数据库ROOT密码}
      MYSQL_DATABASE: {数据库名称}
      MYSQL_USER: {数据库普通用户名,可用来做wordpress的用户}
      MYSQL_PASSWORD: {数据库普通用户的密码}
      TZ: Asia/Shanghai
    ports:
      - 3306:3306
    volumes:
      - ~/docker/mysql/data:/var/lib/mysql
      - ~/docker/mysql/conf:/etc/mysql/conf.d
      - ~/docker/mysql/logs:/logs
    networks:
      - app-network
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: {数据库名称}
      WORDPRESS_DB_USER: {数据库普通用户名,可用来做wordpress的用户}
      WORDPRESS_DB_PASSWORD: {数据库普通用户的密码}
    volumes:
      - ~/docker/wordpress:/var/www/html
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

本地需要创建mysql和wordpress的目录,docker会把本地创建的目录挂载到docker镜像中,这样mysql的数据和wordpress的配置才会在docker销毁时不会丢失。

mkdir mysql
mkdir mysql/conf
mkdir mysql/data
mkdir mysql/log
mkdir wordpress

启动docker镜像

docker-compose up

然后临时打云厂商的防火墙的8000端口,在本地看是docker是否能到安装配置页面,如果可以正常打开,说明wordpress已经安装配置完成,可以使用 docker-compose up -d 转到后台执行,我们现在需要把云厂商的防火墙关闭。

安装配置ca#ddy

编写执行脚本

#!/usr/bin/env sh

VERSION=2.4.1
IMAGE=caddy:${VERSION}
CMD=""

docker run -itd --restart=always \
  --name caddy \
  --net=host \
  -v $PWD/conf/Caddyfile:/etc/Caddyfile \
  -v $PWD/data:/data/caddy \
  -v $PWD/www:/opt/www \
  ${IMAGE} caddy run -config /etc/Caddyfile

编写Ca#ddy的配置文件

https://www.{域名}.com https://{域名}.com http://www.{域名}.com http://{域名}.com {

    tls internal {
        on_demand
    }

    route /* {
        reverse_proxy * localhost:8000 {
            header_up -Origin
        }
        encode * {
            gzip
            zstd
        }
    }

    log {
        output stdout
    }

}

预创建目录

mkdir caddy
mkdir caddy/conf
mkdir caddy/data
mkdir caddy/www

执行脚本启动服务器,服务启动后我们在本地机器上可以通过配置hosts的方式,连接上去,看是否能打开wordpress的安装页面。

配置证书

我们使用cloudflare的证书,需要先到其官方网站上注册 https://dash.cloudflare.com/login 账号。

接下来我们需要在网站上添加我们的网站

然后到自己的域名服务商修改域名服务器为cloudflare的,等cloudflare检测通过

# 域名服务器
braden.ns.cloudflare.com
shubhi.ns.cloudflare.com

接下来需要拿到我们的api key,点击cloudflare右上角 “我的个人资料” – “API令牌“

配置ca#ddy

在服务器 caddy/conf 文件夹下编写文件 caddy.service 文件内容为:

[Service]
Environment=CLOUDFLARE_EMAIL={你的邮箱地址}
Environment=CLOUDFLARE_API_KEY={刚拿到的cloudflare密钥}

接下来重启ca#ddy

docker restart caddy

此时用chrome打开网站,查看地址栏左侧是否提示锁的图标,如果不是也不用着急,有可能是域名解析还没有完全切换到新的域名服务器,这需要一定的时间。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据