作者: admin

  • Composer 使用阿里云的源

    (1). 配置只在当前项目生效

    composer config repo.packagist composer https://mirrors.aliyun.com/composer/

    取消当前项目配置

    composer config --unset repos.packagist

    (2)配置全局生效

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

    取消全局配置

    composer config -g --unset repos.packagist
  • Composer版本号前面`^`和`~`的区别

    ~1.2.3表示: 1.2.3 <= 版本号 < 1.3.0

    ^1.2.3表示: 1.2.3 <= 版本号 < 2.0.0

    ~1.2 表示: 1.2.0 <= 版本号 < 2.0.0

    安装格式

    composer require “扩展包:版本号”

    composer require “扩展包 版本号”

    composer require “predis/predis:2.0”  指定某个版本

    如果版本号前有~^都是下载某个范围最新版本

  • 网站改了个版

    其实有这个想法很久了,但由于人的惰性,一直没有行动。最近正好有些时间,就顺手把这事做了。

    网站改版,前前后后花了几天的时间,看似没什么功能,但的的确确是花了很多的工夫。经过几天的折腾,终于形成了现在的样子,总算是能看了。此时,再切换到以前的旧版,简直可以用“辣眼睛”来形容。之前那版真的是草草行事的产物,搜索没有,标签没有,配色难看,图片是网上找的……总之就是没走心。现在,新主题基本上做到整站原创。想用心设计好一个网站,还是要花些时间的。

    最初建这个网站,是想着能接点活,赚点钱,但是现实很残酷,这个网站从建站到现在,接的单子寥寥无几,很多的项目都是从其它途径接到的。现在,这个网站基本上也就剩下了案例展示功能,但上传的案例也不全,还有很多需要整理,需要搭建环境,然后截图,比较麻烦,就没弄,也不想弄了,感觉意义不是很大。

    后续可能会把这个网站转成技术站点,用来记录和分享编程技术,方便自己查询的同时,如果能帮助到别人,也算没枉费这番辛苦。

    PS. 本站已于2024.10.20转型为纯技术站点,不忘初心,砥砺前行。

  • 使用 Composer 升级 Laravel Installer

    安装laravel installer, 如果已经安装了,这一步略过

    composer global require laravel/installer

    更新larvel installer

    composer global update laravel/installer

    查看全局安装了哪些包以及相关信息

    composer global show

    也可以用

    laravel --version

    查看安装器的版本

  • Windows10安装Composer

    在我的win10上用exe安装一直安装不上,使用命令行安装的过程如下:

    下载安装脚本到当前目录

    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

    执行安装过程

    php composer-setup.php

    删除安装脚本

    php -r "unlink('composer-setup.php');"

  • ACME.sh自动证书管理

    https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

    按文档做就行。

    acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

    主要步骤:

    1. 安装 acme.sh
    2. 生成证书
    3. copy 证书到 nginx/apache 或者其他服务
    4. 更新证书
    5. 更新 acme.sh
    6. 出错怎么办, 如何调试

    下面详细介绍.

    1. 安装 acme.sh

    安装很简单, 一个命令:

    curl https://get.acme.sh | sh -s email=my@example.com

    普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

    1. 把 acme.sh 安装到你的 home 目录下:

    ~/.acme.sh/

    并创建 一个 shell 的 alias, 例如 .bashrc,方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

    1. 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

    更高级的安装选项请参考:  https://github.com/Neilpang/acme.sh/wiki/How-to-install

    安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

    2. 生成证书

    acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.

    1. http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

    acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

    只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

    如果你用的 apache服务器, acme.sh 还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:

    acme.sh --issue -d mydomain.com --apache

    如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

    acme.sh --issue -d mydomain.com --nginx

    注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.

    如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

    acme.sh --issue -d mydomain.com --standalone

    更高级的用法请参考:  https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

    2. 手动 dns 方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权.

    这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

    acme.sh --issue --dns -d mydomain.com \
     --yes-I-know-dns-manual-mode-enough-go-ahead-please

    然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.

    等待解析完成之后, 重新生成证书:

    acme.sh --renew -d mydomain.com \
      --yes-I-know-dns-manual-mode-enough-go-ahead-please

    注意第二次这里用的是 --renew

    dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

    acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.

    以 dnspod 为例, 你需要先登录到 dnspod 账号, 生成你的 api id 和 api key, 都是免费的. 然后:

    export DP_Id="1234"
    export DP_Key="sADDsdasdgdsf"
    acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com

    证书就会自动生成了. 这里给出的 api id 和 api key 会被自动记录下来, 将来你在使用 dnspod api 的时候, 就不需要再次指定了. 直接生成就好了:

    acme.sh --issue -d mydomain2.com --dns  dns_dp

    更详细的 api 用法:  https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

    3. copy/安装 证书

    前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.

    注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

    正确的使用方法是使用--install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

    Apache example:

    acme.sh --install-cert -d example.com \
    --cert-file      /path/to/certfile/in/apache/cert.pem  \
    --key-file       /path/to/keyfile/in/apache/key.pem  \
    --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
    --reloadcmd     "service apache2 force-reload"

    Nginx example:

    acme.sh --install-cert -d example.com \
    --key-file       /path/to/keyfile/in/nginx/key.pem  \
    --fullchain-file /path/to/fullchain/nginx/cert.pem \
    --reloadcmd     "service nginx force-reload"

    (一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)

    Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

    --install-cert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.

    详细参数请参考:  https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc

    值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.

    4. 查看已安装证书信息

    acme.sh --info -d example.com

    会输出如下内容:

    DOMAIN_CONF=/root/.acme.sh/example.com/example.com.conf
    Le_Domain=example.com
    Le_Alt=no
    Le_Webroot=dns_ali
    Le_PreHook=
    Le_PostHook=
    Le_RenewHook=
    Le_API=https://acme-v02.api.letsencrypt.org/directory
    Le_Keylength=
    Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
    Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
    Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
    Le_CertCreateTime=1649358725
    Le_CertCreateTimeStr=Thu Apr  7 19:12:05 UTC 2022
    Le_NextRenewTimeStr=Mon Jun  6 19:12:05 UTC 2022
    Le_NextRenewTime=1654456325
    Le_RealCertPath=
    Le_RealCACertPath=
    Le_RealKeyPath=/etc/acme/example.com/privkey.pem
    Le_ReloadCmd=service nginx force-reload
    Le_RealFullChainPath=/etc/acme/example.com/chain.pem

    5. 更新证书

    目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.

    请确保 cronjob 正确安装, 看起来是类似这样的:

    crontab  -l
    56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

    6. 关于修改ReloadCmd

    目前修改ReloadCmd没有专门的命令,可以通过重新安装证书来实现修改reloadCmd的目的。 此外,安装证书后,相关信息是保存在~/.acme.sh/example.com/example.conf文件下的,内容就是acme.sh --info -d example.com输出的信息,不过ReloadCmd在文件中使用了Base64编码。理论上可以通过直接修改该文件来修改ReloadCmd,且修改时,无需Base64编码,直接写命令原文acme.sh也可以识别。 不过,example.conf文件的位置和内容格式以后可能会改变!example.conf一直都是内部使用, 后面有可能会改为用 sqlite 或者mysql 格式存储. 所以一般不建议自己修改。

    7. 更新 acme.sh

    目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

    升级 acme.sh 到最新版 :

    acme.sh --upgrade

    如果你不想手动升级, 可以开启自动升级:

    acme.sh --upgrade --auto-upgrade

    之后, acme.sh 就会自动保持更新了.

    你也可以随时关闭自动更新:

    acme.sh --upgrade --auto-upgrade  0

    8. 出错怎么办:

    如果出错, 请添加 debug log:

    acme.sh --issue  .....  --debug

    或者:

    acme.sh --issue  .....  --debug  2

    请参考:  https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

    在DNS验证模式下如果debug中出现诸如”timed out”等字样可能是因为GFW拦截了相应请求,需要添加http(s) proxy环境变量。(请按照自己实际设定修改)

    export http_proxy="socks5h://localhost:1081" && export https_proxy="socks5h://localhost:1081"

    如果是使用docker则完整示例配置如下:

    docker run --rm  -it  \
      -v "/etc/acme":/acme.sh  \
      -e "CF_Token=[填入自己的信息]" \
      -e "CF_Account_ID=[填入自己的信息]" \
      -e "CF_Zone_ID=[填入自己的信息]" \
      -e http_proxy="socks5h://[代理A]:1234" \
      -e https_proxy="socks5h://[代理A]:1234" \
      --network container:[代理A]\
      neilpang/acme.sh \
      --issue -d example.com --dns dns_cf --debug

    上述例子中使用cloudflare的DNS来签发证书,并通过把acme.sh链接到容器[代理A],来转发curl请求(请按照自己实际设定修改)

    最后, 本文并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.

    https://github.com/Neilpang/acme.sh/wiki

  • tar 打包命令

    tar常用的压缩和解压缩命令,记录以防忘记。

    压缩

    tar -czvf xxx.tar.gz  source_file

    解压缩到当前目录

    tar -xzvf xxx.tar.gz 

  • ThinkPHP5.1的Apache和Nginx配置

    每次部署 ThinkPHP5.1 的程序,伪静态总要出点问题,和 Laravel、WordPress 等程序的不太一样,这里记录一下,备用。

    For APACHE:

    <IfModule mod_rewrite.c>
      Options +FollowSymlinks -Multiviews
      RewriteEngine On
    
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
    </IfModule>

    For Nginx:

    location / {
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
        }
    }
  • Apache在Windows上作为服务运行

    安装服务: httpd -k install  

    被安装的服务名称是 Apache2.2 ,使用的配置文件是conf\httpd.conf

    httpd -k install -n  "service name"  #如果想指定服务名称,请采用该命令
    httpd -k start #启动apache服务
    httpd -k stop 或 httpd -k shutdown #停止apache服务
    httpd -k restart #重启apahce服务

    启动前,你可以通过 httpd -n "service name" -t 检查配置文件的正确性

    如果采用默认的服务名,那么默认的命令就是: httpd -t

    删除服务:

    httpd -k uninstall #删除默认的服务名
    httpd -k uninstall -n "service name" #删除指定的文件名
  • 安装PHP 8.3

    apt install php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-curl php8.3-xml php8.3-imagick php8.3-zip php8.3-gd php8.3-intl php8.3-bcmath

    对于Laravel 需要安装 apt install php8.3-bcmath

    要把 php8.3-dom 换成 php8.3-xml

    说明:需要通过sury源来安装

    https://packages.sury.org/php/README.txt

    #!/bin/sh# To add this repository please do:
    if [ "$(whoami)" != "root" ]; then    SUDO=sudofi
    ${SUDO} apt-get update${SUDO} apt-get -y install lsb-release ca-certificates curl${SUDO} curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb${SUDO} dpkg -i /tmp/debsuryorg-archive-keyring.deb${SUDO} sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'${SUDO} apt-get update

    或:

    apt install apt-transport-httpscurl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpgsh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'apt update

    https://wiki.crowncloud.net/?How_to_Install_PHP_8_3_on_Debian_11