androidapachebackendcentoscentos8.4commandcomposercrontabcurldesigndevelopdockerelasticfinancingfirewallfrontendgatewaygitgolanghybridiisiptablesjavajenkinskuberneteslaravelluamacmemcachemigrationmongodbmysqlnginxnodejsofficeopenrestyopensslperformancephpproductionredisregexprestfulsecurityshadowsocksshellsnippetsshstartupteamtraintravelunitvmwarevsftpwindowsworkwwwyaf

工作规范

常用服务

生产环境

基本配置

1.8核 CPU
2.8GB 内存
3.50GB 系统盘
4.5MB 以上带宽,独立数据库
5.数据盘(100 GB以上),挂载至 /disk

目录结构

disk
    backup                              # 备份目录
        example.com.sql
        example.com.zip
        ...         
    certs                               # 证书目录
        dnspod_token                    # DNSPOD API Token
        example.com.key
        example.com.crt
        ...         
    cache                               # 公共缓存
        ipdata.dat                      # IP 位置库
        nginx                           # Nginx 缓存
        ...         
    rules                               # Nginx 规则
        instance.conf                   # 服务器实例
        launch.conf                     # 启动配置项
        phpcgi.conf                     # PHP 处理程序
        auth_request.conf               # PHP 文件访问授权验证
        dora_route.conf                 # Dora 路由规则
        security.conf                   # Dora 安全规则
        ...         
    sites                               # 站点配置
        default.conf                    # 默认站点
        ...
    shell                               # 自动化脚本
        install.sh                      # 系统初始化:Nginx、PHP 和 Nodejs 安装
        auto-test.sh                    # 自动化任务:日志清理、缓存清理、证书更新、配置同步
        gitpull.sh                      # Git 同步脚本
        backup.sh                       # 数据库备份
        fdisk.sh                        # 数据盘初始化
        backup.sh                       # 数据库备份
        blockip.sh                      # 访问频率过高IP自动Ban
        certbot-deploy.sh               # CertBot SSL 证书更新和部署
        certbot-auth-file.sh            # CertBot 域名验证,以文件形式
        certbot-auth-dnspod.sh          # CertBot DNSPOD 解析验证脚本
        compress.sh                     # 图片批量压缩
        ...
    www                                 # 站点目录
        instance                        # 实例标识
        startup/default                 # 默认站点
        startup/upgrade                 # 升级站点
        startup/coming                  # 准备站点
        ...
    log                                 # 日志目录
        access.log                      # Nginx 访问日志
        error.log                       # Nginx 错误日志
        ...

服务器

1.合理配置 PHP-FPM
2.仅开放必要端口(80 / 88 / 3636 / 22 / 2121)
3.针对静态文件类型做缓存(gif jpg png css js)
4.针对特殊文件类型做访问限制(sql / md / log)
5.header 中增加服务器标识
6.服务器目录结构统一规范 (disk / sites / rules / www / log)
7.针对大流量请求,分离或关闭日志
8.多台服务器尽量在一个内网,方便互通
9.自动拉取项目,失败时邮件提醒

数据库

1.查询时尽可能列出字段
2.合理使用索引,优先使用联合索引
3.耗时运算尽量安排在凌晨以后
4.尽量使用触发器、事件来实现复杂运算
5.大表提前预留 extra_num 和 extra_str 冗余字段

应用程序

1.优先使用缓存
2.延迟连接数据库
3.尽可能不依赖数据库
4.不同业务模块拆分,分散压力
5.尽量使用单一入口处理数据(AJAX / JSONP)
6.数据请求必要来路、token 验证
7.输出友好错误信息,显示排错标识信息
8.后端自动记录程序错误
9.渲染用户输入内容时要转 HTML 实体

前端开发

1.对 JS 和 CSS 文件进行压缩合并
2.对公共 JS 使用 CDN 加速,以及分别管理
3.CSS中用到的图片,尽量使用 Sprite 技术
4.尽量对图片进行延迟加载
5.前端自动记录异常错误
6.尽可能让 Ajax / JSONP 可缓存

开发环境

1.使用 GIT 协同开发
2.本地开发屏蔽配置文件

经验心得

1. 不要在临近假期进行大版本提交

七牛镜像

MySQL 备份

上传附件存储

公用静态资源

建立软链接

ln -s /disk/www/shihuizhu.com/attach/goods /disk/www/s3.zhfile.com/goods

Nginx

基础配置

user  nginx;
worker_processes  auto;
worker_rlimit_nofile 204800;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {

    # Launch File
    include /disk/rules/launch.conf;

}

默认站点

# /disk/sites/default.conf
server {
    listen       88 default_server;
    listen       [::]:88 default_server;
    server_name  _;
    root         /disk/www/startup/welcome;
    include phpcgi.conf;

    location / {

    }

    add_header "Access-Control-Allow-Origin" "*" "always";

    location  /nginx_status {
         stub_status on;
    }

    location /phpfpm_status {
        fastcgi_pass  127.0.0.1:9000;
        include fastcgi_params;
    }

    include /disk/rules/auth_request.conf;
    include /disk/rules/security.conf;
}

PHP-FPM

配置文件

/etc/php-fpm.d/www.conf

更改用户和组

user = nginx                #修改用户为 nginx
group = nginx               #修改用户组为 nginx

启用 PHP-FPM 状态

pm.status_path = /phpfpm_status

Git 常用命令

重置单个文件状态

git checkout -- config/version.php

丢掉工作区的修改

git reset --hard

运维经验

使用 cname 同步多个 IP 指向(在多负载均衡、多域名时尤为有用)