Ⅰ 网站镜像如何建立
镜像网站是将一个完全相同的站点放到几个服务器,分别有自己的URL,在这些服务器上互为镜像网站。它和主站并没有太大差别,或者可算是为主站作的后备措施。有了镜像网站的好处是:如果不能对主站作正常访问(如某个服务器死掉或出了意外),但仍能通过其它服务器正常浏览。相对来说主站在速度等各方面比镜像站点略胜一筹。
镜像就是做一个和你的站一模一样的站, 也就是说, 就跟镜子一样嘛. 一般是个人网站的站长为自己的站做一个备份, 也就是说, 一个站由于流量或其它原因访问不到时, 人们可以去另一个一模一样的站看. 这个站还可以起到分流, 减少服务器压力的作用. 不过, 这些都是由于个人网站的服务器不能接受太多的访问量而采取的办法. 商业网站一般不用这样的办法. 因为用户要记两个域名, 内容要上传两次, 要随时保持两个地方一致, 内容一多非常麻烦.
如果是别人把自己的站也这样原样做一份放在网上, 我在想, 网站的主人肯定是不能容忍的, 可以用搜索引擎找到这样的站, 现在这样搞的人已经比较少了, 在2000年, 我们经常会发现有人这样照抄人家的站. 所以, 哪时候很多网站都加了一句严禁建立镜像.
一步一步教你网站同步镜像
1.介绍
现在的网站随着访问量的增加,单一服务器无法承担巨大的访问量,有没有什么方便快捷的方式解决这个问题呢,答案是”有”!比如建立服务器群,进行均衡负载.
但是如果要解决像电信网通这样的互访问题(中国网民的悲哀..),这个解决办法就无能为了了!
要解决这个问题最方便快捷的方式就是建立镜像网站!由访问者自己选择适合自己网络的速度最快的网站!这样即可以解决线路问题,又可以解决访问量问题!
2.网站同步的数据分类
网站数据基本分为两类
一类是文件,比如HTML,ASP,php等网页文件,或者RAR,ZIP,RM,AVI等可下载文件!
要实现他们的同步很简单,用FTP同步软件就可以了!至于哪几个我会在后面做详细介绍.
一类是数据库数据文件,比如MySQL,SQL Server等等!
数据库同步的方法也很多,最简单的办法只是将数据库目录同步一下就OK了!
在后面我也会做详细讲解!
3.网站文件的同步
在这里用到的主要工具就是FTP,网站文件同步分两种情况,一种是本地到远程,一种是远程到远程(FXP)!第一种不用说了,第二种远程到远程即FXP,支持它的软件也很多,但是真正适合多网站同步镜像的却不多!
下面我介绍几个我认为不错的软件!(PS如果熟悉FTP命令,完全可以自己制作一个批处理文件时间的)
1.首先我要推荐的是国产的FTP软件”网络传神”,功能非常强大,特别是在网站的同步镜像方面,可惜的是,这款非常经典的软件已经不再更新了,最后更新时间是2003年3月,最后一个版本是3.12!虽然如此还是非常好用的!下面是一段官方的简介
网络传神完全吸收了Cuteftp和UpdataNow的全部功能,并且增加了其他软件没有的多项功能:支持网站互传;支持网站同步(UPDATA NOW);支持后台上传(多线程上传多个文件);可同时打开多个站点;多站点计划上传功能,支持镜像站点;支持宏操作支持计划操作;支持文件高级比较上传;支持目录隐藏过滤(为用ForntPage作主页的朋友带来福音);服务器自动识别功能;资源管理器浏览方式;可以自定义命令;支持RFC959标准具有更好的稳定性;完备的信息返回机制及错误监控机制完整的中文帮助。
2.第二款是由ReGet同一开发公司制作的专用于网站同步的软件”WebSynchronizer”,用这款软件,你才会体验到网站同步的方便快捷,简单容易.最新版本是1.3.62, 网上能找到XX的最后版本是1.1版!下面是一段简介
档案同步化工具 - WebSynchronizer,由知名续传软件 ReGet 之软件出版公司所推出,是网站同步化、档案镜像、档案备份的绝佳工具,可以执行下列主要工作:1) 本机资料夹及远程资料夹的同步化;2) 两台远程计算机中的资料夹同步化;3) 两个本机资料之同步化。
3.其他还有一些软件如同步快梭(AutoSyncFTP),也能实现简单的网站同步,不过,这款软件非常不稳定,而且2001年就已经停止开发.所以,不用考虑了!还有上次有朋友提到的SiteMirro,由于网上找不到可以用的版本,所以没有办法测试!
4.网络传神网站同步镜像使用傻瓜指南
上次在网络技术版已经发过一个简单的使用方法介绍,如果嫌我罗嗦(o(_)o),大家可以参考那篇文章
httpbbs.et8.netbbsshowthread.phpt=650129
第一次运行网络传神的时候,它会让你选择”完全模式”和”启动模式”,要使用网站同步必须选择”完全模式”.
进入主界面你会发现这个软件非常像FlashGet,要使用网站同步功能,点击软件左下角的”FTP客户端”.
现在你要做的就是添加你的镜像母站和需要镜像的网站文件-站点管理,在里面添加你需要同步的几个的FTP服务器,下面我将介绍具体设置(主要是镜像母站的设置)
母站设置最重要的地方就是”比较目录(网站同步)”
1.拖动传送
就是手动拖动传送时候的传送方式,非拖动方式不受影响,因为母站的更新基本上是从本地目录进行的,所以建议这里选择第二项”只上传不同的文件”,镜像站点这里可以忽略
2.磁盘比较设置
这个功能非常有用,可以通过文件长度和文件日期进行文件差异对比.
你还可以设置本地目录过滤和服务器目录过滤,非常灵活!
好了,添加好母站和镜像站之后,我们来设置同步
如果是添加镜像站,则会跳出下面的母站选择窗口
设置好多个镜像站点之后,返回主界面就可以进行网站同步了
注意事项:
一般不要改动镜像站点前面的“对钩”标志,因为镜像站点同步的原理是“根据主站点的同步信息更新镜像站点”,如果景象站点没有更新那么必须将该镜像站点单独同步。
注意一般应该“选项窗口”-〉“FTP客户端”-〉“计划”中的“最大连接个数”和“最大线程个数”一般不要改动保持为“1”。
如果同步时某个站点出错同步没有完全完成只需按“计划”窗口中的 按钮单独执行某个站点的传送即可。
再介绍一下网站镜像同步中必要的功能,定时同步,这样你就只要做好母站的更新,其他的让网络传神帮你完成
点击设置
进入网络传神的选项设置窗口,选中FTP客户端中的定时同步
定时下载:在指定的时段内下载文件。
定时上传:在指定的时段内用网站同步的方法进行上传。
开始时间:如果要使用定时方式必须设置此项,在设置的时间中会自动开始所有设置为计划的站点。
停止时间:如果设置此项则当系统时间大于停止时间时自动停止所有设置为计划的站点。
注意:定时上传种没有“停止时间”选项,网站同步完成后会自动停止,同时网站同步同一时间只能运行一次。
网络传神还有很多为便于同步镜像设置的功能,大家实际使用中去体会吧!
5. Web Synchronizer 网站同步镜像使用傻瓜指南
Web Synchronizer功能非常强大,不单单是网站同步,还可以进行本地目录同步,本地到远程同步,功能方面远胜过传神,不过,国内好像没有汉化版,对于一些对英文感冒的朋友用起来会不太舒服,希望CCF里的汉化高手能将他中文化!
开始运行程序,老外的软件就是智能,一打开这个软件就会有一个同步向导跳出来!
在这里,你也看出来了吧,这个软件只支持两个目录间的同步.不过,我们可以创建多个项目来解决这个问题!具体我在后面介绍!这里,我们来看看如何建立两个远程目录的同步!
选择第二项,进入下一个选择框
网站同步当然是选择第一项了!再进入下一步,要你选择同步的第一个服务器,建议在这里servers list,先编辑好需要同步的几个FTP
同步方式设置说明
第一项的意思是上传下载所有改变的文件
第二项的意思是不改变文件夹内容,只下载新的文件
点击下一步进行第二个服务器设置,方法和第一个一样!
设置完成后,你还可以修改任务名称!
我觉得这点就是这个软件非常优秀的地方,以任务的方式进行管理.非常方便!
OK,现在我们就可以看到他的主界面了!
还有一点要提,他的计划任务更能也很强大,在这里我就不再多说了!用过才知道他的强大!
有朋友会说,我要进行两个以上的网站同步怎么办
很简单,再多建几个任务就可以了,要镜像多少网站都没有问题!
这个软件的网站同步镜像可以非常灵活,比如可以本地-远程,然后再远程-远程!或者本地-远程1,本地-远程2,远程1-远程2,任何情形下的同步都可以完成!
Ⅱ 如何选择不同的PHP版本
由于各种因素,导致了PHP版本的碎片化。PHP的向下不兼容导致了PHP程序的移植性很差。因此才会有不同版本的PHP要求选择的需求。
护卫神主机系统,为您解决了这个烦恼,同一台服务器上,配备了PHP5.2/PHP5.3/PHP5.4/PHP5.5/PHP5.6 一共5个版本,每个网站均可以自己独立选择所需的PHP版本,与其他网站相互不干扰,完全满足您多版本PHP的需求,且支持主机系统一键切换。
在阿里云镜像中,PHP5.2/5.3/5.4为32位程序,支持Zend解米,PHP5.5/5.6为64位程序,不支持Zend解米,请各位根据实际情况选择。
一般而言,DEDECMS原版支持PHP5.2版,其他CMS程序请根据实际运行环境对应切换即可。
以下简单介绍不同的PHP之间的区别:
PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束
PHP5.2:JSON 支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6: 常量增强,可变函数参数,命名空间增强。希望对你有用,我在后盾人线下面授培训学习刚下课,有不会的可以问我(❁ฺ•㉨ฺ•❁)
Ⅲ 如何 在Docker窗口中部署PHP开发环境
环境部署一直是一个很大的问题,无论是开发环境还是生产环境,但是 Docker
将开发环境和生产环境以轻量级方式打包,提供了一致的环境。极大的提升了开发部署一致性。当然,实际情况并没有这么简单,因为生产环境和开发环境的配置是完全不同的,比如日志等的问题都需要单独配置,但是至少比以前更加简单方便了,这里以
PHP 开发作为例子讲解 Docker 如何布置开发环境。
一般来说,一个 PHP 项目会需要以下工具:
Web 服务器: Nginx/Tengine
Web 程序: PHP-FPM
数据库: MySQL/PostgreSQL
缓存服务: Redis/Memcache
这是最简单的架构方式,在 Docker 发展早期,Docker 被大量的滥用,比如,一个镜像内启动多服务,日志收集依旧是按照 Syslog
或者别的老方式,镜像容量非常庞大,基础镜像就能达到 80M,这和 Docker 当初提出的思想完全南辕北辙了,而 Alpine linux
发行版作为一个轻量级 Linux 环境,就非常适合作为 Docker 基础镜像,Docker 官方也推荐使用 Alpine 而不是 Debian
作为基础镜像,未来大量的现有官方镜像也将会迁移到 Alpine 上。本文所有镜像都将以 Alpine 作为基础镜像。
Nginx/Tengine
这部分笔者已经在另一篇文章 Docker 容器的 Nginx 实践中讲解了 Tengine 的 Docker 实践,并且给出了
Dockerfile,由于比较偏好 Tengine,而且官方已经给出了 Nginx 的 alpine 镜像,所以这里就用
Tengine。笔者已经将镜像上传到官方 DockerHub,可以通过
<code>docker pull chasontang/tengine:2.1.2_f</code>
获取镜像,具体请看 Dockerfile。
PHP-FPM
Docker 官方已经提供了 PHP 的 7.0.7-fpm-alpine 镜像,Dockerfile 如下:
FROM alpine:3.4
# persistent / runtime deps
ENV PHPIZE_DEPS \
autoconf \
file \
g++ \
gcc \
libc-dev \
make \
pkgconf \
re2c
RUN apk add --no-cache --virtual .persistent-deps \
ca-certificates \
curl
# ensure www-data user exists
RUN set -x \
&& addgroup -g 82 -S www-data \
&& adser -u 82 -D -S -G www-data www-data
# 82 is the standard uid/gid for "www-data" in Alpine
# http://git.alpinelinux.org/cgit/aports/tree/main/apache2/apache2.pre-install?h=v3.3.2
# http://git.alpinelinux.org/cgit/aports/tree/main/lighttpd/lighttpd.pre-install?h=v3.3.2
# http://git.alpinelinux.org/cgit/aports/tree/main/nginx-initscripts/nginx-initscripts.pre-install?h=v3.3.2
ENV PHP_INI_DIR /usr/local/etc/php
RUN mkdir -p $PHP_INI_DIR/conf.d
##<autogenerated>##
ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data
##</autogenerated>##
ENV GPG_KEYS
ENV PHP_VERSION 7.0.7
ENV PHP_FILENAME php-7.0.7.tar.xz
ENV PHP_SHA256
RUN set -xe \
&& apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
curl-dev \
gnupg \
libedit-dev \
libxml2-dev \
openssl-dev \
sqlite-dev \
&& curl -fSL "http://php.net/get/$PHP_FILENAME/from/this/mirror" -o "$PHP_FILENAME" \
&& echo "$PHP_SHA256 *$PHP_FILENAME" | sha256sum -c - \
&& curl -fSL "http://php.net/get/$PHP_FILENAME.asc/from/this/mirror" -o "$PHP_FILENAME.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& for key in $GPG_KEYS; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done \
&& gpg --batch --verify "$PHP_FILENAME.asc" "$PHP_FILENAME" \
&& rm -r "$GNUPGHOME" "$PHP_FILENAME.asc" \
&& mkdir -p /usr/src \
&& tar -Jxf "$PHP_FILENAME" -C /usr/src \
&& mv "/usr/src/php-$PHP_VERSION" /usr/src/php \
&& rm "$PHP_FILENAME" \
&& cd /usr/src/php \
&& ./configure \
--with-config-file-path="$PHP_INI_DIR" \
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \
$PHP_EXTRA_CONFIGURE_ARGS \
--disable-cgi \
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself)
--enable-mysqlnd \
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195)
--enable-mbstring \
--with-curl \
--with-libedit \
--with-openssl \
--with-zlib \
&& make -j"$(getconf _NPROCESSORS_ONLN)" \
&& make install \
&& { find /usr/local/bin /usr/local/sbin -type f -perm +0111 -exec strip --strip-all '{}' + || true; } \
&& make clean \
&& runDeps="$( \
scanelf --needed --nobanner --recursive /usr/local \
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
| sort -u \
| xargs -r apk info --installed \
| sort -u \
)" \
&& apk add --no-cache --virtual .php-rundeps $runDeps \
&& apk del .build-deps
COPY docker-php-ext-* /usr/local/bin/
##<autogenerated>##
WORKDIR /var/www/html
RUN set -ex \
&& cd /usr/local/etc \
&& if [ -d php-fpm.d ]; then \
# for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf"
sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \
cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \
else \
# PHP 5.x don't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency
mkdir php-fpm.d; \
cp php-fpm.conf.default php-fpm.d/www.conf; \
{ \
echo '[global]'; \
echo 'include=etc/php-fpm.d/*.conf'; \
} | tee php-fpm.conf; \
fi \
&& { \
echo '[global]'; \
echo 'error_log = /proc/self/fd/2'; \
echo; \
echo '[www]'; \
echo '; if we send this to /proc/self/fd/1, it never appears'; \
echo 'access.log = /proc/self/fd/2'; \
echo; \
echo 'clear_env = no'; \
echo; \
echo '; Ensure worker stdout and stderr are sent to the main error log.'; \
echo 'catch_workers_output = yes'; \
} | tee php-fpm.d/docker.conf \
&& { \
echo '[global]'; \
echo 'daemonize = no'; \
echo; \
echo '[www]'; \
echo 'listen = [::]:9000'; \
} | tee php-fpm.d/zz-docker.conf
EXPOSE 9000
CMD ["php-fpm"]
##</autogenerated>##
Ⅳ Docker PHP 入门实践(三)
在本教程的其余部分,我们将基于 ThinkPHP 框架完成一个天气查询的应用。使用 天气查询-API文档-开发指南-Web服务 API | 高德地图API 的接口来实现我们的功能。把查询数据缓存到 MySql 中,这样就不用每次频繁的请求第三方的接口了(有请求次数限制)
选择高德开放平台-天气查询 API 主要是因为它是免费的。当然你也可以使用其他的第三方天气查询接口,看个人喜好。
该应用是一个非常简单的 REST API 应用,主要实现两个接口。
在我们进行应用编码之前,首先使用 Docker 安装并运行 ThinkPHP
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售 。
这就是为什么我选择它作为本教程的教学框架。我不想让你因为一个框架而放弃,但我也不想从头开始建立所有的东西,因为该教程的重点是Docker,而不是我们的PHP应用。
用Docker 创建 ThinkPHP 应用 实际上比用本地配置PHP环境所需的操作少。并且为我们还需要使用 Composer,多亏了Docker,我们甚至不需要在主机上安装它。
首先打开你的终端,创建一个项目目录。
并进入到该目录中
现在使用[官方Composer Docker镜像](https://hub.docker.com/_/composer/)安装 ThinkPHP 。
如果你查看weather-app/目录,你会看到 ThinkPHP 6 的项目目录,如下所示:
我们的 docker 运行命令与第二章中的命令相似,但我们使用了不同的镜像。我们没有使用运行hello.php 脚本的 PHP 镜像,而是使用了一个 Composer 镜像。让我们来看看有什么变化。
项目创建完成后,我们需要添加几个路由 URL 和 Controller 文件 。让我们打开 weather-app 目录下的 app/controller , 然后新建 Weather.php 文件,内容如下:
然后打开 weather-app 目录下的 app/route , 在 app.php 文件中追加如下内容:
现在我们可以在 Docker 容器中运行我们的应用程序,只是为了验证我们的程序是否运行正常,因为我们只添加了两个路由 URL。打开命令行,运行。
现在,在浏览器中打开 http://localhost:38000/weather-app/public/index.php/weather/1,你应该看到一个空页面,上面有以下文字:
那么恭喜你,你刚刚已经成功地在 Docker 中运行了你的第一个 ThinkPHP 应用程序。
这次我们使用的docker run命令与我们用来运行 hello.php 脚本 和composer create-project ...的两个命令不同。原因是这次我们想获得包含 Apache 的最新版本的PHP,这样我们就可以为我们的 Web 应用提供服务。让我们更详细地了解新增的命令部分。
你可以通过向终端发送一个 "中断 "信号来停止和退出终端。在 windows 上,这可以通过按 Ctrl 和按c来实现。
运行你的新网络应用程序的另一个选择是在 "Detached"模式中运行容器。这意味着你在终端将不会看到来自你的容器的输出。这可以通过在我们之前的命令中添加-d标志来实现。
在分离模式下启动容器后,你的终端将显示新容器的完整ID--类似于a70d25c2a7cedae673f8ab...如果你想停止这个容器,你可以使用docker stop命令,用容器的ID告诉Docker。比如说
因为输入整个ID是很麻烦的,如果你愿意,Docker允许你只输入前三个或更多的字符。
最后,我建议为你的容器命名。我们在本书后面的许多例子中都会这样做,因为用名字来记住一个容器比用随机分配的ID要容易得多,再加上ID是随机的,所以每次你运行一个新版本的容器时,它都会得到一个新的ID。只要不是已经有一个同名的容器,名字就可以多次发出来。为了给我们的新应用容器命名,我们可以用传入的--name标志重新创建它。
在使用docker run命令时,还有许多可用的选项,所以你可能想更详细地阅读文档。在我们开发其余的应用程序时,我们会涉及其中的一些选项。
现在我们要引入高德的天气 SDK ,在使用该 SDK 之前你需要阅读高德开放平台-天气查询的技术文档,再添加 SDK 之前我们首先要确保所有现有的容器都停止了。
这个命令将列出所有正在运行的容器。你也可以通过添加-a标志来查看停止的容器。
如果有任何容器正在运行,那么在我们继续前进之前,使用docker stop 来停止它们。
该命令将在你的项目中装新的软件包。在这个过程中,你应该在终端看到一些类似这样的输出。
现在 SDK 已经安装完毕,可以使用了。
我们将使用刚刚添加的高德天气 SDK 来完善我们的业务逻辑,打开 controller 目录下的 Weather.php 添加以下内容:
我们做了一些更新--主要是对引入天气 API 初始化天气类
我们的应用程序已经初步完成了向API传递一个真实的位置ID并返回一些数据。首先,使用这个高德位置查询找到一个位置ID。我使用的是上海的ID进行测试。310000,当然你直接传 上海 也是可以的。ok,让我们再次运行Docker容器。
并在你的浏览器中访问正在运行的应用程序,地址是http://localhost:38000/weather-app/public/index.php/weather/310000。你应该可以看到一个JSON数据,看起来像这样。
你的 Docker 化的 PHP 应用程序现在正从外部数据源返回真实数据,并在Apache中提供服务,但你可能会注意到,它的速度并不快(我的页面加载时间为1.92秒!)。
高德天气 API 是一个免费的服务,其他国家可能无法访问。为了解决这个问题,我们将把查询的数据保存在我们自己的 MySQL 数据库中,可以再下次访问的时候可以快速地响应。这将极大地提高性能,下个章节我们将学习如何用 Docker 将 MySql 与 PHP 应用程序相结合。