环境

CentOS Linux release 7.5.1804

安装docker-machine

base=https://github.com/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine

docker-machine -v

安装 virtualbox

将ol7_addons(Oracle Linux的源)添加到yum源

cat << EOF | sudo tee /etc/yum.repos.d/ol7_addons.repo
[ol7_addons]
name=Oracle Linux $releasever Add ons (\$basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL7/addons/\$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
EOF
# Verify this manually if you're paranoid like me
sudo rpm --import http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7
sudo yum makecache

安装VirtualBox

yum -y install VirtualBox-5.2
yum -y install kernel-devel kernel-devel-3.10.0-693.el7.x86_64

查看系统内核版本

➜  ~ uname -sr
Linux 3.10.0-862.el7.x86_64

ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/repoview/kernel-devel.html
下载并安装指定的版本

wget ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/Packages/kernel-devel-3.10.0-862.el7.x86_64.rpm
yum -y install kernel-devel-3.10.0-862.el7.x86_64.rpm

更新

sudo /sbin/vboxconfig

创建 default machine

创建名为default的machine

docker-machine create --driver virtualbox default

如果提示

Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"

则需要关闭虚拟机,在VMware设置中开启虚拟化
VMware 配置

博客更新地址

环境

CentOS Linux release 7.5.1804

Q

新安装CentOS后,为了方便远程ssh,想设置静态IP,但是在/etc/sysconfig/network-scripts/下面只有ifcfg-lo这张Local Loopback网卡的配置文件,并没有我们想要的enp0s3(不同机器的网卡名不一样,也可能是ens33或其它名字)网卡配置文件,想要配置静态IP根本无从下手。

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-lo     ifdown-post      ifup          ifup-plip    ifup-TeamPort
ifdown       ifdown-ppp       ifup-aliases  ifup-plusb   ifup-tunnel
ifdown-bnep  ifdown-routes    ifup-bnep     ifup-post    ifup-wireless
ifdown-eth   ifdown-sit       ifup-eth      ifup-ppp     init.ipv6-global
ifdown-ippp  ifdown-Team      ifup-ippp     ifup-routes  network-functions
ifdown-ipv6  ifdown-TeamPort  ifup-ipv6     ifup-sit     network-functions-ipv6
ifdown-isdn  ifdown-tunnel    ifup-isdn     ifup-Team

A

  • 使用nmcli con show查看网卡的UUID
[root@localhost network-scripts]# nmcli con show
NAME        UUID                                  TYPE      DEVICE  
enp0s3  ad633ea8-e358-255e-a167-6c14742b347d  ethernet  enp0s3 
  • /etc/sysconfig/network-scripts/目录下新建ifcfg-enp0s3(网卡名改成自己机器上的网卡名)
vim ifcfg-enp0s3  # 文件名改为自己的网卡名
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3  # 改为自己的网卡名
UUID=ad633ea8-e358-255e-a167-6c14742b347d  # 改为自己的UUID
DEVICE=enp0s3  # 改为自己的网卡名
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.222  # 改为自己想要的IP,前三段保持和原来的IP一致
NETMASK=255.255.255.0
GATEWAY=192.168.0.1  # 一般为x.x.x.1,具体可在物理机上使用ipconfig命令查看
DNS1=114.114.114.114
DNS2=114.114.115.115
  • 配置文件保存后重启网络服务
systemctl restart network
  • 查看网络信息
[root@localhost network-scripts]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.222  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 de12::f1a4:3694:6189:d250 prefixlen 64  scopeid 0x20<link>
        ether 05:01:24:0a:54:15  txqueuelen 1000  (Ethernet)
        RX packets 221235  bytes 325157863 (310.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 129166  bytes 10537641 (10.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 40  bytes 3528 (3.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40  bytes 3528 (3.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 惯例,调戏下百度
[root@localhost network-scripts]# ping www.baidu.com
PING www.a.shifen.com (115.239.211.112) 56(84) bytes of data.
64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=1 ttl=54 time=12.0 ms
64 bytes from 115.239.211.112 (115.239.211.112): icmp_seq=2 ttl=54 time=11.9 ms
  • 搞定

博客更新地址

环境

CentOS Linux release 7.5.1804

脚本完成操作

  • 切换CentOS软件镜像源为中科大软件源
  • 设置防火墙,允许全部端口通过
  • 安装git
  • 安装Pyenv包管理工具,Pyenv使用详见:Python版本管理工具 Pyenv的安装与使用
  • 安装Python 3.6.4
  • 切换pip源为豆瓣
  • 安装Docker
  • 安装MySQL
  • 初始化MySQL(root@localhost的密码为123456,song@%的密码为123456)
  • 设置sshd开机启动
  • 安装ntp时间自动更新工具

使用

  • Github下载部署脚本代码
  • 百度云下载包含MySQL rpm包的required_rpms文件夹(MySQL官网由于国内特殊的网络环境原因,下载很慢,经常中断导致无法安装,因而将安装所需的rpm包单独down了下来,又因为所有MySQL包加起来有200+M,不方便传到Github上,只能传到百度云上单独下载)
  • 将百度云上下载的required_rpms文件夹加入到代码主目录,最终目录如下:
.
├── 0_start.sh
├── 1_shell_init.sh
├── 2_deploy_firewall.sh
├── 3_install_git.sh
├── 4_install_pip.sh
├── 5_install_docker.sh
├── 6_install_mysql.sh
├── 7_enable_sshd.sh
├── 99_shell_finalize.sh
├── deploy_mysql_hook
│   ├── 0_deploy_mysql.sh
│   └── init_mysql.exp
├── post_hook
│   └── 1_test.sh
├── pre_hook
│   └── 1_test.sh
├── README.md
└── required_rpms
    ├── mysql
    │   ├── mariadb-5.5.56-2.el7.x86_64.rpm
    │   ├── perl-5.16.3-292.el7.x86_64.rpm
    │   ├── perl-Carp-1.26-244.el7.noarch.rpm
    │   ├── perl-constant-1.27-2.el7.noarch.rpm
    │   ├── perl-Encode-2.51-7.el7.x86_64.rpm
    │   ├── perl-Exporter-5.68-3.el7.noarch.rpm
    │   ├── perl-File-Path-2.09-2.el7.noarch.rpm
    │   ├── perl-File-Temp-0.23.01-3.el7.noarch.rpm
    │   ├── perl-Filter-1.49-3.el7.x86_64.rpm
    │   ├── perl-Getopt-Long-2.40-2.el7.noarch.rpm
    │   ├── perl-HTTP-Tiny-0.033-3.el7.noarch.rpm
    │   ├── perl-libs-5.16.3-292.el7.x86_64.rpm
    │   ├── perl-macros-5.16.3-292.el7.x86_64.rpm
    │   ├── perl-parent-0.225-244.el7.noarch.rpm
    │   ├── perl-PathTools-3.40-5.el7.x86_64.rpm
    │   ├── perl-Pod-Escapes-1.04-292.el7.noarch.rpm
    │   ├── perl-podlators-2.5.1-3.el7.noarch.rpm
    │   ├── perl-Pod-Perldoc-3.20-4.el7.noarch.rpm
    │   ├── perl-Pod-Simple-3.28-4.el7.noarch.rpm
    │   ├── perl-Pod-Usage-1.63-3.el7.noarch.rpm
    │   ├── perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm
    │   ├── perl-Socket-2.010-4.el7.x86_64.rpm
    │   ├── perl-Storable-2.45-3.el7.x86_64.rpm
    │   ├── perl-Text-ParseWords-3.29-4.el7.noarch.rpm
    │   ├── perl-threads-1.87-4.el7.x86_64.rpm
    │   ├── perl-threads-shared-1.43-6.el7.x86_64.rpm
    │   ├── perl-Time-HiRes-1.9725-3.el7.x86_64.rpm
    │   └── perl-Time-Local-1.2300-2.el7.noarch.rpm
    ├── mysql57-community-release-el7-11.noarch.rpm
    ├── mysql-community-server
    │   ├── mysql-community-client-5.7.20-1.el7.x86_64.rpm
    │   ├── mysql-community-common-5.7.20-1.el7.x86_64.rpm
    │   ├── mysql-community-devel-5.7.20-1.el7.x86_64.rpm
    │   ├── mysql-community-libs-5.7.20-1.el7.x86_64.rpm
    │   ├── mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm
    │   └── mysql-community-server-5.7.20-1.el7.x86_64.rpm
    └── mysql-devel
        ├── keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
        ├── krb5-devel-1.15.1-8.el7.x86_64.rpm
        ├── libcom_err-devel-1.42.9-10.el7.x86_64.rpm
        ├── libkadm5-1.15.1-8.el7.x86_64.rpm
        ├── libselinux-devel-2.5-11.el7.x86_64.rpm
        ├── libsepol-devel-2.5-6.el7.x86_64.rpm
        ├── libverto-devel-0.2.5-4.el7.x86_64.rpm
        ├── mariadb-devel-5.5.56-2.el7.x86_64.rpm
        ├── openssl-devel-1.0.2k-8.el7.x86_64.rpm
        ├── pcre-devel-8.32-17.el7.x86_64.rpm
        └── zlib-devel-1.2.7-17.el7.x86_64.rpm
  • 在主目录运行source 0_start.sh,等待执行完成即可,执行结果如下:
==================================================
shell exec time
1_shell_init.sh      exec time:      0 m  25 s
pre_hook     exec time:      0 m  0 s
2_deploy_firewall.sh     exec time:      0 m  2 s
3_install_git.sh     exec time:      0 m  7 s
4_install_pip.sh     exec time:      4 m  3 s
5_install_docker.sh      exec time:      1 m  2 s
6_install_mysql.sh   exec time:      1 m  6 s
deploy_mysql_hook    exec time:      0 m  3 s
7_enable_sshd.sh     exec time:      0 m  0 s
post_hook    exec time:      0 m  0 s

all_shell        exec time:      6 m  48 s
==================================================

博客更新地址

0 环境

Ubuntu 16.04

以下命令若无加粗备注说明在本地计算机操作,则都是在服务器端操作

1 修改Ubuntu软件源

Ubuntu安装好之后,安装软件源的服务器地址在境外,速度会比较慢,因此建议修改软件源为国内镜像,这样安装和更新软件会更快些,此处使用的是清华大学开源软件镜像

1.1 备份原有软件源列表

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

1.2 修改软件源为国内镜像

  • 用编辑器打开/etc/apt/source.list
sudo vi /etc/apt/sources.list
  • 而后将文件内原有内容清空,复制以下内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

2 更新软件

  • 更新软件列表
sudo apt-get update
  • 更新本地软件
sudo apt-get upgrade

3 创建新用户

刚登陆进去的时候,默认是root用户,由于root用户拥有很高的权限,也就意味着具有更大的破坏性,因此需要创建一个新用户来作为日常使用用户,需要更高权限的时候,再使用sudo命令来获取。
此处假设我们要创建的用户名为’xiaoming’
* 创建用户并创建用户文件夹

useradd -m xiaoming
  • 为用户设置密码
passwd xiaoming
  • 切换到新用户并进入用户文件夹
su - xiaoming
  • 给新用户赋予超级管理员权限
sudo usermod -a -G adm xiaoming
sudo usermod -a -G sudo xiaoming

4 安装并使用ssh远程登陆

(ssh的安装和配置在我另外一篇文章 https://t.cn/RSuXT2e 内已有详细说明,为方便阅读,特重新整理后粘贴如下)
* 安装ssh服务

sudo apt-get install openssh-server
  • 开启ssh服务
sudo /etc/init.d/ssh start
  • 查看本机IP地址
    inet字段后面的就是你的IP地址
sudo ifconfig
  • 远程登陆
    本地计算机终端内输入ssh <username>@<server IP>
    此处我们假设服务器上的用户名和IP地址为xiaoming和192.168.1.1,请自动替换为自己的,后面不再赘述
ssh xiaoming@192.168.1.1

5 ssh登陆优化配置

(ssh的安装和配置在我另外一篇文章 https://t.cn/RSuXT2e 内已有详细说明,为方便阅读,特重新整理后粘贴如下)

5.1 设置远程登陆快捷键

每次登陆服务器都要输用户名和密码很麻烦,而且IP地址也不好记,因此可以修改.bashrc文件来给远程登陆设置快键键
* 在本地计算机使用编辑器打开.bashrc配置文件

sudo vi ~/.bashrc
  • 在最后面添加以下内容
alias server='ssh xiaoming@192.168.1.1'
  • 关闭文件,并在命令行内输入以下命令重新加载配置文件
source ~/.bashrc
  • 以后在终端内输入server就可以远程登陆服务器了

5.2 添加公钥认证

每次登陆时都要输入服务器的密码很麻烦,也不是很安全,此时就可以添加公钥认证来免去输入密码的麻烦并提高安全性

5.2.1 生成密钥对

  • 本地计算机内输入以下命令
ssh-keygen
  • 会提示以下内容
Generating public/private rsa key pair.
Enter file in which to save the key (/home/python/.ssh/id_rsa): 

直接enter确定就行

  • 接下来系统会提示你设置密码以保证密钥安全,一般直接enter确定密码留空即可,如此即可在使用私钥认证的时候免去输入密码的麻烦

  • 切换到密钥对目录

cd ~/.ssh/
  • 此时就可以看到生成的私钥id_rsa和公钥id_rsa.pub,在~/.ssh目录内,记住无论如何都不要暴露自己的私钥id_rsa

5.2.2 复制公钥到远程服务器

  • 本地计算机内输入以下命令
ssh-copy-id xiaoming@192.168.1.1

5.3 Done!

完成以上配置,你就可以在本地计算机内输入以下命令来ssh远程登陆你的服务器了

server

6 安装多版本Python

安装python2

sudo apt-get install python

查看python2版本

python --version

安装python3

sudo apt-get install python3

查看python3版本

python3 --version

7 安装多版本pip

安装pip2

sudo apt-get install python-pip

安装pip3

sudo apt-get install python3-pip

8 安装ipython

安装ipython2

pip2 install ipython

安装ipython3

pip3 install ipython

0 环境

Ubuntu 16.04

以下命令若无加粗备注说明在本地计算机操作,则都是在服务器端操作

1 安装并使用ssh远程登陆

  • 更新软件列表
sudo apt-get update
```bash

* 更新本地软件
```bash
sudo apt-get upgrade
  • 安装ssh服务
sudo apt-get install openssh-server
  • 开启ssh服务
sudo /etc/init.d/ssh start
  • 查看本机IP地址
    inet字段后面的就是你的IP地址
sudo ifconfig
  • 远程登陆
    本地计算机终端内输入ssh <username>@<server IP>
    此处我们假设服务器上的用户名和IP地址为xiaoming和192.168.1.1,请自动替换为自己的,后面不再赘述
ssh xiaoming@192.168.1.1

2 设置远程登陆快捷键

每次登陆服务器都要输用户名和密码很麻烦,而且IP地址也不好记,因此可以修改.bashrc文件来给远程登陆设置快键键
* 在本地计算机使用编辑器打开.bashrc配置文件

sudo vi ~/.bashrc
  • 在最后面添加以下内容
alias server='ssh xiaoming@192.168.1.1'
  • 关闭文件,并在命令行内输入以下命令重新加载配置文件
source ~/.bashrc
  • 以后在终端内输入server就可以远程登陆服务器了

3 添加公钥认证

每次登陆时都要输入服务器的密码很麻烦,也不是很安全,此时就可以添加公钥认证来免去输入密码的麻烦并提高安全性

3.1 生成密钥对

  • 本地计算机内输入以下命令
ssh-keygen
  • 会提示以下内容
Generating public/private rsa key pair.
Enter file in which to save the key (/home/python/.ssh/id_rsa): 

直接enter确定就行

  • 接下来系统会提示你设置密码以保证密钥安全,一般直接enter确定密码留空即可,如此即可在使用私钥认证的时候免去输入密码的麻烦

  • 切换到密钥对目录

cd ~/.ssh/
  • 此时就可以看到生成的私钥id_rsa和公钥id_rsa.pub,在~/.ssh目录内,记住无论如何都不要暴露自己的私钥id_rsa

3.2 复制公钥到远程服务器

  • 本地计算机内输入以下命令
ssh-copy-id xiaoming@192.168.1.1

3.3 Done!

完成以上配置,你就可以在本地计算机内输入以下命令来ssh远程登陆你的服务器了

server

0 环境

Ubuntu 16.04

1 安装防火墙

Ubuntu的防火墙默认已安装,若无意中卸载,执行以下命令安装

sudo apt-get install ufw

2 启动、禁用、重置UFW

sudo ufw enable

sudo ufw disable

sudo ufw reset

3 查看防火墙状态

sudo ufw status
sudo ufw status numbered  # 按编号显示

4 设置默认策略

默认策略即为拒绝所有传入连接,允许所有传出链接

sudo ufw default deny incoming
sudo ufw default allow outgoing

5 允许SSH连接(重要!)

否则你将无法连接云服务器…

# 以下两条命令效果是一样的
sudo ufw allow ssh
sudo ufw allow 22

6 允许特定单个端口连接

sudo ufw allow 80
sudo ufw allow http

6 允许特定端口范围连接

sudo ufw allow 1000:2000/tcp
sudo ufw allow 2001:3000/udp

7 允许特定IP地址链接

# 允许特定IP所有端口的连接
sudo ufw allow from 111.111.111.111

# 允许特定IP特定端口的连接
sudo ufw allow from 111.111.111.111 to any port 22

8 拒绝特定连接

如果设置的默认安全策略是允许全部传入连接,则可以设置拒绝连接规则

# 拒绝http连接
sudo ufw deny http

# 拒绝特定IP连接
sudo ufw deny from 111.111.111.111

9 删除规则

# 按规则编号防火墙规则
sudo ufw status numbered

# 按规则编号删除防火墙规则
sudo ufw delete 1

环境

Ubuntu 16.04

昨晚心血来潮,看到 Ubuntu 终端里面的用户名,觉得有点长,就试着想改下,于是Google了下,并点开了第一篇文章,成功掉坑,重启 Ubuntu 后登陆页面输入密码一直显示输入错误,后来花了几个小时去搜索解决方案,良莠不齐,综合了一下,成功解决,现分享如下:

系统版本:Ubuntu 16.04,其它版本类似。

  • 第一步
    重启 Ubuntu ,并长按shift键,进入grub菜单,上下键选择Ubuntu高级选项
  • 第二步
    上下键选择recovery mode,不要按回车,按’e’键来编辑启动项

  • 第三步
    执行完第二步之后,你会见到以下界面

    使用上下键,拖到最下面,找到图上红框的部分,即ro recovery nomodeset,将之替换为rw single init=/bin/bash,如果ro recovery nomodeset后面还有内容,全部删掉(删到行尾,下面两行别删),改完效果如下:

  • 第四步
    修改完成后,按Ctrl+xF10进行引导,引导一会后会进入单用户模式,如下图:

    此时输入命令

passwd username # 修改用户名为username的密码,username处替换为你的用户名
passwd # 后面什么都不加即为修改root的密码

重复输入两遍新密码之后,重启系统即可。

  • 第五步
    这个教训告诉我们,对自己不了解的系统文件修改之前,务必创建快照!

环境

Ubuntu 16.04

Ubuntu 系统中,每次打开终端,就会进入系统默认的用户目录/home/username,有时候我们想要修改用户默认目录,以更快速地进入项目进行操作,这时候我们就需要通过以下方法来修改用户默认目录。

  • 第一步
    执行以下代码,修改passwd配置文件
sudo vi /etc/passwd
  • 第二步
    找到用户所在行,vim是用:/你的用户名来快速查找,找到所在行类似下面这种:
smy:x:1000:1000:Shelming.Song:/home/smy:/bin/bash

将其中的/home/smy改成你想要修改成的目录(采用绝对路径),如/home/smy/Desktop/python,其余内容都别改,保存后关闭。

  • 第三步
    关闭终端,重新打开,就自动进入你修改的目录了。