增加docker配置;修复重置命令错误;优化timer请求机制支持本地

This commit is contained in:
2024-04-07 13:47:52 +08:00
parent 7fcfb6249d
commit c0b5880ae1
8 changed files with 147 additions and 8 deletions

67
Dockerfile Normal file
View File

@@ -0,0 +1,67 @@
# 基于官方 PHP 8.0 镜像
FROM php:8.0-fpm
# RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# RUN sed -i 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
# 安装nginx
RUN apt-get install -y nginx
# 安装ffmpeg
RUN apt-get install -y ffmpeg
# 安装redis
RUN apt-get install -y redis-server
# 安装PHP扩展 zip
RUN apt-get install -y libzip-dev \
&& docker-php-ext-install zip
# 安装PHP扩展 mysql
RUN docker-php-ext-install mysqli pdo_mysql
# 安装PHP扩展 exif
RUN docker-php-ext-install exif
# 安装PHP扩展 imagemagick
RUN apt-get install -y libmagickwand-dev \
&& pecl install imagick \
&& docker-php-ext-enable imagick
# 安装PHP扩展 redis
RUN pecl install redis \
&& docker-php-ext-enable redis
# 安装PHP扩展 opcache
RUN docker-php-ext-install opcache
# 清理默认 Nginx 配置
RUN rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# 设置工作目录
WORKDIR /var/www/html
# 将当前目录下的文件拷贝到工作目录
COPY . /var/www/html
# 创建runtime目录
RUN mkdir /var/www/html/runtime
# 设置runtime目录权限为777
RUN chmod -R 777 /var/www/html/runtime
# 创建持久化存储目录
VOLUME /var/www/html/runtime
# 暴露 Nginx 端口
EXPOSE 80
#
RUN chmod +x /var/www/html/docker/run.sh
# 启动 Nginx PHP 然后阻塞
CMD /var/www/html/docker/run.sh

View File

@@ -233,3 +233,6 @@ vscode中liveSassCompiler的配置:
]
}
```
### docker
内置了docker打包命令打包出的镜像支持两种调用方法

30
docker/nginx.conf Normal file
View File

@@ -0,0 +1,30 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/public;
index index.php index.html index.htm;
server_name _;
# 上传大小不限制
client_max_body_size 8192m;
# 运行时长不限制
fastcgi_read_timeout 60000;
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

11
docker/phprun.ini Normal file
View File

@@ -0,0 +1,11 @@
; 内存不限制
memory_limit = -1
; 上传文件大小不限制
upload_max_filesize = -1
; 运行时长不限制
max_execution_time = 0
; POST大小不限制
post_max_size = -1

21
docker/run.sh Normal file
View File

@@ -0,0 +1,21 @@
# 将代码中的nginx复制到nginx配置文件中
cp /var/www/html/docker/nginx.conf /etc/nginx/sites-available/default
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# 将代码中的php配置文件复制到php配置文件中
cp /var/www/html/docker/phprun.ini /usr/local/etc/php/conf.d
# 运行redis
nohup redis-server --requirepass "" &
# 运行定时任务
nohup php /var/www/html/think timer --local &
# 如果第一个参数是server或者没有参数则运行server
if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行nginx
service nginx start
# 运行php-fpm
php-fpm
else
php "/var/www/html/""$@"
fi

View File

@@ -348,6 +348,7 @@ class AdminUpdateServiceBase
'app',
'config',
'route',
'docker'
];
foreach ($optional_files_prefix as $prefix) {
@@ -356,7 +357,7 @@ class AdminUpdateServiceBase
}
}
// 如果file_path不存在目录分隔符则是可选更新的文件
// 如果file_path不存在目录分隔符则是可选更新的文件(根目录下的文件)
if (strpos($file_path, '/') === false) {
return true;
}

View File

@@ -21,6 +21,9 @@ class TimerBase extends Command
$this->setName('timer')
->addOption('temp', null, Option::VALUE_NONE)
->addOption('quit', null, Option::VALUE_NONE)
->addOption('local', null, Option::VALUE_NONE)
->addOption('local-host', null, Option::VALUE_OPTIONAL, '本地域名','http://localhost')
->addOption('local-port', null, Option::VALUE_OPTIONAL, '本地端口', '80')
->setDescription('内置秒级定时器');
}
@@ -30,16 +33,23 @@ class TimerBase extends Command
$output->writeln('start timer');
$site_domain = sysconfig('site', 'site_domain');
if (empty($site_domain)) {
$output->writeln('请前往后台设置站点域名site_domain配置项');
return;
}
$output->writeln('站点域名:' . $site_domain);
$host = $site_domain;
if ($input->hasOption('local')) {
$host = $input->getOption('local-host') . ':' . $input->getOption('local-port');
}
$client = new Client([
'base_uri' => $site_domain,
'base_uri' => $host,
'headers' => [
'Host' => $site_domain,
],
'verify' => false,
]);
@@ -52,14 +62,12 @@ class TimerBase extends Command
$config_item = static::initConfigItem($config_item);
$name = $config_item['name'];
if ($name == 'http_demo' && !env('adminsystem.is_demo', false)) {
continue;
}
$cache_key = 'timer_' . $name;
$cache_tag = 'system_timer';
$last_exec_time = Cache::get($cache_key, 0);
if ($last_exec_time >= time() - $config_item['frequency']) {
@@ -67,9 +75,7 @@ class TimerBase extends Command
}
Cache::tag($cache_tag)->set($cache_key, time());
$type = $config_item['type'];
switch ($type) {
case 'site':
$output->writeln(date('Y-m-d H:i:s') . ': build site request async:' . $config_item['target']);

View File

@@ -17,7 +17,7 @@ class ResetPasswordBase extends TimerController
return $this->error('本功能只有在演示环境下在能使用', '', '/');
}
$output = Console::call('admin:resetPassword', [
$output = Console::call('admin:reset:password', [
'--password=123456',
]);