阿里云 ECS 安装 SVN

远在没有之前,每个站长都用过各种虚拟主机租用主机,然后有功能强大的一条龙控制面板。那时候的域名还不需要备案,虽然经常各种不稳定,但折腾起来也不需要什么门槛,倒也别有一番乐趣。

后面用了一段时间的新浪云,免费还有技术级别认证,但慢慢新浪不作死就会死的基因慢慢表露出来,功能跟不上,售后跟不上,条款各种坑。还用过京东云、百度云,也很坑。最后选择了阿里云。

阿里云如今的成就也不是一蹴而就,像早期的 ACE 挺好用,但后来也去掉了,中间依然少不了一番折腾,但总的来说,性能和速度兼备,售后及时给力,价格也算合理。但像后面的主打 ECS,使用还是有一定门槛的,从创建到完全使用起来,百度个十次八次很正常的。

WordPress 的环境为例,默认安装了 ApacheMySQLFTP,用户目录下的 account.logdefault.pass) 可以查看相关服务的目录和相关用户密码等,建议修改密码备份好然后删除该文件。当然,最重要的程序目录:/yjdata/www/www/。

在使用过程中,发现 FTP 还是太机械,所以选择自己架设 SVN,比较麻烦,记录一下。

安装 SVN 服务

useradd svn_user
passwd svn_user
yum -y install subversion
svnadmin create /yjdata/www/svn

修改默认配置

/yjdata/www/svn/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /yjdata/www/svn
/yjdata/www/svn/conf/authz
[/]
svn_user = rw
/yjdata/www/svn/conf/passwd
[users]
svn_user = svn_password

运行 SVN 并导入

cd /yjdata/www/
mv www www_old
mkdir www
cd www
svnserve -d -r /yjdata/www/svn
svn checkout svn://localhost/ /yjdata/www/www/
svn import /yjdata/www/www_old/ svn://localhost/ -m "first version"
svn commit

注意在 checkout 之前要保持备份并清空工作目录,checkout 之后再从备份目录 import 进仓库,否则里面的文件不算为版本控制之下。

SVN 和网站目录同步

到 hooks 目录下用模板创建一个钩子,并加上可执行权限。每次 commit 完之后,仓库会自动同步到网站目录。

/yjdata/www/svn/hooks/post-commit
cd /yjdata/www/www
svn cleanup
svn update /yjdata/www/www --username svn_user --password svn_password --no-auth-cache
chown www.ftp -R /yjdata/www/www/

如果网站目录在线管理更新了文件,这需要手工执行下列代码将新增内容 add 一下,将删除内容 remove 一下。

cd /yjdata/www/www
svn st | awk '{if ($1 == "?") {print $2}}' | xargs svn add
svn st | awk '{if ($1 == "!") {print $2}}' | xargs svn remove
svn ci -m 'update online'

注意:经测试,这步容易出问题,最好还是手工指定更新的目录,猜测可能跟上面的钩子有关。

其他命令

解决冲突并以仓库为准:svn resolve --accept=base wp-contents/plugins/abc/
解决冲突并以工作目录为准:svn resolve --accept=working wp-contents/plugins/abc/
查看工作目录的改动:svn status /yjdata/www/www/
删除工作目录的 SVN:find . -type d -name ".svn"|xargs rm -rf
运行 SVN 服务:svnserve -d -r /yjdata/www/svn
停止 SVN 服务:killall svnserve

出错解决

svn: E155010: Pristine text 'xxxxxx' not present
sqlite3 .svn/wc.db "UPDATE nodes set presence='not-present' WHERE checksum like '%xxxxxx'"
——将本页面分享到——