สภาพแวดล้อม LAMP Stack พื้นฐานที่สร้างโดยใช้ Docker Compose ประกอบด้วยสิ่งต่อไปนี้:
ณ ตอนนี้ เรามี PHP เวอร์ชันต่างๆ มากมาย ใช้เวอร์ชัน php ที่เหมาะสมตามความจำเป็น:
docker compose up -d
git clone https://github.com/sprintcube/docker-compose-lamp.git
cd docker-compose-lamp/
cp sample.env .env
// modify sample.env as needed
docker compose up -d
// visit localhost
LAMP Stack ของคุณพร้อมแล้ว!! คุณสามารถเข้าถึงได้ผ่านทาง http://localhost
Docker Stack นี้สร้างขึ้นเพื่อการพัฒนาในพื้นที่ ไม่ใช่เพื่อการใช้งานจริง
แพ็คเกจนี้มาพร้อมกับตัวเลือกการกำหนดค่าเริ่มต้น คุณสามารถแก้ไขได้โดยสร้างไฟล์ .env
ในไดเร็กทอรีรากของคุณ เพื่อให้ง่าย เพียงคัดลอกเนื้อหาจากไฟล์ sample.env
และอัปเดตค่าตัวแปรสภาพแวดล้อมตามความต้องการของคุณ
มีตัวแปรการกำหนดค่าต่อไปนี้ และคุณสามารถปรับแต่งได้โดยการเขียนทับในไฟล์ .env
ของคุณเอง
PHPVERSION ใช้เพื่อระบุเวอร์ชัน PHP ที่คุณต้องการใช้ ค่าเริ่มต้นเป็นเวอร์ชัน PHP ล่าสุดเสมอ
PHP_INI กำหนดการแก้ไข php.ini
ที่คุณกำหนดเองเพื่อให้ตรงตามข้อกำหนดของคุณ
DOCUMENT_ROOT
มันเป็นรูทเอกสารสำหรับเซิร์ฟเวอร์ Apache ค่าเริ่มต้นสำหรับสิ่งนี้คือ ./www
www ไซต์ทั้งหมดของคุณจะไปที่นี่และจะซิงค์โดยอัตโนมัติ
APACHE_DOCUMENT_ROOT
ค่าไฟล์กำหนดค่า Apache ค่าเริ่มต้นสำหรับสิ่งนี้คือ /var/www/html
VHOSTS_DIR
นี่สำหรับโฮสต์เสมือน ค่าเริ่มต้นสำหรับสิ่งนี้คือ ./config/vhosts
คุณสามารถวางไฟล์ conf โฮสต์เสมือนของคุณได้ที่นี่
ตรวจสอบให้แน่ใจว่าคุณเพิ่มรายการลงในไฟล์
hosts
ของระบบของคุณสำหรับแต่ละโฮสต์เสมือน
APACHE_LOG_DIR
สิ่งนี้จะถูกใช้เพื่อจัดเก็บบันทึก Apache ค่าเริ่มต้นสำหรับสิ่งนี้คือ ./logs/apache2
apache2
สำหรับผู้ใช้ Apple Silicon: โปรดเลือก Mariadb เป็นฐานข้อมูล Oracle ไม่ได้สร้าง SQL Containers สำหรับสถาปัตยกรรมแบบแขน
ฐานข้อมูล
กำหนดเวอร์ชัน MySQL หรือ MariaDB ที่คุณต้องการใช้
MYSQL_INITDB_DIR
เมื่อคอนเทนเนอร์เริ่มทำงานเป็นครั้งแรก ไฟล์ในไดเร็กทอรีนี้ที่มีนามสกุล .sh
, .sql
, .sql.gz
และ .sql.xz
จะถูกดำเนินการตามลำดับตัวอักษร ไฟล์ .sh
ที่ไม่มีสิทธิ์ดำเนินการไฟล์นั้นมีแหล่งที่มาแทนที่จะดำเนินการ ค่าเริ่มต้นสำหรับสิ่งนี้คือ ./config/initdb
MYSQL_DATA_DIR
นี่คือไดเร็กทอรีข้อมูล MySQL ค่าเริ่มต้นสำหรับสิ่งนี้คือ ./data/mysql
ไฟล์ข้อมูล MySQL ทั้งหมดของคุณจะถูกเก็บไว้ที่นี่
MYSQL_LOG_DIR
สิ่งนี้จะถูกใช้เพื่อจัดเก็บบันทึก Apache ค่าเริ่มต้นสำหรับสิ่งนี้คือ ./logs/mysql
Apache ได้รับการกำหนดค่าให้ทำงานบนพอร์ต 80 ดังนั้นคุณจึงสามารถเข้าถึงได้ผ่าน http://localhost
ตามค่าเริ่มต้น โมดูลต่อไปนี้จะถูกเปิดใช้งาน
หากคุณต้องการเปิดใช้งานโมดูลเพิ่มเติม เพียงอัปเดต
./bin/phpX/Dockerfile
Dockerfile คุณยังสามารถสร้าง PR ได้ และเราจะรวมเข้าด้วยกันหากดูเหมือนว่าเหมาะสำหรับวัตถุประสงค์ทั่วไป คุณต้องสร้างอิมเมจนักเทียบท่าใหม่โดยการรันdocker compose build
และรีสตาร์ทคอนเทนเนอร์นักเทียบท่า
คุณสามารถเชื่อมต่อกับเว็บเซิร์ฟเวอร์โดยใช้คำสั่ง docker compose exec
เพื่อดำเนินการต่างๆ กับมัน ใช้คำสั่งด้านล่างเพื่อเข้าสู่คอนเทนเนอร์ผ่าน ssh
docker compose exec webserver bash
เวอร์ชันที่ติดตั้งของ php ขึ้นอยู่กับไฟล์ .env
ของคุณ
ตามค่าเริ่มต้นจะมีการติดตั้งส่วนขยายต่อไปนี้ อาจแตกต่างกันสำหรับเวอร์ชัน PHP <7.xx
หากคุณต้องการติดตั้งส่วนขยายเพิ่มเติม เพียงอัปเดต
./bin/webserver/Dockerfile
Dockerfile คุณยังสามารถสร้าง PR ได้ด้วย และเราจะรวมเข้าด้วยกันหากเห็นว่าเหมาะสมสำหรับวัตถุประสงค์ทั่วไป คุณต้องสร้างอิมเมจนักเทียบท่าใหม่โดยการรันdocker compose build
และรีสตาร์ทคอนเทนเนอร์นักเทียบท่า
phpMyAdmin ได้รับการกำหนดค่าให้ทำงานบนพอร์ต 8080 ใช้ข้อมูลรับรองเริ่มต้นต่อไปนี้
http://localhost:8080/
ชื่อผู้ใช้: root
รหัสผ่าน: เสือ
Xdebug ได้รับการติดตั้งตามค่าเริ่มต้น และเวอร์ชันจะขึ้นอยู่กับเวอร์ชัน PHP ที่เลือกในไฟล์ ".env"
เวอร์ชัน Xdebug:
PHP <= 7.3: Xdebug 2.XX
PHP >= 7.4: Xdebug 3.XX
หากต้องการใช้ Xdebug คุณต้องเปิดใช้งานการตั้งค่าในไฟล์ ./config/php/php.ini
ตามเวอร์ชัน PHP ที่เลือก
ตัวอย่าง:
# Xdebug 2
#xdebug.remote_enable=1
#xdebug.remote_autostart=1
#xdebug.remote_connect_back=1
#xdebug.remote_host = host.docker.internal
#xdebug.remote_port=9000
# Xdebug 3
#xdebug.mode=debug
#xdebug.start_with_request=yes
#xdebug.client_host=host.docker.internal
#xdebug.client_port=9003
#xdebug.idekey=VSCODE
รหัส Xdebug VS: คุณต้องติดตั้งส่วนขยาย Xdebug "PHP Debug" หลังจากติดตั้งแล้ว ให้ไปที่ Debug และสร้างไฟล์เรียกใช้งานเพื่อให้ IDE ของคุณสามารถฟังและทำงานได้อย่างถูกต้อง
ตัวอย่าง:
สำคัญมาก: pathMappings
ขึ้นอยู่กับว่าคุณเปิดโฟลเดอร์ใน VS Code อย่างไร แต่ละโฟลเดอร์มีการเปิดใช้การกำหนดค่าของคุณเอง ซึ่งคุณสามารถดูได้ใน .vscode/launch.json
{
"version" : " 0.2.0 " ,
"configurations" : [
{
"name" : " Listen for Xdebug " ,
"type" : " php " ,
"request" : " launch " ,
// "port": 9000, // Xdebug 2
"port" : 9003 , // Xdebug 3
"pathMappings" : {
// "/var/www/html": "${workspaceFolder } /www" // if you have opened VSCODE in root folder
"/var/www/html" : " ${workspaceFolder} " // if you have opened VSCODE in ./www folder
}
}
]
}
ตอนนี้ สร้างเบรกพอยต์และรันการดีบัก
เคล็ดลับ! หลังจากกำหนดค่าเหล่านี้แล้ว คุณอาจต้องรีสตาร์ทคอนเทนเนอร์
มันมาพร้อมกับเรดิส มันทำงานบนพอร์ตเริ่มต้น 6379
มีการรองรับโดเมน https
ในตัว แต่ปิดใช้งานตามค่าเริ่มต้น คุณสามารถเปิดใช้งานและกำหนดค่า SSL ได้ 3 วิธี; https
บน localhost
นั้นง่ายที่สุด หากคุณกำลังพยายามสร้างสภาพแวดล้อมการทดสอบใหม่ให้ใกล้เคียงกับสภาพแวดล้อมการใช้งานจริงมากที่สุด ชื่อโดเมนใดๆ ก็สามารถรองรับได้ด้วยการกำหนดค่าเพิ่มเติม
หมายเหตุ: สำหรับชื่อโดเมนที่ไม่ใช่ localhost ทุกชื่อที่คุณต้องการใช้ https
คุณจะต้องแก้ไขไฟล์โฮสต์ของคอมพิวเตอร์ของคุณและชี้ชื่อโดเมนไปที่ 127.0.0.1
หากคุณไม่ทำเช่นนี้ SSL จะไม่ทำงานและคุณจะถูกเปลี่ยนเส้นทางไปยังอินเทอร์เน็ตทุกครั้งที่คุณพยายามเยี่ยมชมชื่อโดเมนนั้นในเครื่อง
หากต้องการเปิดใช้งาน https
บน localhost
(https://localhost) คุณจะต้อง:
localhost
:mkcert
ในเทอร์มินัลให้รัน mkcert localhost 127.0.0.1 ::1
cert.pem
และ cert-key.pem
ตามลำดับconfig/ssl
443
vhost ใน config/vhosts/default.conf
เสร็จแล้ว. ตอนนี้ทุกครั้งที่คุณเปิด LAMP คอนเทนเนอร์ https
จะทำงานบน localhost
หากคุณต้องการใช้ชื่อโดเมนปกติสำหรับการทดสอบในพื้นที่ และต้องการการสนับสนุน https
วิธีแก้ปัญหาที่ง่ายที่สุดคือใบรับรอง SSL ที่ครอบคลุมชื่อโดเมนทั้งหมด:
mkcert
ในเทอร์มินัลให้รัน mkcert example.com "*.example.org" myapp.dev localhost 127.0.0.1 ::1
โดยที่คุณแทนที่ชื่อโดเมนและที่อยู่ IP ทั้งหมดเป็นชื่อที่คุณต้องการสนับสนุนcert.pem
และ cert-key.pem
ตามลำดับconfig/ssl
443
vhost ใน config/vhosts/default.conf
เสร็จแล้ว. เนื่องจากคุณรวมชื่อโดเมนทั้งหมดไว้ในใบรับรองเดียว ไฟล์ vhost จะสนับสนุนการตั้งค่าของคุณโดยไม่จำเป็นต้องแก้ไขเพิ่มเติม คุณสามารถเพิ่มกฎเฉพาะโดเมนได้หากต้องการ ตอนนี้เมื่อใดก็ตามที่คุณเปิดคอนเทนเนอร์ LAMP https
จะทำงานบนโดเมนทั้งหมดที่คุณระบุ
หากคุณต้องการให้สภาพแวดล้อมการทดสอบในพื้นที่ของคุณตรงกับการใช้งานจริงทุกประการ และต้องการการสนับสนุน https
คุณสามารถสร้างใบรับรอง SSL สำหรับทุกโดเมนที่คุณต้องการรองรับ:
mkcert
ในเทอร์มินัลให้รัน mkcert [your-domain-name(s)-here]
แทนที่ส่วนวงเล็บด้วยชื่อโดเมนของคุณ[name]-cert.pem
และ [name]-cert-key.pem
แทนที่ส่วนวงเล็บด้วยชื่อที่ไม่ซ้ำconfig/ssl
443
จากไฟล์ vhost ( config/vhosts/default.conf
) สร้างกฎใหม่ที่ตรงกับชื่อโดเมนและชื่อไฟล์ใบรับรองของคุณ เสร็จแล้ว. คอนเทนเนอร์ LAMP จะดึงใบรับรอง SSL ใดๆ ใน config/ssl
โดยอัตโนมัติเมื่อเริ่มทำงาน ตราบใดที่คุณกำหนดค่าไฟล์ vhosts อย่างถูกต้องและวางใบรับรอง SSL ใน config/ssl
ทุกครั้งที่คุณเปิดคอนเทนเนอร์ LAMP https
จะทำงานบนโดเมนที่คุณระบุ
เรายินดีเป็นอย่างยิ่งหากคุณต้องการสร้างคำขอดึงหรือช่วยเหลือผู้คนเกี่ยวกับปัญหาของพวกเขา หากคุณต้องการสร้าง PR โปรดจำไว้ว่าสแต็กนี้ไม่ได้สร้างขึ้นสำหรับการใช้งานจริง และการเปลี่ยนแปลงควรจะดีสำหรับวัตถุประสงค์ทั่วไปและไม่เฉพาะเจาะจงมากเกินไป
โปรดทราบว่าเราได้ทำให้โครงสร้างโปรเจ็กต์ง่ายขึ้นจากหลายสาขาสำหรับแต่ละเวอร์ชัน php ให้เป็นสาขาหลักแบบรวมศูนย์หนึ่งสาขา กรุณาสร้าง PR ของคุณกับสาขาหลัก
ขอบคุณ!
เราต้องการส่งเสริมให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่สร้างสรรค์ได้อย่างรวดเร็ว ดังนั้นเราจึงจัดเตรียมสภาพแวดล้อมการพัฒนาท้องถิ่นที่ง่ายต่อการติดตั้งสำหรับเฟรมเวิร์กและเวอร์ชัน PHP ต่างๆ ในการผลิต คุณควรแก้ไขหัวข้อต่อไปนี้เป็นอย่างน้อย: