github 上的php项目
项目的网址 (Loong1996/LikeGirlSite: 情侣网站、情侣网页、恋爱记录网站)
# 修改
# admin/Config_DB.php
//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1)
$db_address = "mysql_php";
//数据库用户名
$db_username = "root";
//数据库密码
$db_password = "root123";
//数据库表名
$db_name = "love";
//敏感信息修改安全码 建议设置复杂一些
$Like_Code = "Love";
//版本号
$version = 20240612;
创建网桥
docker network create -d bridge php_net
mysql镜像的启动
docker run \
-itd --name mysql_php \
--network php_net \
--restart unless-stopped \
-e MYSQL_USER="php" \
-e MYSQL_PASSWORD="php123" \
-e MYSQL_ROOT_PASSWORD="root123" \
mysql:8.0.23 \
--default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_bin
修改数据库
# 找到数据库的ip
[root@docker-110 LikeGirlSite]# docker inspect mysql_php | grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.23.0.2",
# 登录数据库
[root@docker-110 LikeGirlSite]# mysql -h 172.23.0.2 -uroot -proot123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
# 创建一个数据库
MySQL [(none)]> create database love;
Query OK, 1 row affected (0.00 sec)
# 导入文件
MySQL [(none)]> USE love;
Database changed
MySQL [love]> source /root/LikeGirlSite/love20240612.sql;
# 检查一下
MySQL [love]> show tables;
+----------------+
| Tables_in_love |
+----------------+
| IPerror |
| about |
| article |
| diySet |
| leavSet |
| leaving |
| login |
| loveImg |
| lovelist |
| text |
| warning |
+----------------+
11 rows in set (0.00 sec)
启动phpmyadmin镜像\
看dockerhub,给了什么资料,(这里需要科学上网,我这里就截图了)
https://hub.docker.com/_/phpmyadmindocker history
docker run 去分析 入口点脚本,启动脚本,都调用了哪些变量
docker run -d --restart=always \
--name blog_phpadmin \
--network php_net \
-e PMA_HOST=mysql_php \
-p 888:80
phpmyadmin
看到数据了,表示phpadmin 和 数据库连接成功 !!!!
最后是nginx
- 当你已http协议去访问这个源的时候
http://10.0.0.7:80/test-info.php
↓
到达nginx,找到test-info.php
↓
fastcg_pass 127.0.0.1:9000; (php-fpm去读取,执行test-info.php)
↓
返回执行结果给nginx
↓
用户浏览器看到这个代码的结果
这里是 bitnami/php-fpm 也就是处理php代码的
version: '3'
services:
db:
image: mysql:8.0.23
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
php-fpm:
image: bitnami/php-fpm
restart: always
volumes:
- /opt/test_php:/var/www/html # 挂载你的 PHP 代码
depends_on:
- db
networks:
- app-network
nginx:
image: nginx
restart: always
ports:
- "80:80"
volumes:
- /opt/test_php:/var/www/html
- /opt/test_php/nginx.conf:/etc/nginx/conf.d/default.conf # 需要创建 nginx.conf
depends_on:
- php-fpm
networks:
- app-network
networks:
app-network:
volumes:
mysql-data:
创建 Nginx 配置文件 (nginx.conf
)
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php-fpm:9000; # 指向 php-fpm 服务
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
}
}
创建 PHP 测试文件 (test.php
)
<?php
try {
$pdo = new PDO(
'mysql:host=db;dbname=mydb;charset=utf8mb4',
'user', // 数据库用户名
'password', // 数据库密码
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
echo "数据库连接成功!";
// 测试查询
$stmt = $pdo->query("SELECT 1+1 AS result");
$row = $stmt->fetch();
echo "测试查询结果: " . $row['result'];
} catch (PDOException $e) {
die("连接失败: " . $e->getMessage());
}
启动容器
docker-compose up -d
测试
访问 http://localhost/test.php,如果看到以下输出,则连接成功:
看到这我们就ok了。开始部署
- 我们先把代码下到opt目录下
[root@docker-110 opt]# mv LikeGirlSite-master love-project
[root@docker-110 love-project]# ls
about.php Botui favicon.ico head.php ipjc.php leaving.php list.php love20240612.sql page.php Style
admin error.php footer.php index.php ip.php LICENSE little.php loveImg.php README.md
# 修改
# admin/Config_DB.php
//localhost 为数据库地址 一般使用默认的即可 或(127.0.0.1)
$db_address = "db";
//数据库用户名
$db_username = "root";
//数据库密码
$db_password = "root123";
//数据库表名
$db_name = "love";
//敏感信息修改安全码 建议设置复杂一些
$Like_Code = "Love";
//版本号
$version = 20240612;
version: '3'
services:
db:
image: mysql:8.0.23
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: love
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
php-fpm:
image: bitnami/php-fpm
restart: always
volumes:
- /opt/love-project:/var/www/html # 挂载你的 PHP 代码
depends_on:
- db
networks:
- app-network
nginx:
image: nginx
restart: always
ports:
- "80:80"
volumes:
- /opt/love-project:/var/www/html
- /opt/love-project/nginx.conf:/etc/nginx/conf.d/default.conf # 需要创建 nginx.conf
depends_on:
- php-fpm
networks:
- app-network
networks:
app-network:
volumes:
mysql-data:
nginx.conf
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php-fpm:9000; # 指向 php-fpm 服务
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
}
}
test.php
<?php
try {
$pdo = new PDO(
'mysql:host=db;dbname=love;charset=utf8mb4', //注意修改dbname
'root', // 数据库用户名
'root123', // 数据库密码
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
echo "数据库连接成功!";
// 测试查询
$stmt = $pdo->query("SELECT 1+1 AS result");
$row = $stmt->fetch();
echo "测试查询结果: " . $row['result'];
} catch (PDOException $e) {
die("连接失败: " . $e->getMessage());
}
测试一下呗
导入数据
[root@docker-110 love-project]# mysql -u root -p root123 -h 172.26.0.2
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'172.26.0.1' (using password: YES)
[root@docker-110 love-project]# mysql -uroot -proot123 -h172.26.0.2
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
<?php
// 设置页面编码
header("Content-Type:text/html; charset=utf-8");
$db_config = [
'host' => 'db', // 使用容器名
'port' => '3306',
'username' => 'user', // 使用Docker创建的用户
'password' => 'password', // 使用Docker设置的密码
'dbname' => 'love',
'charset' => 'utf8mb4'
];
// 安全配置
$security_config = [
'like_code' => 'Love',
'version' => '20240612'
];
// 创建数据库连接
try {
// 修复:在DSN中添加端口配置
$pdo = new PDO(
"mysql:host={$db_config['host']};port={$db_config['port']};dbname={$db_config['dbname']};charset={$db_config['charset']}",
$db_config['username'],
$db_config['password'],
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
// 开发环境测试连接
if (isset($_SERVER['APP_ENV']) && $_SERVER['APP_ENV'] === 'development') {
echo "数据库连接成功!";
}
} catch(PDOException $e) {
// 开发环境显示详细错误
if (isset($_SERVER['APP_ENV']) && $_SERVER['APP_ENV'] === 'development') {
die("数据库连接失败: " . $e->getMessage());
}
// 生产环境记录日志并显示友好错误
error_log("数据库连接失败: " . $e->getMessage());
die("系统暂时无法访问,请稍后再试");
}
// 设置错误报告级别(根据环境调整)
if (isset($_SERVER['APP_ENV']) && $_SERVER['APP_ENV'] === 'development') {
error_reporting(E_ALL);
ini_set('display_errors', 1);
} else {
error_reporting(0);
ini_set('display_errors', 0);
}
?>