利用git管理代码版本, 并且和服务器同步
上一次部署服务器好像已经是很久以前的事情了, 最近一段时间线上的内部工具都没出什么大问题, 最近提交都用svn, 都快忘了git 怎么用了。
这次好好记录下来, 免得以后忘了又导出查找。
第一步, 初始化git 仓库将代码纳入版本管理
1.注意在本地 .gitignore 防止不需要的文件被上传到服务器
/log/*
!/log/.keep
/tmp
/public/tmp
/config/database.yml
2.前往服务器
然后切换到阿里云上面 ssh xxx@xxx.xxx.xxx.xxx, 切换到待部署目录, mkdir a_new_app_name, 进入新建目录, git init 。
让仓库接受代码提交
git config receive.denyCurrentBranch ignore
[可选] git config core.worktree ~/www
[可选] git config --bool receive.denyNonFastForwards false #禁止强制推送
现在git在远程服务器上的地址为: ssh://xxx@xxx.xxx.xxx.xxx/应用部署目录在服务器上的路径/.git
3.回到本地
将远程服务器添加到本地仓库的远程仓库列表,使用名字来区分不同的服务器,如测试服务器可以叫做testing
git remote add testing ssh://deployuser@ipaddress/var/www/html/deploy/.git
将本地代码提交到测试服务器上面
git push testing master
切到服务器代码部署目录 git checkout -f
第二步, 上传数据, 把数据部署到数据库
从数据库导出数据:
1.导出整个数据库: mysqldump -u用户名 -p密码 数据库名 > 导出的文件名
2.导出一个表,包括表结构和数据: mysqldump -u用户名 -p 密码 数据库名 表名> 导出的文件名
3.导出一个数据库结构 mysqldump -u用户名 -p密码 -d 数据库名 > xxx.sql
4.导出一个表,只有表结构 mysqldump -u用户名 -p 密码 -d数据库名 表名> 导出的文件名
scp 指令把sql文件传到服务器上
然后在服务器上把数据导到RDS, 指令: mysql -h xxx -u root -p dbname < filename.sql
(导数据导的好累~ 虽然rails 的数据库迁移指令很方便, 不过遇到要迁移数据的情况就不大好用了, 有gem可以解决问题,
但是遇到数据表分布比较复杂的情况就比较坑爹了。)
第三步, 配置线上环境
走到这里就是安装各种依赖包, 命令行工具了
安装依赖工具的一些报错:
prince 工具 用于html 转pdf 功能很好很强大
error while loading shared libraries: libgif.so.4: cannot open shared object file: No such file or directory
sudo yum install giflib (解决问题TAT内牛满面)
prince说字体找不到, 查到原因是需要巨硬的字体core, 第二条指令执行了挺久的, 似乎是文件一直找不到, 估计各种路径找吧,
快绝望的时候他居然安装好了, 好了, 了....
yum install curl cabextract xorg-x11-font-utils fontconfig
rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm
剩下的基本到官网下载了, 上传到服务器就OK, 没遇到太坑的依赖。
参考资料:
使用git做服务器端代码的部署 https://www.douban.com/note/407034249/