
在年底趁着黑五, 一时冲动消费, 买了一个vps, 于是就想着如何能利用上vps的全部能力, 一时兴起, 就决定是整一个wordpress. 也想试试能不能利用这个wordpress写一些自己生活里的工作或者生活的笔记. 于是, 就有了长达两个星期的折腾.
为了可以正确的部署wordpress, 搜了好几个方式, 各种panel, 宝塔面板之流的, 感觉都不太喜欢, 于是, 最后还是选择了通过docker的方式来部署, 毕竟docker的方式, 我直觉的认为, 应该是最简单的. 毕竟就是一个docker compose up -d 就能解决的事情, 应该花不了太多时间, 实时证明我错了, 从网上抄配置, 到根据自己的需求配置, 中间还有有很多差异的.
我做的第一个尝试, 是从这个网址, 抄了一个配置. 这个配置, 核心就是先起一个traefik的服务, 然后再起wordpress和db的服务.
好处是:
- 如果有多个需要暴露出来的服务, 不需要频繁的动traefik的服务, 只需要让新服务自动加入traefik的反代就行
- 坏处, 就是需要同时管理两个docker-compose file, 一个用来维护traefik自己的配置, 另一个用来维护wordpress自身的功能. 灵活的代价永远是多了操作的步骤
在自己的一个vps上测试成功了之后, 我估计自己的后续服务应该也不多, 所以, 就想把traefik, wordpress集成在一起, 于是搜了一下这几个关键词, 找到了另一个教程. 这个教程就是我期望用的All in one的形式. 但是, 一如既往的, 没能一次就拉起所有的服务.
在这个debug的过程里, 学会了如何查docker 的log
例如:
docker ps
用于查看已经在运行的container
docker compose logs
如果是通过docker compose up -d 拉起的服务, 可以通过这个方式看一下所有你的服务被启动过程中的log, 用来定位问题
docker network ls
用来检查docker network的内容
docker exec -it myblog-myblog-compose-a0ecga-wordpress-1 bash
进入具体的容器内, 查看, 访问具体的log, 服务
以上是docker 本身的查看问题的方式, 其实部署wordpress, 还遇到很多和域名证书, let‘s encrypt 相关的问题, 也简单罗列一下
- 如果是设置子域名作为blog的访问主要方式, 要留意, 主域名和子域名需要绑定相同的ip地址, 不能主域名在ip: 1234, 而子域名在5678, 以我自己的blog为例子, blog.jackye.top, 需要与主域名jackye.top 在一个相同的ip地址下
- let‘s encrypt有访问频率的限制, 如果, 只是为了测试, 可以先把traefik设置为访问let‘s encrypt的测试服务器地址, 不然, 频繁的docker compose down && docker system prune -a –volumes 会让你每次docker compose up -d重新部署的时候, 申请一次证书, 然后太频繁, 就被禁了, 我卡在这里好几天. 设置let‘s encrypt的方式有好几种, 可以设置在docker compose里, 也可以写一个traefik.yml的file, 作为volume, 让traefik 服务器启动的时候自动挂载配置, 我选择写在docker compose里, 在traefik服务的command下, 加上如下一句:
"--certificatesresolvers.letsencrypt.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory"
完整的示例如下:
traefik:
image: ${TRAEFIK_IMAGE_TAG}
command:
- "--log.level=${TRAEFIK_LOG_LEVEL}"
- "--accesslog=true"
- "--api.dashboard=true"
- "--ping=true"
- "--ping.entrypoint=ping"
- "--entryPoints.ping.address=:8082"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--providers.docker=true"
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
- "--providers.docker.exposedByDefault=false"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=${TRAEFIK_ACME_EMAIL}"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json"
# - "--certificatesresolvers.letsencrypt.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--metrics.prometheus=true"
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
- "--global.checkNewVersion=true"
- "--global.sendAnonymousUsage=false"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- traefik-certificates:/etc/traefik/acme
networks:
- traefik-network
ports:
- "80:80"
- "443:443"
healthcheck:
test: ["CMD", "wget", "http://localhost:8082/ping","--spider"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`${TRAEFIK_HOSTNAME}`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.services.dashboard.loadbalancer.server.port=8080"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.services.dashboard.loadbalancer.passhostheader=true"
- "traefik.http.routers.dashboard.middlewares=authtraefik"
- "traefik.http.middlewares.authtraefik.basicauth.users=${TRAEFIK_BASIC_AUTH}"
"traefik.http.routers.redirectdomain.tls.certresolver=letsencrypt"
restart: unless-stopped
基本上踩到的坑就是这些, 虽然现在wordpress以及架设好了, 但是像是什么自动wordpress备份, 自动db 备份之类的设置还都没设置, 先主打一个能用, 再做后续好用的事情吧, 架设这个wordpress的过程还是学习到不少网络, 配置, 哦, 对了, 还有如何使用AI相关的知识, 领会到如果你本身对一个知识知道的不多的情况下, 不要企图通过使用AI就能救你狗命, 因为你不知道AI到底在哪里说了多少他自己瞎编的内容, 然后刚好AI瞎编的内容, 正是让你踩坑的地方🤷.
最后, 害, 真的是多读文档才能救人狗命
Leave a Reply