github 上的php项目
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 - GPLCopyright (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/_/phpmyadmin -
docker 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.23restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: rootpasswordMYSQL_DATABASE: mydbMYSQL_USER: userMYSQL_PASSWORD: passwordvolumes:- mysql-data:/var/lib/mysqlnetworks:- app-networkphp-fpm:image: bitnami/php-fpmrestart: alwaysvolumes:- /opt/test_php:/var/www/html # 挂载你的 PHP 代码depends_on:- dbnetworks:- app-networknginx:image: nginxrestart: alwaysports:- "80:80"volumes:- /opt/test_php:/var/www/html- /opt/test_php/nginx.conf:/etc/nginx/conf.d/default.conf # 需要创建 nginx.confdepends_on:- php-fpmnetworks:- app-networknetworks: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.23restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: loveMYSQL_USER: userMYSQL_PASSWORD: passwordvolumes:- mysql-data:/var/lib/mysqlnetworks:- app-networkphp-fpm:image: bitnami/php-fpmrestart: alwaysvolumes:- /opt/love-project:/var/www/html # 挂载你的 PHP 代码depends_on:- dbnetworks:- app-networknginx:image: nginxrestart: alwaysports:- "80:80"volumes:- /opt/love-project:/var/www/html- /opt/love-project/nginx.conf:/etc/nginx/conf.d/default.conf # 需要创建 nginx.confdepends_on:- php-fpmnetworks:- app-networknetworks: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 - GPLCopyright (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);
}
?>