经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
2023年的PHP项目部署笔记。什么?还有人用PHP?
来源:cnblogs  作者:程序设计实验室  时间:2023/12/13 9:10:10  对本文有异议

前言

这是我第一次用 PHP 的包管理工具 composer

一开始用 docker 进行部署,但一直出问题,最后还是选择直接在服务器上安装 php-fpm 搭配 nginx 的方案了。

PS:docker方式真的搞得心好累,现在回想起来还心有余悸??

docker方案

先把我的 docker 方案放上来吧,毕竟也折腾了好久,处于基本可用的状态。

目录结构

目录结构如下

  1. php-code
  2. ├─ log // 日志
  3. ├─ nginx
  4. └─ php
  5. ├─ conf // 配置
  6. ├─ nginx
  7. ├─ nginx.conf
  8. └─ test.conf
  9. └─ php
  10. ├─ conf.d
  11. └─ docker-php-ext-xdebug.ini
  12. ├─ php-fpm.conf
  13. └─ php.ini
  14. ├─ code // PHP代码
  15. ├─ docker-compose.yml
  16. ├─ Dockerfile
  17. └─ .env

nginx配置

  1. server {
  2. listen 8080;
  3. server_name localhost;
  4. root /usr/share/nginx/html/public;
  5. index index.php index.html index.htm;
  6. charset utf-8;
  7. client_max_body_size 100M;
  8. location ~ \.php$ {
  9. fastcgi_pass php-fpm:9000;
  10. fastcgi_index index.php;
  11. fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
  12. fastcgi_param SCRIPT_NAME $fastcgi_script_name;
  13. include fastcgi_params;
  14. }
  15. location / {
  16. if (!-e $request_filename){
  17. rewrite ^(.*)$ /index.php?s=$1 last; break;
  18. }
  19. }
  20. }
  21. access_log /var/log/nginx/access.log main;
  22. error_log /var/log/nginx/error.log warn;
  23. server_tokens off;

PHP配置

主要是开启调试日志,可以看到程序执行的时候有什么报错

docker-php-ext-xdebug.ini

  1. xdebug.remote_enable = On
  2. xdebug.remote_handler = dbgp
  3. xdebug.remote_host = host.docker.internal
  4. xdebug.remote_port = 9001
  5. xdebug.remote_log = /var/log/php/xdebug.log
  6. xdebug.idekey = PHPSTOR

php-fpm.conf

  1. [global]
  2. error_log = /proc/self/fd/2
  3. ; https://github.com/docker-library/php/pull/725#issuecomment-443540114
  4. log_limit = 8192
  5. [www]
  6. ; if we send this to /proc/self/fd/1, it never appears
  7. access.log = /proc/self/fd/2
  8. clear_env = no
  9. ; Ensure worker stdout and stderr are sent to the main error log.
  10. catch_workers_output = yes
  11. decorate_workers_output = no

php.ini

  1. log_errors=On

dockerfile

构建docker镜像,这个项目要求的PHP版本是7.4

让我感到很奇怪的是 PHP 的官方镜像里居然没有 composer,还得自己折腾。

这个 dockerfile 参考了很多文章博客,结果发现还不如自己折腾一下,已知问题是 gd 插件安装没有生效,猜测是还需要使用 apt 安装 php-gd,然后 docker-php-ext-install 才能生效。

  1. FROM composer:2.2 as composer
  2. FROM php:7.4.33-fpm as php
  3. # 镜像信息
  4. LABEL Author="DealiAxy"
  5. LABEL Version="2023.11"
  6. LABEL Description="PHP 7-fpm 开发环境镜像."
  7. # 更新为国内镜像
  8. RUN apt install apt-transport-https ca-certificates \
  9. && mv /etc/apt/sources.list /etc/apt/sources.list.bak && echo "Acquire::http::Pipeline-Depth \"0\";" > /etc/apt/apt.conf.d/99nopipelining && echo 'deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free' > /etc/apt/sources.list && echo 'deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free' >> /etc/apt/sources.list && echo 'deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free' >> /etc/apt/sources.list && apt-get update
  10. # bcmath, calendar, exif, gettext, sockets, dba,
  11. # mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm 扩展
  12. RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv
  13. RUN apt update && apt-get install -y git zip libpng-dev libzip-dev && rm -rf /var/lib/apt/lists/* && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && docker-php-ext-install pdo pdo_mysql mysqli gd zip bcmath opcache && docker-php-ext-enable mysqli gd
  14. # 复制代码
  15. COPY --chown=www-data:www-data ./code /var/www/html
  16. # copy vender
  17. COPY --from=composer /usr/bin/composer /usr/bin/composer
  18. WORKDIR /var/www/html
  19. RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ && composer config -g --unset repos.packagist && composer install && ls -la
  20. EXPOSE 9000
  21. CMD ["php-fpm"]

环境变量 .env

  1. APP_NAME=php-oa

docker-compose

  1. version: "3.6"
  2. services:
  3. nginx:
  4. image: nginx:stable-alpine
  5. container_name: ${APP_NAME}_nginx
  6. restart: unless-stopped
  7. volumes:
  8. - ./conf/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
  9. - ./code:/usr/share/nginx/html
  10. - ./log/nginx:/var/log/nginx
  11. ports:
  12. - "8080:8080"
  13. depends_on:
  14. - php-fpm
  15. networks:
  16. - default
  17. - swag
  18. php-fpm:
  19. build: .
  20. user: 'www-data:www-data'
  21. container_name: ${APP_NAME}-php
  22. restart: unless-stopped
  23. volumes:
  24. # - ./conf/php:/usr/local/etc/php
  25. - ./code/public:/var/www/html/public
  26. - ./conf/php/php-fpm.conf:/usr/local/etc/php-fpm.d/docker.conf
  27. - ./conf/php/php.ini:/usr/local/etc/php/php.ini
  28. - ./log/php:/var/log/php
  29. networks:
  30. - default
  31. networks:
  32. swag:
  33. name: swag
  34. external: true
  35. default:
  36. name: ${APP_NAME}

直接部署方案

这是最容易的方案

我的服务器是 Ubuntu 22.04 ,官方源的 PHP 是8.1版本,这里需要添加 PPA 才能使用 7.4 版本。

添加 PPA 源

  1. sudo apt install software-properties-common
  2. sudo add-apt-repository ppa:ondrej/php -y
  3. sudo apt update

安装PHP7.4

并且把常用扩展也安装了

  1. sudo apt install php7.4 php7.4-fpm
  2. sudo apt install php7.4-{cli,common,curl,zip,gd,mysql,xml,mbstring,json,intl}

装完查看状态

  1. sudo systemctl status php7.4-fpm.service

安装和配置 nginx

安装就不多说了

直接配置

/etc/nginx/sites-available 里增加一个配置文件

这里的文件名是 php.conf

我们把 PHP 代码放在 /var/www/html/php-code

设置网站根目录为 PHP 代码下的 public 目录 (这是这个项目设计成这样的)

  1. server {
  2. server_name domain.com;
  3. listen 8081;
  4. root /var/www/html/php-code/public;
  5. index index.php index.html index.htm;
  6. charset utf-8;
  7. client_max_body_size 100M;
  8. location ~ \.php$ {
  9. include snippets/fastcgi-php.conf;
  10. fastcgi_pass unix:/run/php/php-fpm.sock;
  11. }
  12. location / {
  13. if (!-e $request_filename){
  14. rewrite ^(.*)$ /index.php?s=$1 last; break;
  15. }
  16. }
  17. }

安装 composer 和安装依赖

使用 composer 安装依赖

如果没有这一步的话,那就跟5、6年前在使用 PHP 的时候没有区别

官方地址

可以直接通过官方源安装,并且使用 php 直接执行安装脚本

  1. sudo apt-get install curl
  2. sudo apt-get install php php-curl
  3. curl -sS https://getcomposer.org/installer -o composer-setup.php
  4. sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
  5. sudo composer self-update

国内源

通过国内源下载二进制文件

  1. curl https://mirrors.cloud.tencent.com/composer/composer.phar -o /usr/local/bin/composer
  2. curl https://mirrors.aliyun.com/composer/composer.phar -o /usr/local/bin/composer
  3. chmod +x /usr/local/bin/composer

检查 composer

  1. composer -v

配置镜像

得先配置一下国内镜像,可以参考这个项目: https://github.com/china-speed/china-speed.github.io

  1. composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  2. composer config -g --unset repos.packagist

安装依赖

  1. cd /var/www/html/php-code
  2. composer install

搞定

处理权限问题

不知道是不是所有 PHP 项目都喜欢在项目下面创建和修改文件,这也给docker部署方式带来了不小的挑战

直接在系统上部署好一点,首先把代码目录所有者转移给 www-data 用户

  1. chown -R www-data:www-data /var/www/html

为了本用户也能写入,添加一下用户组

  1. usermod -a -G www-data {username}

对了,PHP文件还需要可执行权限才行……

  1. chmod -R u+rwx /var/www/html/php-code

给组内的用户也添加一下读写权限

  1. chmod -R g+rw /var/www/html/php-code

基本就搞定了。

使用 ThinkPHP 框架的后端也不存在什么启动后端服务的概念,直接这样把代码放在目录里就搞定了,直接访问即可。

参考资料

原文链接:https://www.cnblogs.com/deali/p/17897385.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号