ๅ่จญๆๅ็ server ๅชๆไธๅฐ,PHP ็ฐๅข็บ docker container,่่ณๆๅบซ็บๅฏฆ้ซๆฉๅฎ่ฃ,่ณๆๅบซ 3306 ้ฒ็ซ็้ฒๅ ตไธๅฐๅค,ไฝ่ฆๅ ่จฑๅพ Docker ็ฐๅขๅ ง็ๆๅๅญๅ,ๆ็ฐกๅฎ็ๆนๅผๅฐฑๆฏ้ฒ็ซ็่ฎ Docker ็ข็็ network interface ้้,ไธ้ขๆๅไพๅฏฆๅ้ไปถไบ。
ไปๅคฉ็คบ็ฏ็ฐๅข็บไฝฟ็จ Vagrant ่ตทไธๅฐ Ubuntu jammy64,็ถๅพๅจ่ฃก้ข้ฒ่ก้ฒ็ซ็็ๆธฌ่ฉฆ。
sudo service ufw start
sudo ufw enable
sudo ufw allow ssh
่จๅพ้ๅ้ฒ็ซ็่ฆๅ ๆ ssh ๆ้,ไธ็ถๅฐฑๆฒๅไบ,ๆฅ่ๅฎ่ฃ MySQL,docker ไปฅๅ docker compose ้จๅๅฐฑ้บป็ ฉ่ช่กๅฎ่ฃ。
sudo apt install -y mariadb-server mariadb-client
ๅฎ่ฃๅฎ็ขๅพ,ๆๅไพๅปบ็ซๆธฌ่ฉฆ็จ่ณๆๅบซไปฅๅๅธณ่。
sudo mysql
create database laravel;
GRANT ALL PRIVILEGES ON `laravel`.* TO 'homestead'@'%' IDENTIFIED BY 'secret' WITH GRANT OPTION;
้้ๆฌ้้ % ๆฒ้ไฟ,ๅ ็บๆๅๅชๆๅ ่จฑ docker network ๆๅฎ็ network interface ้ฒๅ ฅ่ๅทฒ。
docker-compose.yml
version: "3.9"
services:
fpm:
container_name: fpm
build: .
restart: always
working_dir: /www
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- front_end
volumes:
- ./www/:/www
networks:
front_end:
driver_opts:
com.docker.network.bridge.name: br-fpm
Dockerfile
FROM php:8.1-fpm
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions @composer pdo_mysql mbstring exif pcntl bcmath gd
WORKDIR /www
้ๆฏ่ฆๅฎ่ฃ Laravel ็ๆๅฐ็ฐๅข,ๆๅไปๅคฉๅชๆฏ่ฆๆธฌ่ฉฆ้ฃ็ทๆไปฅๅ ถไป็่จญๅฎๅฐฑๅ ไธ็ๆไบ。
sudo docker compose up -d
็ญ image build ๅฎไปฅๅ service ่ตทไพไปฅๅพ,ๆๅไพๅฉ็จๆไปคๅฎ่ฃไธๅ Laravel ็็ฐๅข。
sudo docker compose exec fpm composer create-project laravel/laravel .
ๆฅ่ๆๅๆ้ .env ๆชๆก่จญๅฎ่ณๆๅบซ้ฃ็ทๅ งๅฎน。
DB_CONNECTION=mysql
DB_HOST=host.docker.internal
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=homestead
DB_PASSWORD=secret
้ๆไพๆธฌ่ฉฆไธไธ้ฃ็ท。
sudo docker compose exec fpm php artisan migrate
ๅ ็บ้ฒ็ซ็ๆไฝไบ,ๆไปฅ connection ๆ hang ไฝ,ๆ็ตๅคฑๆ,ๆฅ่ไพ้ๅง้ฒ็ซ็่จญๅฎ。
sudo ufw allow in on br-fpm to any port 3306
ๆฅ่ๅๅท่กไธๆฌก migrate ็ๆไปค。
sudo docker compose exec fpm php artisan migrate
INFO Preparing database.
Creating migration table ............................................................................................................... 10ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table .................................................................................................... 9ms DONE
2014_10_12_100000_create_password_resets_table .......................................................................................... 2ms DONE
2019_08_19_000000_create_failed_jobs_table .............................................................................................. 3ms DONE
2019_12_14_000001_create_personal_access_tokens_table ................................................................................... 4ms DONE
ๅฏไปฅ็ๅฐ migration ้ ๅฉๆๅไบ,ๅฆๆ็ผ็ connection refuse ็้ฏ่ชค็่ฉฑ,่จๅพๆ MySQL ็ bind-address ่จญๅฎ็บ 0.0.0.0。
iptable ็่ฉฑ็จไธๆน็ๆไปคๆๅฏ้ๅฐไธๆจฃ็ๆๆ。
iptables -A INPUT -i br-fpm -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP