开始
PHP7的
DOCKER-COMPOSE.YML
services:
# Nginx 服务
nginx:
image: nginx:alpine
container_name: nginx-php74
ports:
- "74:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/logs:/var/log/nginx
- ./www:/var/www/html
depends_on:
- php-fpm
networks:
- php74-network
restart: unless-stopped
# PHP 7.4 FPM 服务
php-fpm:
build:
context: ./php
dockerfile: Dockerfile
#image: php:7.4-fpm-alpine
container_name: php74-fpm
volumes:
- ./www:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini
networks:
- php74-network
restart: unless-stopped
# MariaDB 10 服务 (兼容 MySQL 5.7)
mariadb:
image: mariadb:10.11
container_name: mariadb-php74
platform: linux/arm64
ports:
- "33074:3306"
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: user123456
MYSQL_INITDB_SKIP_TZINFO: 1
volumes:
- ./mariadb/data:/var/lib/mysql
- ./mariadb/conf:/etc/mysql/conf.d
networks:
- php74-network
restart: unless-stopped
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --innodb_buffer_pool_size=256M
networks:
php74-network:
driver: bridge
NGINX配置文件:
FASTADMIN74.COM.CONF
server {
listen 80;
server_name fastadmin74.com;
root /var/www/html/fastadmin74/public;
index index.php index.html index.htm;
# 静态文件
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
try_files $uri $uri/ =404;
}
# 所有PHP文件处理
location ~ \.php {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_read_timeout 300;
}
# 通用路由重写
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
error_log /var/log/nginx/fastadmin74_error.log;
access_log /var/log/nginx/fastadmin74_access.log;
}
PHP8的
YML
version: '3.8'
services:
# PHP 8.2 应用服务
php82:
build:
context: .
dockerfile: Dockerfile
container_name: php82-app
volumes:
- ./src:/var/www/html # 将本地项目代码目录挂载到容器
depends_on:
- mysql82 # 确保MySQL先启动
networks:
- php82-network
# Nginx Web 服务器
nginx82:
image: nginx:alpine
container_name: nginx82
ports:
- "8080:80" # 将宿主机的8080端口映射到容器的80端口
volumes:
- ./src:/var/www/html # 项目代码
#- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf # Nginx配置
- ./nginx/conf.d:/etc/nginx/conf.d # 改为 conf.d 目录
- ./logs/nginx:/var/log/nginx # 日志目录
depends_on:
- php82 # Nginx依赖PHP-FPM服务
networks:
- php82-network
# MySQL 8.0 数据库服务
mysql82:
image: mysql:8.0
container_name: mysql82
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: my_app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: user_password
command:
- --default-authentication-plugin=mysql_native_password
- --skip-ssl
ports:
- "3307:3306"
volumes:
- mysql82_data:/var/lib/mysql
networks:
- php82-network
# 定义网络和数据卷
volumes:
mysql82_data:
networks:
php82-network:
driver: bridge
CONF
server {
listen 80;
server_name fastadmin82.com;
root /var/www/html/fastadmin82/public;
index index.php index.html index.htm;
# 静态文件
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
try_files $uri $uri/ =404;
}
# 所有PHP文件处理
location ~ \.php {
fastcgi_pass php82:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_read_timeout 300;
}
# 通用路由重写
location / {
try_files $uri $uri/ /index.php?s=$uri&$args;
}
error_log /var/log/nginx/fastadmin_error.log;
access_log /var/log/nginx/fastadmin_access.log;
}
拉取LARAVEL代码:
# 方法1:使用root用户直接安装
docker exec -it --user root php82-app bash
# 在容器内执行
cd /var/www/html
composer create-project laravel/laravel . --prefer-dist
# 或者指定具体版本(Laravel 10的最新版本)
composer create-project laravel/laravel:^10.0 . --prefer-dist
拉取FASTADMIN代码:
直接下载官方完整包即可。
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
docker-compose logs nginx82
docker-compose logs php82-app
docker-compose logs mysql82
docker ps -a
docker exec -it php82-app bash
# 进入容器
docker-compose exec php82-app bash
docker-compose exec mysql82 mysql -u app_user -p
# 停止环境
docker-compose down
# 重新启动
docker-compose up -d
重启NGINX
docker restart nginx-php74
重启前检查配置
docker exec nginx82 nginx -t
重新启动MYSQL
docker-compose up -d mysql82
# 重建服务(代码修改后)
docker-compose up -d --build
# 检查Nginx错误日志
docker-compose logs nginx82
# 检查PHP-FPM错误日志
docker-compose logs php82-app
# 检查容器内部
docker-compose exec nginx82 cat /etc/nginx/conf.d/default.conf
mysql -h 127.0.0.1 -P 3307 -u root -p
# 输入密码:root_password
# 或者连接应用用户
mysql -h 127.0.0.1 -P 3307 -u app_user -p user_password my_app_db
fastadmin中数据库文件
use think\Env;
return [
'type' => Env::get('database.type', 'mysql'),
'hostname' => Env::get('database.hostname', 'mysql82'),
'database' => Env::get('database.database', 'fastadmin82'),
'username' => Env::get('database.username', 'root'),
'password' => Env::get('database.password', 'root_password'),
'hostport' => Env::get('database.hostport', '3306'),
结束