写点什么

2023 年的 PHP 项目部署笔记。什么?还有人用 PHP?

  • 2023-12-13
    福建
  • 本文字数:3767 字

    阅读完需:约 12 分钟

前言


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

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


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


docker 方案


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


目录结构


目录结构如下


php-code ├─ log  // 日志 │  ├─ nginx │  └─ php ├─ conf  // 配置 │  ├─ nginx │  │  ├─ nginx.conf │  │  └─ test.conf │  └─ php │     ├─ conf.d │     │  └─ docker-php-ext-xdebug.ini │     ├─ php-fpm.conf │     └─ php.ini ├─ code // PHP代码 ├─ docker-compose.yml ├─ Dockerfile └─ .env
复制代码


nginx 配置


server {    listen 8080;    server_name localhost;    root /usr/share/nginx/html/public;    index index.php index.html index.htm;
charset utf-8; client_max_body_size 100M;
location ~ \.php$ { fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; }
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }}
access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;
server_tokens off;
复制代码


PHP 配置


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


docker-php-ext-xdebug.ini


xdebug.remote_enable = Onxdebug.remote_handler = dbgpxdebug.remote_host = host.docker.internalxdebug.remote_port = 9001xdebug.remote_log = /var/log/php/xdebug.logxdebug.idekey = PHPSTOR
复制代码


php-fpm.conf


[global]error_log = /proc/self/fd/2

; https://github.com/docker-library/php/pull/725#issuecomment-443540114log_limit = 8192
[www]; if we send this to /proc/self/fd/1, it never appearsaccess.log = /proc/self/fd/2
clear_env = no
; Ensure worker stdout and stderr are sent to the main error log.catch_workers_output = yesdecorate_workers_output = no
复制代码


php.ini


log_errors=On
复制代码


dockerfile


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


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


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


FROM composer:2.2 as composerFROM php:7.4.33-fpm as php
# 镜像信息LABEL Author="DealiAxy"LABEL Version="2023.11"LABEL Description="PHP 7-fpm 开发环境镜像."
# 更新为国内镜像RUN apt install apt-transport-https ca-certificates \ && 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
# bcmath, calendar, exif, gettext, sockets, dba,# mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm 扩展RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv
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
# 复制代码COPY --chown=www-data:www-data ./code /var/www/html
# copy venderCOPY --from=composer /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \ && composer config -g --unset repos.packagist \ && composer install \ && ls -la

EXPOSE 9000CMD ["php-fpm"]
复制代码


环境变量 .env


APP_NAME=php-oa
复制代码


docker-compose


version: "3.6"services:  nginx:    image: nginx:stable-alpine    container_name: ${APP_NAME}_nginx    restart: unless-stopped    volumes:      - ./conf/nginx/nginx.conf:/etc/nginx/conf.d/default.conf      - ./code:/usr/share/nginx/html      - ./log/nginx:/var/log/nginx    ports:      - "8080:8080"    depends_on:      - php-fpm    networks:      - default      - swag  php-fpm:    build: .    user: 'www-data:www-data'    container_name: ${APP_NAME}-php    restart: unless-stopped    volumes:    # - ./conf/php:/usr/local/etc/php      - ./code/public:/var/www/html/public      - ./conf/php/php-fpm.conf:/usr/local/etc/php-fpm.d/docker.conf      - ./conf/php/php.ini:/usr/local/etc/php/php.ini      - ./log/php:/var/log/php    networks:      - default
networks: swag: name: swag external: true default: name: ${APP_NAME}
复制代码


直接部署方案


这是最容易的方案


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


添加 PPA 源


sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/php -ysudo apt update
复制代码


安装 PHP7.4


并且把常用扩展也安装了


sudo apt install php7.4 php7.4-fpmsudo apt install php7.4-{cli,common,curl,zip,gd,mysql,xml,mbstring,json,intl}
复制代码


装完查看状态


sudo systemctl status php7.4-fpm.service
复制代码


安装和配置 nginx


安装就不多说了


直接配置


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


这里的文件名是 php.conf


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


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


server {
server_name domain.com; listen 8081; root /var/www/html/php-code/public; index index.php index.html index.htm;
charset utf-8; client_max_body_size 100M;
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php-fpm.sock; }
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }}
复制代码


安装 composer 和安装依赖


使用 composer 安装依赖


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


官方地址


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


sudo apt-get install curlsudo apt-get install php php-curlcurl -sS https://getcomposer.org/installer -o composer-setup.phpsudo php composer-setup.php --install-dir=/usr/local/bin --filename=composersudo composer self-update
复制代码


国内源


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


curl https://mirrors.cloud.tencent.com/composer/composer.phar -o /usr/local/bin/composercurl https://mirrors.aliyun.com/composer/composer.phar -o /usr/local/bin/composerchmod +x /usr/local/bin/composer
复制代码


检查 composer


composer -v
复制代码


配置镜像


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


composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/composer config -g --unset repos.packagist
复制代码


安装依赖


cd /var/www/html/php-codecomposer install
复制代码


搞定


处理权限问题


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

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


chown -R www-data:www-data /var/www/html
复制代码


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


usermod -a -G www-data {username}
复制代码


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


chmod -R u+rwx /var/www/html/php-code
复制代码


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


chmod -R g+rw /var/www/html/php-code
复制代码


基本就搞定了。


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


文章转载自:程序设计实验室

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

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
2023年的PHP项目部署笔记。什么?还有人用PHP?_php_快乐非自愿限量之名_InfoQ写作社区