ITPub博客

首页 > 应用开发 > IT综合 > 个人博客搭建指南:GMSSH工具结合WordPress可视化部署实践

个人博客搭建指南:GMSSH工具结合WordPress可视化部署实践

翻译 IT综合 作者:bhluo 时间:2026-02-03 16:09:02 0 删除 编辑

# 个人博客搭建指南:GMSSH工具结合WordPress可视化部署实践


## 环境准备与架构设计


搭建个人博客需要系统性的规划和分步实施。本文介绍的方案采用可视化运维工具管理服务器,结合成熟的WordPress平台,为技术背景有限的用户提供清晰的实施路径。整个流程从服务器选择开始,贯穿环境配置、平台部署、主题定制到内容发布。


## 服务器环境初始化


### 服务器配置与连接


首先完成服务器的基本配置和远程连接设置:


```bash

#!/bin/bash

# 服务器初始化脚本 server-init.sh


# 更新系统并安装基础工具

apt-get update && apt-get upgrade -y

apt-get install -y \

    curl \

    wget \

    vim \

    git \

    htop \

    net-tools \

    ufw \

    fail2ban


# 配置时区

timedatectl set-timezone Asia/Shanghai


# 创建博客专用用户

useradd -m -s /bin/bash bloguser

usermod -aG sudo bloguser

echo "为bloguser设置密码:"

passwd bloguser


# 配置SSH安全设置

sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

echo "AllowUsers bloguser" >> /etc/ssh/sshd_config


# 重启SSH服务

systemctl restart sshd


# 配置防火墙

ufw default deny incoming

ufw default allow outgoing

ufw allow 22/tcp   # SSH

ufw allow 80/tcp   # HTTP

ufw allow 443/tcp  # HTTPS

ufw --force enable


echo "服务器初始化完成"

```


### GMSSH可视化配置


通过GMSSH工具进行可视化的服务器管理:


```yaml

# GMSSH配置文件 gmsh-config.yaml

servers:

  blog-server:

    name: "个人博客服务器"

    host: "your-server-ip"

    port: 22

    username: "bloguser"

    auth_method: "key"  # 或 password

    private_key_path: "~/.ssh/id_rsa"

    

    # 连接设置

    connection:

      timeout: 30

      keepalive: true

      compression: true

      

    # 环境变量

    environment:

      BLOG_DIR: "/var/www/blog"

      MYSQL_PASS: "${MYSQL_PASSWORD}"

      

    # 文件传输设置

    sftp:

      enabled: true

      default_dir: "/home/bloguser"

      

    # 监控设置

    monitoring:

      cpu_threshold: 80

      memory_threshold: 85

      disk_threshold: 90


# 批量命令配置

command_groups:

  blog-setup:

    - name: "检查系统状态"

      command: "uptime && free -h && df -h"

      

    - name: "安装Web服务器"

      command: "sudo apt-get install -y nginx"

      

    - name: "安装数据库"

      command: "sudo apt-get install -y mysql-server"

      

    - name: "安装PHP环境"

      command: "sudo apt-get install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc"

      

    - name: "重启服务"

      command: "sudo systemctl restart nginx mysql php8.2-fpm"


# 自动备份配置

backup:

  schedule: "0 2 * * *"  # 每天凌晨2点

  retention_days: 30

  targets:

    - path: "/var/www/blog"

      type: "directory"

    - path: "/var/lib/mysql"

      type: "database"

      db_name: "wordpress"

```


## WordPress部署流程


### 数据库配置脚本


```sql

-- WordPress数据库初始化脚本 wordpress-db.sql

-- 创建数据库

CREATE DATABASE IF NOT EXISTS wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


-- 创建专用用户

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}';


-- 授权

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX 

ON wordpress.* TO 'wpuser'@'localhost';


-- 刷新权限

FLUSH PRIVILEGES;


-- 创建备份存储过程

DELIMITER $$

CREATE PROCEDURE backup_wordpress_tables()

BEGIN

    -- 创建备份表

    CREATE TABLE IF NOT EXISTS wp_posts_backup LIKE wp_posts;

    CREATE TABLE IF NOT EXISTS wp_comments_backup LIKE wp_comments;

    

    -- 复制数据

    INSERT INTO wp_posts_backup SELECT * FROM wp_posts;

    INSERT INTO wp_comments_backup SELECT * FROM wp_comments;

    

    SELECT '备份完成' as status;

END $$

DELIMITER ;

```


### Nginx服务器配置


```nginx

# WordPress Nginx配置 /etc/nginx/sites-available/blog.conf

server {

    listen 80;

    listen [::]:80;

    server_name your-domain.com

    

    # 重定向HTTP到HTTPS

    location / {

        return 301 https://$server_name$request_uri;

    }

}


server {

    listen 443 ssl http2;

    listen [::]:443 ssl http2;

    server_name your-domain.com

    

    # SSL证书配置

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;

    ssl_prefer_server_ciphers off;

    

    # 根目录设置

    root /var/www/blog;

    index index.php index.html index.htm;

    

    # 日志配置

    access_log /var/log/nginx/blog_access.log;

    error_log /var/log/nginx/blog_error.log;

    

    # WordPress主配置

    location / {

        try_files $uri $uri/ /index.php?$args;

    }

    

    # 静态文件缓存

    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|eot)$ {

        expires 30d;

        add_header Cache-Control "public, immutable";

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

    }

    

    # PHP处理

    location ~ \.php$ {

        include snippets/fastcgi-php.conf;

        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

        

        # 安全头

        add_header X-Frame-Options "SAMEORIGIN" always;

        add_header X-Content-Type-Options "nosniff" always;

        add_header X-XSS-Protection "1; mode=block" always;

    }

    

    # 限制访问

    location ~ /wp-content/uploads/.*\.php$ {

        deny all;

    }

    

    location ~ /\.ht {

        deny all;

    }

    

    # Gzip压缩

    gzip on;

    gzip_vary on;

    gzip_min_length 1024;

    gzip_types text/plain text/css text/xml text/javascript 

               application/javascript application/xml+rss application/json;

    

    # 安全限制

    client_max_body_size 64M;

    client_body_timeout 30s;

}

```


### WordPress自动安装脚本


```bash

#!/bin/bash

# WordPress自动安装脚本 install-wordpress.sh


# 配置变量

BLOG_DIR="/var/www/blog"

DB_NAME="wordpress"

DB_USER="wpuser"

DB_PASS=$(openssl rand -base64 32)


echo "开始安装WordPress..."


# 创建目录

sudo mkdir -p $BLOG_DIR

sudo chown -R www-data:www-data $BLOG_DIR

sudo chmod -R 755 $BLOG_DIR


# 下载最新版WordPress

cd /tmp

wget https://wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gz


# 复制文件

sudo cp -r wordpress/* $BLOG_DIR/


# 创建配置文件

sudo cp $BLOG_DIR/wp-config-sample.php $BLOG_DIR/wp-config.php


# 生成安全密钥

WP_KEYS=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/)


# 更新wp-config.php

sudo tee $BLOG_DIR/wp-config.php > /dev/null << EOF

<?php

/**

 * WordPress基础配置文件

 */


// ** MySQL设置 ** //

define('DB_NAME', '${DB_NAME}');

define('DB_USER', '${DB_USER}');

define('DB_PASSWORD', '${DB_PASS}');

define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8mb4');

define('DB_COLLATE', '');


// 安全密钥

${WP_KEYS}


// WordPress数据表前缀

\$table_prefix = 'wp_';


// 调试模式

define('WP_DEBUG', false);

define('WP_DEBUG_LOG', false);

define('WP_DEBUG_DISPLAY', false);


// 自动更新配置

define('WP_AUTO_UPDATE_CORE', true);

define('AUTOMATIC_UPDATER_DISABLED', false);


// 内存限制

define('WP_MEMORY_LIMIT', '128M');

define('WP_MAX_MEMORY_LIMIT', '256M');


// 禁用文件编辑

define('DISALLOW_FILE_EDIT', true);

define('DISALLOW_FILE_MODS', false);


// 自动保存优化

define('AUTOSAVE_INTERVAL', 120); // 2分钟

define('WP_POST_REVISIONS', 5);


// 缓存配置

define('WP_CACHE', false);


// HTTPS强制

define('FORCE_SSL_ADMIN', true);

if (isset(\$_SERVER['HTTP_X_FORWARDED_PROTO']) && \$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {

    \$_SERVER['HTTPS'] = 'on';

}


// ABSPATH

if (!defined('ABSPATH')) {

    define('ABSPATH', __DIR__ . '/');

}


require_once ABSPATH . 'wp-settings.php';

EOF


# 设置文件权限

sudo find $BLOG_DIR -type d -exec chmod 755 {} \;

sudo find $BLOG_DIR -type f -exec chmod 644 {} \;

sudo chmod 640 $BLOG_DIR/wp-config.php


echo "WordPress文件安装完成"

echo "数据库密码: $DB_PASS"

```


## GMSSH自动化运维脚本


### 一键部署脚本


```python

#!/usr/bin/env python3

"""

WordPress一键部署脚本

使用GMSSH进行可视化操作

"""


import os

import sys

import yaml

import subprocess

from pathlib import Path


class WordPressDeployer:

    def __init__(self, config_path="deploy-config.yaml"):

        self.config = self.load_config(config_path)

        self.setup_logging()

        

    def load_config(self, config_path):

        """加载部署配置"""

        with open(config_path, 'r') as f:

            config = yaml.safe_load(f)

        

        # 设置默认值

        config.setdefault('wordpress', {}).setdefault('version', 'latest')

        config.setdefault('database', {}).setdefault('prefix', 'wp_')

        

        return config

    

    def execute_remote_commands(self, commands):

        """通过GMSSH执行远程命令"""

        results = []

        

        for cmd_info in commands:

            name = cmd_info.get('name', '未命名命令')

            command = cmd_info['command']

            

            print(f"执行: {name}")

            

            # 使用GMSSH执行命令

            gmsh_cmd = [

                'gmsh', 'exec',

                '--server', self.config['server']['host'],

                '--user', self.config['server']['username'],

                '--command', command

            ]

            

            try:

                result = subprocess.run(

                    gmsh_cmd,

                    capture_output=True,

                    text=True,

                    timeout=300

                )

                

                if result.returncode == 0:

                    print(f"✓ {name} 完成")

                    results.append({

                        'name': name,

                        'success': True,

                        'output': result.stdout

                    })

                else:

                    print(f"✗ {name} 失败")

                    print(f"错误信息: {result.stderr}")

                    results.append({

                        'name': name,

                        'success': False,

                        'error': result.stderr

                    })

                    

            except subprocess.TimeoutExpired:

                print(f"✗ {name} 超时")

                results.append({

                    'name': name,

                    'success': False,

                    'error': '执行超时'

                })

        

        return results

    

    def deploy_wordpress(self):

        """部署WordPress"""

        print("开始部署WordPress...")

        

        # 步骤1: 服务器准备

        print("\n1. 服务器准备")

        prep_commands = [

            {

                'name': '更新系统',

                'command': 'sudo apt-get update && sudo apt-get upgrade -y'

            },

            {

                'name': '安装必要软件',

                'command': 'sudo apt-get install -y curl wget git unzip'

            }

        ]<"eav.a8k1.org.cn"><"efg.a8k1.org.cn"><"wwf.a8k1.org.cn">

        self.execute_remote_commands(prep_commands)

        

        # 步骤2: 安装LEMP环境

        print("\n2. 安装LEMP环境")

        lemp_commands = [

            {

                'name': '安装Nginx',

                'command': 'sudo apt-get install -y nginx'

            },

            {

                'name': '安装MySQL',

                'command': 'sudo apt-get install -y mysql-server'

            },

            {

                'name': '安装PHP',

                'command': 'sudo apt-get install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip'

            }

        ]

        self.execute_remote_commands(lemp_commands)

        

        # 步骤3: 配置数据库

        print("\n3. 配置数据库")

        db_password = self.generate_password(32)

        

        db_commands = [

            {

                'name': '安全配置MySQL',

                'command': 'sudo mysql_secure_installation'

            },

            {

                'name': '创建WordPress数据库',

                'command': f"sudo mysql -e \"CREATE DATABASE IF NOT EXISTS {self.config['database']['name']} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\""

            },

            {

                'name': '创建数据库用户',

                'command': f"sudo mysql -e \"CREATE USER '{self.config['database']['user']}'@'localhost' IDENTIFIED BY '{db_password}';\""

            },

            {

                'name': '授权',

                'command': f"sudo mysql -e \"GRANT ALL PRIVILEGES ON {self.config['database']['name']}.* TO '{self.config['database']['user']}'@'localhost';\""

            },

            {

                'name': '刷新权限',

                'command': 'sudo mysql -e "FLUSH PRIVILEGES;"'

            }

        ]

        self.execute_remote_commands(db_commands)

        

        # 步骤4: 部署WordPress

        print("\n4. 部署WordPress")

        wp_commands = [

            {

                'name': '创建网站目录',

                'command': f"sudo mkdir -p {self.config['wordpress']['path']}"

            },

            {

                'name': '下载WordPress',

                'command': f"cd /tmp && wget https://wordpress.org/latest.tar.gz && tar -xzvf latest.tar.gz"

            },

            {

                'name': '复制文件',

                'command': f"sudo cp -r /tmp/wordpress/* {self.config['wordpress']['path']}/"

            },

            {

                'name': '设置权限',

                'command': f"sudo chown -R www-data:www-data {self.config['wordpress']['path']} && sudo chmod -R 755 {self.config['wordpress']['path']}"

            }

        ]

        self.execute_remote_commands(wp_commands)

        

        # 步骤5: 配置Nginx

        print("\n5. 配置Nginx")

        nginx_config = self.generate_nginx_config()

        

        config_commands = [

            {

                'name': '创建Nginx配置文件',

                'command': f"echo '{nginx_config}' | sudo tee /etc/nginx/sites-available/blog"

            },

            {

                'name': '启用网站配置',

                'command': 'sudo ln -sf /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/'

            },

            {

                'name': '测试配置',

                'command': 'sudo nginx -t'

            },

            {

                'name': '重启Nginx',

                'command': 'sudo systemctl restart nginx'

            }

        ]

        self.execute_remote_commands(config_commands)

        

        print(f"\n部署完成!")

        print(f"WordPress地址: http://{self.config['server']['host']}")

        print(f"数据库密码已保存到: {self.config['wordpress']['path']}/wp-config.php")

    

    def generate_nginx_config(self):

        """生成Nginx配置文件"""

        return f"""

server {{

    listen 80;

    server_name {self.config['server']['host']};

    root {self.config['wordpress']['path']};

    index index.php index.html index.htm;

    

    location / {{

        try_files $uri $uri/ /index.php?$args;

    }}

    

    location ~ \.php$ {{

        include snippets/fastcgi-php.conf;

        fastcgi_pass unix:/var/run/php/php-fpm.sock;

    }}

    

    location ~ /\.ht {{

        deny all;

    }}

}}

        """.strip()

    

    def generate_password(self, length=32):

        """生成随机密码"""

        import random

        import string

        chars = string.ascii_letters + string.digits + '!@#$%^&*'

        return ''.join(random.choice(chars) for _ in range(length))

    

    def setup_logging(self):

        """配置日志"""

        import logging

        logging.basicConfig(

            level=logging.INFO,

            format='%(asctime)s - %(levelname)s - %(message)s',

            handlers=[

                logging.FileHandler('deploy.log'),

                logging.StreamHandler()

            ]

        )


if __name__ == "__main__":

    deployer = WordPressDeployer()

    deployer.deploy_wordpress()

```


## SSL证书自动化配置


### Let's Encrypt证书申请


```bash

#!/bin/bash

# SSL证书自动配置脚本 setup-ssl.sh


# 安装Certbot

sudo apt-get update

sudo apt-get install -y certbot python3-certbot-nginx


# 申请证书

DOMAIN="your-domain.com"

EMAIL="your-email@example.com"


sudo certbot --nginx -d $DOMAIN -d --email $EMAIL --agree-tos --non-interactive


# 创建自动续期脚本

sudo tee /etc/cron.weekly/ssl-renewal.sh > /dev/null << EOF

#!/bin/bash

# SSL证书自动续期


certbot renew --quiet --post-hook "systemctl reload nginx"


# 检查证书有效期

DAYS_REMAINING=\$(echo \$(($(date --date="\$(openssl x509 -enddate -noout -in /etc/letsencrypt/live/\$DOMAIN/cert.pem | cut -d= -f2)" +%s) - \$(date +%s))) / 86400 | bc)


if [ \$DAYS_REMAINING -lt 7 ]; then

    echo "警告: SSL证书将在\$DAYS_REMAINING天后过期" | mail -s "SSL证书续期提醒" \$EMAIL

fi

EOF


sudo chmod +x /etc/cron.weekly/ssl-renewal.sh


# 测试续期

sudo certbot renew --dry-run


echo "SSL证书配置完成"

```


## 主题与插件管理


### 主题安装脚本


```bash

#!/bin/bash

# 主题安装和管理脚本 theme-manager.sh


THEME_DIR="/var/www/blog/wp-content/themes"

BACKUP_DIR="/var/backups/wordpress/themes"


# 创建备份目录

mkdir -p $BACKUP_DIR


function install_theme() {

    THEME_URL=$1

    THEME_NAME=$(basename $THEME_URL .zip)

    

    echo "安装主题: $THEME_NAME"

    

    # 备份现有主题

    if [ -d "$THEME_DIR/$THEME_NAME" ]; then

        echo "备份现有主题..."

        tar -czf "$BACKUP_DIR/$THEME_NAME-$(date +%Y%m%d%H%M%S).tar.gz" -C $THEME_DIR $THEME_NAME

    fi

    

    # 下载并安装

    cd /tmp

    wget $THEME_URL

    unzip "$THEME_NAME.zip" -d $THEME_DIR/

    

    # 设置权限

    sudo chown -R www-data:www-data "$THEME_DIR/$THEME_NAME"

    sudo chmod -R 755 "$THEME_DIR/$THEME_NAME"

    

    echo "主题安装完成"

}


function cleanup_themes() {

    # 删除不使用的主题

    KEEP_THEME="twentytwentytwo"  # 保留默认主题

    

    for theme in $(ls $THEME_DIR); do

        if [ "$theme" != "$KEEP_THEME" ] && [ ! "$theme" =~ ^twenty ]; then

            echo "删除主题: $theme"

            rm -rf "$THEME_DIR/$theme"

        fi

    done

}


# 安装自定义主题

install_theme "https://example.com/themes/custom-theme.zip"


# 清理旧主题

cleanup_themes

```


### 插件管理界面


```html

<!-- 简单的插件管理界面 plugin-manager.html -->

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>WordPress插件管理器</title>

    <style>

        body {

            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

            max-width: 800px;

            margin: 0 auto;

            padding: 20px;

        }

        .plugin-card {

            border: 1px solid #ddd;

            border-radius: 4px;

            padding: 15px;

            margin: 10px 0;

            display: flex;

            justify-content: space-between;

            align-items: center;

        }

        .plugin-actions button {

            margin-left: 5px;

            padding: 5px 10px;

            border: 1px solid #007cba;

            background: #007cba;

            color: white;

            border-radius: 3px;

            cursor: pointer;

        }

        .plugin-actions button:hover {

            background: #005a87;

        }

    </style>

</head>

<body>

    <h1>WordPress插件管理器</h1>

    

    <div id="plugin-list">

        <!-- 插件列表将通过JavaScript动态加载 -->

    </div>

    

    <script>

        // 插件数据

        const plugins = [

            {

                id: 'akismet',

                name: 'Akismet Anti-Spam',

                description: '垃圾评论防护插件',

                status: 'active',

                version: '5.0'

            },

            {

                id: 'yoast-seo',

                name: 'Yoast SEO',

                description: '搜索引擎优化工具',

                status: 'inactive',

                version: '19.5'

            },

            {

                id: 'contact-form-7',

                name: 'Contact Form 7',

                description: '联系表单创建工具',

                status: 'active',

                version: '5.7'

            }

        ];

        

        // 渲染插件列表

        function renderPluginList() {

            const container = document.getElementById('plugin-list');

            container.innerHTML = '';

            

            plugins.forEach(plugin => {

                const card = document.createElement('div');

                card.className = 'plugin-card';

                

                card.innerHTML = `

                    <div>

                        <h3>${plugin.name}</h3>

                        <p>${plugin.description}</p>

                        <small>版本: ${plugin.version}</small>

                    </div>

                    <div>

                        <button >

                            ${plugin.status === 'active' ? '禁用' : '启用'}

                        </button>

                        <button >

                    </div>

                `;

                

                container.appendChild(card);

            });

        }

        

        // 切换插件状态

        function togglePlugin(pluginId) {

            const plugin = plugins.find(p => p.id === pluginId);

            plugin.status = plugin.status === 'active' ? 'inactive' : 'active';

            

            // 发送到服务器

            fetch('/api/plugins/toggle', {

                method: 'POST',

                headers: {

                    'Content-Type': 'application/json',

                },

                body: JSON.stringify({ plugin: pluginId, status: plugin.status })

            })

            .then(response => response.json())

            .then(data => {

                console.log('状态更新成功:', data);

                renderPluginList();

            })

            .catch(error => {

                console.error('错误:', error);

            });

        }

        

        // 更新插件

        function updatePlugin(pluginId) {

            fetch('/api/plugins/update', {

                method: 'POST',

                body: JSON.stringify({ plugin: pluginId })

            })

            .then(response => response.json())

            .then(data => {

                alert(`插件 ${pluginId} 更新完成`);

                location.reload();

            })

            .catch(error => {

                console.error('更新失败:', error);

            });

        }

        <"wfe.a8k1.org.cn"><"sad.a8k1.org.cn"><"wqa.a8k1.org.cn">

        // 初始渲染

        renderPluginList();

    </script>

</body>

</html>

```


## 备份与恢复系统


### 自动化备份脚本


```bash

#!/bin/bash

# WordPress完整备份脚本 backup-wordpress.sh


BACKUP_DIR="/var/backups/wordpress"

DATE=$(date +%Y%m%d_%H%M%S)

BACKUP_FILE="wordpress_backup_$DATE.tar.gz"


# 创建备份目录

mkdir -p $BACKUP_DIR


# 备份数据库

echo "备份数据库..."

mysqldump -u wpuser -p$(cat /root/mysql-password.txt) wordpress > $BACKUP_DIR/database.sql


# 备份WordPress文件

echo "备份WordPress文件..."

tar -czf $BACKUP_DIR/$BACKUP_FILE \

    --exclude="wp-content/cache/*" \

    --exclude="wp-content/uploads/cache/*" \

    /var/www/blog


# 备份配置文件

cp /etc/nginx/sites-available/blog $BACKUP_DIR/

cp /var/www/blog/wp-config.php $BACKUP_DIR/


# 创建备份清单

echo "创建备份清单..."

cat > $BACKUP_DIR/backup_manifest_$DATE.txt << EOF

备份时间: $(date)

备份文件: $BACKUP_FILE

数据库大小: $(du -h $BACKUP_DIR/database.sql | cut -f1)

文件大小: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1)

包含内容:

- WordPress文件

- 数据库

- Nginx配置

- wp-config.php

EOF


# 删除旧备份(保留最近30天)

find $BACKUP_DIR -name "wordpress_backup_*.tar.gz" -mtime +30 -delete

find $BACKUP_DIR -name "database_*.sql" -mtime +30 -delete


echo "备份完成: $BACKUP_DIR/$BACKUP_FILE"

```


### 恢复脚本


```bash

#!/bin/bash

# WordPress恢复脚本 restore-wordpress.sh


BACKUP_FILE=$1

BACKUP_DIR="/var/backups/wordpress"


if [ -z "$BACKUP_FILE" ]; then

    echo "请指定备份文件"

    echo "用法: ./restore-wordpress.sh wordpress_backup_YYYYMMDD_HHMMSS.tar.gz"

    exit 1

fi


if [ ! -f "$BACKUP_DIR/$BACKUP_FILE" ]; then

    echo "备份文件不存在: $BACKUP_DIR/$BACKUP_FILE"

    exit 1

fi


echo "开始恢复WordPress..."


# 1. 停止Web服务

systemctl stop nginx

systemctl stop php8.2-fpm


# 2. 备份当前数据

CURRENT_BACKUP="current_backup_$(date +%Y%m%d_%H%M%S).tar.gz"

tar -czf $BACKUP_DIR/$CURRENT_BACKUP /var/www/blog


# 3. 清空当前目录

rm -rf /var/www/blog/*


# 4. 恢复文件

echo "恢复文件..."

tar -xzf $BACKUP_DIR/$BACKUP_FILE -C /


# 5. 恢复数据库

echo "恢复数据库..."

mysql -u wpuser -p$(cat /root/mysql-password.txt) wordpress < $BACKUP_DIR/database.sql


# 6. 修复权限

chown -R www-data:www-data /var/www/blog

chmod -R 755 /var/www/blog

chmod 640 /var/www/blog/wp-config.php


# 7. 启动服务

systemctl start php8.2-fpm

systemctl start nginx


echo "恢复完成!"

echo "之前的版本已备份为: $CURRENT_BACKUP"

```


## 性能优化配置


### WordPress性能优化


```php

<?php

// WordPress性能优化配置 wp-performance.php


// 添加到wp-config.php或functions.php


// 禁用Embeds

add_action('init', function() {

    remove_action('rest_api_init', 'wp_oembed_register_route');

    remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);

    remove_action('wp_head', 'wp_oembed_add_discovery_links');

    remove_action('wp_head', 'wp_oembed_add_host_js');

    add_filter('embed_oembed_discover', '__return_false');

});


// 禁用Emojis

remove_action('wp_head', 'print_emoji_detection_script', 7);

remove_action('admin_print_scripts', 'print_emoji_detection_script');

remove_action('wp_print_styles', 'print_emoji_styles');

remove_action('admin_print_styles', 'print_emoji_styles');


// 禁用XML-RPC

add_filter('xmlrpc_enabled', '__return_false');


// 优化数据库

add_action('after_setup_theme', function() {

    // 清理修订版本

    define('WP_POST_REVISIONS', 3);

    

    // 优化自动保存间隔

    define('AUTOSAVE_INTERVAL', 120);

});


// 启用Gzip压缩

if (!ob_start("ob_gzhandler")) ob_start();


// 缓存配置

define('WP_CACHE', true);

define('WP_CACHE_KEY_SALT', md5(get_home_url()));


// 对象缓存配置

$redis_server = array(

    'host'     => '127.0.0.1',

    'port'     => 6379,

    'auth'     => '',

    'database' => 0,

);

```


## 结语


个人博客的搭建过程涵盖了服务器配置、软件安装、环境优化和安全管理等多个环节。使用GMSSH等可视化运维工具可以简化服务器管理任务,而WordPress平台则提供了完善的内容管理系统和丰富的扩展功能。


成功搭建博客后,建议建立定期备份机制、保持系统和插件更新、监控网站性能和安全状态。随着博客内容增长,可能还需要考虑CDN加速、数据库优化等进阶配置。最重要的是持续创作有价值的内容,这才是个人博客能够长期发展的核心。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19545/viewspace-3109842/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-11-01

  • 博文量
    895
  • 访问量
    934074