分类: IT小常识

  • 增值税发票开票软件(ukey版)管理员密码留空即可登录

    增值税发票开票软件(ukey版)管理员密码留空

    新开通的ukey,软件据说也是新版的,对照文档发现确实够新,文档跟软件都不太一样,装好开票软件之后,启动,插上Ukey,能识别,输入初始密码88888888,修改初始密码,然后,就是图片上的界面,出来一个管理员用户,还要输入密码,实在不清楚这个管理员是在哪里设置过,于是用ukey密码尝试,密码错误,用初始密码8个8尝试,密码错误,也没有密码找回之类的选项。

    只好拨打12366电话,只有机器人,解决不了问题,甚至连问题都没听懂。

    拨打石景山税务局的电话,电话链路有问题,杂音特别多,说明来意,说电话改了,拨打另外一个,然后打通了说需要去办税大厅,那就去吧。

    去了之后扫二维码预约,扫二维码取号,倒是不用等。

    说明情况之后,姑娘核验了身份证,把ukey交给旁边同事把密码初始化,我插到电脑上再试,还是密码错误,姑娘翻了半天笔记本,说你试试空密码,我把密码清除,点击登录,成功了。这就是经过。一个上午就这么过去了。

  • 在docker中的jenkins中调用composer

    假定部署环境使用的是futuremeng/dnmp(fork自yeszao/dnmp),我在其中增加了一个jenkins,那么当jenkins部署php项目时,除了拉取代码,我还会在shell中修改env为当前实例所需的配置,然后接下来,就是执行composer来构建项目需要的包。之前,我是在jenkins容器中又不得已安装了一个php和composer,这显然是和dnmp下面的php重复了,完全没有必要。

    所以接下来,我查到了在docker-compose.yml的jenkins配置中:

      jenkins:
        image: jenkins/jenkins:${JENKINS_VERSION}
        container_name: jenkins
        volumes:
            - ${JENKINS_HOME_DIR}:/var/jenkins_home
            - ${JENKINS_CERTS_DIR}:/certs/client
            - ${SOURCE_DIR}:/www/:rw
            - ${TOMCAT_WEBAPPS_DIR}:/webapps/:rw
            - /var/run/docker.sock:/var/run/docker.sock
            - /usr/bin/docker:/usr/bin/docker
            - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
        ports:
            - "${JENKINS_HTTP_PORT}:8080"
        expose:
            - "8080"
            - "50000"
        privileged: true
        user: root
        restart: always
        environment:
            TZ: "$TZ"
            JAVA_OPTS: '-Djava.util.logging.config.file=/var/jenkins_home/log.properties'
            JENKINS_OPTS: '--prefix=/jenkins'
        networks:
          - default

    设置了

    - /var/run/docker.sock:/var/run/docker.sock

    这一项,其实本来就是为了让容器也能直接调用宿主机的docker命令,我试了一下docker ps -a,真的没问题,那么我就把本来用在宿主机的命令拿过来,比如bash.alias.sample文件中的:

    # php composer
    composer () {
        tty=
        tty -s && tty=--tty
        docker run \
            $tty \
            --interactive \
            --rm \
            --user www-data:www-data \
            --volume ~/dnmp/data/composer:/tmp/composer \
            --volume $(pwd):/app \
            --workdir /app \
            dnmp_php composer "$@"
    }

    将其中的命令改为:

        tty=
        tty -s && tty=--tty
        docker run \
            $tty \
            --interactive \
            --rm \
            --user www-data:www-data \
            --volume /dnmp/data/composer:/tmp/composer \
            --volume /dnmp/www:/app \
            --workdir /app \
            dnmp_php composer install

    其中,我把$(pwd)改为了laravel项目所在的地址,这个地址是宿主机的地址,因为这里的docker命令是宿主机的。另外,/dnmp/data/composer也是对应宿主机中的composer缓存文件夹地址。”$@”则直接写上了install

  • jenkins中通过Global Tool安装nodejs须要注意npm版本可能过低

    初始化jenkins之后,通过Global Tool安装nodejs的某个版本,过高了项目不匹配,跑不通,比如我选择了一个node14.22.0,但依然构建不成功,报错:

    npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.json was generated for lockfileVersion@2. I'll try to do my best with it!

    以及:

    -  Building for production...
     ERROR  Error: Cannot find module 'html-webpack-plugin'

    后来查到尽管用的是nodejs14,但其中的npm版本低了,用npm -v看了一下是6,其中从第一个报错就应该意识到要升级npm了,所以在shell中加上了:

    npm install -g npm
  • VSCode Remote-SSH使用密码远程的服务器如何保存密码免密登录

    IDE:vscode

    插件:remote-ssh

    场景:远程服务器拿了IP,用户名和密码

    则默认情况下config文件(在远程资源管理器插件中点击修改设置,选择对应的配置文件)中保存为:

    Host 192.168.0.7
      HostName 192.168.0.7
      User root

    每次连接时,都需要用户输入密码,而且重连时也需要输入密码。改善的方式是将登录方式改为密钥的方式。

    在本地电脑上用ssh-keygen生成密钥对,并将公钥放到服务器上去。

    实现的具体步骤:

    本地生成密钥对:

    ssh-keygen -t rsa -f id_rsa_server_someone

    然后将生成的id_rsa_server_someone.pub拷贝到服务器上的/root/.ssh下,并

    cat id_rsa_server_someone.pub >> authorized_keys

    最后,config中修改为:

    Host 192.168.0.7
      HostName 192.168.0.7
      IdentityFile ~/.ssh/id_rsa_server_someone
      PreferredAuthentications publickey
      User root
  • 替换vant加载的外部资源来避免nginx策略屏蔽

    某项目因前置nginx限制较多,不允许站内调用外部资源,所以因vant引用了cdn的图标,以及通过data方式加载图标资源,需要对vant进行修改,但又不想去自己弄个vant的修改版,所以从build之后的文件入手。

    先创建一个localFilterPlugin.js,放在src/libs内,或者其他文件夹,比如utils,看你的习惯。内容如下:

    /*
     * @Date: 2021-11-26 15:43:28
     * @LastEditors: Future Meng
     * @LastEditTime: 2021-11-26 18:19:11
     */
    // 用于向控制台输出带颜色的问题提示
    const fs = require('fs') // node的文件系统模块,用于读取操作系统文件
    const path = require('path') // node提供的一些用于处理文件路径的工具
    const chalk = require('chalk')
    
    class LocalFilterPlugin {
      static defaultOptions = {
        filenameReg: /^chunk-mobile\..*\.css$/,
        originContent: /@font-face[^}]+}/g,
        newContent: '',
        assetsPath: '../../dist/css'
      };
    
      constructor(options = {}) {
        this.options = { ...LocalFilterPlugin.defaultOptions, ...options }
      }
    
      apply(compiler) {
        const _this = this
        compiler.plugin('done', function(compilation, callback) {
          const filePath = path.resolve(__dirname, _this.options.assetsPath)
    
          fs.readdir(filePath, (err, files) => {
            // 读取文件路径
            if (err) {
              console.log(chalk.yellow('读取文件夹异常:\n' + err.message + '\n'))
            }
            files.forEach((filename) => {
              // 找到符合正则规则的文件
              if (_this.options.filenameReg.test(filename)) {
                // 读取该文件
                const fileDir = path.resolve(filePath, filename)
                fs.readFile(fileDir, 'utf-8', (err, data) => {
                  // 读取文件内容
                  if (err) {
                    console.log(chalk.yellow('读取文件异常:\n' + err.message + '\n'))
                    return
                  }
    
                  // 替换文件内容
                  const result = data.replace(_this.options.originContent, _this.options.newContent)
                  fs.writeFile(fileDir, result, (err) => {
                    if (err) {
                      console.log(chalk.red('写入修改后的文件异常:\n' + err.message + '\n'))
                      return
                    }
                    console.log(chalk.cyan(filename + '替换完成'))
                  })
                })
              }
            })
          })
        })
      }
    }
    
    module.exports = LocalFilterPlugin
    

    然后在vue.config.js中添加对这个自定义插件的引用。

    const LocalFilterPlugin = require('./src.mobile/libs/localFilterPlugin')
    
    module.exports = {
            configureWebpack: config => {
        const configNew = {}
        if (process.env.NODE_ENV === 'production') {
          configNew.externals = externals
          configNew.plugins = [
            // 构建后剔除@font-face
            new LocalFilterPlugin({
              options: {
                filenameReg: /^chunk-mobile\..*\.css$/,
                originContent: /@font-face[^}]+}/g,
                newContent: '',
                assetsPath: '../../dist/css'
              }
            })
          ]
        }
        return configNew
      },
    }

    就这些。

    参考资料:https://blog.csdn.net/qq_31968791/article/details/102900349

  • knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案

    以前一直用原生的swagger,有同事引入了knife4j,一开始兼容貌似有问题,后来调试好了,看上去不错,虽然输出的word还是不太好看,但总比没有强。

    所以把java的项目都切到这个接口文档上来了。

  • linux升级node

    在webpack运行过程中,报webpack运行项目报ExperimentalWarning: The fs.promises API is experimental

    解决方法:

    升级node

    【linux安装升级方法】

    1、查看node版本:node -v

    2、清除node缓存:sudo npm cache clean -f  

    3、安装node版本管理工具’n’:sudo npm install n -g

    4、使用版本管理工具安装指定node或者升级到最新node版本:

    sudo n latest   (安装最新版本)
    ————————————————
    版权声明:本文为CSDN博主「兔子驴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_29883133/article/details/102568735

    原文中第4步中的命令指定n的最新版本写错了,已更正。

  • 某司的UE设计规范

    接了一个活儿,甲方的领导真像领导,忙得要死,我们作为转包承接商佩服的要死。

    好不容易要到了资源帐号,先连vpn,这方面比较正规的,但是vpn只给了win10版本的客户端,得装一个虚拟机来跑win10,但是我们的UI也是用的mac,所以想了想是否可以找到F5的mac客户端呢,官网不给下载,但是某外国高校的网站上提供了一个下载地址。于是去留学下载回来,还真的能用,甚至比win10版还要好,因为win10版默认设置的vpn服务地址是另一家的,每次都要重新设置。

    vpn这一关过了,打开ue的站点,乍一看,项目还挺多,得发给UI好好学一下,不然,不遵循规范到时候设计出来了返工可就麻烦。等等,仔细一瞅,这不是饿了么吗?谁这么牛掰,又拿了一套开源卖给他们啊。

  • 市场监督总局不差钱的推送短信

    【市场监督总局】我局已将电子商标文件发送至商标网上服务系统,你已10天未登录该系统,请尽快登录商标网上服务系统查看及下载电子商标文件。

    这条短信我每隔10天就能收到一条,这事儿早就不归我管了,我想这是不知道哪个公司给市场监督总局做的系统维护,短信推送每天定时执行一次,将10天没有登录的统一放到推送清单中。但却完全没有考虑推送上限的问题。而这个短信模板也一直没有改过,不知道是涉及哪条商标业务,也不知道是哪个帐号。

    老婆最近在考PMP证书,我想市场监督总局的信息中心,或者为其服务的公司想必也应该有这个证,可惜,这么简单的短信推送策略都懒得去优化。

  • php生产环境搭建

    更新系统 yum update

    Uninstall old versions

     sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine

    Set up the repository


    Install the yum-utils package (which provides the yum-config-manager utility) and set up the stable repository.

     sudo yum install -y yum-utils
     sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

    Install Docker Engin

    Install the latest version of Docker Engine and containerd, or go to the next step to install a specific version:

    sudo yum install docker-ce docker-ce-cli containerd.io

    设置自动启动

    systemctl enable docker

    启动docker

    systemctl start docker

    查看docker状态

    systemctl status docker

    安装docker-compose

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

    上面命令行中可以将版本号替换为最新的版本。docker官网的链接用的是github的,缺德某些地方把这个域名污染了,所以需要换成上面这个地址。

    sudo chmod +x /usr/local/bin/docker-compose
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    查看docker compose的版本

    docker-compose —version
    yum install git
    cd /
    git clone https://github.com/yeszao/dnmp.git
    
    cd /dnmp
    docker-compose up -d