5.1. 系统运维

未匹配的标注

系统运维

系统运行过程产生的新数据

默认运行情况下,除了数据库,会在文件系统产生以下新数据:

目录 描述
/public/data/ 上传的文件数据(如果启用了云存储,文件是直接存储在云存储中,忽略本条)
/.env 系统基本配置文件
/storage/install.lock 系统安装锁定文件
/module/Xxx/ 新安装的模块代码

系统运行所有缓存文件目录位置

目录 描述
/public/data_temp/ 文件上传的临时文件,可以全部删除
/public/data_chunk/ 文件上传的临时文件,可以全部删除
/public/temp/ 系统处理临时文件
/bootstrap/cache/ 配置项等缓存文件,可以全部删除
/storage/framework/cache/ 系统缓存文件,可以全部删除
/storage/framework/sessions/ 会话缓存文件,可以全部删除
/storage/framework/views/ 视图缓存文件,可以全部删除
/storage/logs/ 系统日志文件,可以全部删除

注意:以上所有目录在清理过程中注意不要删除目录本身。

系统服务器间迁移网站和数据

1)复制整个网站目录到新的服务器

2)在新的服务器上配置系统,参照「安装入门」中的说明文档,保证访问可达

配置好新系统后,保证访问 example.com/install/ping 返回 ok 文本

如果有异常信息请参照「使用常见问题」解决。

3)修改必要的配置信息 /.env 文件

4)清理系统缓存

php artisan cache:clear
php artisan view:clear

5)访问新的系统

如何为网站强制增加 www

Nginx 参考配置

server {
    listen 80;
    server_name modstart.com;
    location / {
        rewrite ^/(.*)$ http://www.modstart.com/$1 permanent;
    }
}

网站如何强制跳转为 https

Nginx 参考配置

server {
    listen 80;
    server_name www.modstart.com;
    location / {
        rewrite ^/(.*)$ https://www.modstart.com/$1 permanent;
    }
}

为网站开通CDN加速

通过CDN可以将动态请求、静态资源分离,加速网站的访问。我们推荐如下的CDN加速方式

image-20220517205009684

CDN静态资源更新问题

系统内置了静态资源自动计算Hash的问题来避免缓存,静态资源加载的路径格式为 https://xxx.com/xxx.js?<Hash数字>,当静态资源发生更新时,Hash数字会发生变化,从而让CDN加速节点感知资源的变化,拉取最新的静态资源。

部分CDN加速可能会忽略请求参数,在配置CDN加速服务时,请勿忽略请求的参数(即静态资源请求链接?后的Hash数字参数)

如何开启Redis作为缓存驱动

系统已经默认安装了 predis/predis 扩展,只需要以下简单配置即可完成缓存驱动切换。

## 切换缓存驱动为 redis
CACHE_DRIVER=redis

## 设置 Redis 连接信息
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=xxxxx
REDIS_PORT=6379

配置完成后清除系统缓存

更详细的配置参考 config/cache.phpconfig/database.php 文件

如何优化网站打开速度

1. 优化静态资源加载速度

网络传输会很大程度影响加载速度,服务器的带宽再大同时访问的人数增多带宽也会打满。

使用 CDN 优化静态资源加载速度,如七牛、网易、百度、阿里云等,具体方法可网上自行查找。

2. 优化后端服务响应速度

第一步,安装并开启 OPCache ,可以让网站加载速度提升。

修改 php.ini

[opcache]
opcache.enable=1
; 可用内存, 酌情而定, 单位为:Mb
opcache.memory_consumption=528
; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
; opcache.interned_strings_buffer=8
; 对多缓存文件限制, 命中率不到 100% 的话, 可以试着提高这个值
opcache.max_accelerated_files=10000
; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒
; 生产环境,代码不变可以关闭0
opcache.revalidate_freq=1

第二步,使用Laravel优化命令优化系统加载流程

## 缓存路由
php artisan route:cache
## 缓存配置
php artisan config:cache
## 类映射加载优化
php artisan optimize

对应的清空缓存

## 清除缓存路由
php artisan route:clear
## 清除缓存配置
php artisan config:clear
## 清除类映射加载优化
php artisan clear-compiled

我们强烈推荐使用 Linux 部署 PHP 服务,性能会比 Windows 提升不少。

git常用命令

## git忽略文件权限变更
git config --add core.filemode false

## 清空git历史
git checkout --orphan temp_branch
git add -A
git commit -am "init"
git branch -D master
git branch -m master

## 修改最近一次提交信息
git commit --amend -m "New commit message."

## 存储用户名密码信息
git config --global credential.helper store

## 从HEAD往前打1个patch
git format-patch -1 HEAD

## 应用一个patch到当前分支,合并失败的文件生成 rej 文件
git apply --reject 0001-xxx.patch

nginx

https证书

配置HTTP证书,除了基础的服务器配置外,还需额外增加以下配置信息,打开 443 端口,配置证书路径。

server {
    listen 443 ssl;
    server_name  xxx.com;
    ssl_certificate      /xxx/cert.pem;
    ssl_certificate_key  /xxx/key.pem;
    # ...
}

反向代理

server {
    server_name old.example;
    location / {
        proxy_pass http://xx.xx.xx.xx:8080;
        proxy_set_header Host $host;
    }
}

php

查看php-fpm执行状态

## 端口方式
curl http://localhost:9000/status
## sock方式
SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect /sock/php-fpm.sock

docker

清除无用镜像

docker images | awk '{print $3}' | xargs docker rmi

Linux运维

创建和启用Swap交换区

如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择,如果硬盘使用的是 SSD,正常读写速度都在 300MB/s 以上,启用 swap 后性能提高了不少,特别是在处理消耗大内存的脚本方面。

创建交换区原则:

  • 创建的swap交换区大小应该大于实际物理内存的容量大小,但是不要过大,以免造成硬盘空间浪费。
  • 如果内存IO请求频繁,而单一swap交换区IO队列等待时间过长的话,可以多创建几个swap交换区。
  • 原则上优先在IO速度最快的设备上创建。

(1)创建swap交换区硬盘存储用的空白文件。

通常创建物理内存2~2.5倍大小的文件作为交换区。

# 创建一个1个G的SWAP交换区空白文件
dd if=/dev/zero of=/swap bs=1M count=1024

(2)使用mkswap格式化文件为swap文件系统

# -f 使用文件作为swap交换区
mkswap -f /swap
# 设定为推荐的 0600 权限
chmod 0600 /swap

(3)启用刚才创建的Swap文件

swapon /swap

(4)如果有必要可以设置开机自动启用swap文件交换区,修改/etc/fstab,增加一行

# 启动即启用swap
/swap swap swap defaults 0 0

(5)如果不需要启用swap或需要调整swap大小,可以使用swapoff命令关闭swap。

# 关闭swap
swapoff /swap

关闭swap后删除对应的swap文件即可删除swap交换区,如需要调整swap交换区大小,从第一部开始重新创建即可。

工具推荐

  • pt-online-schema-change:MySQL 在线 DDL 工具

持续集成

使用专业的代码管理工具(gitsvn)是一个不错的选择,通过专业的代码管理工具+部署脚本,可以让系统实现持续开发集成,加速迭代。

自动部署PHP脚本参考

专业的 CI 固然好,在早期通过简单的脚本实现持续集成也是个不错的选择。

在服务端通过脚本拉取最新的仓库代码,实现持续集成功能。

<?php
echo "\n\n";

set_time_limit(0);

$type = @$_GET['type'];
if ('schedule' == $type) {
    $ret = shell_exec("php ../artisan schedule:run 2>&1");
    echo 'OK';
    return;
}

$ret = shell_exec("git pull origin master 2>&1");
$lines = explode("\n", $ret);
if (isset($lines[0])) {
    unset($lines[0]);
}
echo "=== Deploy Code ===\n" . join("\n", $lines) . "\n";

echo "=== Clear Bootstrap Cache ===\n" . $ret . "\n";
$ret = shell_exec("rm -rfv ../bootstrap/cache/* 2>&1");

echo "=== Clear Storage Cache ===\n" . $ret . "\n";
$ret = shell_exec("rm -rfv ../storage/framework/cache/* 2>&1");

$ret = shell_exec("php ../artisan cache:clear 2>&1");
echo "=== Clear System Cache ===\n" . $ret . "\n";

$ret = shell_exec("php ../artisan view:clear 2>&1");
echo "=== Clear View Cache ===\n" . $ret . "\n";

$ret = shell_exec("php ../artisan migrate 2>&1");
echo "=== Migrate ===\n" . $ret . "\n";

$ret = shell_exec("php ../artisan modstart:module-install-all 2>&1");
echo "=== ModStart ModuleInstallAll ===\n" . $ret . "\n";

$ret = shell_exec("php ../artisan config:cache 2>&1");
echo "=== Optimize Config Cache ===\n" . $ret . "\n";

$ret = shell_exec("php ../artisan optimize 2>&1");
echo "=== Optimize Code ===\n" . $ret . "\n";

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
发起讨论 查看所有版本


暂无话题~