Что в этом документе
- Получить код приложения
- Настройка приложения Dockerfile
- Создать файлы инициализации MySQL для базы данных инициировать при запуске
- Настройка приложения .ENV Файл
- Создать Docker-Compose.yaml с поддержкой всех трех ролей
- Запустите Composer Install для установки зависимостей приложения
- Проверьте http://localhost: 8000
🚀 Получите код приложения
Оригинал из https://github.com/do-community/travellist-laravel-demo
https://github.com/vumdao/travellist-laravel-demo
🚀 Настройка DockerFile приложения
#!/usr/bin/env bash
set -e
role=${CONTAINER_ROLE:-app}
env=${APP_ENV:-production}
if [ "$env" != "local" ]; then
echo "Caching configuration..."
(cd /var/www/html && php artisan config:cache && php artisan route:cache && php artisan view:cache)
fi
if [ "$role" = "app" ]; then
exec php-fpm
elif [ "$role" = "scheduler" ]; then
echo "Queue role"
while [ true ]
do
php /var/www/artisan schedule:run --verbose --no-interaction &
sleep 60
done
elif [ "$role" = "queue" ]; then
echo "Running the queue..."
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
else
echo "Could not match the container role \"$role\""
exit 1
fi
FROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
supervisor
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# setup redis
RUN pecl install redis \
&& docker-php-ext-enable redis
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
# RUN useradd -G www-data,root -u $uid -d /home/$user $user
# RUN mkdir -p /home/$user/.composer && \
# chown -R $user:$user /home/$user && \
# chown -R $user:$user /var/www/
# Set working directory
WORKDIR /var/www
ADD composer.json ./
RUN composer install --prefer-dist --no-scripts --no-autoloader --no-interaction --no-ansi --optimize-autoloader
COPY . /var/www/
VOLUME /var/www/storage /var/www/bootstrap
# Create system user to run Composer and Artisan Commands
COPY docker/start.sh /usr/local/bin/start
RUN chown -R $user: /var/www \
&& chmod u+x /usr/local/bin/start
COPY docker/supervisord.conf /etc/supervisor/supervisord.conf
# USER $user
CMD ["/usr/local/bin/start"]
🚀 Настройка файлов конфигурации NGINX и дампа базы данных
- Файл будет настроить Nginx для прослушивания на порту 80 и использовать Index.php в качестве страницы индекса по умолчанию. Он установит документ root на/var/www/public, а затем настраивает Nginx для использования службы приложений в порту 9000 для обработки *.php файлов.
$ cat docker-compose/nginx/travellist.conf
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
🚀 Создать файлы инициализации MySQL для базы данных инициировать при запуске
$ cat docker-compose/mysql/init_db.sql
DROP TABLE IF EXISTS `places`;
CREATE TABLE `places` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`visited` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `places` (name, visited) VALUES ('Berlin',0),('Budapest',0),('Cincinnati',1),('Denver',0),('Helsinki',0),('Lisbon',0),('Moscow',1),('Nairobi',0),('Oslo',1),('Rio',0),('Tokyo',0);
🚀 Настройка приложения .ENV Файл
cd travellist-laravel-demo-tutorial-4.0.1 cp .env.example .env
- Изменить
.envЧтобы исправить информацию
DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=travellist DB_USERNAME=user DB_PASSWORD=password
🚀 Создать Docker-Compose.yaml с поддержкой всех трех ролей
- Веб -сервер
EXEC PHP-FPM - Планировщик бегун
PHP/var/www/hartisan график: бежать - Работник очереди
/usr/bin/superisord -n -c/etc/supervisor/supervisord.conf
version: "3.7"
services:
app:
build:
args:
user: www-data
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
- composer_cache:/home/.sammy/.composer
networks:
- travellist
environment:
APP_ENV: local
CONTAINER_ROLE: app
scheduler:
image: travellist
container_name: travellist-scheduler
depends_on:
- app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
- composer_cache:/home/.sammy/.composer
networks:
- travellist
environment:
APP_ENV: local
CONTAINER_ROLE: scheduler
queue:
image: travellist
container_name: travellist-queue
depends_on:
- app
volumes:
- ./:/var/www
- composer_cache:/home/.sammy/.composer
environment:
APP_ENV: local
CONTAINER_ROLE: queue
CACHE_DRIVER: redis
SESSION_DRIVER: redis
QUEUE_DRIVER: redis
REDIS_HOST: redis
redis:
container_name: travellist-redis
image: redis:4-alpine
ports:
- 16379:6379
db:
image: mysql:5.7
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: travellist
MYSQL_ROOT_PASSWORD: password
MYSQL_PASSWORD: password
MYSQL_USER: user
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
- travellist
nginx:
image: nginx:alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d
networks:
- travellist
networks:
travellist:
driver: bridge
volumes:
composer_cache:
🚀 Запустите Composer Install для установки зависимостей приложения
$ chmod -R 777 storage .env $ docker-compose up -d $ docker-compose exec app ls -l total 256 -rw-rw-r-- 1 1000 1000 737 May 14 2020 Dockerfile drwxrwxr-x 6 1000 1000 4096 May 14 2020 app -rwxr-xr-x 1 1000 1000 1686 May 14 2020 artisan drwxr-xr-x 2 root root 4096 Dec 25 08:47 bootstrap -rw-rw-r-- 1 1000 1000 1501 May 14 2020 composer.json -rw-rw-r-- 1 1000 1000 181665 May 14 2020 composer.lock drwxrwxr-x 2 1000 1000 4096 May 14 2020 config drwxrwxr-x 5 1000 1000 4096 May 14 2020 database drwxrwxr-x 4 1000 1000 4096 May 14 2020 docker-compose -rw-rw-r-- 1 1000 1000 1016 May 14 2020 docker-compose.yml -rw-rw-r-- 1 1000 1000 1013 May 14 2020 package.json -rw-rw-r-- 1 1000 1000 1405 May 14 2020 phpunit.xml drwxrwxr-x 5 1000 1000 4096 May 14 2020 public -rw-rw-r-- 1 1000 1000 814 May 14 2020 readme.md drwxrwxr-x 6 1000 1000 4096 May 14 2020 resources drwxrwxr-x 2 1000 1000 4096 May 14 2020 routes -rw-rw-r-- 1 1000 1000 563 May 14 2020 server.php drwxr-xr-x 2 root root 4096 Dec 25 08:47 storage drwxrwxr-x 4 1000 1000 4096 May 14 2020 tests -rw-rw-r-- 1 1000 1000 538 May 14 2020 webpack.mix.js $ docker-compose exec app composer install
🚀 Проверьте http://localhost: 8000
Зеркало :
- https://github.com/vumdao/travellist-laravel-demo
- https://vumdao.hashnode.dev/5-minutes-travellist-laravel-demo
🌠 Блог · Web · LinkedIn · Группа · Страница · Twitter 🌠
Оригинал: «https://dev.to/vumdao/5-minutes-travellist-laravel-demo-2fcj»