Dockerを使った自作composer環境について

仕事で自作したライブラリを「composer」を使って管理していくということがあったので今後の備忘録としてメモしておきます。

開発環境

今回の開発環境は以下の通り

  • PHPSTORM
  • Docker
  • Docker-compose
  • Git

Gitリポジトリの構築などは今回省きます。

まずDockerの環境は以下のように構築

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
project
│  docker-compose.yml
├─config
│  └─php
│       00-mpm.conf     
│       Dockerfile      
│       php.ini
│       vhosts.conf     
├─logs
│  │  xdebug.log
│  │
│  └─httpd
│      └─web
└─src
    │  .gitignore
    │  composer.json       
    │  README.md
    ├─debug-project        
    │      composer.json   
    ├─sdk-php
    │  └─src
    │     │
    │     └─sample
    │         HogeHoge.php
    └─tests
          Test.php

Dockerのコンテナイメージは「amazonlinux:2023」を利用し、PHP8.3(2025年5月時点)+Xdebugの環境を構築。

Gitのリポジトリを作成し今回は「project/src」の中に作成したリポジトリをクローン。

Docker-compose.ymlファイルは以下のように記述

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
version: '3'

services:
  app:
    container_name: sample-sdk
    build: ./config/php
    volumes:
      - ./config/.ssh/:/root/.ssh/
      - ./config/php/00-mpm.conf:/etc/httpd/conf.modules.d/00-mpm.conf
      - ./config/php/php.ini:/etc/php.ini
      - ./logs/httpd/web/:/var/log/httpd/
      - ./logs/xdebug.log:/tmp/xdebug.log
      - ./src/:/var/www/html/

composerの作成

Dockerの環境を作ったらcomposerで実行したいファイルを作成する。

実行用のファイルを作成したら、次にcomposerを作成する。

「プロジェクト/src」の直下に「composer.json」を作成。

composer.jsonは以下のように記述

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "name": "sample/sdk-php", # composer名
  "description": "description",
  "minimum-stability": "dev",
  "license": "proprietary",
  "authors": [
    {
      "name": "Taro Test",
    }
  ],
  # インストール時に最低バージョンや必要なライブラリがあったら記述
  "require": {
    "php": ">=8.3",
    "ext-openssl": "*",
    "ext-curl": "*",
    "ext-mysql_xdevapi": "*"
  },
  "autoload": {
    "psr-4": {
      "SAMPLE\\": "sdk-php/src/" # インストールさせるディレクトリパス
    }
  }
}

ここはPHP STORMなどの開発環境で作成する場合テンプレートが用意されてるときがあるのでそれに則って記述する。

記述が終わったらリポジトリにcommit & Pushで完了。

作ったcomposerの使い方

作成したcomposerを使う場合、実行環境のcomposer.jsonに以下のように記述する

1
2
3
4
5
6
7
8
9
"repositories": [
    {
      "type": "vcs",
      "url": "リポジトリのURL"
    }
  ],
  "require": {
    "sample/sdk-php": "dev-develop" # masterブランチを読む場合は「dev-master」にする
  }

後はcomposerを実行する

/usr/bin/php composer update

これで作成したファイルが「vendor」フォルダ内に入っていれば完成。

gitolite3を使ってリポジトリを管理してる場合

職場でgitolite3を使った鍵認証を行っており、gitolite3管理下にあるリポジトリをcomposerで取得する場合は鍵の設定が必要になる。

まず、事前にcomposer用の公開鍵を作って対象のリポジトリにcomposer用の鍵を読み込み権限だけ付与する。
※書き込み権限を与えてしまうと大変なことになるので

作った鍵をサーバーにアップロードして、サーバーの「/root/.ssh/」にある「config」に以下のように記述する

1
2
3
4
5
6
Host サーバー名
	HostName XXXX.XX.XX.XX
	Port 22
	User gitolite3
    IdentityFile ~/.ssh/composer_rsa <- composer用の公開鍵
    StrictHostKeyChecking   no

もしdockerのコンテナ内で利用したい場合は以下の手順を行う

  1. はじめにプロジェクトフォルダに作った「config」内に「.ssh」というフォルダを作り、composer用の公開鍵と「config」ファイルを作成する。

  2. docker-compose.ymlのWEBサーバー側の設定に「.ssh」フォルダを同期させる記述を追加する

1
2
3
4
5
docker-compose.yml

    volumes:
      - ./config/.ssh/:/root/.ssh/ <-追加
      - ./config/php/00-mpm.conf:/etc/httpd/conf.modules.d/00-mpm.conf
  1. コンテナを起動させる。

  2. この状態でcomposerを実行させると権限エラーになるため権限を修正する

1
2
3
4
5
docker exec -it sample-sdk /bin/bash

#コンテナ内
chmod 600 ~/.ssh/composer_rsa
chmod 600 ~/.ssh/config
  1. この状態でcomposerを実行すればデータが取得できる。

作ってみた感想

思ったよりも簡単にcomposerの自作が出来ました。
本来だったら公開設定とか色々あるんだろうけどとりあえず今回は非公開目的なのでこれでいいかなっと

今回はホントの基礎的な部分だけなのでもう少し色々調べてみようかと思います。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。