[精讚] [會員登入]
338

[Rocky9] codeignitor4+ php:8.3-apache + docker compose

這次的目標是把服務裝在docker,裡面放入php8.3-apache的 docker container, 並採用codeignitor4作基礎的設置。

分享此文連結 //n.sfs.tw/16430

分享連結 [Rocky9] codeignitor4+ php:8.3-apache + docker compose@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-06-15 13:03:38 最後編修
2024-06-15 04:20:08 By 張○○
 

自動目錄

這次的目標是把服務裝在docker,裡面放入 php8.3 apache的docker,並使用 docker compose 。

在二年前曾經有有過一篇類似的,那篇是nginx+php-fpm的組合,後來我就不太喜歡使用NGINX+ PHP-FPM這樣的方式,還是apache+php比較完美的組合,所以這篇是我現在比較喜歡的方式。

 

系統

Rocky Linux release 9.4 (Blue Onyx)

已安裝 docker ,docker compose

# docker version
Client: Docker Engine - Community
 Version:           26.1.3
 API version:       1.45
 Go version:        go1.21.10
 Git commit:        b72abbb
 Built:             Thu May 16 08:35:19 2024
 OS/Arch:           linux/amd64
 Context:           default
Server: Docker Engine - Community
 Engine:
  Version:          26.1.3
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.10
  Git commit:       8e96db1
  Built:            Thu May 16 08:33:39 2024
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.6.32
  GitCommit:        8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0


# docker compose version
Docker Compose version v2.27.0

1. Docker compose

只需要一個php8的服務即可,並把container也命名為php8

docker-compose.yml

services:
  php8:
    image: php:8.3-apache-mysqli
    build: php8/
    container_name: php8
    restart: always
    volumes:
      - /home/project/ci4/:/var/www/html/dns8:rw
      - /etc/localtime:/etc/localtime:ro
      - ./php8/apache2/:/etc/apache2/sites-available/
      - ./php8/php/php.ini:/usr/local/etc/php/conf.d/php.ini

目錄架構看起來這樣:

/home
├── project
└── docker
    ├── docker-compose.yml
    └── php8
        ├── apache2
        │   └── 000-default.conf
        ├── Dockerfile
        └── php
            └── php.ini

  - project 是專案放置目錄(目前是空的)
  - 設定檔放php8的目錄下

先別急著啟動,先把下面的設定完成。

 

2. Dockerfile等設定檔

Dockerfile

FROM php:8.3-apache
MAINTAINER axer
RUN ["/bin/bash","-c","a2enmod rewrite"]
RUN apt-get update && \
 apt-get install -y libxml2-dev
RUN docker-php-ext-install soap && \
 apt-get install -y vim
RUN apt install libicu-dev -y && \
 docker-php-ext-install intl && \
 docker-php-ext-enable intl && \
 rm -rf /etc/localtime && \
 ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime && \
 docker-php-ext-install mysqli && \
 alias ll='ls -l --color'

以上設定主要是安裝

  apahce mod_rewrite
  libxml (xml, xmlreader, xmlwriter
  vim
  php-intl
  php-mysqli
  php-mbstring
 

網域設定檔 000-default.conf

<VirtualHost *:80>
    DocumentRoot /var/www/html/project/public/
    ServerName project.exmaple.com
    <Directory "/var/www/html/project/public/">
      Options -Indexes
      AllowOverride All
      <RequireAll>
        Require all granted
      </RequireAll>
    </Directory>
</VirtualHost>

注意目錄的設定。

 

php.ini

這個檔是先註解設定然後啟動後PHP8 再從 Docker Container中的目錄中拷背出來,

# mkdir -p /home/docker/php8/php/
# cd /home/docker/php8/php/
# docker cp php8:/usr/local/etc/php/php.ini-production ./php.ini

修改的內容如下:

memory_limit = 1024M
display_errors = On
post_max_size = 50M
extension=intl
extension=mbstring
extension=mysqli
date.timezone = "Asia/Taipei"
session.gc_maxlifetime = 86400

全部準備完後,先別急著啟動,先把下面的設定完成。

 

 

3. 安裝 Codeignitor4

可以使用git或是tarball 方式安裝

# cd /home/project
# git clone https://github.com/codeigniter4/CodeIgniter4.git ci4

上面可以在產生一個ci4目錄,目錄看起來是這樣的

./home
└── project
   └── ci4
      ├── admin
      ├── app

      ├── CHANGELOG.md
      ├── changelogs
      ├── CODE_OF_CONDUCT.md
      ├── composer.json
      ├── contributing
      ├── CONTRIBUTING.md
      ├── deptrac.yaml
      ├── env  <== 環境檔
      ├── LICENSE
      ├── phpdoc.dist.xml
      ├── phpmetrics.json
      ├── phpstan-baseline.php
      ├── phpstan-bootstrap.php
      ├── phpstan.neon.dist
      ├── phpunit.xml.dist
      ├── preload.php
      ├── psalm_autoload.php
      ├── psalm-baseline.xml
      ├── psalm.xml
      ├── public
      ├── README.md
      ├── rector.php
      ├── SECURITY.md
      ├── spark
      ├── system
     
├── tests
     
├── tools
     
├── user_guide_src
     
├── utils
      └── writable

上面的檔案都是git 下來的,接下來修改一下設定:

 

1. 修改writeable目錄

 

chmod 777 -R writable

2. 修改預設參數

app/Config/App.php

    public $baseURL = 'http://ci4.example.com/';
    public $defaultLocale = 'zh-TW';
    public $supportedLocales = ['zh-TW'];
    public $appTimezone = 'Asia/Taipei';

3. 啟動自動目錄

app/Config/Routes.php

$routes->setAutoRoute(true);

 

4. 修改環境檔

env

CI_ENVIRONMENT = production

 

database.default.hostname = 192.168.1.123
database.default.database = dns8
database.default.username = dns8
database.default.password = Passwrod123
database.default.DBDriver = MySQLi
# database.default.DBPrefix =
database.default.port = 3306

session.driver = 'CodeIgniter\Session\Handlers\FileHandler'
session.savePath = /var/www/html/writable

 

可以啟動docker,由於設定中已經指定重建,所以DOCKER會替我們建一個名為 php:8.3-apache-mysqli 的 images

 

測試你的頁面

http://project.exmaple.com/

 

 

 

參考資料

[1] docker安裝  intl  https://stackoverflow.com/questions/76003238/installing-php-extension-intl-on-a-php-docker-image
 

 

 

 

END

你可能感興趣的文章

[CENTOS7] 使用 logrotate 來整理mongo日誌檔 解決 mongo 的日誌檔不斷長大的問題

[CENTOS8] Failed to download metadata for repo 'appstream' 的問題 Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist的解決方法。

[Rocky Linux] 安裝gitlab gitlab+docker compose+ nginx 安裝Gitlab並結合nginx當網頁伺服器

[Centos8] PHP7.2升級到7.4 在centos8中把php 7.2升到7.4版

[Centos7] 使用網路安裝 Centos7 使用網路來安裝Centos7,雖然這不是什麼新鮮事,但可以省你的磁碟空間或光碟片

[LINUX] 利用 usermod 修改使用者的參數和資料 使用指令 usermod 修改使用者的參數和資料

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

[jQuery] 利用load()來達成ajax的寫法 jQuery中利用load()來達成ajax的寫法,也有人稱他是假的ajax,作法就是..

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

[jQuery] select 元件的取值及給值 html中的元件select,在jquery中要如何使用?

設計的工作絕不接受比價 拿買陽春麵的價格想買牛肉麵,寧願倒掉也不賣