文章详情

返回首页

★★★docker 安装最小化带数据库多网站 示例

分享文章 作者: Ws01 创建时间: 2026-02-18 更新时间: 2026-02-18 📝 字数: 7,533 字 👁️ 阅读: 6 次

docker 安装最小化带数据库多网站 示例,安装前看看目录结构,如需要修改,先研究一下。
Debian 11、12系统适用,与其它方式安装不冲突

一、目录结构

/home/html/docker/web1/
├── docker-compose.yml
├── Caddyfile
├── public/(网站文件存放目录public)
├── public1/(网站文件存放目录public1)
├── public2/(网站文件存放目录public2)
├── public3/(网站文件存放目录public3)
├── public4/(网站文件存放目录public4)

├── php/
│ └── Dockerfile
└── data/ (一个数据库,安装后数据库文件会自动生成)

二、安装前准备:
1、相关升级

apt update && apt upgrade -y && apt install -y curl wget unzip zip

2、安装好 docker compose

curl -fsSL https://get.docker.com | sh && ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin

三、创建目录结构和三个需要文件
1、创建目录并给予相应775权限

sudo mkdir -p /home/html/docker/web1/php/

安装第1个网站目录public

sudo mkdir -p /home/html/docker/web1/public && sudo chown -R www-data:www-data /home/html/docker/web1/public && sudo chmod -R 775 /home/html/docker/web1/public

安装第2个网站目录public1

sudo mkdir -p /home/html/docker/web1/public1 && sudo chown -R www-data:www-data /home/html/docker/web1/public1 && sudo chmod -R 775 /home/html/docker/web1/public1

安装第3个网站目录public2

sudo mkdir -p /home/html/docker/web1/public2 && sudo chown -R www-data:www-data /home/html/docker/web1/public2 && sudo chmod -R 775 /home/html/docker/web1/public2

安装第4个网站目录public3

sudo mkdir -p /home/html/docker/web1/public3 && sudo chown -R www-data:www-data /home/html/docker/web1/public3 && sudo chmod -R 775 /home/html/docker/web1/public3

安装第5个网站目录public4,以此类推

sudo mkdir -p /home/html/docker/web1/public4 && sudo chown -R www-data:www-data /home/html/docker/web1/public4 && sudo chmod -R 775 /home/html/docker/web1/public4

2、添加 web1 775权限

sudo chown -R www-data:www-data /home/html/docker/web1 && sudo chmod -R 775 /home/html/docker/web1

3、下载三个需要文件
下载docker-compose.yml文件或复制创建【一定要修改数据库中的两个密码,安装多站点时要相应修改配置

cd /home/html/docker/web1/

wget https://raw.githubusercontent.com/wszx123/gongjuxiang/refs/heads/main/docker/typecho/docker-compose.yml

复制创建,以两个网站和一个数据库为例,3、4或多个类似修改添加
services:

caddy:
image: caddy:2-alpine
containername: caddyweb1
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./public:/srv/public
- ./public1:/srv/public1
- caddy_data:/data
- caddy_config:/config
depends_on:
- php

php:
build: ./php
containername: phpweb1
volumes:
- ./public:/srv/public
- ./public1:/srv/public1
depends_on:
- db

db:
image: mariadb:10.7
containername: mariadbweb1
restart: always
environment:
MYSQLROOTPASSWORD: rootpass123
MYSQL_DATABASE: web1
MYSQL_USER: web1
MYSQL_PASSWORD: web1pass123
volumes:
- ./data:/var/lib/mysql

volumes:
caddy_data:
caddy_config:

复制创建,以两个网站和两个数据库为例,3、4或多个类似修改添加
services:

caddy:
image: caddy:2-alpine
containername: caddyweb1
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./public:/srv/public
- ./public1:/srv/public1
- caddy_data:/data
- caddy_config:/config
depends_on:
- php

php:
build: ./php
containername: phpweb1
volumes:
- ./public:/srv/public
- ./public1:/srv/public1
depends_on:
- db1
- db2

db1:
image: mariadb:10.7
containername: mariadbweb1
restart: always
environment:
MYSQLROOTPASSWORD: rootpass123
MYSQL_DATABASE: web1
MYSQL_USER: web1
MYSQL_PASSWORD: web1pass123
volumes:
- ./data1:/var/lib/mysql

db2:
image: mariadb:10.7
containername: mariadbweb2
restart: always
environment:
MYSQLROOTPASSWORD: rootpass123
MYSQL_DATABASE: web2
MYSQL_USER: web2
MYSQL_PASSWORD: web2pass123
volumes:
- ./data2:/var/lib/mysql

volumes:
caddy_data:
caddy_config:

下载Caddyfile文件【下载后记事本打开,修改好解析的域名,安装多站点时也要添加相应域名配置

cd /home/html/docker/web1/

wget https://raw.githubusercontent.com/wszx123/gongjuxiang/refs/heads/main/docker/typecho/Caddyfile


或主动创建Caddyfile文件

web1.example.com {

root * /srv/public #安装路径,备注什么网站
php_fastcgi php:9000
file_server
}


下载Dockerfile文件

cd /home/html/docker/web1/php/

wget https://raw.githubusercontent.com/wszx123/gongjuxiang/refs/heads/main/docker/typecho/Dockerfile


或主动创建Dockerfile文件

FROM php:8.1-fpm

RUN docker-php-ext-install pdo pdo_mysql mysqli
WORKDIR /srv

4、下载官方 Typecho 安装包或上传后解压【已测试正常】, 搭建其它网站自己上传

cd /home/html/docker/web1/public/

wget https://github.com/typecho/typecho/releases/download/v1.2.1/typecho.zip
unzip typecho.zip
rm typecho.zip

四、以上步骤完成后启动【1检查域名配置文件 Caddyfile 是否配置好,2检查 docker-compose.yml 中的数据库密码等是否修改,如果是 多站点时,是否已添加多站点的配置】

cd /home/html/docker/web1/

docker-compose up -d

五、打开网站安装,安装时如会出现 uploads 权限问题,给予权限,其它小问题按提示解决或刷新网页重新安装

数据库地址: db 或用默认
数据库名: web1
用户名: web1
密码: web1pass123 【或修改后的密码】

如需修改php.ini文件配置,以便上传更大的文件等

步骤:

1.创建自定义的 php.ini 文件:
在项目根目录下,创建一个自定义的 php.ini 文件。文件内容可以类似于:

uploadmaxfilesize = 100M

postmaxsize = 80M
maxexecutiontime = 300
maxinputtime = 600
memory_limit = 256M


根据需求修改这些参数的值。
2.修改 docker-compose.yml:
在 php 服务中挂载你创建的 php.ini 文件到容器的正确位置。通常,PHP 的 php.ini 配置文件位于容器中的 /usr/local/etc/php 路径下。

修改后的 docker-compose.yml 文件如下:

services:

caddy:
image: caddy:2-alpine
containername: caddyweb1
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./public:/srv/public
- ./public1:/srv/public1
- caddy_data:/data
- caddy_config:/config
depends_on:
- php

php:
build: ./php
containername: phpweb1
volumes:
- ./public:/srv/public
- ./public1:/srv/public1
- ./php.ini:/usr/local/etc/php/conf.d/custom.ini # 添加这行来挂载 php.ini
depends_on:
- db1
- db2

db1:
image: mariadb:10.7
containername: mariadbweb1
restart: always
environment:
MYSQLROOTPASSWORD: rootpass123
MYSQL_DATABASE: web1
MYSQL_USER: web1
MYSQL_PASSWORD: web1pass123
volumes:
- ./data1:/var/lib/mysql

db2:
image: mariadb:10.7
containername: mariadbweb2
restart: always
environment:
MYSQLROOTPASSWORD: rootpass123
MYSQL_DATABASE: web2
MYSQL_USER: web2
MYSQL_PASSWORD: web2pass123
volumes:
- ./data2:/var/lib/mysql

volumes:
caddy_data:
caddy_config:


3.重新构建容器:
修改完 docker-compose.yml 文件后,你需要重新构建并启动容器:

⚡ 如果你要再装第二个、第三个或多网站,只需要在 /home/html/docker/web1/ 下新建文件夹public1、public2、public3等,然后在 docker-compose.yml 里添加好相应配置,域名配置 Caddyfile 文件也要添加好域名

以此类推

六、🚀 迁移步骤(最简洁)

  1. 旧 VPS 打包,打包整个项目目录,包括数据库。
  2. cd /home/html/docker/
    

    zip -q -r /home/backup$(date +%Y%m%d%H%M).zip web1


    cd /home/html/docker/
    

    tar -czvf typecho1_backup$(date +%Y%m%d%H%M).tar.gz web1

  3. 把备份传输到新 VPS或手动下载后再上传到新vps上
  4. 新 VPS 解压 & 启动

进入目录并启动:

cd /home/html/docker/web1/

docker-compose up -d

✅ 总结

1、这种方式安装,数据库数据 已经在 data/ 挂载目录里,所以无需单独 mysqldump 导出导入。

2、整个 web1 项目文件夹就是完整环境,直接打包迁移即可。

3、在新 VPS 上只需要 docker-compose up -d,就能恢复完整博客,方便迁移和备份,适合折腾。

4、可以快捷的一个vps中添加更多的网站