日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2023/12/24 windows 30 coder
生活随笔 收集整理的這篇文章主要介紹了 2023年的PHP项目部署笔记。什么?还有人用PHP? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

這是我第一次用 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 = On
xdebug.remote_handler = dbgp
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9001
xdebug.remote_log = /var/log/php/xdebug.log
xdebug.idekey = PHPSTOR

php-fpm.conf

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


; https://github.com/docker-library/php/pull/725#issuecomment-443540114
log_limit = 8192

[www]
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2

clear_env = no

; Ensure worker stdout and stderr are sent to the main error log.
catch_workers_output = yes
decorate_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 composer
FROM 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 vender
COPY --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 9000
CMD ["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-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

安裝PHP7.4

并且把常用擴展也安裝了

sudo apt install php7.4 php7.4-fpm
sudo 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 curl
sudo apt-get install php php-curl
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
sudo composer self-update

國內源

通過國內源下載二進制文件

curl https://mirrors.cloud.tencent.com/composer/composer.phar -o /usr/local/bin/composer
curl https://mirrors.aliyun.com/composer/composer.phar -o /usr/local/bin/composer
chmod +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-code
composer 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://linux.how2shout.com/how-to-install-php-7-4-on-ubuntu-22-04-lts-jammy-linux/
  • https://www.myfreax.com/secure-nginx-with-let-s-encrypt-on-ubuntu-22-04/
  • https://www.cherryservers.com/blog/how-to-install-composer-ubuntu
  • https://www.myfreax.com/how-to-install-php-on-ubuntu-20-04/
  • https://learnku.com/articles/31344
  • https://github.com/mouyong/docker-php/tree/master/fpm

總結

以上是生活随笔為你收集整理的2023年的PHP项目部署笔记。什么?还有人用PHP?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。