一、CentOS准备

1、安装
2、yum源

CentOS7 已经安装好了yum工具,使用的官方镜像源

也可以安装阿里源

https://developer.aliyun.com/mirror/

查看yum的镜像源

cd /etc/yum.repos.d/ 进入这个目录 查看所有的repo文件

配置 清华大学镜像仓库(推荐)

 https://mirrors.cnnic.cn/

 https://mirrors.cnnic.cn/help/centos/

配置过程:

第一、先备份一下yum的默认Base镜像源

建议先备份 CentOS-Base.repo

sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

第二、编辑 /etc/yum.repos.d/CentOS-Base.repo 文件

mirrorlist= 开头行前面加 # 注释掉;并将 baseurl= 开头行取消注释(如果被注释的话),把该行内的域名(例如mirror.centos.org)替换为 mirrors.tuna.tsinghua.edu.cn

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirror.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

第三步、退出文件保存

第四步、更新软件包缓存

sudo yum makecache

使用yum安装

yum install 包名

这样子安装 会有提示 问要不要安装

如果不想显示这个提示,直接安装 可以使用参数 -y

查看已经安装的软件包

yum list installed telnet

3、安装其他的源

我们用yum安装软件时,经常发现我们的yum源里面没有该软件,需要自己去wget,然后configure,make,make install,太折腾了。

其实,CentOS还有一个源叫做 EPEL (Extra Packages for Enterprise),里面有1万多个软件,比163的源还强,强烈建议安装。

查看目前所有的源

# 执行命令
yum repolist

# 查询结果
[root@bogon yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * extras: mirror.bit.edu.cn
 * updates: mirror.bit.edu.cn
repo id                             repo name                             status
base/7/x86_64                       CentOS-7 - Base                       10,070
extras/7/x86_64                     CentOS-7 - Extras                        412
updates/7/x86_64                    CentOS-7 - Updates                       945
repolist: 11,427

当前一共有11427个软件

安装epel源

yum -y install epel-release

修改镜像源

修改/etc/yum.repos.d/epel.repo,将mirrorlistmetalink开头的行注释掉。

接下来,取消注释这个文件里baseurl开头的行,并将其中的http://download.fedoraproject.org/pub替换成https://mirrors.tuna.tsinghua.edu.cn

安装IUS软件源

官方 网站 https://ius.io/setup

yum -y install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

二、常用操作

1、查看虚拟机的IP

CentOS7没有ifconfig命令,查看ip可以通过

ip addr命令

找到了 网卡ens33

默认 ens33网卡没有IP地址

接着来查看ens33网卡的配置:

/etc/sysconfig 存放的都是系统配置

 vi /etc/sysconfig/network-scripts/ifcfg-ens33  

然后 修改 ONBOOT=no 改为 yes

以后每次启动操作系统 会自动启动 网卡会有IP

接下来重启网卡服务

D

#如果在CentOS6 使用这个命令
service network restart

有的分支版本中,可能没有service命令操作服务,但是有一个共性的目录 /ect/init.d 这个目录中放着很多服务的快捷方式

此处重启网卡命令还可以使用如下:

/etc/init.d/network restart

在查看 ip add

找到IP地址

cd /etc/sysconfig/network-scripts/ 这个目录下看的了 网卡文件信息

测试:

linux 中 ping 外网 例如 ping www.baidu.com

给CentOS7安装 ifconfig命令

首先使用 yum工具搜索

yum search ifconfig

会搜索到

net-tools.x86_64 : Basic networking tools

在第一次安装的时候,有问题,在window的cmd下ping不通虚拟机的IP。后来重新安装了一次VM软件、重新创建虚拟机 才好使了。

这里需要说明一下:之前修改网卡文件,把ONBOOT=no不是必须要这样子做的,在开始安装CentOS7的时候,有一个设置界面,设置 分区,还可以设置网络network,在这里打开网络,出现分配的IP,就可以实现自动设置了。在设置 打开 网络的时候 可能没有IP出现 这个时候 要 去VM-编辑-虚拟网络设置 中 找到NAT连接网卡 一般是VM 8网卡,重新设置一下 IP就会激活出来。

2、ssh

ssh协议 : 实现远程连接、远程文件上传

协议使用端口号:默认是22

ssh配置可以被修改,/etc/ssh/ssh_config

服务器启动/停止/重启

service sshd start/stop/restart

ssh是服务必须开启的服务,不然就连接不上了。

CentOS7的 Min版本 默认页安装了ssh协议 并且启动了sshd服务

可以通过 ps -ef |grep ssh 查看

这个时候 就可以 使用 终端来连接Linux服务器了

这里使用Putty来连接。在Host Name里输入IP 在Port输入22

点击Open,这时候会报一共错误

1-6

这是因为 ssh是需要 公钥私钥 才能建立连接,这个是服务器把公钥发给我们,要不要缓存起来。

我们要点是 才行。 然后 输入 用户名 密码 等几秒钟连接 就可以

login as: root
root@192.168.87.128's password:
Last login: Sat Aug  1 06:44:17 2020

dd[root@bogon ~]#
[root@bogon ~]# dir
anaconda-ks.cfg
[root@bogon ~]#
3、使用xshell登录

在CentOS7_Min版本中 已经安装好了sshd服务,且在sshd_config文件中,已经配置了

PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords no

我们这里只需要修改

PermitRootLogin no     不阻止root登录
4、安装vim

vim命令在最小安装时centos7系统没有自带,安装vim命令

yum install -y vim
5、安装tree树形
yum -y install tree

然后执行

tree

6、创建新用户

创建的新用户,可以ssh远程登录,默认是不能远程登录的,新创建的用户。

这里简单配置一下 让指定的用户可以ssh远程登录

cd /etc/ssh 目录
找到 sshd_config 配置文件

#PermitRootLogin yes
在下面编写运行哪些用户登录,
AllowUsers  root chenpengfei yangtianjiao huiteng chenzhao lianxu yuboyang

三、安装python环境

1、安装python
# 安装Python3.6
yum -y install python36u
yum -y install python36u-devel

创建python3连接

ln -s /bin/python3.6  /bin/python3
2、安装pip3
yum install python36u-pip -y

创建pip3连接

ln -s /bin/pip3.6  /bin/pip3

给pip配置国内镜像:

首先:先升级pip版本

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U

然后进行配置:

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

注意:

在安装成功python、pip以后 有时候会自动创建连接符,不需要在创建。

3、安装mysqlclient

安装之前 必须 先执行下面的安装,否则会报错

1-8

yum -y install mysql-devel gcc gcc-devel python-devel

四、安装数据库

1、安装mysql

去官网上查看 https://dev.mysql.com/downloads/repo/yum/ mysql的yum仓库

这里安装mysql 的源

yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

检查MySQL源是否安装成功

yum repolist enabled

部分结果:
mysql-connectors-community/x86_64                   MySQL Connectors Community           
mysql-tools-community/x86_64                        MySQL Tools Community                 
mysql80-community/x86_64                            MySQL 8.0 Community Server     

源安装好以后,安装mysql服务

yum install mysql-community-server


Transaction test succeeded
Running transaction
  Installing : mysql-community-common-8.0.21-1.el7.x86_64                                                               1/7
  Installing : mysql-community-libs-8.0.21-1.el7.x86_64                                                                 2/7
  Installing : mysql-community-client-8.0.21-1.el7.x86_64                                                               3/7
  Installing : net-tools-2.0-0.25.20131004git.el7.x86_64                                                                4/7
  Installing : mysql-community-server-8.0.21-1.el7.x86_64                                                               5/7
  Installing : mysql-community-libs-compat-8.0.21-1.el7.x86_64                                                          6/7
  Erasing    : 1:mariadb-libs-5.5.65-1.el7.x86_64                                                                       7/7
  Verifying  : mysql-community-server-8.0.21-1.el7.x86_64                                                               1/7
  Verifying  : mysql-community-libs-8.0.21-1.el7.x86_64                                                                 2/7
  Verifying  : mysql-community-client-8.0.21-1.el7.x86_64                                                               3/7
  Verifying  : mysql-community-libs-compat-8.0.21-1.el7.x86_64                                                          4/7
  Verifying  : net-tools-2.0-0.25.20131004git.el7.x86_64                                                                5/7
  Verifying  : mysql-community-common-8.0.21-1.el7.x86_64                                                               6/7
  Verifying  : 1:mariadb-libs-5.5.65-1.el7.x86_64                                                                       7/7

Installed:
  mysql-community-libs.x86_64 0:8.0.21-1.el7                 mysql-community-libs-compat.x86_64 0:8.0.21-1.el7
  mysql-community-server.x86_64 0:8.0.21-1.el7

Dependency Installed:
  mysql-community-client.x86_64 0:8.0.21-1.el7                 mysql-community-common.x86_64 0:8.0.21-1.el7
  net-tools.x86_64 0:2.0-0.25.20131004git.el7

Replaced:
  mariadb-libs.x86_64 1:5.5.65-1.el7

需要安装 Total download size: 553 M

MySQL服务操作

# 启动服务
systemctl start mysqld

# 查看服务
systemctl status mysqld

mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-08-01 16:06:52 EDT; 12s ago

修改 MySQL 中 root 本地登录密码

先在日志中查找 生成的密码

grep 'temporary password' /var/log/mysqld.log

[root@bogon ~]# grep 'temporary password' /var/log/mysqld.log
2020-08-01T20:06:49.105603Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: J<wGLsguq9?n

使用密码root登录

mysql -u root -p

不过进行其他操作的时候,会发现 提示你用alert 语句去修改密码,这个密码只是临时密码。

mysql> use mysql
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

修改root用户密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'JiYun_123456';

密码组成:

mysql> show global variables like '%validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

# 解释
validate_password_dictionary_file :验证密码的字典文件,与之相同的不可使用

validate_password_length :密码最少长度

validate_password_number_count :最少数字字符数

validate_password_mixed_case_count :最少大写和小写字符数(同时有大写和小写)

validate_password_special_char_count :最少特殊字符数

validate_password_policy :密码安全策略
    LOW: 只限制长度
    MEDIUM: 限制长度、数字、字母、特殊字符
    STRONG: 限制长度、数字、字母、特殊字符、字典


#默认是中等,密码必须由   大写字母、小写字母、数字、特殊字符组成   且长度为8位

退出mysql

Ctrl+Z

修改密码策略

在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件

validate_password_policy=0

如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:

validate_password = off

重新启动mysql服务使配置生效:

systemctl restart mysqld

允许远程登录

MySQL默认只允许root帐户在本地登录,想要远程连接MySQL,必须开启root用户允许远程连接,或者添加一个允许远程连接的帐户。

首先查看mysql的 user表

select * from user \G

*************************** 4. row ***************************
                    Host: localhost
                    User: root
             Select_priv: Y
             Insert_priv: Y
             Update_priv: Y
             Delete_priv: Y
             Create_priv: Y
               Drop_priv: Y
             Reload_priv: Y
           Shutdown_priv: Y
            Process_priv: Y
               File_priv: Y
              Grant_priv: Y
         References_priv: Y
              Index_priv: Y
              Alter_priv: Y
            Show_db_priv: Y
              Super_priv: Y
   Create_tmp_table_priv: Y
        Lock_tables_priv: Y
            Execute_priv: Y
         Repl_slave_priv: Y
        Repl_client_priv: Y
        Create_view_priv: Y
          Show_view_priv: Y
     Create_routine_priv: Y
      Alter_routine_priv: Y
        Create_user_priv: Y
              Event_priv: Y
            Trigger_priv: Y
  Create_tablespace_priv: Y
                ssl_type:
              ssl_cipher: 0x
             x509_issuer: 0x
            x509_subject: 0x
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: caching_sha2_password
   authentication_string: $A$005$QVf`
hi@? _:w.FDDatpHPPpgl.7j830gDg9X.HbKF05PzcdmXptHuD
        password_expired: N
   password_last_changed: 2020-08-03 20:01:07
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: Y
          Drop_role_priv: Y
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL
4 rows in set (0.01 sec)

可以看到 root用户默认只能访问localhost 也就是只能本地登录,不能远程登录。

查询mysql具体版本

SELECT @@VERSION

mysql> select @@VERSION;
+-----------+
| @@VERSION |
+-----------+
| 8.0.21    |
+-----------+

此版的的mysql版本把将创建账户和赋予权限分开了

早期可以合二为一

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'JiYun_123456' WITH GRANT OPTION;

创建可以远程访问的root用户

create user 'root'@'%' identified by  'JiYun_123';

给远程root用户赋予权限

grant all privileges on *.* to 'root'@'%' with grant option;

操作后要执行刷新,远程用户才能有效

flush privileges;

查看数据库使用的字符集

show variables like '%character%%'


+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+

MySQL忘记root用户密码,解决方案
在 /etc/my.cnf文件[mysqld]下面加如下命令

[mysqld]
skip-grant-tables  #设置为跳过授权认证 不验证密码
mysql  -u root

#update mysql.user set authentication_string=password('newPass') where user='root' and #Host = 'localhost';

flush privileges

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Jiyun_123';

flush privileges
2、安装redis

yum安装 ,不是最新的,可以去下载源 下载最新的

yum install redis

启动redis服务

systemctl start redis


[root@bogon etc]# ps -ef | grep redis
root       8460   8342  0 23:21 pts/0    00:00:00 grep --color=auto redis
[root@bogon etc]# systemctl start redis
[root@bogon etc]# ps -ef | grep redis
redis      8467      1  0 23:22 ?        00:00:00 /usr/bin/redis-server 127.0.0.1:6379
root       8471   8342  0 23:22 pts/0    00:00:00 grep --color=auto redis

查看版本:

[root@bogon etc]# redis-cli --version
redis-cli 3.2.12

设置为开机自动启动

systemctl enable redis.service


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

redis默认只能访问localhost,开启远程访问

在redis配置文件 /etc/redis.conf 中配置:

bind 127.0.0.1  192.168.87.129

重启redis服务

systemctl restart redis

代进一步认证:

redis 3.2后新增protected-mode配置,默认是yes,即开启。解决方法分为两种:

1、设置 protected-mode 为 no 

2、配置bind或者设置密码


在redis的配置文件/etc/redis.conf中:

1.bind 127.0.0.1改为 #bind 127.0.0.1

2.protected-mode yes 改为 protected-mode no

3、防火墙操作

在防火墙上给 6379端口 放行

# 开端口命令:
firewall-cmd --zone=public --add-port=6379/tcp --permanent

# 重启防火墙:
systemctl restart firewalld.service 

命令含义:

--zone #作用域 
--add-port=80/tcp  #添加端口,格式为:端口/通讯协议 
--permanent   #永久生效,没有此参数重启后失效 

其他防火墙命令:

# 设置开机自启
systemctl enable firewalld.service

 #检查防火墙状态是否打开
firewall-cmd --state

# 查看开启的所有的端口的方法:
firewall-cmd --list-all

远程登录redis

在cmd命令行上输入命令:

C:\Users\fan>redis-cli -h 192.168.87.129 -p 6379
192.168.87.129:6379>
进入到了redis中

五、安装nginx

1、安装源

官方提供的 源的配置 http://nginx.org/en/linux_packages.html#RHEL-CentOS

步骤1: 安装先决条件

yum  install yum-utils

步骤2:创建源文件

vi /etc/yum.repos.d/nginx.repo

步骤3:写入源文件内容

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2、安装

步骤4:安装

yum install nginx

步骤5: 启动 nginx服务

systemctl start nginx

# 查看状态
systemctl status nginx

步骤6:临时关闭防火墙 或者把80端口 添加到防火墙

# 临时关闭防火墙
systemctl stop firewalld.service
3、测试

通过本地浏览器访问 虚拟机IP地址 会发现 Nginx

1-7

如果不关闭,默认80端口是不放开的,window主机浏览器 是无法访问到虚拟机上的nginx服务的。

4、其他问题
# 永久关闭防火墙命令
systemctl disable firewalld

# 关闭selinux
vim /etc/selinux/config

修改
SELINUX=enforcing
为
SELINUX=disabled
5、卸载
1:停止Nginx软件
    service nginx stop
2:删除Nginx的自动启动
    chkconfig nginx off
3:从源头删除Nginx
    rm -rf /usr/sbin/nginx
    rm -rf /etc/nginx
    rm -rf /etc/init.d/nginx
4:再使用yum清理
    yum remove nginx

6、配置
  • 让nginx的 用户所有者为root

默认nginx的用户所有者为 nginx,那只能访问nginx对应的目录文件,不能访问非nginx用户所有文件,修改给其他用户,例如,修改为root用户,则可以访问到任何位置的目录与文件。

否则会报错:open() "/home/jiyun/index.html" failed (13: Permission denied)

  • 配置静态目录-alias

nginx处理静态资源,我们的静态资源在 /home/jiyun目录下

则配置为

 location /static/ {
        alias /home/jiyun/;
 }

 jiyun目录下有index.html文件,访问地址为
 # 访问地址
 http://192.168.87.151/static/index.html

alias 就是别名的意思,意思是 /home/jiyun/ 目录的别名就是/static/, 则访问index.html文件就是

/static/index.html

  • 配置静态目录-root

    也可以使用root配置静态目录

    location /static/ {
        #alias /home/jiyun/;
        root /home/jiyun/;

    }

 那jiyun目录下必须有staitc目录,index.html在static目录中
 访问地址为: /home/jiyun/static/index.html

六、安装uwsgi

uWSGI是一个Web应用服务器,它实现了WSGI协议、uwsgi、http等协议

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

  • WSGI是一种通信协议。
  • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
  • 而uWSGI是实现了uwsgi和WSGI两种协议的Web应用服务器。

我们这里要安装的就是 uWSGI服务器

1、安装

注意:一定要先安装 python-devel 经过测试 否则 安装uwsgi会报错

# 安装编译工具
yum install -y gcc* pcre-devel openssl-devel

# 安装开发包
yum install python3-devel -y
# 安装 uwsgi 就是服务器
pip3 install uwsgi

2、配置

3、与nginx进行配置

七、Docker操作

1、准备工作

docker官方网站 介绍如何在 CentOS上安装

https://docs.docker.com/engine/install/centos/

步骤1:前提条件

前提条件:要安装Docker Engine,需要一个CentOS7的版本。

该centos-extras库必须启用。默认情况下,此存储库是启用的

步骤2:卸载旧版本

旧的Docker版本称为dockerdocker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。Docker Engine软件包现在称为docker-ce

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2、开始安装

首先 添加docker源 到yum源中

# 安装yum 的工具包
yum install -y yum-uitls

# 添加docker的源到yum
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装Docker Engine

# 安装最新版本的docker引擎 docker客户端 docker容器
yum install docker-ce docker-ce-cli containerd.io

启动Docker服务

systemctl start docker

# 把docker设置为 开机自启动
systemctl enable docker

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

docker run hello-world

# 显示结果
Hello from Docker!
This message shows that your installation appears to be working correctly

这个命令会去 下载 hello-world 镜像 并在容器中运行。

升级Docker Engine

yum -y upgrade

卸载docker引擎

yum remove docker-ce docker-ce-cli containerd.io

镜像、容器、数据卷或自定义的配置文件不会自动删除,需要手动删除

rm -rf /var/lib/docker
3、配置阿里镜像加速器

之所以要配置镜像加速,是因为默认访问官方的镜像太慢,导致TimeOut

例如:

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshaketimeout

通过配置文件/etc/docker/daemon.json来使用加速器

vi daemon.json 

添加内容:
{
  "registry-mirrors": ["阿里提供的加速器地址"]
}

执行重启

systemctl daemon-reload

systemctl restart docker

八、安装其他常用软件

1、安装Git
# 安装
yum install git -y

# 查看版本
git --version

继续 跟着docker官方文档 学习docker

https://docs.docker.com/get-started/part2/

九、运用Docker部署-基础篇

1、给docker配置国内源

这里介绍使用阿里的镜像源

https://cr.console.aliyun.com/cn-beijing/instances/mirrors?accounttraceid=ab47ebdebb2c414d92c70f282e46c876uuzd

具体可以参考阿里文档。

2、docker运行mysql的数据库

因为在一台电脑上进行部署,因此需要一个桥接网络

docker network create hello_network

首先 下载mysql

docker pull mysql:5.6

注意用 5. 7 5.8 还需要进入到mysql容器里 进行密码修改

初始化root密码

docker run -d --network hello_network --name fmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

并且进入到docker容器里,可以操作容器

也可以单独进入

docker exec -it fmysql /bin/bash
root@bfb96fd28ed3:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.21 MySQL Community Server - GPL

........................

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

mysql>

创建 应用需要的数据库

create database hello_pro
3、项目拷贝到CentOS服务器

这里使用scp 命令,scp是linux系统基于ssh登录进行安全的远程文件拷贝命令。

基本格式:

scp [可选参数] 拷贝的文件  目标目录

也可以使用可视化工具 FileZilla 通过ssh连接 来实现登录

windows平台上的django项目就上传到了CentOS7的服务器上

这个时候 CentOS7上没有安装python环境,因此不能运行。

如果要运行可以安装python环境,然后pip安装各种需要的包

4、把应用构建成镜像

1、首先需要保证应用的环境是一致的,这里使用python:3.6镜像开始构建

docker pull python:3.6

2、准备好应用需要安装哪些包,在window上通过运行

pip freeze > requirements.txt

名字不是必须叫requirements.txt 约定成俗 这么叫

或者也可以直接安装

5、编写Dockerfile文件
FROM python:3.6
WORKDIR /home/work
RUN pip install django==2.0.4 mysqlclient djangorestframework
COPY . .
EXPOSE 8000
CMD ["python","manage.py","runserver"]

运行

docker run -d --name hello --network hello_network  -p 8080:8000  hello

运行如果不成功,则进入 容器 启动一下 python manage.py runserver

看看是不是成功了。

发现运行不成功,进入到了 应用容器里 执行 python manage.py runserver 报错:

(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

连接不到数据库

这是因为不在一个网络中,设置了 --network 就不会有这个错误了

6、容器连接

Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so:

#修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
#更新用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 
#刷新权限
FLUSH PRIVILEGES;
#重置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
docker stop $(docker ps -a -q) 
docker rm $(docker ps -a -q) 

十、运用Docker部署-中级篇

上面在运行的时候,需要允许的参数太多了,而且 容器有先后顺序,需要在启动mysql容器在启动应用容器

如果有三四个 甚至更多,启动过程太麻烦,不容易记住。

可以使用Docker提供的Compose来管理容器。

可以通过yum下载

yum install docker-compose

这个版本是1.18的,如果需要最新版本,可以去GitHub上下载

https://github.com/docker/compose/releases

附录--错误

1、负载均衡 连接拒绝-没有权限

在使用nginx与uwsgi 配置负载均衡的报错

*8 connect() to 127.0.0.1:8800 failed (13: Permission denied) while connecting to upstream

没有权限 连接 upstream负载均衡的 uwsgi,这个解决方案:

  • 1、首先 把nginx的 user nobody 改成 user root

  • 2、如果还不好的话,应该是安全问题

    2.1 关闭SeLinux

    查看SELinux状态:
    
    1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态
    
    SELinux status:                 enabled
    
    2、getenforce                 ##也可以用这个命令检查
    
    关闭SELinux:
    
    1、临时关闭(不用重启机器):
    
    setenforce 0                  ##设置SELinux 成为permissive模式
    
    ##setenforce 1 设置SELinux 成为enforcing模式
    
    2、修改配置文件需要重启机器:
    
    修改/etc/selinux/config 文件
    
    将SELINUX=enforcing改为SELINUX=disabled
    
    重启机器即可
    

    2.2执行下面的命令

    setsebool -P httpd_can_network_connect 1
    

2、负载均衡-连接关闭

错误:*12 upstream prematurely closed connection while reading response header from upstream

upstream prematurely closed connection while reading response header from upstream,

翻译:从上游读取响应头时,上游过早关闭连接。

最后修改:2021 年 09 月 05 日
如果觉得我的文章对你有用,请随意赞赏