分类目录归档:最佳实践

navicat 16 premium for mac破解

破解原理

删除试用的本地注册信息,将试用期还原到第 0 天。

因为系统版本和设置不同,下面提供了三个脚本,每个都尝试运行一遍,找到适合自己系统的那个脚本即可。

注意要使用 sudo 执行。

本文将持续更新,将最新的脚本更新到这里,保持激活方案始终有效。

如果点击链接无法下载,复制链接在新窗口打开即可。

reset_navicat.sh
reset_navicat_new.sh
reset_navicat_52pojie.sh

expect——实现远程服务的自动部署

自动化部署的场景

比如我在本地和服务端都使用 git 来管理代码,当本地代码修改过后,想将改动升级到服务端。这时,我应该先将本地的代码 commit、合并到发布分支、push,然后再 ssh 登录到服务器,在服务器上执行git pull,将代码拉下来。这个过程看似简单,但是如果每天需要执行多次的话,就非常麻烦了。

简单的实现一个 sh 脚本,比如下面

ssh -p 121 root@x.x.x.x
cd /www/wwwroot/xx.com
git pull

执行此脚本,会发现执行到第一行之后,终端会阻塞,因为 ssh 命令是一个阻塞命令,后续的命令将无法执行。

expect 可以实现:开启一个子进程,然后监控这个子进程的输出,按照输出的内容来决定下一步执行的命令。在上面的例子中,就是开启一个子的 ssh 登录的进程,然后监控这个子进程的输出,这样就可以根据输出来决定下面执行的命令啦。

expect 的工作逻辑

先看一个简单的 expect 脚本。

echo '这是一个 shell 脚本'
/usr/bin/expect << eof
set timeout -1
spawn ssh -p 121 root@x.x.x.x
expect "root@*"
send "cd /www/wwwroot/xx/ \r"
expect "root@*"
send "mysqldump -uroot -h localhost -ppassword  dbname > back.sql \r"
expect "root@*"
send "zip db.zip back.sql \r"
expect "root@*"
send "exit \r"
eof
echo 'shell 脚本结束'
  1. expect是一个开发语言,通过/usr/bin/expect进入expect的执行环境。/usr/bin/expect <<eof eof之间是 expect 脚本,而不是shell脚本。
  2. mac预装了expect,这里/usr/bin/expect 是 expect 的安装目录
  3. spawn 指令的含义为开启一个进程,并将这个子进程的标准输入、输出和错误输出重定向到当前 Expect 环境中,从而实现对子进程的监控和控制。这里 spawn 执行的是 ssh 命令,他会将 ssh 进程的 io 结果输出给 expect,所以 expect 才可以实现按照期望输出值来执行命令的能力。
  4. expect 后是期望内容的表达式
  5. send 是发送的命令

通过上面 几点估计你就可以很明白 expect 的工作逻辑了。上面的脚本实现了 ssh 登录一个服务器,然后导出一个数据库并将 导出的 sql 文件压缩。

注意事项

  1. 使用大括号的语法发送的命令将异步执行,不使用大括号发送的命令将同步执行。等待同步执行结果后才执行expect匹配。如:

    expect "root@*"  {send "cd /www/dist/web/ \r"}

    此命令将异步执行,如:

    expect "root@*"  
    send "cd /www/dist/web/ \r"
    expect "root@*"  

    此命令将同步执行,直到cd命令的结果返回才执行下一expect命令。

  2. 使用-d参数可以用调试模式执行命令,这在调试的时候非常有用。如:
    /usr/bin/expect-d<<eof

  3. send执行的命令有超时限制,如果想设定为无限等待阻塞命令,可以使用timeout选项。如:

    echo '🗂 dump 数据 并 zip '
    /usr/bin/expect << eof
    set timeout -1
    spawn ssh -p 1222 root@x.x.x.x
    send "cd /www/wwwroot/xxx.com\r"
    expect "root@*"
    send "zip db.zip db.sql \r"
    expect "root@*"
    send "xxxxx"
    eof
    echo done!
  4. expect是一种编程语言,expect和send是此语言中两个独立的命令。一般来讲一行expect,一行send。

one more thing

服务的自动化部署是一个常见的需求,尤其是当服务较多时。比如一个服务需要部署到多台服务器(负载均衡或者私有化部署)。这时手动部署就成了灾难。麻烦且不稳定,一个不留神就会导致不可预料的结果。此时有两种解决方案。

  • 自己实现一套自动化部署的脚本,实现本地打包->上传到服务器->自动解压等部署操作的自动化;
  • 使用专业的工具比如jenkins;

前者成本较低,但是功能较弱,适合小型项目。后者功能强大,但学习和部署成本较高,适合大型项目(当然如果有jenkens的部署经验,小项目也同样适用)。

mac下最好用的ssh客户端:termius

termius优势

  1. 登录账号可以记录所有配置,不用每台电脑上都重新配置一遍。
  2. 身份复用。创建一个身份(用户名密码或者密钥)可以复用这个身份登录不同主机。比如我们可以在不同主机上配置好自己电脑的密钥,然后在termius中用这个密钥创建一个身份,那么就可以用这个身份登录所有主机了,不用每个主机都重新配置一遍登录信息,非常方便。
  3. 颜值高,配色非常和谐,而且设置非常方便。
    高颜值的 ssh 客户端
  4. 免费,免费版的功能平时使用已经非常够用。
  5. sftp 功能,本地和服务器之间同步文件非常方便。
     集成了sftp的 ssh 客户端

office for mac快速安装和激活

网上的方案

  1. 收费,多数 mac 下载网站都是需要会员收费的。
  2. 百度网盘(或者其他网盘),下载限速。

本方案

  1. 来自上海外国语大学,飞速下载。
  2. 简单高效,只需下面三部。

下载软件

https://cloud.shisu.edu.cn/v/link/view/ac71be7b531a420f85db45bfda62f73d

卸载已有版本的软件

执行下方命令即可,如果命令无法执行,可以先下载到本地(https://raw.githubusercontent.com/jimye/OfficeUninstall/master/office_uninstaller.sh) ,保存到 sh 文件中执行即可。

sudo sh -c curl -s https://raw.githubusercontent.com/jimye/OfficeUninstall/master/office_uninstaller.sh | sh

安装激活器

OfficeMacStandard2022MultiLanguageMacX22-74226.iso

安装Office

Microsoft_365_and_Office_16.76.23081101_BusinessPro_Installer

(php5.6)phpstorm xdebug远程调试docker中的项目

注意:本文基于php5.6,不同版本的php对应不同版本的xdebug。对应的xdebug配置也不同。

安装xdebug

参考另一篇文章,如何在linux上安装xdebug插件。

修改php.ini文件

开启xdebug扩展,并且配置xdebug配置信息。
注意:不同版本的xdebug配置不同
host.docker.internal 是固定写法

[xdebug]
zend_extension=/www/server/php/56/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable = On  
xdebug.remote_handler = dbgp     
xdebug.remote_host= host.docker.internal
xdebug.remote_autostart=1
xdebug.remote_port = 9001
xdebug.idekey = PHPSTORM

按照下图所示步骤即可开启断点调试

配置xdebug的端口为9001
配置DBGp代理监听的端口
配置远程调试和本地文件之间的映射关系
配置服务器信息
点击调试按钮即可开启调试

(php8.2)phpstorm xdebug远程调试docker中的项目

注意:本文基于php8.2,不同版本的php对应不同版本的xdebug。对应的xdebug配置也不同。php5.6版本的配置在另一篇文章中。

安装xdebug

请参考另一篇文章,如何在linux上安装xdebug插件。

修改php.ini文件

开启xdebug扩展,并且配置xdebug配置信息。

zend_extension = xdebug(注意:不是extension = xdebug)

[xdebug] 
zend_extension="/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/xdebug.so"
xdebug.log=xdebug.log
xdebug.mode=debug
xdebug.start_with_request = yes
xdebug.remote_handler="dbgp"
xdebug.client_port = 9001
; 此配置值就是下面的固定字符串,不用替换为某个ip
xdebug.client_host= "host.docker.internal"
xdebug.idekey="PHPSTORM"
xdebug.discover_client_host=true

配置phpstorm

如下图端口配置为9001,请和php.ini中的端口保持一致,调试时,php中的xdebug插件会将调试信息通过此端口请求到phpstorm(xdebug为客户端,phpstorm为服务端,组成一个c/s结构,通讯协议为DBGp)

配置xdebug端口

配置phpstorm的端口,需要和php.ini中的保持一致,phpstorm作为服务端将监听这个端口,接收来自xdebug的调试信息。
配置DBGp proxy

配置服务器路径和本机项目路径的map(映射),这样phpstorm才能将接收到的调试信息应用到本地的对应文件的代码中。
配置文件路径映射

配置调试项目为php remote debug。
配置远程调试

点击调试按钮,phpstorm将开始监听调试信息,命中断点。
点击调试按钮

linux下php8.2安装xdebug

注意

  1. Xdebug是第三方开发商开发的PHP扩展,并不在php源代码中,要到官网下载源码编译安装,不要试图下载php源代码然后像编译其他官方扩展一样编译安装xdebug。

  2. 在linux上安装xdebug非常简单,只需要将phpinfo信息提交到xdebug官网,分析后按照官网的安装不好走一步一步严格执行即可(请注意,严格的一步一步执行,不要跳过或者自己手动抄写命令,我就是因为安装完后大意,将php.ini文件中的zend_extension=xdebug写成了extension=xdebug导致怎么也无法命中调试断点,后来找了很长时间才定位到问题)只要是严格按照步骤走,整个安装过程会非常简单、非常快。

具体安装方法

  1. 执行下方命令,复制输入内容,粘贴到 https://xdebug.org/wizard 中,点击分析按钮,然后严格按照指示的步骤来执行即可。

    php -r 'phpinfo();' > phpinfo.txt
  2. 执行./configure命令时,可能会出现找不到php-config的错误,此文件一般都在php的安装目录下(php-config不是一个第三方的linux软件包,所以请不要试图使用yum install php-config的方法来解决此问题)。执行命令的时候指定php-config的路径即可,如下:

    ./configure  --with-php-config=/www/server/php/82/bin/php-config
  3. 安装完之后,通过查看phpinfo来确定是否已经安装成功。下面是在宝塔中查看phpinfo的结果。

    在phpinfo中查看xdebug插件是否安装成功

配置xdebug的调试环境

本文只讲解如何安装php的xdebug插件,关于配置xdebug的调试环境,请参考另一篇文章,具体讲如何实现使用xdebug远程调试docker中的项目。

使用docker和堡塔快速搭建php开发环境

前言

本文基于mac平台。

因为要使用php8.2和laravel10来开发系统,在搭建开发环境的时候着实是废了不少劲。探索了不少方案,终于找到了一个最佳实践,这里做一个总结。

先说下尝试过的方案

  1. mxsrvs,之前在开发php5.6和php7.4的系统时,都是使用的mxsrvs作为集成开发环境。问题是这个环境中不支持php8,尝试自己编译一个php8的版本适配到mxsrvs,最终因为遇到 https://segmentfault.com/q/1010000044189821?_ea=317144307 这个问题,导致无法在mxsrvs上使用php8,遂放弃此方案。另外已经和mxsrvs的作者取得联系,老哥已经停止维护此工具很久了,非常可惜。为了方案的可持续性,所以放弃mxsrvs。

  2. phpstudy,当初在windows平台开发的时候,使用的就是phpstudy,下载了一个mac版本的phpstudy看了下,不支持php8,而且软件完成度很低,bug不少,不像是一个可用的东西,遂放弃此方案。

  3. laravel herd,laravel自己开发的一个集成开发环境。这个项目在刚开始和快速迭代的阶段,功能完成度较低,无法方便的创建项目,无法管理php插件,遂放弃此方案。

  4. mamp,此工具pro版本收费,但是可以找到破解版的,不好的地方是不能同时支持多个mysql版本,遂放弃此方案。

  5. 使用docker+堡塔的方式搭建开发环境。因为平时我服务器上使用的就是堡塔面板,所以对在宝塔中的各项操作都非常熟悉,加上docker可快速部署的特性,最后选择使用这个方案。在落地这个方案的时候也是遇到了不少的问题,但最终都一一克服,最终形成自己的这套最佳实践。本系列搭建php开发环境文章从各个环节来描述此方案的搭建过程,包括单元测试、xdebug调试如何实现等。

参考文章:https://blog.csdn.net/weixin_44467587/article/details/130265470

安装docker、运行堡塔镜像

  1. 官网下载docker客户端,并登录账号
  2. pull btpanel/baota镜像,在公共库中搜索即可。
  3. 创建和运行容器,指定参数。volumnes参数可以映射堡塔的/www/wwwroot目录,此目录映射到本机的一个目录,将源码存放到这个目录即可。
    在docker中创建和运行堡塔镜像
  4. 浏览器访问 http://localhost:8888/btpanel 进入堡塔
    默认用户名:btpanel
    默认密码:btpaneldocker
    默认ssh密码:btpaneldocker
    数据库root密码需要重置一下,否则无法创建数据库,应该是是做镜像的人没做好。
  5. 创建网站,指定一个域名比如test.com
  6. 修改mac本地的hosts文件 sudo vi /private/etc/hosts,添加127.0.0.1 test.com即可在浏览器中通过test.com访问站点。