服务端开发的tips
ripro破解主题无后门
https://www.902d.com/6743.html
注意⚠️什么是后门!
/www/wwwroot/www.alfredzhang.tk/wp-content/themes/ripro7.2/inc/class/core.class.7.3.php 这个文件存在后门使用http(s)://你的域名/?https://www.alfredzhang.tk/?backdoor=go
访问,自动创建用户名为backdoor密码为123456的管理员账户
七牛云CDN开启打开防盗链后的特征
如果全部生效后,复制的”内容管理“文件外链时就是:http://www.bbb.com/xxx.jpg,放到浏览器会显示403错误(浏览器不能访问目的达到了),而输入:http://www.aaa.com/share?url=http://www.bbb.com/xxx.jpg 可以访问(白名单有的域名都可以访问,http://www.ccc.com/share?url=http://www.bbb.com/xxx.jpg 是访问不到的,还是403,因为www.ccc.com没在白名单里面)。当加速域名配好后,图片的下载速度也会增加一些。
但是防止疯狂刷新要怎么解决?如果用http://www.aaa.com/share?url=http://www.bbb.com/xxx.jpg 还是可以访问到图片,还是可以刷新,关于这个问题的解决方法,我采取在代码中去解决:
1.给每张图片的观看次数做限制
2.给图片的url加密:http://www.aaa.com/share?url=时间戳+base64加密,避免在浏览器中看到图片名称
pip 生成和安装requirements.txt
生成文件
1 | pip3 freeze > requirements.txt |
从requirements.txt安装依赖库
1 | pip3 install -r requirements.txt |
当提示权限不够时,前面加上sudo
安装完nodejs输入:node -v 报错->Segmentation fault
原因是软链的位置错误 ,正确的软链位置:
1 | ln -s /root/node-vxx.xx.x-linux-x64/bin/node /usr/local/bin/node |
node环境部署
安装nodejs
1.首先下载NodeJS的版本
1 | wget https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-x64.tar.gz |
node的历史版本可以在这里查看 https://nodejs.org/dist/
2.下载后解压
1 | tar -zxvf node-v12.14.0-linux-x64.tar.gz |
3.解压成功后就是二进制文件,只需要为node和npm建立两个软连接,使之可以全局运行
1 | ln -s /root/node-v12.14.0-linux-x64/bin/node /usr/local/bin/node |
其中/root/node-v12.14.0-linux-x64/bin/ 是你下载node的实际路径
4.检查是否安装成功
1 | node -v |
5.安装yarn
1 | npm install -g yarn |
安装mongodb(支持CentOS8)
1.首先下载mongodb的版本
1 | wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.0.tgz |
2.下载后解压
1 | tar -zxvf mongodb-linux-x86_64-rhel80-4.4.0.tgz |
3.使之可以全局运行
1 | cp /root/mongodb-linux-x86_64-rhel80-4.4.0/bin/* /usr/local/bin/ #centos8需要 |
4.启动mongodb ⚠️每次vps重启后都要再启动一次mongodb
1 | mkdir -p /var/lib/mongo |
安装和使用pm2(进程管理器)
1 | yarn global add pm2 |
部署后台接口项目node-elm
进入本机项目node-elm路径,执行本机到服务器环境的部署(上线)
1 | pm2 deploy ecosystem.config.js production setup |
验证nodejs后台接口
宝塔面板配置一个新的域名网站配置 / {:8001端口}
1 | location ^~ /interface/ { |
修改完记得重启nginx,如下命令验证结果。⚠️每次vps重启后都要再启动一次npm run dev
1 | cd /root/mygit/node-elm/source 上传文件后执行<npm install> <npm run dev> |
部署后台管理项目xk-vue-manage
进入本机项目xk-vue-manage路径,执行命令,去生成manage目录下的静态页面。
1 | npm install |
将本地编译出来的manage目录上传到gnode.alfredzhang.tk网站根目录下
修改nginx配置文件
1 | root /www/wwwroot/gnode.alfredzhang.tk/manage #网站根目录增加manage文件夹 |
上线验证
1 | https://gnode.alfredzhang.tk/ #验证地址(DNS解析服务器IP) |
svn最简便总结:
1 | 1.mkdir svn |
例子路径:/usr/local/svndata/repo/design
磁盘清理:https://www.cnblogs.com/iSun520/p/11189635.html
建立svn账号:
vim /usr/local/svndata/repo/design/conf/passwd
vim /usr/local/svndata/repo/design/conf/authz
mysql必须使用flush privileges的两种情况
FLUSH PRIVILEGES
1、改密码。
2、授权超用户。
flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
MySQL用户数据和权限有修改后,希望在”不重启MySQL服务”的情况下直接生效,那么就需要执行这个命令。
通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。
mysql 修改密码后,注意flush privileges。
php基础
php端口
1 | 1,8417端口:test.phjrxy.cn:8417 |
php页面样式
无论哪个端口结果要做成接口的形式:
1 | controller: |
无论哪个端口结果要做成网页的形式:
1 | controller: |
php配置文件里的变量获取
1 | $url = \Yaf_Registry::get('config')->apple->verify->url; |
php-token使用
token不需要存储的,你可以使用AES的可逆向加/解密算法对数据进行加密,如aes.ecode(userId+time+info+key(密钥)),生成token后把这个串传回给客户端,不需要保存,等下次他传回给你的时候你只需要aes.decode(token)解密一下就可以获得这里面的用户信息与当前登陆的用户信息对比一下就行了
aes的方法:https://www.cnblogs.com/mark-wu/p/6878947.html
php 登录结构
1,所有类型登录接口,根据所在接口拿的用户信息,在user表查询phone,和wx_unionId,
如果有:就记录UserLearnLog表,更新UserDetail表用户信息,获取用户的标签。
如果无:插入user表并完成有的其他步骤。
2,所有类型绑定接口,根据所在接口拿的用户信息,在user表查询phone,和wx_unionId,
如果有:有1-n条记录各种类型数据的合并。记录绑定日志。Mission表完成绑定任务
如果无:将信息插入user表绑定,记录绑定日志。
绑定日志:/home/webserver/logs/php_logs/wxbind.log
php-js分享结构
//定义了方法从weixin_share接口拿到,签名,后台配置文案再
1 | <script type="text/javascript" src="js/wxutils/wxshare-v2.js?v=3"> |
问题:一个微信公众号页面循环分享不了。
答案:写死了URL要动态获取当前的网络地址,更新签名才正确。
encodeURIComponent(location.href.split(‘#’).toString()); 这个动态获取url可以重新正确签名所以就可以循环分享
php微信公众号开发
允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表)
微信公众平台开发——微信授权登录(OAuth2.0)
微信支付证书续期
证书路径:/Users/Alfred/Documents/Soursetree/prjy_api/library/weixin/cert
查看网址:https://myssl.com/cert_decode.html
帮助中心:https://kf.qq.com/faq/180824JvUZ3i180824YvMNJj.html
linux基础
一些常用linux指令
查看config.josn文件的路径:find / -name config.json
看linux操作系统版本:lsb_release -a
查看centos系统版本:cat /etc/redhat-release
ls | more 分页查看
ls -l 查看软链
查看端口占用1:netstat -anlp | grep 80
查看端口占用2:ss -lntpd
mac查看端口号占用: lsof -i
ps -aux | grep (svn nginx apache php…) 查看进程
env 查看环境变量
zip -r prjy_api.zip prjy_api 将prjy_api文件夹压缩成prjy_api.zip
unzip prjy_api.zip 在当前目录下直接解压prjy_api.zip
内存使用 :用top命令
删除路径:rm -rf /usr/local/svndata/repo/design
查看磁盘:df
查看目录大小:直接进入要查看的目录里输入:du -sh *
1.通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件…
2.同样,通过命令du -h –max-depth=0 *,可以只显示直接子目录文件…
3.如果只想查看指定目录的总大小,可以使用du -sh 目录名称
linux文件夹权限
1 | chown -R webserver:webserver /home/webserver/prjy/prjy_api/application/views/ |
linux定时任务
1 | crontab -l //查看 |
例如:分钟 小时 日 月 周 &&指执行第一句成功后执行, >/dev/null 2>&1表示输出到空2指错误,&1指/dev/null
1 | * * * * * cd /home/webserver/prjy/prjy_api/script/crontab && /usr/bin/php check_timeout_group_and_refund.php >/dev/null 2>&1 |
一个经典项目的部署
ssh 用户名@我的服务器的ip -p 22(端口22)
用户名@我的服务器的ip’s password: (这里需要手动输入密码后回车)
ssh-keygen -t rsa
一路回车在当前用户的根目录下的.ssh目录生成id_rsa.pub公钥
将本地生成的公钥拷贝到远程服务器的下并改名为authorized_keys
文件同步
1 | #!/bin/sh |
1 从仓库里同步先同步View的home目录一个个来,后续逐步实现第二步。
2 同步测试服- webserver@10.1.0.6:的/prjy/prjy_api,本机不写ip就不用输密码
同步fc1- webserver@119.29.89.166:的/publish/prjy_api(暂时只同步测试服)
3 省去了手动上传fc1的尴尬,最后上线还是登录fc1 运行publish.sh
服务器上git仓
nginx配置结构:
1 | /usr/local/nginx/conf -> lnTo -> |
任务写gitcode.sh脚本先上mmgitlab模仿正式服。
先上publish后用publish.sh脚本同步去prjy。
第一次建立git仓库:
1 | git clone http://203.195.173.251/mmjrxy/prjy_api.git |
同步服务器的位置
1 | rsync -vaz $src_file webserver@(服务器IP地址):$dest_file |
万无一失的同步上线application
tester|fc1
1,拉FC1的public代码到本地
2,git同步到本地gitlab同步目录的application目录。检查问题,并提交git。
3,git同步到tester的gitlab同步目录。
4,同步tester:gitlab->tester:prjy tester执行./gitcode.sh ,(检查脚本application目录,一定要tester能正常工作。如果失败把备份的测试环境代码覆盖去tester的application目录git回滚)
5,同步tester:prjy->fc1:publish,tester执行./sendpublish.sh
6,fc1执行publish.sh上线正式环境。
普通上线
1,提交git
2,tester: cd mmgitlab/prjy_api; git pull; git show –stat
3,tester: cd ~; ./gitcode.sh
4,tester: cd ~; ./sendpublish.sh
5,fc1: publish.sh
正式服负载均衡路径
接口:https://ssl.phjrxy.cn/
111.230.217.176:3344->
119.29.89.166:8417,119.29.82.124:8417
网页:https://phjrxy.cn/
111.230.217.176:80->
119.29.89.166:1814,119.29.82.124:1814
重新搭建php学院后台在ranknerd的宝塔里
预检查
查看yaf版本: php –ri yaf
查看yaf配置:php -i | grep yaf
Memcached查看版本:telnet localhost 11211回车后打 stats
Memcached查看配置:/etc/sysconfig/memcached 配置port:11211->11511
1,先建站/home/webserver/prjy/prjy_api/public(必须删除原始所有文件!!!)
上传备份代码和数据库。
2,宝塔php安装yaf,Memcached,插件
3,修改memcached 配置port:11211->11511
4,添加数据库fc Mysql 配置 port:3306->3316
5,修改php配置文件
1 | error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_STRICT & ~E_WARNING |
6,修改index.php “/conf/application12.ini”(已经git了,重备份就好,留在这里还原记录下)
7,修改application12.ini(已经git了,重备份就好,留在这里还原记录下)
1 | ;域名配置 |
8。web配在原有宝塔的直接修改宝塔配置把web的rewrite抄过来(宝塔里修改)
可选方案1(V)
(接口和网页统一用Https接口必须排前重复的都是一样的接口):统一用443安全
1 | include /home/webserver/prjy/prjy_api/conf/api_nginx_rewrite; |
可选方案2(X)
(还原老架构接口和网页用Http分不同端口8417和80端口):
ln -s /home/webserver/prjy/prjy_api/conf/fc_apis.conf /www/server/panel/vhost/nginx/fc_apis.conf
添加文件/www/server/nginx/logs/prjy_api.log
修改fc_*.conf的所有日志路径
宝塔放行端口8417接口
9,最后上服务器定时任务
crontab -e 恢复备份里的定时任务条目
10,后期关注7牛的链接
以肿瘤化疗助手APP为例,配置微信分享的Universal Links
在open开放平台和在 iOS AppDelegate下设置一致的带Path(例如doctor/)的Universal Links:
https://lt.e-interconnection.com/doctor/
配服务器https://lt.e-interconnection.com/apple-app-site-association:
“/web/share_doctor_client” 为分享网页的路径
“/doctor/*” 这里的doctor就是Universal Links的Path
{
“applinks”: {
“apps”: [
],
"details": [
{
"appID": "9GVA5G7QYT.com.youguihua.chdrug",
"paths": [
"/web/share_doctor_client",
"/doctor/*"
]
}
]
}
}
其他常见Universal Links 的问题参考:
https://developers.weixin.qq.com/community/develop/article/doc/0004c6531d023056147aea99256813