ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Docker部署翼龙面板前端:从环境准备到生产级配置全攻略

Docker部署翼龙面板前端:从环境准备到生产级配置全攻略 1. 为什么选择Docker部署翼龙面板前端如果你正在管理一个游戏服务器或者运营一个提供多用户游戏服务器托管服务的平台那么Pterodactyl翼龙面板这个名字你大概率不会陌生。它是一个开源的、功能强大的游戏服务器管理面板支持从《我的世界》到《反恐精英》等数十种游戏的一键安装与管理。但今天我们不聊它的全部我们聚焦在它的“门面”——前端部分。传统安装翼龙面板你需要分别配置Nginx、PHP、MySQL、Redis还要处理各种依赖和权限步骤繁琐任何一个环节出错都可能导致安装失败。对于只是想快速搭建一个面板来管理自己服务器的个人用户或者希望快速验证功能的小团队来说这个门槛有点高。而Docker的出现完美解决了这个问题。它把应用及其所有依赖打包成一个标准化的“集装箱”容器你只需要一条命令就能在任何支持Docker的系统上运行起来环境隔离部署一致。通过Docker部署翼龙前端意味着你无需关心系统是Ubuntu还是CentOS也无需手动安装和配置复杂的Web服务器与PHP环境。整个过程从“搭建环境”变成了“拉取镜像并运行”极大地简化了部署流程降低了维护成本。我自己的几个游戏服务器托管项目从早期的裸机部署切换到Docker部署后最直观的感受就是“省心”。版本升级、回滚变得异常简单系统环境干净再也不用担心因为系统更新导致面板的PHP扩展冲突。所以无论你是个人玩家想体验还是技术负责人评估方案通过Docker来部署翼龙面板前端都是一个高效且可靠的选择。2. 部署前的核心准备环境与资源在按下那个“一键部署”按钮之前有几项准备工作必须到位。这就像盖房子前要打好地基、备好材料一样准备充分后续才能顺畅。2.1 系统环境要求首先你需要一台服务器。它可以是云服务商如阿里云、腾讯云的VPS也可以是你家里的物理服务器。操作系统方面64位的Linux发行版是首选例如Ubuntu 20.04/22.04 LTS、CentOS 7/8 Stream、Debian 10/11等。Windows系统虽然也可以通过Docker Desktop运行但在生产环境或长期使用的场景下Linux的稳定性和资源开销优势更明显。核心要求是内核版本。Docker对Linux内核有最低要求通常需要3.10以上。对于现代的主流Linux发行版只要保持系统更新这一点基本都能满足。你可以通过命令uname -r来查看当前内核版本。另一个关键是必须开启虚拟化支持。Docker依赖于系统的虚拟化功能在Linux上通常是基于内核的KVM或容器运行时如containerd。如果你在物理机上安装需要在BIOS中开启Intel VT-x或AMD-V技术。如果在云服务器上绝大多数主流云厂商的镜像默认已开启此支持。一个常见的坑是在Windows上使用Docker Desktop时如果报错“Docker Desktop failed to start because virtualization support wasn‘t detected”就是因为Hyper-V或WSL2所需的虚拟化功能未启用。2.2 Docker与Docker Compose安装这是本次部署的核心工具。Docker负责运行容器而Docker Compose则用于定义和运行多容器的应用。对于翼龙面板前端我们通常使用一个包含了Nginx和PHP-FPM的复合镜像或者通过Compose来编排前端和数据库等多个服务。安装Docker Engine建议使用官方提供的便捷脚本安装这能确保你获得较新的稳定版本并自动配置仓库。对于Ubuntu/Debian系统可以执行curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh安装完成后将当前用户加入docker用户组这样以后运行docker命令就不需要每次都加sudo了sudo usermod -aG docker $USER重要提示执行此命令后你需要完全退出当前终端会话并重新登录或者新开一个终端窗口用户组变更才会生效。这是很多新手会忽略的一步导致后续命令报权限错误。验证安装docker --version和docker run hello-world。如果能看到版本信息和一个欢迎消息说明Docker安装成功。安装Docker Compose现在Docker Compose V2通常已经集成在Docker Desktop中对于Linux服务器我们可以单独安装其独立版本。# 下载最新的Docker Compose稳定版本请访问GitHub仓库查看最新版本号 sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker-compose --version2.3 网络与防火墙配置翼龙面板前端默认通过HTTP/HTTPS的80和443端口提供服务。你需要确保服务器的防火墙放行了这两个端口。如果使用云服务器请登录云服务商的控制台找到你的服务器实例的安全组/防火墙规则添加入站规则允许TCP协议的80和443端口。源地址可以设置为0.0.0.0/0允许所有IP访问或你指定的IP段以增加安全性。如果使用本地服务器或自有防火墙例如使用ufwUbuntu或firewalldCentOS。UFW:sudo ufw allow 80/tcp sudo ufw allow 443/tcpFirewalld:sudo firewall-cmd --permanent --add-port80/tcp --add-port443/tcp sudo firewall-cmd --reload此外确保服务器有公网IP如果你希望从外网访问并且域名已经解析到该IP地址如果打算使用域名访问并配置SSL证书。虽然初始部署可以用IP访问但为了安全和专业性强烈建议使用域名。3. 获取与配置翼龙面板前端Docker镜像准备工作就绪后我们就可以开始处理核心的应用部分了。翼龙面板官方并没有提供一个名为“pterodactyl-panel”的现成全功能Docker镜像。社区和第三方维护者创建了一些优秀的镜像但我们需要理解其构成。3.1 镜像选择与拉取策略一个典型的、用于生产环境的翼龙前端Docker部署通常包含两个主要部分Web服务器如Nginx或Caddy和PHP-FPM处理器。有些镜像将它们打包在一起有些则使用Docker Compose将它们作为两个独立但关联的容器运行。这里我以一个社区中较为流行且维护积极的镜像为例比如ghcr.io/parkervcp/yolks:panel请注意镜像地址和标签可能随时间变化部署前请查阅相关文档确认最新版本。这个镜像通常包含了翼龙面板运行所需的所有PHP扩展和基础环境。首先拉取镜像docker pull ghcr.io/parkervcp/yolks:panel这个过程会从容器仓库下载镜像速度取决于你的网络。你可以使用docker images命令查看已拉取的镜像。注意直接使用单个镜像虽然简单但将Web服务器和PHP分离是更清晰、更易维护的架构。因此我更推荐使用Docker Compose方案它通过一个docker-compose.yml文件定义Nginx和PHP-FPM两个服务灵活性更高。下文将以Compose方案为主进行详解。3.2 编写Docker Compose配置文件我们在服务器上创建一个专用的目录来存放所有配置例如/opt/pterodactyl-panel然后进入该目录。sudo mkdir -p /opt/pterodactyl-panel cd /opt/pterodactyl-panel接下来创建docker-compose.yml文件。这个文件是整个部署的蓝图。version: 3.8 services: # 数据库服务 - 翼龙面板需要MySQL或MariaDB database: image: mariadb:10.11 container_name: pterodactyl-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: your_strong_root_password_here MYSQL_DATABASE: panel MYSQL_USER: pterodactyl MYSQL_PASSWORD: your_strong_database_password_here volumes: - db_data:/var/lib/mysql networks: - pterodactyl-network # Redis缓存服务 - 用于会话和队列缓存提升性能 redis: image: redis:7-alpine container_name: pterodactyl-redis restart: unless-stopped command: redis-server --requirepass your_strong_redis_password_here volumes: - redis_data:/data networks: - pterodactyl-network # PHP-FPM服务 - 运行翼龙面板的PHP代码 php: image: ghcr.io/pterodactyl/panel:latest container_name: pterodactyl-php restart: unless-stopped depends_on: - database - redis environment: APP_URL: http://your-domain.com # 或你的服务器IP DB_HOST: database DB_PORT: 3306 DB_DATABASE: panel DB_USERNAME: pterodactyl DB_PASSWORD: your_strong_database_password_here REDIS_HOST: redis REDIS_PASSWORD: your_strong_redis_password_here # 其他环境变量如APP_TIMEZONE, APP_LOCALE等可按需添加 volumes: - panel_data:/var/www/html - /etc/letsencrypt:/etc/letsencrypt:ro # 如果使用Let‘s Encrypt SSL证书挂载证书目录只读 networks: - pterodactyl-network # Nginx服务 - 作为Web服务器反向代理到PHP-FPM webserver: image: nginx:alpine container_name: pterodactyl-nginx restart: unless-stopped depends_on: - php ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - panel_data:/var/www/html:ro # 以只读方式共享PHP容器的代码 - /etc/letsencrypt:/etc/letsencrypt:ro # 挂载SSL证书 networks: - pterodactyl-network # 定义数据卷用于持久化存储数据 volumes: db_data: redis_data: panel_data: # 定义内部网络让容器间可以通过服务名通信 networks: pterodactyl-network: driver: bridge关键点解释密码安全将文件中所有的your_strong_*_password_here替换为你自己生成的、高强度随机密码。切勿使用默认或简单密码。APP_URL将其中的http://your-domain.com替换为你打算访问面板的域名或IP地址。如果暂时没有域名可以用http://你的服务器公网IP。注意后续配置SSL时需要域名。镜像标签pterodactyl/panel:latest指向最新稳定版。在生产环境中建议使用特定版本号标签如pterodactyl/panel:v1.11.4以避免意外升级带来的不兼容。数据持久化我们使用了Docker卷db_data,redis_data,panel_data。这意味着即使容器被删除数据库、Redis缓存和面板代码/上传文件等数据也会保留在宿主机上。3.3 配置Nginx反向代理我们需要创建一个Nginx配置文件来告诉Nginx如何正确处理PHP请求。在同一个目录 (/opt/pterodactyl-panel) 下创建nginx.conf文件events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 日志格式 log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; # 基础优化参数 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; client_max_body_size 100m; # 允许上传大文件例如游戏服务端 # 上游PHP-FPM服务配置 upstream php-upstream { server php:9000; # 指向docker-compose.yml中定义的php服务名和端口 } # HTTP服务器块 - 用于重定向到HTTPS或初始访问 server { listen 80; listen [::]:80; server_name your-domain.com; # 替换为你的域名 # 如果是IP访问这里可以写IP地址但建议始终使用server_name # server_name _; # 根目录指向面板代码 root /var/www/html/public; index index.php index.html; # 重定向所有HTTP请求到HTTPS配置SSL后启用 # return 301 https://$server_name$request_uri; # 如果暂不启用HTTPS则配置PHP处理 location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php-upstream; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_param PHP_VALUE upload_max_filesize100M \n post_max_size100M; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } location ~ /\.ht { deny all; } # 禁止访问一些敏感文件 location ~ /\.(?!well-known).* { deny all; } } # HTTPS服务器块示例配置SSL证书后启用 # server { # listen 443 ssl http2; # listen [::]:443 ssl http2; # server_name your-domain.com; # # ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; # # 其他SSL优化配置... # # root /var/www/html/public; # index index.php index.html; # # location / { # try_files $uri $uri/ /index.php?$query_string; # } # # location ~ \.php$ { # fastcgi_pass php-upstream; # ... # PHP配置与HTTP块相同 # } # } }这个配置做了几件关键事定义了上游PHP-FPM服务地址配置了根目录和索引文件设置了PHP请求的转发规则并增加了文件上传大小限制。注释部分展示了如何从HTTP重定向到HTTPS以及HTTPS服务器的配置模板。4. 启动服务与面板初始化安装配置完成后我们就可以启动整个栈并进行翼龙面板的初始化安装了。4.1 启动Docker Compose栈在docker-compose.yml文件所在目录运行以下命令来启动所有服务docker-compose up -d-d参数代表“后台运行”。这条命令会依次创建网络、卷然后拉取缺失的镜像我们已经拉取了PHP镜像但Nginx、MariaDB、Redis镜像可能会被拉取最后启动所有容器。使用docker-compose ps可以查看所有服务的状态应该都是“Up”。也可以用docker-compose logs -f来实时跟踪所有容器的日志这在排查启动问题时非常有用。如果某个容器启动失败可以单独查看其日志例如docker-compose logs php。4.2 执行面板应用初始化命令容器启动后面板的代码已经就位但数据库还是空的需要执行Laravel框架翼龙面板基于此开发的初始化命令来生成数据库表结构、加密密钥等。我们需要在PHP容器内执行这些命令# 进入PHP容器内部 docker-compose exec php bash # 此时命令行提示符会变成容器内的例如 root容器ID:/var/www/html#在容器内依次执行以下命令生成应用密钥这是Laravel用于加密会话等数据的安全字符串。php artisan key:generate --force配置存储链接创建符号链接使public目录能访问到storage/app/public下的文件。php artisan storage:link迁移数据库根据面板代码中的迁移文件在MySQL数据库中创建所有必要的表。php artisan migrate --seed --force--seed参数会同时运行数据填充器创建初始的管理员账户角色等基础数据。--force参数用于在生产环境中强制执行。创建第一个管理员用户运行以下命令根据交互式提示输入邮箱、用户名和密码来创建第一个拥有最高权限的用户。php artisan p:user:make请务必记住这里设置的邮箱和密码这是你首次登录面板的凭证。退出容器完成以上步骤后输入exit退出容器终端。4.3 访问面板与基础配置现在打开你的浏览器访问你在APP_URL中设置的地址例如http://你的服务器IP。你应该能看到翼龙面板的登录界面。使用上一步创建的邮箱和密码登录。首次登录后系统可能会提示你进行一些基础配置设置节点面板本身是“控制中心”游戏服务器实际运行在被称为“节点”Node的机器上。你需要至少设置一个节点。进入“管理员”-“节点”页面点击“创建新节点”。填写节点名称、描述并设置一个重要的“通信密钥”FQDN。这个FQDN通常是节点的公网IP或域名端口是8080这是翼龙守护进程Wings默认的通信端口。注意这里的节点配置是告诉面板去哪里找你的游戏服务器主机我们目前只部署了面板前端节点后端Wings需要在另一台或多台服务器上单独安装。这是一个常见的理解误区面板和节点可以是同一台机器但通常是分开部署的。配置位置和服务器模板在“位置”中设置服务器所在的地理位置分组如“亚洲-东京”在“服务器模板”中配置不同游戏服务器的默认安装模板如内存、CPU限制、Docker镜像等。这些都可以后续慢慢完善。配置邮箱在“设置”-“邮件”中配置SMTP信息如使用SendGrid、Mailgun或你的企业邮箱这样面板才能发送用户注册验证、密码重置等邮件。至此翼龙面板前端的核心安装和初始化已经完成。你可以通过面板创建用户、分配权限、创建服务器了。当然要让用户真正能玩游戏你还需要在节点服务器上安装并配置翼龙守护进程Wings并将其与面板对接这部分属于后端部署范畴。5. 生产环境进阶配置与优化将面板运行起来只是第一步要让它稳定、安全地服务于生产环境还需要进行一系列优化和加固。5.1 配置HTTPSSSL/TLS加密让网站使用HTTPS是必须的它加密了浏览器和服务器之间的通信防止数据被窃听或篡改。获取SSL证书最常用的免费方式是Let‘s Encrypt。方案一在宿主机上使用Certbot获取证书然后挂载给容器。在宿主机上安装Certbotsudo apt install certbot python3-certbot-nginx(Ubuntu/Debian)。暂时停止Nginx容器或确保80端口未被占用docker-compose stop webserver。运行Certbot获取证书sudo certbot certonly --standalone -d your-domain.com --preferred-challenges http --agree-tos -m your-emailexample.com。这会验证你对域名的控制权通过80端口并将证书文件保存在/etc/letsencrypt/live/your-domain.com/下。修改nginx.conf取消注释HTTPS服务器块并确保证书路径正确指向挂载点/etc/letsencrypt。在HTTP服务器块 (server监听80端口) 中取消注释return 301 https://$server_name$request_uri;这一行实现HTTP到HTTPS的强制跳转。重启Nginx容器docker-compose restart webserver。方案二在Nginx容器内使用Certbot更推荐容器化。可以创建一个专门用于证书续期的容器或者使用支持自动获取SSL证书的Nginx镜像如nginxproxy/nginx-proxy配合nginxproxy/acme-companion。但这会引入更复杂的配置。对于初学者方案一更直观可控。5.2 性能调优与监控PHP-FPM调优PHP容器的性能至关重要。你可以通过环境变量或自定义www.conf文件来调整PHP-FPM进程池设置。例如在docker-compose.yml中PHP服务的environment部分添加PHP_FPM_PM: dynamic PHP_FPM_PM_MAX_CHILDREN: 50 PHP_FPM_PM_START_SERVERS: 5 PHP_FPM_PM_MIN_SPARE_SERVERS: 5 PHP_FPM_PM_MAX_SPARE_SERVERS: 35这些值需要根据你服务器的CPU和内存资源进行调整。pm.max_children决定了最大并发处理能力。OPCache启用确保PHP的OPCache扩展已启用并合理配置它能极大提升PHP脚本的执行速度。在PHP容器内检查/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini或类似文件。Nginx缓存对于静态资源CSS, JS, 图片可以在Nginx配置中添加缓存头利用浏览器缓存减轻服务器压力。location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2?|ttf|eot|svg)$ { expires 1y; add_header Cache-Control public, immutable; log_not_found off; }容器资源限制在docker-compose.yml中可以为每个服务设置资源限制防止某个容器耗尽主机资源。services: php: # ... 其他配置 deploy: resources: limits: cpus: 2.0 memory: 2G reservations: cpus: 0.5 memory: 512M日志管理Docker容器默认日志驱动是json-file日志会堆积在宿主机上。建议配置日志轮转和清理策略。可以在docker-compose.yml中全局或为每个服务配置services: php: # ... 其他配置 logging: driver: json-file options: max-size: 10m max-file: 3也可以使用docker-compose logs --tail100 -f来持续查看最新日志或使用如Loki、ELK等工具进行集中日志管理。5.3 安全加固措施定期更新镜像定期执行docker-compose pull拉取最新的安全更新镜像然后docker-compose up -d重启服务。重要更新前请备份数据库和重要文件。使用非root用户运行容器在Dockerfile或docker-compose.yml中可以通过user指令指定一个非root的UID/GID来运行进程减少潜在风险。社区镜像通常已经处理了这一点。限制容器能力在docker-compose.yml中可以添加安全选项services: php: # ... 其他配置 security_opt: - no-new-privileges:true cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID - DAC_OVERRIDE # 根据实际需要添加最小权限备份策略定期备份Docker卷中的数据。数据库卷db_data尤为重要。# 备份数据库在宿主机执行 docker-compose exec database mysqldump -u pterodactyl -p你的数据库密码 panel /path/to/backup/panel-$(date %Y%m%d).sql # 备份整个面板数据卷可选 docker run --rm -v pterodactyl-panel_panel_data:/data -v /path/to/backup:/backup alpine tar czf /backup/panel-data-$(date %Y%m%d).tar.gz -C /data .将备份脚本加入crontab实现自动化。面板自身安全设置在翼龙面板的“设置”中启用“双因素认证(2FA)”设置强密码策略定期审查用户和API密钥。将默认的/admin路径考虑通过Nginx规则进行二次保护如基础认证。6. 常见问题排查与维护心得即使按照教程一步步来也可能会遇到各种问题。这里分享一些我踩过的坑和对应的排查思路。6.1 容器启动失败与日志分析问题执行docker-compose up -d后使用docker-compose ps发现某个容器状态是Exit 1或Restarting。排查查看详细日志docker-compose logs [服务名]例如docker-compose logs php。重点关注错误信息。常见原因有端口冲突Bind for 0.0.0.0:80 failed: port is already allocated。说明宿主机80端口已被其他程序如Apache、另一个Nginx占用。用sudo netstat -tulpn | grep :80查找并停止占用进程或修改docker-compose.yml中webserver服务的端口映射如改为8080:80。权限问题Permission denied错误通常发生在容器内进程试图写入挂载的卷时。检查宿主机上对应目录如/opt/pterodactyl-panel的权限确保Docker进程或root有读写权限。一个粗暴但有效的临时方法是sudo chmod -R 777 /opt/pterodactyl-panel但生产环境应仔细配置用户和组。环境变量错误数据库连接失败。检查docker-compose.yml中php服务的DB_PASSWORD、DB_HOST等是否与database服务中设置的一致。确保MySQL容器已完全启动并初始化完成可能需要等待几十秒。镜像拉取失败网络问题导致镜像拉不下来。可以尝试配置国内镜像加速器或手动docker pull指定镜像。进入容器调试对于PHP容器可以docker-compose exec php bash进入手动执行一些命令来测试环境如php -v,curl http://database:3306测试是否能连通数据库容器。6.2 面板访问异常502 Bad Gateway / 404 Not Found问题浏览器能打开页面但显示502错误或者页面样式丢失404。排查502 Bad Gateway这通常是Nginx无法连接到上游PHP-FPM服务。首先检查PHP容器是否正常运行docker-compose ps php。如果正常进入Nginx容器docker-compose exec webserver sh尝试curl php:9000或nc -z php 9000看是否能连通PHP容器的9000端口。如果无法连通检查Docker网络docker network inspect pterodactyl-panel_pterodactyl-network确保两个容器在同一个网络中。另外检查Nginx配置中fastcgi_pass php-upstream;和 upstream定义是否正确。404 Not Found通常是根目录配置错误。检查Nginx配置中的root /var/www/html/public;是否正确并确认PHP容器内的/var/www/html/public目录下是否存在index.php文件。可以通过docker-compose exec php ls -la /var/www/html/public查看。另外确保location /块中的try_files指令正确。6.3 数据库连接与迁移问题问题在执行php artisan migrate时失败提示无法连接数据库或SQL语法错误。排查确保数据库容器已就绪MySQL启动需要时间。可以在执行迁移前先进入PHP容器用docker-compose exec php bash然后安装mysql-client如果镜像没有或用php脚本测试连接。更简单的方法是使用wait-for-it或dockerize这类工具在Compose中定义依赖等待。版本兼容性确保你使用的翼龙面板版本与MariaDB/MySQL版本兼容。官方文档通常有说明。使用过旧的数据库版本可能导致迁移失败。手动干预如果某次迁移失败导致数据库处于中间状态可能需要手动清理。操作前务必备份可以尝试php artisan migrate:status查看迁移状态或php artisan migrate:fresh --seed警告此命令会清空所有数据并从头开始来重置数据库。6.4 日常维护与更新面板代码更新翼龙面板前端更新相对简单。因为代码是通过卷挂载的或者作为镜像的一部分。对于使用官方镜像的方案拉取新版本镜像docker-compose pull php。停止并重建PHP容器docker-compose up -d --no-deps --build php。--no-deps表示不启动依赖的服务--build在某些自定义镜像场景需要。进入PHP容器运行数据库迁移如果新版本需要docker-compose exec php php artisan migrate --force。清理缓存docker-compose exec php php artisan view:clear php artisan config:clear。Docker与系统维护定期清理无用的Docker镜像和容器以节省空间docker system prune -a谨慎使用会删除所有未使用的资源。监控服务器资源使用情况docker stats可以查看各容器的实时CPU、内存占用。保持宿主机操作系统更新特别是安全更新。最后也是最重要的心得做好备份并测试恢复流程。无论是数据库导出文件还是整个Docker卷的打包定期备份并在一个测试环境中演练恢复过程才能在真正出问题时从容应对。Docker部署的便利性之一就在于你的整个应用状态除数据卷外都由配置文件定义恢复起来比传统部署要快得多。
返回列表