feat(docker): add Docker configuration and production environment setup
This commit is contained in:
33
docker/entrypoint.sh
Normal file
33
docker/entrypoint.sh
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
mkdir -p \
|
||||
storage/app/public \
|
||||
storage/framework/cache/data \
|
||||
storage/framework/sessions \
|
||||
storage/framework/views \
|
||||
storage/logs \
|
||||
bootstrap/cache
|
||||
|
||||
if [ ! -L public/storage ]; then
|
||||
rm -rf public/storage
|
||||
ln -s ../storage/app/public public/storage
|
||||
fi
|
||||
|
||||
if [ "$(id -u)" = "0" ]; then
|
||||
chown -R www-data:www-data storage bootstrap/cache
|
||||
fi
|
||||
|
||||
if [ -z "${APP_KEY:-}" ]; then
|
||||
echo "ERROR: APP_KEY is empty. Set it in .env.production, then restart containers." >&2
|
||||
echo " php artisan key:generate --show" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${APP_ENV:-production}" = "production" ]; then
|
||||
php artisan config:cache --no-interaction
|
||||
php artisan event:cache --no-interaction
|
||||
php artisan view:cache --no-interaction
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
49
docker/nginx/default.conf
Normal file
49
docker/nginx/default.conf
Normal file
@@ -0,0 +1,49 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /var/www/html/public;
|
||||
index index.php;
|
||||
|
||||
charset utf-8;
|
||||
client_max_body_size 20M;
|
||||
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location = /favicon.ico {
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
|
||||
location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp|woff|woff2|ttf)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
access_log off;
|
||||
try_files $uri /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
try_files $uri =404;
|
||||
fastcgi_pass app:9000;
|
||||
fastcgi_index index.php;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
fastcgi_param DOCUMENT_ROOT $realpath_root;
|
||||
include fastcgi_params;
|
||||
fastcgi_hide_header X-Powered-By;
|
||||
}
|
||||
|
||||
location ~ /\.(?!well-known).* {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
8
docker/php/opcache.ini
Normal file
8
docker/php/opcache.ini
Normal file
@@ -0,0 +1,8 @@
|
||||
opcache.enable = 1
|
||||
opcache.enable_cli = 0
|
||||
opcache.memory_consumption = 192
|
||||
opcache.interned_strings_buffer = 16
|
||||
opcache.max_accelerated_files = 20000
|
||||
opcache.validate_timestamps = 0
|
||||
opcache.save_comments = 1
|
||||
opcache.fast_shutdown = 1
|
||||
12
docker/php/php.ini
Normal file
12
docker/php/php.ini
Normal file
@@ -0,0 +1,12 @@
|
||||
expose_php = Off
|
||||
memory_limit = 256M
|
||||
max_execution_time = 60
|
||||
max_input_time = 60
|
||||
upload_max_filesize = 20M
|
||||
post_max_size = 20M
|
||||
variables_order = EGPCS
|
||||
realpath_cache_size = 4096K
|
||||
realpath_cache_ttl = 600
|
||||
log_errors = On
|
||||
error_log = /proc/self/fd/2
|
||||
date.timezone = UTC
|
||||
Reference in New Issue
Block a user