diff --git a/.env.example b/.env.example index 56ea5c84..f662ddc1 100644 --- a/.env.example +++ b/.env.example @@ -5,6 +5,7 @@ APP_NAME="純靠北工程師" APP_ENV="local" #"local"、"production" APP_KEY= APP_URL="https://init.engineer" +APP_PORT="80" # |-------------------------------------------------------------------------- diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..07d6417b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM php:8.1.4-fpm + +RUN apt-get update && apt-get install -y libmcrypt-dev \ + mariadb-client libmagickwand-dev libpng-dev \ + libonig-dev libzip-dev zip libpng-dev libjpeg-dev \ + libfreetype6-dev --no-install-recommends \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && pecl install imagick \ + && docker-php-ext-enable imagick \ + && docker-php-ext-install zip pdo_mysql mbstring gd \ + && rm -rf /var/lib/apt/lists/* + +ENTRYPOINT ["docker-php-entrypoint"] + +WORKDIR /var/www/html + +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +EXPOSE 8000 + +CMD ["php-fpm"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..9b5ef5ec --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: '3.8' +services: + + nginx: + image: nginx:stable-alpine + restart: always + links: + - app + ports: + - "${APP_PORT}:80" + depends_on: + - app + volumes: + - ./docker/conf/nginx_default.conf:/etc/nginx/conf.d/default.conf + - ./storage/app/public:/usr/share/nginx/html/storage + + app: + build: + context: ./ + dockerfile: Dockerfile + volumes: + - ./:/var/www/html + command: bash -c "php artisan serve --host=0.0.0.0 --port=8000" + + mysql: + image: mysql:5.7 + ports: + - "3306:3306" + environment: + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} + MYSQL_DATABASE: ${DB_DATABASE} + MYSQL_USER: ${DB_USERNAME} + MYSQL_PASSWORD: ${DB_PASSWORD} + volumes: + - mysql_data:/var/lib/mysql + + redis: + image: redis + ports: + - "6379:6379" + environment: + REDIS_PASSWORD: ${REDIS_PASSWORD} + volumes: + - redis_data:/data + +volumes: + mysql_data: + redis_data: diff --git a/docker/conf/nginx_default.conf b/docker/conf/nginx_default.conf new file mode 100644 index 00000000..d1e306db --- /dev/null +++ b/docker/conf/nginx_default.conf @@ -0,0 +1,17 @@ +server { + listen 80; + server_name _; + + location /storage/cards/images/ { + autoindex on; + root /usr/share/nginx/html; + } + + location / { + proxy_pass http://app:8000; + proxy_set_header X-Real-Ip $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + } +} diff --git a/scripts/init.sh b/scripts/init.sh new file mode 100644 index 00000000..7c86c1e7 --- /dev/null +++ b/scripts/init.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# 此腳本用於初次架設需進行的 Laravel 專案設定 +# 請先確保已透過 docker-compose up -d 建立好所有的 docker container + +echo "" +echo "key generate" +echo "" +docker-compose exec app php artisan key:generate + +echo "" +echo "migrate" +echo "" +docker-compose exec app php artisan migrate diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100644 index 00000000..2d335eba --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# 透過 image composer 進行 composer install +echo "" +echo "Setup composer and install dependencies" +echo "" +docker run --rm -v `pwd`:/app --workdir /app composer composer install + +# 透過 image node 進行 npm install +echo "" +echo "Setup npm and install dependencies" +echo "" +docker run --rm -v `pwd`:/app --workdir /app node:lts npm install && npm run prod