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加速方式
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.php
和config/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 工具
持续集成
使用专业的代码管理工具(git
或 svn
)是一个不错的选择,通过专业的代码管理工具+部署脚本,可以让系统实现持续开发集成,加速迭代。
自动部署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";
推荐文章: