当前位置: 首页 > news >正文

做网商必备网站外贸公司网站建设 重点是什么意思

做网商必备网站,外贸公司网站建设 重点是什么意思,如何设计企业官网,重庆网上房地产网签合同查询1 今日内容介绍 1.1 什么是持续集成 持续集成#xff08; Continuous integration #xff0c; 简称 CI #xff09;指的是#xff0c;频繁地#xff08;一天多次#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程#xff0c; 从检出代码、 编译构建…1 今日内容介绍 1.1 什么是持续集成 持续集成 Continuous integration 简称 CI 指的是频繁地一天多次将代码集成到主干 持续集成的组成要素 一个自动构建过程 从检出代码、 编译构建、 运行测试、 结果记录、 测试统计等都是自动完成的 无需人工干预。 一个代码存储库即需要版本控制软件来保障代码的可维护性同时作为构建过程的素材库一般使用SVN或Git。 一个持续集成服务器 Jenkins 就是一个配置简单和使用方便的持续集成服务器。 1.2 持续集成的好处 1、降低风险由于持续集成不断去构建编译和测试可以很早期发现问题所以修复的代价就少 2、对系统健康持续检查减少发布风险带来的问题 3、减少重复性工作 4、持续部署提供可部署单元包 5、持续交付可供使用的版本 6、增强团队信心 1.3 今日内容 2 软件开发模式 2.1 软件开发生命周期 软件开发生命周期又叫做SDLCSoftware Development Life Cycle它是集合了计划、开发、测试和部署过程的集合。如下图所示 需求分析 这是生命周期的第一阶段根据项目需求团队执行一个可行性计划的分析。项目需求可能是公司内部或者客户提出的。这阶段主要是对信息的收集也有可能是对现有项目的改善和重新做一个新的项目。还要分析项目的预算多长可以从哪方面受益及布局这也是项目创建的目标。 设计 第二阶段就是设计阶段系统架构和满意状态就是要做成什么样子有什么功能和创建一个项目计划。计划可以使用图表布局设计或者文字的方式呈现。 实现 第三阶段就是实现阶段项目经理创建和分配工作给开者开发者根据任务和在设计阶段定义的目标进行开发代码。依据项目的大小和复杂程度可以需要数月或更长时间才能完成。 测试 测试人员进行代码测试 包括功能测试、代码测试、压力测试等。 进化 最后进阶段就是对产品不断的进化改进和维护阶段根据用户的使用情况可能需要对某功能进行修改bug修复功能增加等。 2.2 软件开发瀑布模型 瀑布模型是最著名和最常使用的软件开发模型。瀑布模型就是一系列的软件开发过程。它是由制造业繁衍出来的。一个高度化的结构流程在一个方向上流动有点像生产线一样。在瀑布模型创建之初没有其它开发的模型有很多东西全靠开发人员去猜测去开发。这样的模型仅适用于那些简单的软件开发 但是已经不适合现在的开发了。 下图对软件开发模型的一个阐述。 优势劣势简单易用和理解各个阶段的划分完全固定阶段之间产生大量的文档极大地增加了工作量。当前一阶段完成后您只需要去关注后续阶段。由于开发模型是线性的用户只有等到整个过程的末期才能见到开发成果从而增加了开发风险。为项目提供了按阶段划分的检查节点瀑布模型的突出缺点是不适应用户需求的变化。 2.3 软件的敏捷开发 什么是敏捷开发 敏捷开发Agile Development 的核心是迭代开发Iterative Development 与 增量开发Incremental Development。 何为迭代开发 对于大型软件项目传统的开发方式是采用一个大周期比如一年进行开发整个过程就是一次大开发迭代开发的方式则不一样它将开发过程拆分成多个小周期即一次大开发变成多次小开发每次小开发都是同样的流程所以看上去就好像重复在做同样的步骤。 举例来说SpaceX 公司想造一个大推力火箭将人类送到火星。但是它不是一开始就造大火箭而是先造一个最简陋的小火箭 Falcon 1。结果第一次发射就爆炸了直到第四次发射才成功进入轨道。然后开发了中型火箭 Falcon 9九年中发射了70次。最后才开发 Falcon 重型火箭。如果SpaceX 不采用迭代开发它可能直到现在还无法上天。 何为增量开发 软件的每个版本都会新增一个用户可以感知的完整功能。也就是说按照新增功能来划分迭代。 举例来说房产公司开发一个10栋楼的小区。如果采用增量开发的模式该公司第一个迭代就是交付一号楼第二个迭代交付二号楼......每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基第二个迭代建好每栋楼的骨架第三个迭代架设屋顶...... 敏捷开发如何迭代 虽然敏捷开发将软件开发分成多个迭代但是也要求每次迭代都是一个完整的软件开发周期必须按照软件工程的方法论进行正规的流程管理。 敏捷开发有什么好处 早期交付 敏捷开发的第一个好处就是早期交付从而大大降低成本。 还是以上一节的房产公司为例如果按照传统的瀑布开发模式先挖10栋楼的地基、再盖骨架、然后架设屋顶每个阶段都等到前一个阶段完成后开始可能需要两年才能一次性交付10栋楼。也就是说如果不考虑预售该项目必须等到两年后才能回款。 敏捷开发是六个月后交付一号楼后面每两个月交付一栋楼。因此半年就能回款10%后面每个月都会有现金流资金压力就大大减轻了。 降低风险 敏捷开发的第二个好处是及时了解市场需求降低产品不适用的风险。 请想一想哪一种情况损失比较小10栋楼都造好以后才发现卖不出去还是造好第一栋楼就发现卖不出去从而改进或停建后面9栋楼 3 Jenkins安装配置 3.1 Jenkins介绍 Jenkins 是一款流行的开源持续集成Continuous Integration工具广泛用于项目开发具有自动化构建、测试和部署等功能。官网 http://jenkins-ci.org/。 Jenkins的特征 开源的 Java语言开发持续集成工具支持持续集成持续部署。易于安装部署配置可通过 yum安装,或下载war包以及通过docker容器等快速实现安装部署可方便web界面配置管理。消息通知及测试报告集成 RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知生成JUnit/TestNG测试报告。分布式构建支持 Jenkins能够让多台计算机一起构建/测试。文件识别 Jenkins能够跟踪哪次构建生成哪些jar哪次构建使用哪个版本的jar等。丰富的插件支持支持扩展插件你可以开发适合自己团队使用的工具如 gitsvnmavendocker等。 Jenkins安装和持续集成环境配置 1 首先开发人员每天进行代码提交提交到Git仓库 2然后Jenkins作为持续集成工具使用Git工具到Git仓库拉取代码到集成服务器再配合JDKMaven等软件完成代码编译代码测试与审查测试打包等工作在这个过程中每一步出错都重新再执行一次整个流程。 3最后Jenkins把生成的jar或war包分发到测试服务器或者生产服务器测试人员或用户就可以访问应用。 3.2 Jenkins环境搭建 3.2.1 Jenkins安装配置 可以导入资料中的镜像 服务器用户名root 密码itcastjenkins 用户名itcast 密码itcastCopy to clipboardErrorCopied 采用YUM方式安装 加入jenkins安装源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificatesudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.keyCopy to clipboardErrorCopied 执行yum命令安装 yum -y install jenkinsCopy to clipboardErrorCopied 采用RPM安装包方式 Jenkins安装包下载地址 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpmCopy to clipboardErrorCopied 执行安装 rpm -ivh jenkins-2.190.1-1.1.noarch.rpmCopy to clipboardErrorCopied 配置 修改配置文件 vi /etc/sysconfig/jenkinsCopy to clipboardErrorCopied 修改内容 # 修改为对应的目标用户 这里使用的是root $JENKINS_USERroot # 服务监听端口 JENKINS_PORT16060Copy to clipboardErrorCopied 目录权限 chown -R root:root /var/lib/jenkins chown -R root:root /var/cache/jenkins chown -R root:root /var/log/jenkinsCopy to clipboardErrorCopied 重启 systemctl restart jenkinsCopy to clipboardErrorCopied 如果启动失败 出现错误信息 Starting Jenkins bash: /usr/bin/java: No such file or directoryCopy to clipboardErrorCopied 创建JAVA环境的软链接 ln -s /usr/local/jdk/bin/java /usr/bin/javaCopy to clipboardErrorCopied 管理后台初始化设置 http://192.168.200.100:16060/ 需要输入管理密码 在以下位置查看 cat /var/lib/jenkins/secrets/initialAdminPasswordCopy to clipboardErrorCopied 按默认设置把建议的插件都安装上 这一步等待时间较长 安装完成之后 创建管理员用户 配置访问地址 配置完成之后 会进行重启 之后可以看到管理后台 3.2.2 Jenkins插件安装 在实现持续集成之前 需要确保以下插件安装成功。 Maven Integration plugin Maven 集成管理插件。Docker plugin Docker集成插件。GitLab Plugin GitLab集成插件。Publish Over SSH远程文件发布插件。SSH: 远程脚本执行插件。 安装方法 进入【系统管理】-【插件管理】 点击标签页的【可选插件】 在过滤框中搜索插件名称 勾选插件 点击直接安装即可。 注意如果没有安装按钮需要更改配置 在安装插件的高级配置中修改升级站点的连接为http://updates.jenkins.io/update-center.json 保存 3.2.3 Git安装配置 yum 安装方式 yum -y install gitCopy to clipboardErrorCopied 采用源码包方式安装 安装依赖包 yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum -y install gcc perl-ExtUtils-MakeMakerCopy to clipboardErrorCopied 如果之前有安装旧版本 先做卸载 没有安装则忽略 yum remove gitCopy to clipboardErrorCopied 下载源码包 cd /usr/local wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz tar -xvf git-1.8.3.1.tar.gzCopy to clipboardErrorCopied 也可以安装其他版本 地址Index of /pub/software/scm/git/ 编译安装 cd git-1.8.3.1 make prefix/usr/local/git all make prefix/usr/local/git install echo export PATH$PATH:/usr/local/git/bin /etc/bashrc source /etc/bashrcCopy to clipboardErrorCopied 检查git版本 [rootlocalhost jenkins]# git version git version 1.8.3.1Copy to clipboardErrorCopied 3.2.4 Maven安装配置 下载安装包 下载地址 Maven – Download Apache Maven 解压安装包 cd /usr/local unzip -o apache-maven-3.6.1.zip Copy to clipboardErrorCopied 上传本地仓库并解压 配置 环境变量配置 vi /etc/profileCopy to clipboardErrorCopied 增加 export MAVEN_HOME/usr/local/maven/apache-maven-3.6.1 export PATH$PATH:$MAVEN_HOME/binCopy to clipboardErrorCopied 如果权限不够则需要增加当前目录的权限 chmod 777 /usr/local/maven/apache-maven-3.6.1/bin/mvnCopy to clipboardErrorCopied 修改镜像仓库配置 vi /usr/local/maven/apache-maven-3.6.1/conf/settings.xmlCopy to clipboardErrorCopied 需要把本机的仓库打包上传到服务器上不上传会自动下载 然后指定上传后的仓库配置 3.2.5 Docker安装配置 更新软件包版本 yum -y updateCopy to clipboardErrorCopied 卸载旧版本 yum -y remove docker docker-common docker-selinux docker-engineCopy to clipboardErrorCopied 安装软件依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2Copy to clipboardErrorCopied 设置yum源为阿里云 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoCopy to clipboardErrorCopied 安装后查看docker版本 docker -vCopy to clipboardErrorCopied 启动 设置开机启动 systemctl enable dockerCopy to clipboardErrorCopied 启动docker systemctl start dockerCopy to clipboardErrorCopied 3.2.6 Docker Registry私有仓库安装配置 3.3 Jenkins工具配置 进入【系统管理】-- 【全局工具配置】 MAVEN配置全局设置 指定JDK配置 指定MAVEN 目录 指定DOCKER目录 如果不清楚docker的安装的目录可以使用whereis docker 命令查看docker的安装的目录 4 后端项目部署 4.1 多环境切换 在项目开发部署的过程中一般都会有三套项目环境 Development 开发环境 Production 生产环境 Test 测试环境 例如开发环境的mysql连接的是本地生产环境需要连接线上的mysql环境 4.2 多环境切换-微服务中多环境配置 1.在微服务中的bootstrap.yml中新增配置 server:port: 51801 spring:application:name: leadnews-usercloud:nacos:discovery:server-addr: 192.168.200.130:8848config:server-addr: 192.168.200.130:8848file-extension: ymlprofiles:active: devCopy to clipboardErrorCopied 2.在nacos的配置中心中新增各个环境的配置文件例如user微服务中新增 修改bootstrap.yml 添加内容 spring:profiles:active: devCopy to clipboardErrorCopied 创建对应的nacos的多环境配置 注意事项 其中DataID属性命名有规范 prefix默认使用${spring.application.name}也可以通过spring.cloud.nacos.config.prefix来配置。spring.profile.active即为当前环境对应的 profile详情可以参考 Spring Boot文档。 注意当 spring.profile.active 为空时对应的连接符 - 也将不存在dataId 的拼接格式变成 ${prefix}.${file-extension}file-exetension为配置内容的数据格式可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。 4.3 整体思路 目标把黑马头条的app端相关的微服务部署到192.168.200.100这台服务器上 4.4 服务集成Docker配置 目标部署的每一个微服务都是先创建docker镜像后创建对应容器启动 方式一本地微服务打包以后上传到服务器编写Dockerfile文件完成。 方式二使用dockerfile-maven-plugin插件可以直接把微服务创建为镜像使用更省事 服务集成Docker配置 每个微服务都引入该依赖,以heima-leadnews-user微服务为例 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdheima-leadnews-service/artifactIdgroupIdcom.heima/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdheima-leadnews-user/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetdocker.imagedocker_storage/docker.image/propertiesbuildfinalNameheima-leadnews-user/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.7.0/versionconfigurationsource${java.version}/sourcetarget${java.version}/target/configuration/pluginplugingroupIdcom.spotify/groupIdartifactIddockerfile-maven-plugin/artifactIdversion1.3.6/versionconfigurationrepository${docker.image}/${project.artifactId}/repositorybuildArgsJAR_FILEtarget/${project.build.finalName}.jar/JAR_FILE/buildArgs/configuration/plugin/plugins/build/projectCopy to clipboardErrorCopied 服务集成Dockerfile文件 # 设置JAVA版本 FROM java:8 # 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层 VOLUME /tmp # 拷贝运行JAR包 ARG JAR_FILE COPY ${JAR_FILE} app.jar # 设置JVM运行参数 这里限定下内存大小减少开销 ENV JAVA_OPTS\ -server \ -Xms256m \ -Xmx512m \ -XX:MetaspaceSize256m \ -XX:MaxMetaspaceSize512m #空参数方便创建容器时传参 ENV PARAMS # 入口点 执行JAVA运行命令 ENTRYPOINT [sh,-c,java -jar $JAVA_OPTS /app.jar $PARAMS]Copy to clipboardErrorCopied 4.5 jenkins基础依赖打包配置 在微服务运行之前需要在本地仓库中先去install所依赖的jar包所以第一步应该是从git中拉取代码并且把基础的依赖部分安装到仓库中 1父工程heima-leadnews 2找到自己指定的git仓库设置用户名和密码 3把基础依赖信息安装到服务器上的本地仓库 4执行 执行日志部分截图下面是从git中拉取代码 执行日志部分截图编译打包 执行日志部分截图执行成功 4.6 jenkins微服务打包配置 所有微服务打包的方式类似以heima-leadnews-user微服务为例 1新建任务 2找到自己指定的git仓库设置用户名和密码 3执行maven命令 clean install -Dmaven.test.skiptrue dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-user/pom.xmlCopy to clipboardErrorCopied 注意根据自己的实际代码路径配置 -Dmaven.test.skiptrue 跳过测试 dockerfile:build 启动dockerfile插件构建容器 -f heima-leadnews-user/pom.xml 指定需要构建的文件必须是pom 4并执行shell脚本 if [ -n $(docker ps -a -f name$JOB_NAME --format {{.ID}} ) ]then#删除之前的容器docker rm -f $(docker ps -a -f name$JOB_NAME --format {{.ID}} ) fi# 清理镜像 docker image prune -f # 启动docker服务 docker run -d --nethost -e PARAMS--spring.profiles.activeprod --name $JOB_NAME docker_storage/$JOB_NAMECopy to clipboardErrorCopied 5执行日志 拉取代码 编译打包 构建镜像 清理容器创建新的容器 4.7 部署服务到远程服务器上 目标使用jenkins192.168.200.100把微服务打包部署到192.168.200.130服务器上 4.7.1 安装配置私有仓库 对于持续集成环境的配置Jenkins会发布大量的微服务 要与多台机器进行交互 可以采用docker镜像的保存与导出功能结合SSH实现 但这样交互繁琐稳定性差 而且不便管理 这里我们通过搭建Docker的私有仓库来实现 这个有点类似GIT仓库 集中统一管理资源 由客户端拉取或更新。 下载最新Registry镜像 docker pull registry:latestCopy to clipboardErrorCopied 启动Registry镜像服务 docker run -d -p 5000:5000 --name registry -v /usr/local/docker/registry:/var/lib/registry registry:latestCopy to clipboardErrorCopied 映射5000端口 -v是将Registry内的镜像数据卷与本地文件关联 便于管理和维护Registry内的数据。 查看仓库资源 访问地址http://192.168.200.100:5000/v2/_catalog 启动正常 可以看到返回 {repositories:[]}Copy to clipboardErrorCopied 目前并没有上传镜像 显示空数据。 如果上传成功 可以看到数据:  配置Docker客户端 正常生产环境中使用 要配置HTTPS服务 确保安全内部开发或测试集成的局域网环境可以采用简便的方式 不做安全控制。 先确保持续集成环境的机器已安装好Docker客户端 然后做以下修改 vi /lib/systemd/system/docker.serviceCopy to clipboardErrorCopied 修改内容 ExecStart/usr/bin/dockerd --insecure-registry 192.168.200.100:5000Copy to clipboardErrorCopied 指向安装Registry的服务IP与端口。 重启生效 systemctl daemon-reolad systemctl restart docker.serviceCopy to clipboardErrorCopied 4.7.2 jenkins中安装插件 4.7.3 jenkins系统配置远程服务器链接 位置Manage Jenkins--Configure System 需要添加凭证 位置Manage Jenkins--Manage CreDentials 添加链接到130服务器的用户名和密码 4.7.4 jenkins项目创建与其他微服务相同 创建项目参考之前创建过的用户微服务 4.7.5 设置参数 4.7.6 构建执行Execute shell maven命令 clean install -Dmaven.test.skiptrue dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-article/pom.xmlCopy to clipboardErrorCopied shell脚本 image_tag$docker_registry/docker_storage/$JOB_NAME echo docker镜像清理 if [ -n $(docker ps -a -f name$JOB_NAME --format {{.ID}} ) ]then#删除之前的容器docker rm -f $(docker ps -a -f name$JOB_NAME --format {{.ID}} ) fi# 清理镜像 docker image prune -f # 创建TAG docker tag docker_storage/$JOB_NAME $image_tag echo docker镜像推送 # 推送镜像 docker push $image_tag # 删除TAG docker rmi $image_tag echo docker tag 清理 Copy to clipboardErrorCopied 4.7.7 在远程服务器上执行脚本 远程服务器执行的shell脚本 echo 拉取最新镜像 docker pull $docker_registry/docker_storage/$JOB_NAMEecho 删除清理容器镜像 if [ -n $(docker ps -a -f name$JOB_NAME --format {{.ID}} ) ]then#删除之前的容器docker rm -f $(docker ps -a -f name$JOB_NAME --format {{.ID}} ) fi# 清理镜像 docker image prune -f echo 启动容器 docker run -d --nethost -e PARAMS--spring.profiles.activeprod --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAMECopy to clipboardErrorCopied 4.7.8 构建完成以后可以登录130服务器查看是否有相关的镜像和容器 镜像 容器 4.8 联调测试 1.参考jenkins中heima-leadnews-user微服务把app端网关部署起来 2.修改本地nginx中的配置反向代理地址为100这台服务器heima-leadnews-app.conf upstream heima-app-gateway{server 192.168.200.100:51601; }Copy to clipboardErrorCopied 3.启动nginx打开页面进行测试 5 jenkins触发器配置 5.1 URL触发远程构建 触发远程构建修改jenkins的配置如下 触发构建url http://192.168.200.100:16060/job/leadnews-admin/build?token88888888 5.2 其他工程构建后触发 配置需要触发的工程 5.3 定时构建 定时构建 Build periodically 定时字符串从左往右分别为 分 时 日 月 周 定时构建-定时表达式 定时字符串从左往右分别为 分 时 日 月 周 组成部分含义取值范围第一部分minute (分)0~59第二部分hour(小时)0~23第三部分day(天)1~31第四部分month(月)1~12第五部分week(周)0~70 和 7 都是表示星期天 符号H 表示一个随机数 符号* 取值范围的任意值 案例 每30分钟构建一次H/30 * * * * 10:02 10:32 每2个小时构建一次: H H/2 * * * 每天的8点12点22点一天构建3次 (多个时间点中间用逗号隔开) 0 8,12,22 * * * 每天中午12点定时构建一次 H 12 * * * 每天下午18点定时构建一次 H 18 * * * 5.4 轮询 轮询 SCMPoll SCM 轮询SCM是指定时扫描本地代码仓库的代码是否有变更如果代码有变更就触发项目构建。 Jenkins会定时扫描本地整个项目的代码增大系统的开销不建议使用。
http://www.tj-hxxt.cn/news/219079.html

相关文章:

  • 相亲网站用什么做的网站销户说明
  • 网站开发广州今东外贸人才网
  • 做图模板网站有哪些内容wordpress还原明文密码
  • 如何在国外建设网站软件开发模型对比
  • 云服务器做网站要备案吗网站做漏洞扫描费用
  • 颍上县建设局网站做一张网站图多少钱
  • 电子商务网站建设客户需求调查表杭州网络推广专员
  • 免费com域名网站免费模板的软件
  • 黄埔网站开发企联网站建设
  • 携程网站建设项目交换友情链接的方法
  • php电商网站开发贴吧农业信息网站建设意义
  • 公司网站建设亚运村重庆微信网站作公司
  • 深圳市网站建设单位十佳wordpress语言编程吗
  • 山东济南seo整站优化企业邮箱号码
  • 可以做游戏可以视频约会的网站网站备案一般要多久
  • 个人网站示例传奇游戏网站怎么做
  • 中国建设银行招投标网站包头 网站建设
  • 网站出现乱码怎么办照片生成视频制作软件
  • 深圳旅游公司网站天津建设工程信息网欧美小镇农贸市场
  • windows搭建网站多少钱要交税
  • 墙外必去的网站易点租电脑租赁官网
  • 漯河哪个网站推广效果好想学网站建设优化去哪
  • 关于网站建设的书籍手工制作折纸
  • 中兴建设有限公司网站系统软件有哪些?
  • 潍坊市住房和城乡建设局官方网站godaddy服务器做网站
  • 抚州市住房和城乡建设局网站网站上动态图片怎么做
  • 做展示型企业网站交易链接大全
  • 徐州建站软件响应式网页设计案例实现与分析
  • 自助手机网站wordpress如何登录后台
  • 展示网站如何做网站编程教学