从搭建Blog开始
从搭建Blog开始
近期抽空注册了一个免费的VPS,本着不浪费的原则,考虑顺手搭建个Blog,虽然很老土,但还是有不少收获,至少可以解决几点关键需求:
- 个人技术存档
- 工具类后台需要
- 练练手,动动脑
技术方案选型
考虑几点关键需求:
- 支持HTTPS,证书注册及维护简单
- 有管理后台,支持Markdown,方便编写文档
- 小小简单,快速,对VPS要求低
- 整个站点维护简单,移机轻松
综合上述需求,对应的技术方案:
- Caddy 支持免费HTTPS证书自动注册及续期
- typecho 小小简单,支持Markdown
Dockers+Docker-compose 实现快速部署,并解决后期的维护问题
所以综合建立3个docker,分别是:Caddy2 + php8 + mysql8
VPS及域名
Docker-compose
Docker-compose.yml:
version: '3'
services:
caddy:
image: caddy
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- /path_to_your/Caddyfile:/etc/caddy/Caddyfile
- /path_to_your/caddy_data:/data
- /path_to_your/caddy_config:/config
#Caddy requires write access to two locations: a data directory, and a configuration directory.
- /path_to_your/site:/srv
restart: unless-stopped
networks:
- frontend
db:
image: mysql
volumes:
- /path_to_your/database:/var/lib/mysql
- /path_to_your/mysql_logs:/var/log/mysql
- /path_to_your/mysql_conf:/etc/mysql/conf.d
restart: always
expose:
- "3306"
environment:
- MYSQL_ROOT_PASSWORD=your_root_password
- MYSQL_DATABASE=typecho
- MYSQL_USER=typecho
- MYSQL_PASSWORD=your_user_password
- TZ=Asia/Shanghai
networks:
- frontend
php:
#image: php:fpm
build: .
volumes:
- /path_to_your/site:/var/www/html
restart: always
expose:
- "9000"
environment:
- TZ=Asia/Shanghai
depends_on:
- db
- caddy
networks:
- frontend
networks:
frontend:
Caddy配置
Caddyfile:
v365.life www.v365.life {
encode gzip
tls [email protected]
php_fastcgi php:9000 {
root /var/www/html
}
file_server
log {
output file /data/log/web.log
}
}
PHP docker
dockerfile:
FROM php:fpm
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
typecho
下载最新的typecho zip包,并解压到目录:/path_to_your/site下面
运行
执行如下命令,启动服务:
sudo docker-compose up -d
启动后根据typecho安装页面提示进行配置,在数据库界面选择pdo Mysql数据接口,需要根据配置填写:
- 用户名: 根据配置MYSQL_USER=typecho
- 密码: 根据配置MYSQL_PASSWORD=your_user_password
- 数据库路径: db (默认的localhost需要修改)
- 数据库名: typecho
注意点
- Caddy V2与V1配置文件不兼容,有一些细节关键字段有差异,可以参考:Caddy2文档 及 CaddyV2配置文件解析
- PHP、Caddy及Mysql都在不同的Dockers内,不同于单机部署,需要通过bridge互相访问,即通过docker名+端口号形式,在配置文件时需要特别注意
- Mysql /var/lib/mysql映射的数据库所在目录,第一次需确保里面为空,这样才能根据ENV变量自动创建MYSQL_DATABASE