年度归档: 2019 年

  • 如何在Docker容器中安装 apache php7.3配置环境?

    如何在Docker容器中安装 apache php7.3配置环境?

    前面我们写了 公司OA项目服务器配置注意点 ,迫于公司的系统只有现成apache的rewirte规则,而且我对apache并不熟而且使用得很少,所以这里我们记录一下如何在Docker容器中配置apache+php7.3的环境,废话不多说直接看配置。

    在powershell终端中部署容器

    docker run -d -p 8081:80 --name japache --link jmysql -v D:\wwwroot:/data/wwwroot -v D:\DockerConfig\apache2\sites-enabled\:/etc/apache2/sites-enabled/ --restart=always php:7.3-apache

    网站文件跟目录在 D:\wwwroot

    请注意容器与主机之间映射文件的对应关系。

    进入Docker容器

    docker exec -it japache /bin/bash

    在容器中安装php扩展mysqli,启用rewrite功能

    docker-php-ext-install mysqli
    a2enmod rewrite

    配置apache文件

    在 D:\DockerConfig\apache2\sites-enabled\ 目录下配置一个名为 poweridc.conf 的文件,内容如下:

    <VirtualHost *:80>
    	ServerName poweridc
    	ServerAdmin webmaster@localhost
    	DocumentRoot /data/wwwroot/POWER_IDC
    	<Directory /data/wwwroot/POWER_IDC>
    		Options Indexes FollowSymLinks
    		AllowOverride All
    		Require all granted
    	</Directory>
    	RewriteEngine on
    	RewriteCond %{REQUEST_METHOD} ^TRACE
    	RewriteRule .* - [F]
    	RewriteRule !(^/static|\.(gif|swf|exe|png|jpg|js|css)$) /index.php [L]
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    修改hosts(可选)

    Linux Windows MacOS 等系统中hosts的原理及作用

    浏览器访问

  • Python3 if 变量variable SQL where 语句拼接

    Python3 if 变量variable SQL where 语句拼接

    最近在写python3的项目,在实际中运用到了根据 if 判断变量variable ,然后去拼接where子句。但是在百度、BING搜索中未找到合适的答案,这是自己想出来的典型php写法,这里做一下记录。不知道在python中如何做,如有python大神知道,请指点一下。

    def getRooms( excludeId = None , limit = None ):
        sql = 'SELECT * from computer_room WHERE 1=1 '
        param = []
        if excludeId :
            sql += 'AND id <> %s '
            param += [excludeId]
        sql += 'ORDER BY weights ASC , id DESC '
        if limit :
            sql += 'LIMIT %s '
            param += [limit]
        config.cursor.execute( sql , param )
        return config.cursor.fetchall()
  • django输出html内容

    django输出html内容

    最近在学习django,于是就用django做了一个简单的网站,用来练手,具体功能就是从网上抓取数据,然后放到我的网站上面,但是遇到一个问题就是django无法输出html格式的内容,只能以字符串的形式输出:

    data = '<h1>hello world</h1>'
    <p>{{ data }}</p>

    我们目的是输出的是:

    hello world

    但是结果输出的是:

    <h1>hello world</h1>

    在网上搜了好久,终于找到解决办法:

    对于单个变量使用django的过滤器,告诉Django这个字符串不用进行HTML转义,方法如下:

    data | safe

    对于一段模板内容可以使用autoescape标签,比如:

    {% autoescape off %}
         {{ data }}
     {% endautoescape %}

    off 的意思是关闭对html的转义,而将off替换成on就表示进行html转义,默认进行html转义

    注意:autoescape 具备继承性的,如果在父模版中定义了,则在子模版对应内容部分也存在此属性

    我们可能会疑问,django为什么要将这些字符转义,而不是按原本html的内容输出呢?
    我们举个例子:
    需要用户输入用户名来注册,这个用户输入了用户名为:

    <script type="text/javascript">alert('hello');</script>

    假设他输入的长度合法,而且django也确实没显式提供什么特殊字符转换方法,那么每次在网页上面显示的时候,岂不是每次都弹出一个窗口,那么不是就很不安全啦。
    为了解决这个问题,django默认将所有特殊的字符都转换成在html上面可以显示的内容,而不再包含转义功能!于是,也就出现了上面我想输出而输出而输出不了html的内容。

  • Kubernetes WEB UI Dashboard 部署 MySQL/Mariadb容器

    Kubernetes WEB UI Dashboard 部署 MySQL/Mariadb容器

    问题描述

    我们在使用Kubernetes的Dashboard部署mysql/mariadb时出现了错误(Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项):Back-off restarting failed container 错误 。

    这个错误主要是由于MySQL部署时需要设置 MYSQL_ROOT_PASSWORD 参数,但是我们这里不是时没有设置。

    Docker安装Mariadb数据库 设置root密码 图文教程

    解决方案

    在”显示高级选项”里可以找到”环境变量”设置,这里做好配置然后部署即可。

  • Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项

    Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项

    老季晚上性质很高,由于之前玩了一段时间的Docker,所以想了解一下Kubernete WEB UI。但是由于国内无法下载到Kubernete的文件,所以即使再Docker Desktop里点了Kubernete也是一直显示”Kubernete is starting”状态。

    解决方案

    注意:Docker Desktop安装的Kubernete版本必须跟下载的git分支版本对应。否则会在 C:\ProgramData\DockerDesktop\service.txt 出现 "Cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: EOF" 错误。

    https://github.com/AliyunContainerService/k8s-for-docker-desktop

    感谢阿里云的大佬,为我们提供了解决方案。

    注意事项

    Choose Kubeconfig File

    在这一步时,由于我们这边是MacOS,点击到选择文件时,根据阿里大佬给的方案使用 Mac: $HOME/.kube/config ,但是MacOS里无法选择到隐藏文件。这里我们给个小方法,使用终端命令行给配置文件加个小链接

    ls -s ~/.kube/config kube.config

    这样选择的时候直接选择到软链接即可。

    kubernetes dashboard 无法登录提示Not enough data to create auth info structure.

    虽然我们上面创建了快捷方式,但是这里并没有设置token,会报错。

    1、生成 token

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

    这里就是我们所需要的 token 了

    2、配置kube的config文件

    vi ~/.kube/config

    将刚才生成的token: 放在最后。( token: 后面有个空格 ,不然会报:错误)

        token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJ0dGwtY29udHJvbGxlci10b2tlbi1rdjlqNiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0dGwtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImU5NGZhNzBjLWUyYjMtMTFlOS1hODEwLTAyNTAwMDAwMDAwMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTp0dGwtY29udHJvbGxlciJ9.q8g6S4OoF9ESJgWIdgjpjUeMc65xAAGZlK1YlpxuFIUwBFsIsc3PyjWf4Zo25iZguQljjZkIvbMfhB0Lv_yi6va2HoTSREk_qTvyvYJ0a5N7-MDrTCvY0S061jI42J9ply0CGFS_ZXcCrJzuUEEPtfpoQmvyrBfgSf65V6MZSmjHjBKSl2Jmkg0gUhtlonKU0tGNwiM6WkeS8K-A9Rw7XG_rRuwUFN4kwrB8fPIy2dmNVbO2ND9B-9B1lCig-Po9auFczDXggRzVeNqBfRBum9hq4CJ7BK-YyWzHXrWPR8nOMC8il37cD7FhQhRrs74-rSg8t6PjWZ0TALNrmwXOdQ

    至此简单的Kubernetes Dashboard安装完成。

    如何查看在Kubernetes是否安装成功?

    可以在终端里查看已部署的容器。

    kubectl get pods
    kubectl get deployments
  • Docker Windows 版本拉取镜像错误 no matching manifest

    Docker Windows 版本拉取镜像错误 no matching manifest

    问题描述

    在 docker 拉取镜像时出现错误

    > docker pull mysql
    Unable to find image ‘mysql:latest’ locally
    latest: Pulling from library/mysql
    C:\Program Files\Docker\Docker\Resources\bin\docker.exe: no matching manifest for windows/amd64 10.0.18362 in the manifest list entries.

    windows 10 x64安装版本需要开启Hyper-V

    Docker镜像拉取错误码:

    docker pull mysql

    Pulling from library/mysql
    no matching manifest for unknown in the manifest list entries

    解决方法:

    将 experimental 设置为 true 即可.

  • VirtualBox Windows 10 v1903 中无法启动:Call to WHvSetupPartition failed:

    VirtualBox Windows 10 v1903 中无法启动:Call to WHvSetupPartition failed:

    windows Hyper-V启动后不可以兼容Virtualbox和VMware! 两者一起安装后,启动Virtualbox就会蓝屏!!

    那么最近windows10推出一个新功能:sadbox windows10。那么这个windows系统肯定安装在 Hyper-V 咯。所以出现Call to WHvSetupPartition failed:等错误就直接把 Hyper-V 关掉即可!

    方法一( Windows设置–应用和功能–程序和功能–启用或关闭Windows功能 )

    方法二

    当然也可以通过命令行文件来执行(需以管理员身份运行)

    关闭Windows10 Hyper 功能

    bcdedit /set hypervisorlaunchtype off

    打开Windows10 Hyper 功能

    bcdedit /set hypervisorlaunchtype auto
  • django models 在Django queryset如何过滤数据结果?怎么实现不等于?

    django models 在Django queryset如何过滤数据结果?怎么实现不等于?

    在Django的实际项目开发中,我们会使用到 不等于的情况,比如我想查询id!=3的结果,下面直接给出代码实例。

    方法一

    from django.db.models import Q
    Model.objects.filter(~Q(id = 3))

    方法二

    Model.objects.filter(xxxxxxxx).exclude(id=3)
  • -bash: sz: command not found、-bash: rz: command not found

    -bash: sz: command not found、-bash: rz: command not found

    Linux系统中如果没有安装 lrzsz这个包,就会报rz、sz命令找不到,安装即可解决。

    CentOS中解决-bash: sz: command not found、-bash: rz: command not found解决方法:

    yum install lrzsz
  • JQuery 合并 table 相同数据的列 rowspan

    JQuery 合并 table 相同数据的列 rowspan

    在实际项目应用当中,可能需要合并 table 表格中相同数据的列来显示数据,当然也可以再显示数据时使用rowspan属性来实现合并,但是这样比较复杂。这边我们直接给出使用 jQuery 的函数方法:

    jQuery.fn.rowspan = function(colIdx=0) {
        return this.each(function() {
            var that;
            $('tr', this).each(function(row) {
                $('td:eq(' + colIdx + ')', this).filter(':visible').each(function(col) {
                    if (that != null && $(this).html() == $(that).html()) {
                        rowspan = $(that).attr("rowSpan");
                        if (rowspan == undefined) {
                            $(that).attr("rowSpan", 1);
                            rowspan = $(that).attr("rowSpan");
                        }
                        rowspan = Number(rowspan) + 1;
                        $(that).attr("rowSpan", rowspan);
                        $(this).hide();
                    } else {
                        that = this;
                    }
                });
            });
        });
    }
    $(function() {
        //要合并的列序号,后面数字是第几列
        $("#content_table").rowspan(0); 
        $("#content_table").rowspan(1);
    });
  • crontab实现每N秒执行一次

    crontab实现每N秒执行一次

    linux中的crontab 命令,最小的执行时间是一分钟。如需要在小于一分钟内重复执行,可以有两个方法实现。

    Linux命令详解:crontab 定时任务

    直接在crontab -e中。

    * * * * * 执行命令绝对路径  文件绝对路径
    * * * * * sleep 10; 执行命令绝对路径  文件绝对路径
    * * * * * sleep 20; 执行命令绝对路径  文件绝对路径
    * * * * * sleep 30; 执行命令绝对路径  文件绝对路径
    * * * * * sleep 40; 执行命令绝对路径  文件绝对路径
    * * * * * sleep 50; 执行命令绝对路径  文件绝对路径

    上面,是每隔10秒执行一次。

  • Django 后台开发 为某个模型添加额外Javascript引用

    Django 后台开发 为某个模型添加额外Javascript引用

    最近在学Python,正好在一个项目中使用到了Django。网上查了很多资料如何为一个模型额外引用Javascript,基本都说得很简单并没有说到哪个文件哪个位置说的很笼统,对于初学者来说并不是很了解。这里记录一下如何为某个表增删改查时增加额外的 Javascript 。

    在应用的 admin.py 中配置即可,目录结构如上图所示:

    class ComputerRoomAdmin(admin.ModelAdmin):
        list_display = ('id', 'name','type','weights')
        list_display_links = ('id','name')  
        ordering = ('-weights',)
        class Media:
            js = ('/static/computerroom.js',)
    admin.site.register(models.ComputerRoom , ComputerRoomAdmin)

    这里的 js 即为需要使用的 Javascript 。

WeChat
↑