Loading... 在Debian 11、12系统,用docker搭建Caddy + PHP动、静态网站 文件夹 *home/html/web/web1* 一、常规安装,一个网站,不用数据库【推荐用第二或第三个方式 **多站点** 方式安装,便于以后在vps上搭建更多网站】,方法可行。 **目录结构** (建议) /home/html/web/web1/ ├── docker-compose.yml ├── Caddyfile └── public/ # 网站文件 (index.php, index.html等) 1、更新系统 ``` sudo apt update && sudo apt upgrade -y ``` 2、安装 Docker 和 Docker Compose ``` sudo apt install -y docker.io docker-compose ``` 3、创建网站目录 a、灵活安装 ``` sudo mkdir -p /home/html/web/web1 cd /home/html/web/web1 ``` *或* b、简单安装【推荐】 创建目录结构 ``` # 创建目录结构 sudo mkdir -p /home/html/web/web1/public ``` 创建 Caddyfile,解析好域名的,:80可替换域名example.com ``` # 创建 Caddyfile cat << 'EOF' | sudo tee /home/html/web/web1/Caddyfile :80 { root * /srv php_fastcgi php:9000 file_server } EOF ``` 创建测试 PHP 文件 ``` # 创建测试 PHP 文件 cat << 'EOF' | sudo tee /home/html/web/web1/public/index.php <?php phpinfo(); EOF ``` 4、编写 docker-compose.yml ``` version: "3.8" services: caddy: image: caddy:latest container_name: caddy_web1 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./public:/srv - caddy_data:/data - caddy_config:/config depends_on: - php php: image: php:8.2-fpm container_name: php_web1 restart: unless-stopped volumes: - ./public:/srv volumes: caddy_data: caddy_config: ``` 5、编写 Caddyfile,如果第三步中已安装好域名的,此步省略 ``` example.com { root * /srv php_fastcgi php:9000 file_server } ``` 6、放置测试文件,如果第三步中已放置测试文件,此步省略 ``` echo "<?php phpinfo(); ?>" > /home/html/web/web1/public/index.php ``` 7、启动服务 ``` cd /home/html/web/web1 sudo docker-compose up -d ``` 查看容器状态: ``` sudo docker ps ``` 8、访问测试 打开浏览器访问 http://服务器IP/ 如果绑定了域名(并改了 Caddyfile),访问 https://你的域名/ ------------ 二、多站点 Caddyfile 模板【不用数据库】,以三个web1、web2、web3为例,更多个网站类推,方法可行 **目录结构建议** /home/html/web/ ├── web1/ │ ├── public/ # 网站1的文件 │ ├── Caddyfile.web1 # 网站1配置 ├── web2/ │ ├── public/ # 网站2的文件 │ ├── Caddyfile.web2 # 网站2配置 ├── web3/ │ ├── public/ # 网站3的文件 │ ├── Caddyfile.web3 # 网站3配置 └── docker-compose.yml # 统一的 compose └── Caddyfile # 主配置,引用各站点 1、更新系统 ``` sudo apt update && sudo apt upgrade -y ``` 2、安装 Docker 和 Docker Compose ``` sudo apt install -y docker.io docker-compose ``` 3、创建三个目录结构并给予权限【 *更多网站类似添加* 】 网站1 ``` sudo mkdir -p /home/html/web/web1/public sudo chmod -R 755 /home/html/web/web1/public ``` 网站2 ``` sudo mkdir -p /home/html/web/web2/public sudo chmod -R 755 /home/html/web/web2/public ``` 网站3 ``` sudo mkdir -p /home/html/web/web3/public sudo chmod -R 755 /home/html/web/web3/public ``` 4、在文件夹 */home/html/web/* 创建统一的 docker-compose.yml【 *更多网站类似添加* 】 ``` version: "3.8" services: caddy: image: caddy:latest container_name: caddy_main restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./web1/public:/srv/web1 - ./web2/public:/srv/web2 - ./web3/public:/srv/web3 - caddy_data:/data - caddy_config:/config depends_on: - php php: image: php:8.2-fpm container_name: php_main restart: unless-stopped volumes: - ./web1/public:/srv/web1 - ./web2/public:/srv/web2 - ./web3/public:/srv/web3 volumes: caddy_data: caddy_config: ``` 5、总控 Caddyfile【 *更多网站类似添加* 】 ``` # Web1 - 用域名 web1.example.com { root * /srv/web1 php_fastcgi php:9000 file_server } # Web2 - 用域名 web2.example.com { root * /srv/web2 php_fastcgi php:9000 file_server } # Web3 - 用 IP + 端口(测试用) :8080 { root * /srv/web3 php_fastcgi php:9000 file_server } ``` 6、启动 ``` cd /home/html/web sudo docker-compose up -d ``` 7、快速测试文件【 *更多网站类似添加,个别vps可能添加不上,用上传方式* 】 ``` echo "<?php echo 'Hello Web1!'; ?>" | sudo tee /home/html/web/web1/public/index.php ``` ``` echo "<?php echo 'Hello Web2!'; ?>" | sudo tee /home/html/web/web2/public/index.php ``` ``` echo "<?php echo 'Hello Web3!'; ?>" | sudo tee /home/html/web/web3/public/index.php ``` 三、如果 **需要数据库** ,在方式二的基础上修改, *docker-compose.yml* 添加 *db* 项,web主目录下新建 php 文件夹,php 文件夹添加 Dockerfile 文件, **注意修改数据库相关密码** 目录结构 /home/html/web/ ├── web1/ │ └── public/ # 放 Typecho ├── web2/ │ └── public/ ├── web3/ │ └── public/ ├── docker-compose.yml ├── php/ │ └── Dockerfile └── Caddyfile 1、统一的 *docker-compose.yml* 【 **注意修改数据库相关密码** 】 ``` version: "3.8" services: caddy: image: caddy:latest container_name: caddy_main restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./web1/public:/srv/web1 - ./web2/public:/srv/web2 - ./web3/public:/srv/web3 - caddy_data:/data - caddy_config:/config depends_on: - php php: build: ./php image: php:8.2-fpm container_name: php_main restart: unless-stopped volumes: - ./web1/public:/srv/web1 - ./web2/public:/srv/web2 - ./web3/public:/srv/web3 depends_on: - db db: image: mariadb:10.7 container_name: mariadb_web1 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: rootpass123 MYSQL_DATABASE: typecho MYSQL_USER: typecho MYSQL_PASSWORD: typechopass volumes: - db_data:/var/lib/mysql volumes: caddy_data: caddy_config: db_data: ``` 2、php/Dockerfile ``` FROM php:8.2-fpm # 安装 MySQL 扩展 RUN docker-php-ext-install pdo_mysql mysqli # 可选:安装 gd、zip 等(上传图片/压缩包可能用到) RUN apt-get update && apt-get install -y libjpeg-dev libpng-dev libzip-dev \ && docker-php-ext-install gd zip WORKDIR /srv ``` 访问 http://web1.example.com,进入安装向导。 数据库地址: *db* 数据库名: *typecho* 用户: *typecho* 密码: *typechopass* 2、安装 Typecho 命令,也可以下载修改好后上传 ``` cd /home/html/web/web1/public wget https://github.com/typecho/typecho/archive/refs/tags/v1.2.1.zip -O typecho-1.2.1.zip unzip typecho-1.2.1.zip mv typecho-1.2.1/* ./ rm -rf typecho-1.2.1 typecho-1.2.1.zip ``` 3、启动 ``` cd /home/html/web sudo docker-compose up -d ``` 四、如果搭建网站中需要两个数据库【三个数据库或更多数据库类推】,例如,安装两个Typecho 1、一个数据库服务,多个数据库 docker-compose.yml(推荐方案) ``` version: "3.8" services: caddy: image: caddy:latest container_name: caddy_main restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./web1/public:/srv/web1 - ./web2/public:/srv/web2 - ./web3/public:/srv/web3 - caddy_data:/data - caddy_config:/config depends_on: - php php: image: php:8.2-fpm container_name: php_main restart: unless-stopped volumes: - ./web1/public:/srv/web1 - ./web2/public:/srv/web2 - ./web3/public:/srv/web3 depends_on: - db db: image: mariadb:10.6 container_name: mariadb_main restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: rootpass123 volumes: - db_data:/var/lib/mysql volumes: caddy_data: caddy_config: db_data: ``` 2、初始化两个数据库 启动容器后进入 MariaDB: ``` docker exec -it mariadb_main mysql -uroot -p ``` 输入 rootpass123 后,创建两个数据库和用户: ``` CREATE DATABASE typecho1; CREATE DATABASE typecho2; CREATE USER 'typecho1'@'%' IDENTIFIED BY 'pass1'; CREATE USER 'typecho2'@'%' IDENTIFIED BY 'pass2'; GRANT ALL PRIVILEGES ON typecho1.* TO 'typecho1'@'%'; GRANT ALL PRIVILEGES ON typecho2.* TO 'typecho2'@'%'; FLUSH PRIVILEGES; ``` 然后【实际安装时用 Pdo驱动SQLite适配器安装, SQLite原生函数适配器安装】: web1 Typecho 安装时填:数据库名 typecho1,用户 typecho1,密码 pass1 web2 Typecho 安装时填:数据库名 typecho2,用户 typecho2,密码 pass2 五、最小化的 Typecho Dockerfile + docker-compose.yml 示例,放到 /home/html/web/web1/ 下就能直接跑【可以,本方法安装步骤 [专门链接](https://boke.199881.xyz/index.php/archives/130/) 】 目录结构(推荐) /home/html/web/web1/ ├── docker-compose.yml ├── Caddyfile ├── php/ │ └── Dockerfile └── data/ (安装后数据库文件会自动生成) 1、docker-compose.yml ``` version: '3.9' services: caddy: image: caddy:2-alpine container_name: caddy_web1 ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./site:/srv - caddy_data:/data - caddy_config:/config depends_on: - php php: build: ./php container_name: php_web1 volumes: - ./site:/srv depends_on: - db db: image: mariadb:10.7 container_name: mariadb_web1 restart: always environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: typecho1 MYSQL_USER: typecho MYSQL_PASSWORD: typechopass volumes: - ./data:/var/lib/mysql volumes: caddy_data: caddy_config: ``` 2、Caddyfile文件 ``` :80 { root * /srv php_fastcgi php:9000 file_server } ``` 或 ``` # Web1 - 用域名 web1.example.com { root * /srv/web1 php_fastcgi php:9000 file_server } ``` 3、php/Dockerfile ``` FROM php:8.1-fpm RUN docker-php-ext-install pdo pdo_mysql mysqli WORKDIR /srv ``` 4、下载 Typecho,不是在web1文件夹,是在site文件夹 ``` cd /home/html/web/web1 mkdir site cd site wget https://github.com/typecho/typecho/releases/download/v1.2.1/typecho.zip unzip typecho.zip rm typecho.zip ``` 5、启动 ``` cd /home/html/web/web1 docker-compose up -d ``` 然后访问服务器 http://你的IP/或域名 就能进入 Typecho 安装页面【安装时uplads文件夹没权限,单独设置一下,config.inc.php文件也可能没创建权限,手动创建一个就行】。 数据库信息填写: 数据库地址:db 数据库名:typecho1 用户名:typecho 密码:typechopass ⚡ 如果你要再装第二个 Typecho(web2),只需要复制一份 /home/html/web/web1/ 为 /home/html/web/web2/,然后在 docker-compose.yml 里修改: 容器名(caddy_web2、php_web2、mariadb_web2) 数据库名(typecho2) 端口映射(比如 8080:80) 六、多个网站 web1、web2 → 各自安装一个 Typecho(需要数据库) web3、web4 → 普通动态 PHP 网站(不需要数据库) 全部共用同一个 Caddy 容器,不同的域名 / 目录对应不同的网站 网站目录结构(在 /home/html/web/ 下) web1/ ← Typecho 站点 1 web2/ ← Typecho 站点 2 web3/ ← 动态 PHP 站点 web4/ ← 动态 PHP 站点 1、在 /home/html/ 下创建目录: ``` mkdir -p /home/html/{web1,web2,web3,web4,db1_data,db2_data,caddy_data,caddy_config} ``` 2、把 docker-compose.yml 和 Caddyfile 放在 /home/html/ 3、下载 Typecho 程序包到 web1/ 和 web2/ 目录,解压 4、完整的 docker-compose.yml 示例 ``` services: caddy: image: caddy:2 container_name: caddy restart: always ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./caddy_data:/data - ./caddy_config:/config - ./web1:/srv/web1 - ./web2:/srv/web2 - ./web3:/srv/web3 - ./web4:/srv/web4 depends_on: - php php: image: php:8.2-fpm container_name: php-fpm restart: always volumes: - ./web1:/srv/web1 - ./web2:/srv/web2 - ./web3:/srv/web3 - ./web4:/srv/web4 working_dir: /srv command: php-fpm # Typecho 数据库 1 db1: image: mariadb:10.6 container_name: db1 restart: always environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: typecho1 MYSQL_USER: user1 MYSQL_PASSWORD: pass1 volumes: - ./db1_data:/var/lib/mysql # Typecho 数据库 2 db2: image: mariadb:10.6 container_name: db2 restart: always environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: typecho2 MYSQL_USER: user2 MYSQL_PASSWORD: pass2 volumes: - ./db2_data:/var/lib/mysql ``` 5、Caddyfile 放在 /home/html/Caddyfile,不同网站对应不同文件夹: ``` # web1 - Typecho 1 web1.example.com { root * /srv/web1 php_fastcgi php:9000 file_server } # web2 - Typecho 2 web2.example.com { root * /srv/web2 php_fastcgi php:9000 file_server } # web3 - 普通 PHP 动态站 web3.example.com { root * /srv/web3 php_fastcgi php:9000 file_server } # web4 - 普通 PHP 动态站 web4.example.com { root * /srv/web4 php_fastcgi php:9000 file_server } ``` 6、启动服务: ``` cd /home/html docker-compose up -d ``` 7、浏览器访问: http://web1.example.com → 使用数据库 db1,连接参数: 数据库主机: db1 用户名: user1 密码: pass1 数据库: typecho1 http://web2.example.com → 使用数据库 db2,连接参数: 数据库主机: db2 用户名: user2 密码: pass2 数据库: typecho2 最后修改:2025 年 08 月 23 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏