King's blog


  • 分类

  • 标签

  • 归档

  • 关于

  • 搜索

Docker安装Redis

发表于 2020-08-19 | 更新于: 2021-04-20

Docker安装Redis

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。

一、下载镜像

1
$ docker pull redis:6.0.6

二、创建文件夹以及配置文件

1
2
$ mkdir -p /data/redis/conf
$ touch /data/redis/conf/redis.conf

三、创建实例并启动

1
2
3
4
5
$ docker run -p 6379:6379 --name redis606 \
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:6.0.6 \
redis-server \
/etc/redis/redis.conf

四、接着我们通过 redis-cli 连接测试使用 redis 服务。

1
$ docker exec -it redis606 /bin/bash

五、设置Redis容器在docker启动的时候启动

1
$ docker update redis --restart=always

安装完毕。

Vagrant安装Linux虚拟机

发表于 2020-08-19 | 更新于: 2021-04-20

下载装vagrant

vagrant官方镜像仓库

https://app.vagrantup.com/boxes/search

vagrant下载

https://www.vagrantup.com/downloads.html

初始化一个CentOS7系统

打开命令行窗口,运行

1
vagrant init centos/7

启动虚拟机

1
vagrant up # 系统root用户的密码是vagrant

vagrant其他常用命令

1
2
vagrant ssh # 自动使用vagrant用户连接虚拟机
vagrant upload source [description] [name|id] # 上传文件

https://www.vagrantup.com/docs/cli/init.html Vagrant命令行

https://www.vagrantup.com/docs/cli/box#box-remove

网络配置

默认虚拟机的IP地址不是固定IP,修改Vagrantfile文件

1
2
3
config.vm.network "private_network", ip:"192.168.58.10"

vagrant up # 重新启动机器,然后重新vagrant连接机器

这里的ip需要在物理机下使用ipconfig命令找到

密码登录

vagrant ssh进入系统

1
2
3
4
5
6
$ vim /etc/ssh/sshd config
# 修改
PasswordAuthentication yes/no

# 重启服务
$ service sshd restart

vagrant up下载box慢的解决办法

即在运行vagrant up时得到其的下载路径,如:

1
https://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

然后直接在浏览器上访问该网址来下载该box

先查看本地安装的box:

1
$ vagrant box list

再将得到的box文件手动添加进去:

1
2
3
$ vagrant box add --name centos/7 /c/Users/Kings/Downloads/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

$ vagrant box remove centos/7 $ 从box中移除指定镜像

然后再查看本地果然多了一个新的box:

1
2
3
4
$ vagrant box list
centos/7 (virtualbox, 0)
laravel/homestead (virtualbox, 9.5.1)
laravel/homestead (vmware_desktop, 9.2.0)

然后再在相应vagrantfile对应的目录下运行vagrant up即可运行起来了:

1
$ vagrant up

然后使用vagrant ssh即可进入:

1
$ vagrant ssh

vagrant up 启动报错 拆坑记录 之编码设置

在 Vagrantfile 文件下加入

1
2
3
4
5
config.vm.provider "virtualbox" do | vb |
..............
# Encoding.default_external = 'GBK'
Encoding.default_external = 'UTF-8'
end

alpine使用的避坑指南

发表于 2020-08-18 | 更新于: 2021-04-20

alpine使用的避坑指南

alpine,是一个重量仅为5 MB的最小Linux发行版。它还有基本的linux工具和一个不错的包管理器APK。APK非常稳定,有相当数量的包。由于体积小,在容器中很受欢迎,但是使用上坑也很多,大部分可能是我们的无知吧。

坑1 : 下载慢

解决:

1
2
3
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories \
&& echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" >> /etc/apk/repositories \
&& echo "https://mirror.tuna.tsinghua.edu.cn/alpine/edge/testing" >> /etc/apk/repositories

坑2: 找不到包

解决: 搜索 https://pkgs.alpinelinux.org/packages ,加入指定的“Branch”和“Repository”的源到/etc/apk/repositories,就可以apk add

坑3: 安装失败

1
2
3
4
5
ERROR: https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community: Bad file descriptor
WARNING: Ignoring APKINDEX.79f426e4.tar.gz: Bad file descriptor
ERROR: unsatisfiable constraints:
openssh (missing):
required by: world[openssh]

解决:

1
apk add  openssh --no-cache #加--no-cache, 另外,还能减少镜像体积

坑4:镜像体积大,想删除不再使用的包

apk add 加 -t 参数

-t, --virtual NAME Instead of adding all the packages to 'world', create a new virtual package with the listed dependencies and add that to 'world'; the actions of the command are easily reverted by deleting the virtual package 这意味着当您安装软件包时,这些软件包不会添加到全局软件包中。这种变化可以很容易地回滚/删除。所以,如果我需要gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了。

我可以在虚拟包中安装gcc和其他必需的包,并且可以删除所有依赖项,并删除此虚拟包名称。以下是示例用法

apk add --virtual mypacks gcc vim apk del mypacks 使用第一个命令安装的所有18个软件包将被下一个命令删除。

注意:同一个-t参数会覆盖之前的所有安装包,所有对动态链接库最好不使用-t ,或者保证此参数不重复。

坑5:时间不同步

1
2
3
4
echo "Asia/Shanghai" > /etc/timezone
apk add –no-cache tzdata
TZ=Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

坑6:用户(组)和宿主机不兼容

解决:

1
2
addgroup -g 1200 -S www \
&& adduser -u 1200 -D -S -G www www

坑7:不兼容glibc

解决: 使用最新稳定版本的alpine,

1
2
3
4
5
6
7
8
#再安装编译环境
apk add --virtual .build-base --no-cache \
autoconf \
automake \
g++ \
make \
linux-headers \
bsd-compat-headers

alpine使用的避坑指南

发表于 2020-08-18 | 更新于: 2021-04-20

配置ssh免密登录

https://gitee.com/help/articles/4181#article-header0

CentOS7-firewalld

发表于 2020-08-18 | 更新于: 2021-04-20 | 分类于 CentOS

查看防火墙状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost /]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2020-08-18 17:32:56 CST; 56s ago
Docs: man:firewalld(1)
Main PID: 1607 (firewalld)
Tasks: 2
Memory: 28.1M
CGroup: /system.slice/firewalld.service
└─1607 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

Aug 18 17:32:56 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
Aug 18 17:32:56 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
Aug 18 17:32:57 localhost firewalld[1607]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configur...t now.
Hint: Some lines were ellipsized, use -l to show in full.

开启防火墙

1
[root@localhost /]# systemctl start firewalld

关闭防火墙

1
[root@localhost /]# systemctl stop firewalld

查看已开放端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost /]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

防火墙开放端口:(开放端口后需重载防火墙)

1
2
3
4
5
6
7
8
9
10
[root@localhost /]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@localhost /]# firewall-cmd --reload
success

# 命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
firewall-cmd --reload # 重载防火墙

移除开放的端口

1
[root@localhost /]# firewall-cmd --zone=public --remove-port=80/tcp --permanent

firewalld 基本使用

1
2
3
4
5
6
7
firewalld的基本使用

启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewall

systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

1
2
3
4
5
6
7
8
9
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed

配置firewalld-cmd

1
2
3
4
5
6
7
8
9
10
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic

CentOS7常见问题

发表于 2020-08-18 | 更新于: 2021-04-20

ifconfig command not found解决和netstat -an

1
2
# 没有 ifconfig 和netstat -an 的话安装 net-tools package
$ yum install net-tools

检查端口被哪个进程占用

1
netstat -lnp | grep 8000

查看进程的详细信息

1
ps 11100

杀掉进程

1
kill -9 11100

Docker安装MySQL

发表于 2020-08-18 | 更新于: 2021-06-04

前言

为了更好的管理,打算把MySQL、Redis等服务放在虚拟机中统一部署,这样不会因为这些服务的问题影响到系统本身。前段时间正好在看docker相关的内容,打算在虚拟机中通过docker来使用MySQL等服务。

一、下载镜像文件

1
$ docker pull mysql:5.7

二、查看镜像

1
$ docker images

三、创建实例并启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ docker run -p 3306:3306 --name=mysql57 \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/:/etc/mysql \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

# 参数说明
--restart=always # 当docker重启时,该容器自动重启
--name mysql # 将容器命名为mysql,后面可以用这个name进行容器的启动暂停等操作
-e MYSQL_ROOT_PASSWORD=123456 # 设置MySQL密码为123456
-d # 此容器在后台运行,并且返回容器的ID
-i # 以交互模式运行容器
-p 3306:3306 # 将容器的3306端口映射到主机的3306端口
-v /data/mysql/log:/var/log/mysql # 将配置文件夹挂载到主机
-v /data/mysql/data:/var/lib/mysql # 将日志文件夹挂载到主机
-v /data/mysql/conf/:/etc/mysql # 将配置文件夹挂载到主机
-e TZ=Asia/Shanghai # 时区设置

四、修改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 进入配置目录
$ cd /data/mysql/conf

# 修改数据库配置
$ vim my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

# 重启 mysql57 容器
$ docker restart mysql57

五、设置启动docker时,即运行mysql

1
$ docker update mysql --restart=always

六、启动docker容器的时候报错

1
2
3
$ docker start mysql57
Error response from daemon: driver failed programming external connectivity on endpoint mysql57
Error: failed to start containers: mysql57

解决方法:重启docker

1
$ systemctl restart docker

本地客户端设置远程访问账号

1
2
3
$ docker exec -it mysql bash
$ mysql -uroot -p123456
mysql> grant all privileges on *.* to root@'%' identified by "password";

防火墙设置

1
2
3
4
5
6
# 开放端口:
$ systemctl status firewalld
$ firewall-cmd --zone=public --add-port=3306/tcp -permanent
$ firewall-cmd --reload
# 关闭防火墙:
$ sudo systemctl stop firewalld

deterministic 和 determinat 有什么区别?

发表于 2017-05-08 | 更新于: 2017-05-08

deterministic 和 determinat 翻译过来都是“确定性的”,但这并不代表它们可以互相混用,在并行计算的语境下,它们有着一些根本的差别。

阅读全文 »

Git Cheat Sheet

发表于 2017-04-18 | 更新于: 2017-04-19 | 分类于 Cheat Sheet

Git 本地更改操作

初始化

  • 初始化一个 Git 仓库:git init

提交修改

  • 添加文件到暂存区:git add <file>
    • 添加所有修改到暂存区:git add .
  • 将暂存区的修改提交到版本库:git commit -> 编辑 commit message -> 保存
    • commit message 较简单时,可以:git commit -m "<message>"
  • 为文件添加执行权限,并将修改添加到暂存区:git update-index --chmod=+x <file>

回退修改

  • 回退工作区的修改:git checkout -- <file>
  • 回退工作区的修改,但保存现场:git stash
    • 恢复现场:git stash pop
    • 查看保存的现场:git stash list
  • 回退暂存区的修改到工作区:git reset HEAD <file>
  • 回退版本库的修改到工作区:git reset <commit> 或 git reset –-mixed <commit>
  • 回退版本库的修改到暂存区:git reset –-soft <commit>
  • 回退版本库的修改(不保留):git reset --hard <commit>
    • 如果错误执行了该回退操作,可以通过 git reflog 查看命令历史,命令历史中记载了回退前的 commit id,可以执行 git reset --hard <commit> 回退该回退操作
  • 回退所有未被跟踪的文件:git clean -df

删除文件

  • 从暂存区 + 工作区中删除:git rm <file>
  • 从暂存区中删除:git rm --cached <file>

跟踪文件

  • 强制跟踪指定文件:git update-index --no-assume-unchanged <file>
  • 强制不跟踪指定文件:git update-index --assume-unchanged <file>
阅读全文 »

如何使用 Hexo 和 GitHub Pages 搭建这个博客

发表于 2017-04-11 | 更新于: 2017-04-22 | 分类于 创世记

一个博客的搭建过程分为三步:

  • 编写:包含内容的书写与格式的配置
  • 构建:从编写的原始内容生成可发布的最终内容
  • 发布:让待发布的内容对读者可见

依托于博客平台(如博客园、新浪博客等)发布内容的用户只需要关注编写部分,但要搭建一个独立的个人博客则以上三方面都需要关心。幸运的是,现在有大量的工具帮助我们简化这个过程:丰富的 Markup 语言简化了编写;强大的静态站点生成器简化了构建;友好的托管平台简化了发布。

这个博客的诞生也得益于这些工具:

  • 编写:使用 Markdown,内置大量层级、列表、超链接、代码等的简便语法支持
  • 构建:使用 Hexo,几条命令完成生成、预览、发布步骤
  • 发布:使用 GitHub Pages 进行托管,方便又免费

接下来我会按以下顺序介绍如何基于这些工具完成整个博客的搭建过程:

  • 环境准备
  • Hexo 和 NexT 主题的使用
  • GitHub Pages 的配置与部署
  • 绑定自定义域名(可选)
  • Hexo 的详细配置过程
阅读全文 »
1…56
King's

King's

60 日志
15 分类
33 标签
RSS
© 2020 — 2022 King's
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.2