使用“宝塔一键迁移”工具,将typecho博客迁移到京东云cvm云主机

作者:京东科技 林中

服务器更换、网站搬家,对于很多开发者新手来说不是一件容易的事情,需要迁移网站程序、数据库,修改数据库连接文件等。在云迁移方案中,宝塔是非常简单好用的服务器运维面板,能够极大提升运维管理效率。本文将介绍如何使用“宝塔一键迁移”工具将单机版typecho博客系统快速迁移到京东云cvm云主机。

一、单机版typecho博客系统迁移方案分析

Typecho博客系统是一个开源的php应用,部署架构相对简单,具体包括:

1、运行在标准的LNMP环境下。

2、typecho应用作为一个网站,部署在webroot目录下。

3、后端使用mysql等开源数据库作为用户数据库的存储。

其中,应用部分:1、LNMP运行环境 2、typecho应用 3、mysql数据库软件,这些属于标准的软件,可以采用在目标主机重新部署的方式,只需要保证对应组件的版本一致即可。数据部分:mysql中存储的数据,会记录客户的主题分类、博客内容等,需要采用数据库导出/倒入的方式,进行离线迁移(为了保证数据一致性,需要一定时间的业务中断)。

了解到客户目前在腾讯云的主机,内嵌了宝塔linux面板工具,使用面板工具提供的“宝塔一键迁移”功能,可以通过图形化的方式,方便、快捷的完成以上所有操作步骤。

二、迁移流程

整体流程分为三个阶段:

阶段一:迁移准备工作(在源服务器上操作):

1、确认源服务器上的操作系统和各组件版本

在源服务器“宝塔linux控制台”-》“软件商店”中,点击“应用分类”的“已安装”标签,记录以下组件的具体版本(或截图保存):

Nginx:XXX

Mysql:XXX

PHP:XXXX

Pure-Ftpd:XXXX

参考截图如下:

 

2、在源服务器的宝塔linux面板中,安装“宝塔一键迁移”工具

在“宝塔linux控制台”-》“软件商店”中,保持“应用分类”已选择了“全部”,然后在“应用搜索”输入框中输入“宝塔一键”,并点击搜索,找到“宝塔一键迁移API版本”的官方软件。如下图所示:

 

接着,点击“操作”部分的安装,选择最新的stable版本完成安装。

阶段二:迁移目标服务器环境准备(在京东云控制台及京东云CVM云主机上操作)

3、在“京东云控制台”中,创建CVM云主机,详细的操作步骤请参考京东云官网手册:
http://docs.jdcloud.com/cn/virtual-machines/create-linux-instance

注:源服务器的操作系统版本为Centos7.8 64bit,京东云没有该版本镜像,创建CVM主机时选择Centos 7.9 64bit版本。

4、以ssh方式,登录京东云cvm云主机,安装最新版本“宝塔linux控制面板”

Centos安装命令:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装脚本执行结束后,请妥善记录宝塔linux面板的登录信息。参考样例如下:

 

5、登录目标服务器 “宝塔linux控制台”,首先绑定个人手机号(可以立即注册),初次登录,会提示一键安装LNMP环境,按照“阶段一”中“第1步”记录的各组件版本设置,保持和源服务器一致。请耐心等待和组件安装完成,预计需要15分钟。

6、在目标服务器“宝塔linux面板”-》“面板设置”中,开启“API接口”开关,用于第三阶段设置“宝塔一键迁移”工具的参数信息。参考截图如下:(第一次开启时,接口密钥显示为密文,无法拷贝,点击“重置”按钮直到显示明文信息,需要拷贝密钥并保留;ip白名单,设置为源服务器的公网ip地址。)

 

阶段三:执行“宝塔一键迁移”工具,完成迁移。(在源服务器上操作)

7、在源服务器“宝塔linux控制台” “软件商店”中,选择“应用分类”已选择了“已安装”,找到“宝塔一键迁移API版本”的官方软件(在阶段一,第2步中已安装该软件),点击“设置”,配置迁移工具执行相关参数,包括:

接收数据的看板地址:XXX(阶段二,第4步中,安装宝塔linux控制面板成功后,记录的外网面板地址,只需要截取到最后一个斜线之前的部分)

接收数据的面板API:XXX(阶段二,第6步中,保留的密钥)

参考截图如下:

 

8、点击下一步开始执行,依次完成“监测环境”-》“选择数据”等环节,最后点击“一键迁移”。过程参考截图如下:

 

 

至此,博客系统一键迁移的整体流程就结束了,可以在新服务器中看到站点信息、应用以及数据库等内容,另外需注意一键迁移后在域名商那里完成域名的地址解析,把旧服务器IP更改为新服务器IP。

本文转载于网络 如有侵权请联系删除

相关文章

  • 【数学基础】机器学习中的几个熵

    阅读大概需要7分钟 跟随小博主,每天进步一丢丢来自:天宏NLP信息量 事件发生的概率越小,信息量越大。假设是一个离散型随机变量,取值集合为,概率分布函数为则定义事件的信息量为:信息熵信息量的期望就是熵,假设事件有n种可能,发生的概率为,那么该事件的熵为:如果发生的事件只有两种可能性,那么熵的计算转化为下列式子:相对熵(KL散度/KLdivergence)相对熵又叫KL散度,也叫做信息增益,如果我们对于同一个随机变量,有两个单独的概率分布和,我们可以用KL散度来衡量这两个分布的差异。在机器学习中,P分布往往用来表示样本的真实分布,即标签label,Q用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是计算损失值Loss。可以看出,Q的分布越接近P(Q分布越拟合P),那么KL散度越小,即Loss越小,因为对数函数是凸函数,所以KL散度的值为非负数。下面给出KL散度非负的两种证明,对xi的求和变积分。方法一:上式用到了,代入就可以得到,方法二:上式用到了Jensen不等式,对于一个凸函数,满足,又由于为凸函数,所以可得。KL散度有时被称为KL距离,但它不满足距离的性质:K

  • 100 行写一个 go 的协程池 (任务池)

    前言 go的goroutine提供了一种较线程而言更廉价的方式处理并发场景,go使用二级线程的模式,将goroutine以M:N的形式复用到系统线程上,节省了cpu调度的开销,也避免了用户级线程(协程)进行系统调用时阻塞整个系统线程的问题。【1】但goroutine太多仍会导致调度性能下降、GC频繁、内存暴涨,引发一系列问题。在面临这样的场景时,限制goroutine的数量、重用goroutine显然很有价值。本文正是针对上述情况而提供一种简单的解决方案,编写一个协程池(任务池)来实现对goroutine的管控。思路要解决这个问题,要思考两个问题goroutine的数量如何限制,goroutine如何重用任务如何执行goroutine的数量如何限制,goroutine如何重用说到限制和重用,那么最先想到的就是池化。比如TCP连接池,线程池,都是有效限制、重用资源的最好实践。所以,我们可以创建一个goroutine池,用来管理goroutine。任务如何执行在使用原生goroutine的场景中,运行一个任务直接启动一个goroutine来运行,在池化的场景而言,任务也是要在gorouti

  • Python--基础一

    Python基础:print&input&变量&运算符&Python数据类型&运算符与表达式Python基础1注释单行注释#我注释了一行复制多行注释三个单引号'''括起来''' 我可以注释多行 我可以注释多行 我可以注释多行 '''复制三个双引号"""括起来""" 我可以注释多行 我可以注释多行 我可以注释多行 """复制 print输出作用:打印到屏幕上一些信息可以接受多个字符串,用逗号分隔,遇到逗号会输出一个空格print("It'sabeautifuday","Niceday","myfinished") print(18) print(10+8) print("10+8=",18)复制input输入作用:从外部获取变量的值等待输入(阻塞),输入的内容报错在age里age=i

  • JavaScript 中 Property 和 Attribute 的区别详解

    最近看企鹅群,发现li的value有个‘好玩’的默认“规则”,搜索一番发现是Property与Attribute的缘故,无奈最初不清楚,最后搜到如下一篇文章,算是了解了点。现偷偷运输过来,供大家欣赏(最后附有原文以及其他”可能”有帮助的)。property和attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴。property是DOM中的属性,是JavaScript里的对象;attribute是HTML标签上的特性,它的值只能够是字符串;基于JavaScript分析property和attributehtml中有这样一段代码:<inputid="in_1"value="1"sth="whatever">复制简单的在html页面上创建一个input输入栏(注意在这个标签中添加了一个DOM中不存在的属性“sth”),此时在JS执行如下语句varin1=document.getElementById('in

  • springboot项目搭建流程_spring boot 项目

    1.问题描述springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础上,对已有的mavengav进行了封装而已,今天用最简单的代码快速入门springboot。2.解决方案强烈推荐大家使用Idea的付费版(激活成功教程感谢下蓝宇),Idea对maven、git等插件支持的更加好。使用idea自带的springInitializr(实际调用的是springboot的官网上的initializr),快速新建springboot项目。2.1新建Springboot项目(1)file->new->project(2)点击next(第一个)创建springboot项目(因为连接的国外的网站,next有时会几秒的延迟),将两个值改成自己的配置,Group:com.laowang,Artifact:sptest,其他可以不用动,点击ok(3)点击next(第二个)选择web-》springwebstarter(4)点击next(第三个)不用做修改,直接finish新建springboot项目已经完成。2.2spring

  • 关于#progma comment 中库文件相对路径问题

    最近做一个验证程序的对话框编程,因为里面要要用到静态链接库,所以就稍微的学习了下静态链接库知识,学习的过程中感觉到了自己所了解的东西实在是少的可怜,更加坚定了自己要更加上进的决心,要把以前所丢掉的都给补回来。   在调用静态链接库文件,也就是.lib文件的时候,需要设置链接库文件的路径让编译链接的时候,能够找到你所编写的静态库文件,首先在应用程序头文件中包含静态库的头文件,然后用链接标识符#pragmacomment(lib,".lib")在你的程序开头显示说明。 #include"..\..\2\1\lib.h" #include<stdio.h> #include<string.h> #pragma comment(lib,"..\\libTest1.lib") #progmacomment中的相对路径设置折磨了我好久,调试了好久都是报错,后来发现是\\和\的问题,在字符串中要用\\才能显示出,要考虑到转意字符\,在#include中的进行设置的时候则不需要考虑转意字符。 当前默认目录是sln文件所在的目录,..\\表示上一

  • 全局API

    Vue.extend(options): extend创建的是一个组件构造器,而不是一个具体的组件实例 //选项对象baseOptions letbaseOptions={ template:'<p>{{firstName}}{{lastName}}aka{{alias}}</p>', data:function(){ return{ firstName:'Walter', lastName:'White', alias:'Heisenberg' } }, created(){ console.log('onCreated-1'); } };复制 使用: 1、extend常服务于Vue.component用来生成组件,这是注册全局组件,可以在任意实例的components里使用。 使用示例:全局提示组件,全局的网页底部,动态创建全局组件(插件),用Vue.extend构建消息提示组件。(网页底部组件:创建的组件的dom结构,直接在body底部插入,在vue的app实例范围外,创建之后,该组件仍然可以响应组件内的数据。) Vue.component('glo

  • 次短路与 k 短路

    次短路 严格次短路 基本思路:两个dis数组分别储存最短路和次短路,依然使用堆优Dij。 显然,堆优部分是不变的。 structnode{ intid,val; booloperator<(constnode&b)const { returnval>b.val; } }; priority_queue<node>h; 复制 而在遍历时,也就是多了个if判断和次短路的更新。 memset(dis1,127,sizeof(dis1)); memset(dis2,127,sizeof(dis2)); dis1[1]=0;h.push((node){1,0}); while(h.size()) { nodenow=h.top();h.pop(); if(now.val>dis2[now.id]) continue;//不知道有没有用的瞎剪枝 for(inti=fir[now.id];i;i=nex[i]) { intp=poi[i]; if(dis1[p]>now.val+val[i]) { dis2[p]=

  • 简单的string split

    \3cspanid="mce_marker"data-mce-type="bookmark">\3c/span>\3cspanid="__caret">_\3c/span>\3c!-- p,li{white-space:pre-wrap} p,li{white-space:pre-wrap} static void split_string(const std::string& src_str, const char* delim, std::vector<std::string>& tokens) {     size_t delim_len = strlen(delim);     std::string::size_type pos = 0;     while(pos&n

  • js 公用插件,教科书级的写法

    项目有个地方要调用接口,几个地方都用到这个接口的数据。于是便要封装一个公共的js文件供使用者调用。   //车系全景图 varvrImgForBitauto={ CheZhanClassID:55555, CsID:0, Interface:'http://webapi.photo.com/Cooperate/api/v1/pano/GetPanoList?', GetDataCallBack:'vrImgForBitauto.GetVRData', CallBack:'', IntiDataForEntry:function(csid,callback){ this.CallBack=callback; if(csid>0) {this.CsID=csid;} vardate=newDate(); varfixMin=Math.floor(date.getMinutes()/5) varversion=date.getFullYear().toString()+(date.getMonth()+1).toString()+date.getDate().toStrin

  • MyBatis工作原理

    本文转载自:https://blog.csdn.net/u014297148/article/details/78696096 1、MyBatis的架构 MyBatis的架构分层 MyBatis的实现原理 mybatis底层还是采用原生jdbc来对数据库进行操作的,只是通过SqlSessionFactory,SqlSessionExecutor,StatementHandler,ParameterHandler,ResultHandler和TypeHandler等几个处理器封装了这些过程。 1、执行器:Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed); 2、参数处理器:ParameterHandler(getParameterObject,setParameters); 3、结构处理器:ResultSetHandler(handleResultSets,handleOutputParameters); 4、sql查询处理器:StatementHandler(prep

  • 破获ARM64位CPU下linux crash要案之神技能:手动恢复函数调用栈

    转载:https://www.cnblogs.com/coder51up/p/6940030.html 这篇文章使用crash进行栈的调用分析,查找定位出错的位置 前不久老王的一位刚入职的同事小马在调试基于三星平台的7420SOC(ARM64位处理器芯片)Android驱动的时候遇到了一个crash问题,但是panic出来后没有打印出backtrace(函数的调用关系),后来老王通过分析ARM64linux的函数调用关系以及AAPCS64,通过手动获取调用堆栈的方式很快定位和解决了此问题。突然老王才意识到,早在2013年苹果发布了iPhone5s,其做为第一款应用了ARMv8架构的64位处理器的手机以来,各大手机厂商也在64位处理器的道路上摩拳擦掌,你苹果既然带头弄个64位,那么大家也就弄64位了,不然外行以为64位厉害(似乎苹果总能在某些方面引领科技潮流啊),随后高通发布了骁龙41064位SOC,MTK的MT6732,华为的麒麟620等,现在的移动AP处理器来说基本都已经鸟枪换炮成64位CPU了,似乎手机厂商在搞PPT的时候,如果不宣讲处理器是64位的话,码农门表示他都没法混下去了。

  • 管理系统实验程序及报告参考分享

    管理系统实验程序及报告参考分享 最近准备将自己本科写好的一些实验程序分享给在读学生,当时才疏学浅,东西做的比较烂,但是对于一个课程设计来说足够了。话不多说,直接展示程序。 程序演示地址:实验程序 实验报告下载:报告 注意!本程序为纯前端技术开发的,将页面右键保存到本地即可运行程序,各种数据并未保存到数据库,但对于课程设计来说,已经足够了,如果实在想保存到数据库,可以使用ajax+SpringBoot。 欢迎页面 进货子系统效果 产生进货传票后 打印进货船票 继续进货效果 库存数据库 销售子系统 库存报警系统 购买无此商品报警系统 销售传票产生 管理员申请修改商品价格及经理审批 审批结果 微信搜索桔子科研或者扫描二维码,第一时间获取编程有趣的知识和最新科研学术成果。

  • 前端vue使用better-scroll实现下拉刷新,上拉加载

    前端下拉刷新,上拉加载的实现一直都有很多坑,今天入以下  better-scroll 的坑,先附上better-scroll的官方文档,如果要深入使用还是得看文档查看链接 第一步 先看下better-scroll实现时的dom结构,如下代码 1<divclass="scroller"ref="scroller"> 2<divclass="scroll-list"> 3<divclass="scroll-item"></div> 4<divclass="scroll-item"></div> 5<divclass="scroll-item"></div> 6<divclass="scroll-item"></div> 7<pclass="loading">{{loadingText}}</p> 8</div> 9</div>复制 如上 类  .scroller&nbs

  • linux fdisk分区笔记

    fdisk盘符 atoggleabootableflagbeditbsddisklabelctogglethedoscompatibilityflagd deleteapartition注:这是删除一个分区的动作;l listknownpartitiontypes注:l是列出分区类型,以供我们设置相应分区的类型;m printthismenu注:m是列出帮助信息;n addanewpartition注:添加一个分区;ocreateanewemptyDOSpartitiontablep printthepartitiontable注:p列出分区表;q quitwithoutsavingchanges注:不保存退出;screateanewemptySundisklabelt changeapartition'ssystemid注:t改变分区类型;uchangedisplay/entryunitsvverifythepartitiontablew writetabletodiskandexit注:把分区表写入硬盘

  • Vue.js项目中使用iconfont冲突问题解决

    在开发前端项目中,字体图标变得越来越常用。一方面因为它比图片使用起来方便,可以像字体一样修改大小和颜色;另一方面是因为它可以减少请求数量,优化前端性能。 iconfont的使用方法很简单,主要由三种引入方式:Unicode,FontClass,Symbol。不会的可以去官网看看:https://www.iconfont.cn/   但是在实际项目中,我们可能会遇到iconfont冲突的问题,简单来说就是某个项目存在多个iconfont资源目录,而且命名没有修改(默认名都是"iconfont")。导致在页面加载时无法确定使用哪个资源目录下的图标,就会显示不出来。 举个我实际项目中的例子(由于浏览器的限制,我使用的是fontclass方法):在开发项目A时,我在assets目录里,新建一个iconfont文件夹用来存储该项目中需要用到的iconfont资源;由于需求我需要开发一套通用UI组件,考虑到插件的独立性和移植性,我想把该组件与项目解耦,包括资源,方法等。于是我在components目录下新建一个目录componentA,里面由独立的assets,function目录。由于

  • .NET 云原生架构师训练营(权限系统 代码重构)--学习笔记

    目录 模块拆分 代码重构 模块拆分 代码重构 AuthenticationController PermissionController IAuthorizationMiddlewareResultHandler ISaveChangesInterceptor AuthenticationController 新增AuthenticationController用于登录和注册;登录会颁发jwttoken,包含用户的claims和role的claims 登录 [HttpPost] [Route("login")] publicasyncTask<IActionResult>Login([FromBody]LoginRequest.LoginModelmodel) { varuser=await_userManager.FindByNameAsync(model.Username); varuserClaims=await_userManager.GetClaimsAsync(user); if(user!=null&&await_userManag

  • Java中使用MongoUtils对mongodb数据库进行增、删、查、改

    本文主要介绍在java应用中如何使用MongoUtils工具类对mongodb进行增、删、查、改操作。 一、配置 1、将common.jar库引入到项目环境中:(源代码:https://gitee.com/cnsugar/common,可直接下载lib目录下的jar文件使用)    如果是maven项目,可以通过mvninstall命令将common.jar加入到本地仓库: mvninstall:install-file-Dfile=D:\lib\common-1.0.jar-DgroupId=com.cnsugar-DartifactId=common-Dversion=1.0-Dpackaging=jar 复制 然后在pom.xml中加入以下配置: <dependency> <groupId>com.cnsugar</groupId> <artifactId>common</artifactId> <version>1.0</version> </dependency>

  • 如何设置环境变量

    首先强烈推荐一款免费的c++的IDE----code:block,免费的且自带了MinGW编译器。 自己可以设置字体及大小,一般设置成12号比较合适。直接在界面上的Setting-->Editor,在右上角上有一个choose,然后就可以选择字体,字形和大小了。 若是选择了默认安装的。则在C:\ProgramFiles\CodeBlocks里,就有MinGW了。 那么问题来了,如何设置环境变量??        右击我的电脑,点属性->高级系统设置->环境变量。然后: 1、在PATH里加入C:\MinGW\bin,记得,如果里面还有其他的变量,记得要加个英文分号啊,分号一定得在英文输入模式下输入的,否则分号后均不会被识别。2、新建LIBRARY_PATH变量,如果有的话,在值中加入C:\MinGW\lib,这是标准库的位置。3、新建C_INCLUDEDE_PATH变量,值设为C:\MinGW\include。4、新建CPLUS_INCLUDE_PATH变量,值为C:\MinGW\include\c++\3.4

  • zabbix主动模式和配置模式配置

    zabbix主动模式和被动模式配置在于agent客户端配置不通 主动模式:zabbixagent客户端主动发送信息给zabbixserver端 StartAgents=0#关闭被动模式,开启主动模式,此时agent客户端不会监听10050端口 ServerActive=10.0.0.64#zabbixserver端的ip Hostname=test#和主机hostname一直复制 被动模式:zabbixserver定时的通过连接zabbixagent客户端的10050端口进行通信,获取agent客户端信息 Server=10.10.10.10StartAgents=1#开启被动模式复制 Hostname=test复制 agent客户端注意开放10050端口,zabbixserver需要连接到此端口进行通讯

  • Java学习整理

    2021年11月9日 整理下大学来两年的技术栈,通过整理知识来达到复习的目的。 计算机基础知识 操作系统 计算机网络 计算机组成 java重要知识点 jvm spingboot redis mysql linux springcloud dubbozookeeper

相关推荐

推荐阅读