远在没有云之前,每个站长都用过各种虚拟主机租用主机,然后有功能强大的一条龙控制面板。那时候的域名还不需要备案,虽然经常各种不稳定,但折腾起来也不需要什么门槛,倒也别有一番乐趣。
后面用了一段时间的新浪云,免费还有技术级别认证,但慢慢新浪不作死就会死的基因慢慢表露出来,功能跟不上,售后跟不上,条款各种坑。还用过京东云、百度云,也很坑。最后选择了阿里云。
阿里云如今的成就也不是一蹴而就,像早期的 ACE 挺好用,但后来也去掉了,中间依然少不了一番折腾,但总的来说,性能和速度兼备,售后及时给力,价格也算合理。但像后面的主打 ECS,使用还是有一定门槛的,从创建到完全使用起来,百度个十次八次很正常的。
以 WordPress 的环境为例,默认安装了 Apache、MySQL、FTP,用户目录下的 account.log
(default.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'"