[原创: 云服务器实战系列] Centos7 基础软件环境搭建

上一篇: [原创: 云服务器实战系列2] 禁用root以及通过远程接入

注意: 安装的系统是Centos 7 x86/64位

基础软件包含:

  • python3
  • nginx
  • git
  • docker
  • mysql
  • redis
  • supervisor(守护进程)
  • etc...

python3

centos系统初始化时会安装有python2.6.x版本, 此处我们使用python3

注意: 如果本机安装了python2,尽量不要管它,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境,

1. 安装依赖

sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc

2. 下载python3

最新的tgz安装包请参考官网 https://www.python.org/downloads/

sudo wget http://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

3. 安装python3

个人习惯安装在/usr/local/python3
创建目录

sudo mkdir -p /usr/local/python3

解压下载好的Python-3.x.x.tgz包

sudo tar -zxvf Python-3.7.5.tgz

4. 编译安装。

进入解压后的目录 && 编译安装

cd Python-3.7.5.tgz
sudo ./configure --prefix=/usr/local/python3
sudo make && make install

5.建立python3的软链

[account@yunServer Python-3.7.5]$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[account@yunServer Python-3.7.5]$ python3
Python 3.7.5 (default, Nov  5 2019, 23:53:13) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

6. 配置环境变量

vi ~/.bash_profile 

修改倒数第二行, 将/usr/local/python3/bin加入PATH

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/python3/bin

export PATH

按ESC,输入:wq回车退出。

修改完记得执行行下面的命令,让上一步的修改生效:

source ~/.bash_profile

检查Python3及pip3是否正常可用:

[account@yunServer Python-3.7.5]$ python3 -V
Python 3.7.5
[account@yunServer Python-3.7.5]$ pip3 -V
pip 19.2.3 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)

python3 python2共存

删除原先的python2的软链接

rm -r /usr/bin/python

新建python软链接指向python3

ln -s /usr/local/python3/bin/python3 /usr/bin/python

因为执行yum需要python2版本,所以我们还要修改yum的配置,执行:

vi /usr/bin/yum

把#! /usr/bin/python修改为#! /usr/bin/python2, 如下图所示:

image

同理:

vi /usr/libexec/urlgrabber-ext-down

将文件里面的#! /usr/bin/python 也要修改为#! /usr/bin/python2, 如下图所示

image

nginx

安装依赖

在编译安装之前,需要安装nginx依赖包pcre-devel

sudo yum -y install pcre-devel

新建安装目录

这里,将会把nginx安装到/usr/local/下, 故在此下新建目录:

sudo mkdir /usr/local/nginx

下载nginx源码包

nginx官网寻找合适的nginx源码包,通过wget下载,这里下载的是1.15.0版本

sudo wget http://nginx.org/download/nginx-1.15.0.tar.gz

下载完成之后,解压源码包

sudo tar -zxvf nginx-1.15.0.tar.gz

进入刚解压出来的目录

cd nginx-1.15.0

编译

sudo ./configure --prefix=/usr/local/nginx

安装

sudo make && make install

配置nginx开机启动

配置nginx开机启动,切换到/lib/systemd/system目录,创建nginx.service文件

cd /lib/systemd/system
sudo vim nginx.service

添加以下内容

并添加以下内容

[Unit]

Description=nginx

After=network.target


[Service]

Type=forking

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx reload

ExecStop=/usr/local/nginx/sbin/nginx quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target

保存并退出,使用下面命令设置开机启动:

systemctl enable nginx.service

相关命令

  • systemctl start nginx.service, 启动,也可以使用sbin/nginx启动
  • systemctl stop nginx.service, 结束nginx
  • systemctl restart nginx.service, 重启
  • systemctl statis nginx.service, 查看运行状态

配置文件

/usr/local/nginx/conf/nginx.conf文件是nginx默认的配置文件,对其修改即可。

验证

配置好之后, 启动nginx: systemctl start nginx.service.
通过浏览器直接访问外网IP, 发现无法连接?

image

查询资料, 原来阿里云默认有一个安全组, 在控制端口的出入.
在阿里云实例的控制界面中, 找到 "更多" -> "网络和安全组" -> "安全组配置", 如下图所示

image

之后进入到:

image

选择"配置规则"

image

同时在"入方向"和"出方向"添加这个端口的安全规则即可, 这里我的配置是:

image

配置好规则之, 即可在浏览器通过访问外网IP或与外网IP绑定的域名了

git

名词简介:

  • git, 是一种版本控制系统
  • gitlib, 是用于实现git功能的开发库
  • github, 是一个基于git实现的在线代码托管仓库
  • gitlab, 是一个基于git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于github一样的系统

安装git

sudo yum -y install git

验证

[account@yunServer ~]$ git --version
git version 1.7.1

docker

安装依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

设置稳定的docker repo库

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

安装 Docker Engine-Community

安装最新版本的 Docker Engine-Community 和 containerd

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

启动docker

sudo systemctl start docker

验证docker

通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。

sudo docker run hello-world
[account@yunServer Python-3.7.5]$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

mysql

docker pull mysql

查找Docker Hub上的mysql镜像

[account@yunServer Python-3.7.5]$ sudo docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation??  8785                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS??  3079                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create??  652                                     [OK]
percona                           Percona Server is a fork of the MySQL relati??  459                 [OK]          ...      

这里我们拉取官方的镜像,标签为5.6

[account@yunServer ~]$ sudo docker pull mysql:5.6

等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为mysql,标签为5.6的镜像。

[account@yunServer ~]$ sudo docker images |grep mysql
mysql               5.6                 b3983abaa3fe        3 weeks ago         302MB

启动docker mysql

/usr/local/mysql目录下新建data目录.用于接将宿主机文件系统上的文件路径映射到容器中,两边双向同步. 然后执行:

sudo docker run --restart=always --name my_mysql -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=youpassword -p 3306:3306 -d mysql:5.6

命令说明:

  • --restart=always, --restart参数有3个可选值 :
    • no, 默认值, 表示容器退出时,docker不自动重启容器
    • on-failure, 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃, 例如: docker update --restart=on-failure:3 [容器名]
    • always, 只要容器退出,则docker将自动重启容器, 如果容器启动时没有设置--restart参数,则通过命令docker update --restart=always [容器名]进行更新.
  • --name my_mysql, 将运行的mysql容器命名为my_mysql
  • -v /usr/local/mysql/data:/var/lib/mysql, 将主机中/usr/local/mysql目录下的data挂载到容器的/var/lib/mysql
  • -d mysql:5.6, 后台运行mysql5.6
  • MYSQL_ROOT_PASSWORD=youpassword, 启动时设置密码为: "youpassword"
  • -p 3306:3306, 将容器的3306端口映射到主机3306端口

若想把目前为止对my_mysql容器做的变更保存下来,可以使用docker commit指令:

docker commit my_mysql local_mysql:5.6

此时, 查看本地容器镜像, 会发现多出一个:

[account@yunServer test]# docker commit my_mysql local_mysql:5.6
sha256:dde65afa24be96e5f5214c2bdd6acd92c8851df7ab9cdd6d3ec824e798eef70a
[account@yunServer test]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
local_mysql         5.6                 dde65afa24be        6 seconds ago       302MB
mysql               5.6                 b3983abaa3fe        3 weeks ago         302MB
hello-world         latest              fce289e99eb9        10 months ago       1.84kB
redis               3.2                 87856cc39862        12 months ago       76MB
[account@yunServer test]# 

此时, local_mysql镜像就保存了当前对my_mysql的更改, 其他云服务器若想使用, 即可使用该镜像.

验证

[account@yunServer test]# docker exec -it my_mysql /bin/bash
root@4ffaa2f14bf8:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.46 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select user, host from user;
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)

mysql> 

本地远程连接云服务器docker mysql

默认情况下, 阿里云服务器并没有开放3306端口, 需要添加安全组规则, 与上文中的开放nginx 80一样, 添加3306端口的安全组规则配置即可.

然后, 就可以通过Navicat for Mysql访问云服务器中的mysql数据库了.

image

redis

docker pull redis

这里我们拉取官方的镜像,标签为3.2

[account@yunServer ~]$ sudo docker pull  redis:3.2

等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为redis,标签为3.2的镜像。

[account@yunServer ~]$ sudo docker images redis
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               3.2                 87856cc39862        12 months ago       76MB

启动docker redis

[account@yunServer local]$ sudo docker run --restart=always -p 6379:6379  --name redis -v /usr/local/redis/data:/data  -d redis:3.2 redis-server --requirepass "password" --appendonly yes
8b26e70f738426982a3e17ca9d795563b462ed1027cfc073bc2b5f77dba00448

命令说明:

  • --restart=always, --restart参数有3个可选值 :
    • no, 默认值, 表示容器退出时,docker不自动重启容器
    • on-failure, 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃, 例如: docker update --restart=on-failure:3 [容器名]
    • always, 只要容器退出,则docker将自动重启容器, 如果容器启动时没有设置--restart参数,则通过命令docker update --restart=always [容器名]进行更新.
  • -p 6379:6379, 将容器的6379端口映射到主机的6379端口
  • --name redis, 将运行的redis容器命名为"redis"
  • -v /usr/local/redis/data:/data, 将主机中/usr/local/redis目录下的data挂载到容器的/data
  • -d redis:3.2 redis-server, 后台运行redis:3.2 redis-server
  • --requirepass "password", 启动时设置密码为: "password"
  • redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

查看运行状态

[account@yunServer local]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
8b26e70f7384        redis:3.2           "docker-entrypoint.s??   4 seconds ago       Up 3 seconds        0.0.0.0:6379->6379/tcp   redis

使用docker redis

注意, 我们启动redis时设置了密码, 因此在redis-cli中输入命令时, 会要求输入密码认证, 此时我们可以输入: auth password来通过认证.

[account@yunServer local]$ sudo docker exec -it 8b26e70f7384 redis-cli
[sudo] password for account: 
127.0.0.1:6379> info
NOAUTH Authentication required.
127.0.0.1:6379> auth password
OK
127.0.0.1:6379> info
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b0df607ad3315254
redis_mode:standalone
os:Linux 3.10.0-957.21.3.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:6.3.0
process_id:1
...

supervisor

安装

sudo pip install supervisor

生成默认配置

[root@yunServer etc]# cd /usr/local/python3/bin/
[root@yunServer bin]# pwd
/usr/local/python3/bin
[root@yunServer bin]# ./echo_supervisord_conf > /etc/supervisord.conf

添加开机自启服务

新建文件:

vim /lib/systemd/system/supervisord.service

并添加以下内容:

[Unit]

Description=Process Monitoring and Control Daemon

After=rc-local.service

[Service]
Type=forking

ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf

SysVStartPriority=99

[Install]

WantedBy=multi-user.target

添加软链接:

ln -s /usr/local/python3/bin/supervisord /usr/bin/supervisord

将启动脚本都能够添加到systemctl自启动服务

[root@yunServer bin]# systemctl enable supervisord.service
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.

启动supervisord

[account@yunServer bin]# sudo systemctl start supervisord.service 

查看运行状态

[account@yunServer bin]# sudo systemctl status supervisord.service
?.supervisord.service - Process Monitoring and Control Daemon
   Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-11-10 11:22:36 CST; 4s ago
  Process: 2521 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf (code=exited, status=0/SUCCESS)
 Main PID: 2524 (supervisord)
    Tasks: 1
   Memory: 14.7M
   CGroup: /system.slice/supervisord.service
           ?..2524 /usr/local/python3/bin/python3.7 /usr/bin/supervisord -c /etc/supervisord.conf

Nov 10 11:22:36 yunServer systemd[1]: Starting Process Monitoring and Control Daemon...
Nov 10 11:22:36 yunServer systemd[1]: Started Process Monitoring and Control Daemon.
[account@yunServer bin]# 

其他

centos7 相关命令

查看消耗内存最多的前40个进程:

ps auxw|head -1;ps auxw|sort -rn -k4|head -40

查看内存使用情况:

free -m

彻底停止进程

kill -9 PIDNumber

systemctl

  • systemctl enable docker.service, 设置docker开机自启动
  • systemctl disable docker.service, 停止docker开机自启动
  • systemctl start docker.service, 启动docker服务
  • systemctl stop docker.service, 停止docker服务
  • systemctl status docker.service, 查看docker服务运行状态
  • systemctl restart docker.service, 重新启动docker服务
  • systemctl list-units --type=service, 查看所有已启动的服务

docker

  • docker ps, 查看容器运行状态
  • docer cp
    • 从容器中copy文件至宿主机中, 如:
      • 将容器my_mysql中的/etc/mysql/my.cnf复制至/usr/local/mysql/目录
      • 命令为: sudo docker cp my_mysql:/etc/mysql/my.cnf /usr/local/mysql/,
    • 从宿主机中将文件copy至容器中, 如: docker cp /opt/test.js my_mysql:/etc/mysql/
  • docker container update, 修改Docker容器启动配置参数, 有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 可能通过:
    • 停止容器, docker stop my_mysql
    • 更新参数, docker container update --restart=always my_mysql
    • 启动容器, docker start my_mysql
  • docker commit, 基于当前的容器创建一个新的镜像(会保存对当前容器的修改), 具体用法可以参考: docker commit

至此, 基础软件环境已安装完成!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容