[docker]使用docker-compose编排容器

前言

完整上线一个php+nginx+mysql+redis架构的网站中,我全程用docker搭建了基于php+nginx+mysql+redis的站点。
我目前遇到了一些问题:

  1. 重启很繁琐
  2. 修改配置,需要先docker stop,然后docker rm,再docker run,麻烦!
  3. 迁移到新站点麻烦。需要重复docker run,如果忘记了某一个命令,还要再查,麻烦!
    为此,我打算,将容器使用docker-compose进行编排,达到一次命令,运行所有内容。


- 阅读剩余部分 -

[Docker]MySql 定时备份

前言

今天调整了机器的参数,要做一个备份,想到还没有做自动备份,要是数据丢了,就啥都没了。所以研究了下,使用mysqldump来定时备份mysql的数据。

分析

我这块数据库是在容器中运行的,在宿主机上无法直接运行mysqldump命令进行备份(宿主机不关心数据库实例类型,且不会安装这些东西),而如果要备份就需要使用docker exec 进入容器中进行备份,这显然提供了一条思路给我们。
我现在需要挂载一个路径给容器内的mysql实例,好让容器能够将备份后的文件直接的存放下来。然后需要编写一个crontab自动任务脚本。

容器挂载目录

因为容器使用的时候,采用最少修改原则,就是尽量不要动容器的自动生成配置,所以我这里先停止容器,并且移除。
容器先执行停止操作docker stop mysql
容器移除`docker rm mysql'。
添加挂载目录-v /bak/mysqlbak/:/tmp/mysqlbak
例如下面的脚本

sudo docker run  \
 --network=djc8net --name mysql \
 -v /database/data/:/var/lib/mysql   \
 -v /database/mysql/conf:/etc/mysql/conf.d \
 -v  /bak/mysqlbak/:/tmp/mysqlbak \
 -e MYSQL_ROOT_PASSWORD=test \
 -d mysql:8.0.22

操作完成后,容器内就可以看到包含了/tmp/mysqlbak目录,这个目录就是我们做备份要存放的路径。

备份脚本

使用mysqldump可以灵活的将数据备份为sql脚本,方便分发。
首先创建一个sh文件:touch /tool/autojob/bak_mysql.sh
内容如下:

#!/bin/bash
export NOW="$(date +"%Y-%m-%d")"
export DATA_DIR=/tmp/mysqlbak
docker exec -it mysql /bin/bash -c "mysqldump -uroot -ptest --set-gtid-purged=OFF --all-databases > $DATA_DIR/$NOW.sql"

我这里备份的是所有的数据库。

授予权限:chmod +x /tool/autojob/bak_mysql.sh
调试运行:./tool/autojob/./bak_mysql.sh
没有问题的话查看下/bak/mysqlbak就会看到以当前日期为名字的sql脚本了。

自动运行备份脚本

执行:crontab -e.
在最底下添加一行:20 01 * * * /tool/autojob/bak_mysql.sh
保存,并且执行:crontab -l。列表中就会出现这一行了。
备份时间为每天的早上01点20分。

[typecho]找到非markdown脚本语言编写的文章

以前用uedit的时候,很多文章都是直接超文本标签嵌入,虽然typecho在前端渲染的时候会自动忽略,直接使用文章内容进行渲染,同时在编辑非markdown的文章的时候,也会提示,是否需要使用markdown进行编辑,那文章很多,不可能找到一篇才编辑一篇。

可以通过搜索mysql,找到要编辑的非markdown编辑的文章,上代码

SELECT * FROM `typecho_contents` where type='post' and text not like '<!--markdown-->%'

[docker]在docker中使用php composer

前言

我之前搭建了一个twitter转发推文的工具,稳定正常运行了半年,这几天却报错:

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

最初以为是ca证书的问题,然后开始折腾重新续期,重新申请,结果发现并不是,以为是TwitterOauth在这个库版本太低了,然后升级了一波,结果。。报!错!了!

Fatal error: Uncaught Error: Class 'Composer\CaBundle\CaBundle' not found in 
/www/twitter/\twitteroauth\src\TwitterOAuth.php:572 Stack trace: 
#0 /www/twitter/\twitteroauth\src\TwitterOAuth.php(620): Abraham\TwitterOAuth\TwitterOAuth->curlOptions() 
#1 /www/twitter/\twitteroauth\src\TwitterOAuth.php(557): Abraham\TwitterOAuth\TwitterOAuth->request('https://api.twi...', 'GET', 'Authorization: ...', Array, false) 
#2 /www/twitter/\twitteroauth\src\TwitterOAuth.php(490): Abraham\TwitterOAuth\TwitterOAuth->oAuthRequest('https://api.twi...', 'GET', Array, false) 
#3 /www/twitter/\twitteroauth\src\TwitterOAuth.php(467): Abraham\TwitterOAuth\TwitterOAuth->makeRequests('https://api.twi...', 'GET', Array, false) 
#4 /www/twitter/\twitteroauth\src\TwitterOAuth.php(232): Abraham\TwitterOAuth\TwitterOAuth->http('GET', 'h in /www/twitter/\twitteroauth\src\TwitterOAuth.php on line 572

好吧,原来是因为我没有编译,但是我生产环境,又是docker容器中,是不太想去安装git,composer这些玩意儿的。
这时候我灵机一动,是不是composer也有docker的镜像呢?
马上去是hub.docker中搜索,果然有,而且是官方维护的。那接下来就简单了。

安装

# docker pull composer:2.0.8

我以路径/www/twitter/twitteroauth为例子,直接运行:

docker run --rm --interactive --tty \
  --volume /www/twitter/twitteroauth/:/app \
  composer:2.0.8 install

稍等一会,就可以看到有vendor目录生成了。成功。

因为在docker中用php composer,php版本依赖没有保障,所以不推荐生产环境这么玩。
如果想持久化缓存,则可以将缓存映射到宿主机,比如这样:

docker run --rm --interactive --tty \
  --volume /www/twitter/twitteroauth/:/app \
  --volume /www/twitter/phpcomposer/:/tmp \
  composer:2.0.8 install

参考:
1.I used the TwitterOAuth library and got this error

docker-compose 升级版本

前言

最近一直在研究怎么搭建云笔记平台,本着实事求是,客观公正的态度,开始做起了实验,然而leanote已经多年没有更新,wiz的自搭服务器,感觉很吃配置,转头搜索到了Standard Notes,打算装着试试,结果因为docker-compose版本不太够,再容器部署的时候,报错了。
所以这是一篇升级docker-compose的文章。


- 阅读剩余部分 -

Manjaro kconsole开启半透明

简单的方式

  1. ctrl+alt+t打开kconsole
  2. 右上角点击Settings->Manage Profiles->Profiles
  3. 选择Breath2或者新建一个->点击Edit->选择Appearance
  4. 点击edit->在弹出的窗口中,找到Background transparency拖动这个比例控件,我设置为14%->点击Apply
  5. 关闭kconsole,重新打开就可以了。

如下图

2021-01-10_18-14.png

设置方式很简单,如果提示无法设置透明度的话,根据网上的说法,需要进行系统设置,步骤如下:
打开System Settings
点击Display and Monitor
点击Compositor,在右边的窗体中找到Rendering backend下拉选择XRender
保存,关闭即可。

2021-01-10_18-18.png

参考这里点击跳转

记一次被非法引流刷恶意关键字

起因

每到春节前后,我都比较关注服务器的状况,而且最近一直在研究docker,然后自己的站点又全部署到了docker容器中了,偶尔会上来看下。
这两天就看到很奇怪的现象,我的这个小博客,理论上每天访问的人数都是不多的,就30-40个ip,pv也就是50-80左右,最近一段时间却异常的凶猛。
见下图



- 阅读剩余部分 -

谈谈 docker 的安全性

作为开发人员我很少关注服务器环境的安全性问题,我一般会比较关注我自身代码的安全问题。
现在整站上了docker容器后,其实也会比较关注服务器的安全性,我个人觉得应该是比较安全的,毕竟是在容器中运行,就算我某个服务挂了,也威胁不到我宿主机的安全。


- 阅读剩余部分 -