部署上线

从本地到服务器:目录上传、Nginx 完整配置、双入口形态、HTTPS、权限、迁移、备份与升级,一次做对。

约 10 分钟 上线 代码块右上角可一键复制
本页目录(10 分钟读完)

这一章把站点搬到服务器。

出错 → 看 排错手册。

怎么查环境#

先在本地跑一遍,能早发现九成问题。

Shell
php aucms env:check
项要求
PHP≥ 7.2
扩展pdo mbstring json openssl
数据库MySQL 或 SQLite
WebNginx 或 Apache

怎么打包上传#

要传的:程序全部文件和 data/。

不传的:缓存、日志、开发工具。

Shell
# 本地打包,排除不用的
zip -r aucms.zip . \
  -x "runtime/*" \
  -x ".workbuddy/*" \
  -x ".git/*" \
  -x "data/plugin_config/*"
  1. 把 zip 传到服务器站点目录
  2. 解压
  3. 确认 data/secret.key 在
Shell
unzip aucms.zip -d /www/wwwroot/example.com
ls -l /www/wwwroot/example.com/data/secret.key

传完就报错? → 看 排错手册

怎么配目录权限#

  1. 进站点目录
  2. 复制下面三行
  3. 依次执行
Shell
chown -R www:www .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod -R 775 runtime data

不要用 777,那是挂马的起点。

怎么写 Nginx 入口#

根目录模式,宝塔新建站点后照这个填。

Nginx
server {
    listen 80;
    server_name example.com;
    root /www/wwwroot/example.com;
    index index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/tmp/php-cgi-74.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

改完点「保存」,再点「重载配置」。

怎么开伪静态#

作用:网址变好看,/article/1 → /article/1.html

步骤:

  1. 登录后台 /admin
  2. 左侧点「系统设置」
  3. 找到「链接形态」
  4. 选「伪静态」
  5. 点「保存」

复制这 3 行 → 贴到宝塔「网站 → 伪静态」→ 保存:

Nginx
location / {
    try_files $uri /index.php?$query_string;
}

效果:

原来现在
/list/news?page=2/list/news/page/2
/article/123/article/123.html

打不开? → 看 排错手册

安全规则#

禁止直接访问核心目录。

宝塔:网站 → 设置 → 配置文件。

复制下面规则,贴进 server { }。

Nginx
location ^~ /app/    { deny all; }
location ^~ /core/   { deny all; }
location ^~ /config/ { deny all; }
location ^~ /data/   { deny all; }
location ^~ /docs/   { deny all; }
location ^~ /lang/   { deny all; }
location ^~ /tests/  { deny all; }

随包还有一份完整规则:.workbuddy/deploy/00-security.conf。

整份贴进配置文件即可,别两处重复写。

怎么用隔离模式#

运行目录指到 public/,更安全。

  1. 打开 Nginx 站点配置
  2. 把 root 改成 .../public
  3. 补三段 alias
  4. 保存并重载
Nginx
root /www/wwwroot/example.com/public;

location ^~ /view/ {
    alias /www/wwwroot/example.com/view/;
    location ~* \.(css|js|png|jpe?g|gif|webp|svg|woff2?|ttf)$ { }
    location ~* \.html$ { deny all; }
}
location ^~ /runtime/upload/ {
    alias /www/wwwroot/example.com/runtime/upload/;
}
location ^~ /plugin/ {
    alias /www/wwwroot/example.com/plugin/;
    location ~ ^/plugin/[^/]+/(src|view|lang)/ { deny all; }
    location ~ \.(php|json)$ { deny all; }
}

/view/ 只放行静态文件,不要整目录放行。

怎么装新站#

  1. 浏览器打开域名
  2. 按向导走五步
  3. 装完跑收尾命令
Shell
mv install /root/aucms-install-backup
php aucms db:index
php aucms cache:rebuild
php aucms env:check

怎么从旧服务器搬过来#

搬家要做的事比较多:备份、传文件、改数据库连接、换域名、清缓存、验收。

→ 完整步骤看 搬家与换域名

这里只提醒最容易漏的一件:

code
data/secret.key 一定要带上。
丢了它,加密过的数据全都解不开。

搬完检查首页、栏目页、详情页、后台、图片。

搬完全 404? → 看 排错手册

怎么上 HTTPS#

  1. 先在宝塔申请证书
  2. 打开站点配置
  3. 贴入下面配置
  4. 保存并重载
Nginx
server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /www/server/panel/vhost/cert/example.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

上 HTTPS 后,到系统设置改站点地址为 https。

怎么备份#

每天定时跑,复制就能用。

Shell
#!/bin/bash
# /root/backup-aucms.sh
TS=$(date +%F)
DIR=/www/wwwroot/example.com
OUT=/root/backup/$TS
mkdir -p $OUT

mysqldump -u 用户 -p密码 库名 --single-transaction --quick | gzip > $OUT/db.sql.gz
tar czf $OUT/files.tar.gz -C $DIR --exclude=runtime/cache --exclude=runtime/log .
cp $DIR/data/secret.key $OUT/secret.key

find /root/backup -maxdepth 1 -type d -mtime +14 -exec rm -rf {} \;

加进定时任务。

Shell
0 3 * * * /bin/bash /root/backup-aucms.sh

备份要先恢复一次,能起来才算数。

怎么升级#

  1. 先备份
  2. 覆盖程序文件
  3. 跑升级命令
  4. 再自检
Shell
php aucms db:install
php aucms db:index
php aucms cache:rebuild
php aucms env:check

永远不要覆盖这三个目录:data/、runtime/、你的主题目录。

怎么自检#

全部 200 才算通。

Shell
BASE=https://你的域名
for u in / /list/news /article/1.html /sitemap.xml /robots.txt /admin/login \
         /view/default/static/css/style.css; do
  printf "%-42s %s\n" "$u" "$(curl -s -o /dev/null -w '%{http_code}' $BASE$u)"
done

下面这些必须是 403 或 404。

Shell
BASE=https://你的域名
for u in /data/secret.key /core/Bootstrap.php /config/app.php \
         /view/default/layout.html /runtime/log/; do
  printf "%-42s %s\n" "$u" "$(curl -s -o /dev/null -w '%{http_code}' $BASE$u)"
done

对不上? → 看 排错手册

没找到答案? 在后台「缓存与维护 → 系统体检」里看环境是否正常;仍无解就打开 server_debug.php 复现一次,页面会直接告诉你异常文件与行号。