Linux服务器搭建工作需要掌握的核心点
-
虚拟机使用
-
Linunx安装(注意事项)
-
服务器搭建[重点]
-
网络配置[真实阿里云服务器已经联网了]
-
SSH连接远程服务器(putty)
-
FTP文件传输(winscp)
-
升级Python(Linux系统默认自带2.7)
-
虚拟环境管理(virtualenv)
-
django
-
web服务器:(nginx + uwsgi )做django项目发布
-
数据库MySQL
-
DNS解析实现
-
nginx多项目配置
-
1. 虚拟机认识
重要功能:
-
快照功能(保存系统当前状态,后期便于随时还原!)
-
克隆(完全复制一份!)
-
删除虚拟机
2. 安装系统
虚拟机安装[重要]:https://blog.csdn.net/qq_39038465/article/details/81478847
安装步骤: https://blog.csdn.net/babyxue/article/details/80970526
-
必须为虚拟机打开网络
-
硬盘分区
-
boot: 系统引导分区(存储是启动相关的核心文件一般200M,或500M)
-
swap:内存交换分区(充当内存使用: 内存的2倍)
-
/跟分区: 其余所有空间
-
-
记住自己的IP
-
记住自己的root密码
查看服务器IP地址
# ifconfig # 192.168.131.132
注意:centos mini版默认默认ifconfig不能用
#安装网络工具
yum install net-tools
3. 连接
SSH:是客户端和Linux服务器数据传输的加密协议! 特点: 安全,数据压缩,传输速度快!
CentOS 副武器端默认安装了SSH
windows电脑需要安装SSH客户端就可和服务器进行SSH加密通信
常用的SSH客户端 Putty
核心配置(配置IP+端口, 窗口显示行列数, 配置字体大小,设置支持中文 )
4. 使用FTP协议传文件
常用的FTP协议软件,WinScp
在跟目录上传一个文件!!!!....
5. 虚拟机联网
这里简单介绍下三种连网方式的不同:
桥接模式:物理机和虚拟机处于并列状态。在同一网段,物理机网络环境发生变化,虚拟机会受影响。
NAT模式:虚拟机和物理机之间相互独立,不受影响
仅主机模式:虚拟机和物理机直接通讯
-
桥连接(每个虚拟系统,都相当于一个真实电脑! 内网自动分1个IP)
-
NAT方式:
-
192.168.43.2-254 该网段可分给1-253 台电脑!
-
192.168.1-254. 1-254 : 可组建很庞大的内网系统!
-
-
自连接: 只能主机和虚拟机通信!
-
建议使用桥接!
最快联网设置
-
多台虚拟机都设置为 桥接,桥接虚拟机启动时能自动分配内网的IP地址!
-
-
打开虚拟机的联网功能
可在安装虚拟机时打开联网按钮!
如果安装时忘记打开联网功能, 安装完登陆系统改配置文件! 改配置文件打开联网!
配置ip地址等信息在/etc/sysconfig/network-scripts/ifcfg-ens33文件里做如下配置:
# 编辑网络配置文件 vi是编辑文件的命令!
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改内容如下:
BOOTPROTO="static" # 手动分配固定ip [改] 原来是的动态分配: dhcp
ONBOOT="yes" # 该网卡是否随网络服务启动 [改]
IPADDR="192.168.8.134" # 该网卡ip地址就是你要配置的固定IP[加]
GATEWAY="192.168.8.1" # 网关 [加]
NETMASK="255.255.255.0" # 子网掩码 [加]
DNS1="192.168.8.1" # DNS地址 [加]
# IP地址,网关,.子网掩码,DNS: 可以参考主机设置 ipconfig -all
# 该完重启网路
service network restart
DNS和网关信息可在window电脑: cmd---->ipconfig -all 中查看!
vi 编辑器使用:
1. vi 文件名
2. 进入编辑模式(i)
3.改
4: Esc退出, :wq 保存 :q!不保存直接退出
-
检测网络是否能连接成功:
主机和虚拟机之间相互ping
ping 地址
6 . Linux目录结构[重要]
-
软件安装目录: /usr/local
-
系统配置: /etc
-
还可操作(home, root,opt较少)
7 . 下载软件
1. 从yum软件仓库中下载
yum软件源,默认是国外服务器,下载慢!建议替换为国内的,比如:清华镜像
https://mirrors.tuna.tsinghua.edu.cn/help/centos/
2. wget 网址下载
wget https://www.python.org/ftp/python/
注意: 默认mini 版,wget不可用!需要重新安装
3. 直接FTP传到服务器!
最快
小结
熟悉虚拟机操作(快照,克隆,打开,删除)
1. 安装系统(网络,系统分区)
2. 联网(桥接)
3. SSH远程连接
4. FTP协议
5. Linux目录结构
6. 下载软件
软件安装
问题: 虚拟机经常连不上!
问题描述,在班级内虚拟机连接正常, 回到宿舍后发现连不上!!!
原因: 局域网变了,IP地址也自动的发生了变化! 因为桥连接,会自动的从局域网中分一个IP地址!
步骤1: 确保联网方式是:桥连接
步骤2:从虚拟机登陆查看ip
#查看IP
ipconfig
步骤3: 改网络配置文件
# 编辑配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# i 进入编辑模式
#改
BOOTPROTO="dhcp" # IP地址改为动态分配
注释掉手动设置的IP(网络服务器重启后会自动分配)
# IPADDR="192.168.220.101" # 该网卡ip地址就是你要配置的固定IP
# GATEWAY="192.168.220.2" # 网关
# NETMASK="255.255.255.0" # 子网掩码
# DNS1="8.8.8.8" # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地
#退出编辑 ESC :wq 退出并退出
# 重启网络服务器
service network restart
最后: SSH改IP重新连接
安装Python
centos 默认安装python2.7 ,先了解虚拟机中Python的相关信息
# 查看是否有
python -V
# 查看Python这个命令,详细的解析方式
which python
cd /usr/bin
ls -al python* #就可看到 python-->python2--->python2.7
接下来从网上找详细的流程,一定要先确认: 是哪种安装方式?
-
第一种: 改python指令的的软件的连接指向 3.6 [
-
第二种: 添加python3指令,软件连接指向 3.6
选第一种,详细步骤如下
# 1 下载包管理器:gcc
yum -y groupinstall "Development tools" su切换到root根目录
# 2 下载相关依赖
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
# 3. 上传pyton3.6.6.tgz 到安装目录 /usr/local
上传...,也可通过wget手动下载到/usr/local
# 4. 解压 在安装目录加压
cd /usr/local
tar -zxvf Python-3.6.6.tgz #多了Python3.6.6 文件夹
tar Jxvf Python-3.7.0.tgz.xz
# 5.进入 Python3.6.6,
cd Python-3.6.6
# 其实就是将Python编译安装至指定目录,这里指定为/usr/lib/python
# 编译安装,指定安装路径 ./configure --prefix=安装目录
./configure --prefix=/usr/local/python3 #[管理工具和依赖包必须已经安装好]
# 7. 安装
make
# 安装
make install
# 把python3/lib 保存到配置文件中,保存在 /etc/ld.so.conf.d中,并执行ldconfig
echo "/usr/local/python3/lib" >> /etc/ld.so.conf
ldconfig
# 8 .建连接
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
# 测试
python3 -V #执行3.6.6 表示成功
#检查软连接情况
cd /usr/bin
ls -l python* # l表示显示完整路径
pip
# pip建软连接
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3
#测试pip 版本
pip3 -V
pip3 list # 提示版本太低 [注意:pip list 可能报错!]
pip3 版本9.0时pip3 list可能报错,解决
#解决方案:新建
vi /etc/pip.conf`
#添加内容
[list]
format=columns
保存退出
pip 版本更新
pip install --upgrade pip pip3 install --upgrade pip
安装虚拟环境
安装
建议安装虚拟环境.便于管理不同项目!
# 安装 virtualenv
pip3 install virtualenv
#建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
建目录
安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的。(名字按照自己习惯来)
# 创建报错虚拟环境目录 名字是任意的 -p参数:如果没有目录就自动新建!递归创建
mkdir -p /data/env
# 个人网站发布文件夹 .名字都是任意的!
mkdir -p /data/wwwroot
建虚拟环境
创建指定版本的虚拟环境
# 进入env目录
cd /data/env
# 创建虚拟环境
virtualenv --python=/usr/bin/python3 py3_django2
# 启动
cd /data/env/py3_django2/bin
# 激活虚拟环境
source activate # 退出: deactivate
# 安装django等.
pip install django==2.1.3
#查询django版本
pip3 list
# 安装uwsgi(web项目发布相关软件)
pip3 install uwsgi
# 给uwsgi建立软链接,方便使用
ln -s /data/env/py3_django2/bin/uwsgi /usr/bin/uwsgi
# 退出虚拟环境
cd /data/env/py3_django2/bin
deactivate
激活后虚拟环境.左边显示环境名:
上传项目
本地项目上传到wwwroot目录
-
在项目根目录生成项目需要的依赖包文档描述!
pip freeze > requirements.txt
-
setting文件常用设置:
# 允许所有IP访问,一定要加!
ALLOWED_HOSTS = ['*'] -
上传项目到wwwroot下,启动测试是否正常运行!
# 使用winscp上传到 /data/wwwroot下
cd /data/env/py3_django2/bin #进入虚拟环境目录
source activate # 激活虚拟环境
cd /data/wwwroot/mysite #进入我的项目目录
# 下载当前项目需要的依赖包
pip install -r requirements.txt
# 测试项目是否正常启动
python manage.py runserver
配置uwsgi
配置 uwsgi
在mysite的项目跟目录,新建mysite.xml配置文件,上传到/data/wwwroot/mysite下,内容如下
<uwsgi>
<socket>127.0.0.1:8000</socket> <!-- 内部端口,自定义 -->
<chdir>/data/wwwroot/mysite/</chdir> <!-- 项目路径 -->
<module>mysite.wsgi</module> <!-- wsgi.py所在目录名-->
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
保存 注意<module>
里的mysite,为wsgi.py所在的目录名。
nginx相关
下载nginx安装和配置
# 下载
cd /usr/local
wget http://nginx.org/download/nginx-1.13.7.tar.gz
# 解压
tar -zxvf nginx-1.13.7.tar.gz
# 进入目录
cd nginx-1.13.7
# 依次执行以下命令:
./configure --prefix=/usr/local/nginx
make
make install > my_nginx.log
# nginx一般默认安装好的路径为/usr/local/nginx在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak
# 然后打开nginx.conf,把原来的内容删除,直接加入以下内容:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name 自己域名; #改为自己的域名,没域名修改为127.0.0.1:80
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT mysite.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /data/wwwroot/mysite/; #项目路径
}
location /static/ {
alias /data/wwwroot/mysite/static/; #静态资源路径
}
}
}
# 启动,执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:
cd /usr/local/nginx/sbin/
./nginx
# 终端没有任何提示就证明nginx启动成功
# 测试
curl 127.0.0.1:80 #就可以看到网站!
启动项目
启动django项目[最终]
# 进入djnago项目
cd /data/wwwroot/mysite/
# uwsgi 解析项目中的配置文件
uwsgi -x mysite.xml
#以上步骤都没有出错的话。
cd /usr/local/nginx/sbin/
# 重启nginx
./nginx -s reload
# 服务器内部测试是否发布成功
curl 127.0.0.1:80 #就可以看到网站!
# 关闭防火墙,否则远程不能访问!
systemctl stop firewalld.service
查看防火墙状态firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall
开机启动
systemctl disable firewalld.service
通过service iptables status 命令查看是否防火墙是否开启
关闭防火墙 service iptables stop,正常访问
uwsgi源码下载
https://blog.csdn.net/cckavin/article/details/85071547
##部署项目的另一措施
239 cd /usr/bin/
240 224 ls -a uwsgi*
241 225 rm -rf uwsgi
242 226 ls -a uwsgi*
243 227 pip list
244 228 pip install uwsgi
245 229 ln -s /data/env/py3_django2/bin/uwsgi /usr/bin/uwsgi
246 230 cd /usr/bin/
247 231 ls -a uwsgi*
248 232 cd /data/wwwroot/untitled100/
249 233 uwsgi -x untitled100.xml
250 234 cd /usr/local/nginx/sbin/
251 235 ./nginx -s reload
252 236 ./nginx
253 237 curl 127.0.0.1:80
254 238 historynginx
本地测试
http://192.168.8.135 就可以看到图书首页!
查看软件端口
通过监控端口命令,查看程序是否启动.
#查看进程端口号及运行的程序
netstat -atunp
#由端口号port(8000)查看进程id
netstat -anp |grep 8000
#停止
#杀死指定进程根据pid(进程id) uwsgi
kill pid
#强制杀死指定进程根据pid(进程id) nginx
kill -9 pid
多域名配置
https://www.django.cn/article/show-4.html#duo
常见问题
1. 安装python3.6后yum命令无法使用
这是因为yum采用python作为命令解释器,原来系统自带的python解释器为python2.7,然后我之前为了方便将python默认的解释器设为了python3.6,导致按python3.6解析2.7的语法出错了。
解决方法:
修改/usr/bin/yum文件中的第一行为#!/usr/bin/python2.7
服务器环境测试
检测当前服务器的环境,查看已经安装了哪些软件
# 主机网址
ipconfig -all
# 虚拟机联网方式: 桥接
# 查看虚拟机IP
ifconfig # IP前3都一样,网络肯定正常!
# 不正常时:看网络配置文件是否是动态分配IP: dhcp
cat /etc/sysconfig/network-scripts/ifcfg-ens33
# python是否安装
python -V
# 查看python命令如何解析
which python #找到命令位置 /usr/bin
cd /usr/bin
ls -al python* # 重点:3.6的实际安装路径
# 查pip命令如何解析
which pip
cd /usr/bin
ls -al pip*
# 查Python安了哪些包
pip list #检查是否安装了 virtualenv
# 查虚拟环境能用?
virtualenv --version
# 虚拟目录和项目发布目录? 我的习惯(/data/env+wwwroot)
cd /data
#进入虚拟环境,检测软件
pip list
# 检测uwsgi是否可用
uwsgi
which uwsgi
cd /usr/bin
ls -al uwsgi*
# nginx是否安装?
MySQL安装
详细步骤
https://www.django.cn/article/show-2.html
centos7 的yum源仓库包默认不支持mysql, 需要手动添加mysql官方yum仓库
yum指令不能使用
yum解析是默认依赖python2.7
语法错误
#编辑源码
vi /usr/bin/yum
#第一行明确指定python版本未python2
改为 !/usr/bin/python2
改密码
修改密码规则
set global validate_password.policy=0;
set global validate_password.length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123';
修改允许root远程访问
use mysql # 切换库
select host, user from user; #查
update user set host = '%' where user = 'root'; #改
flush privileges; #刷新
sudo service mysqld restart #重启mysql
systemctl stop firewalld.service #关防火墙
详细参考Django中文网
https://www.django.cn/article/show-2.html
错误
yum 指令运行时有可能会提示语法错误!
如果有语法错误,把yum文件头编译的环境指定为python2
启动和停止服务
# 查看启动状态
sudo service mysqld status
#启动(默认随着系统自动启动了)
sudo service mysqld start
#停止
sudo service mysqld stop
生产环境介绍
工作中项目发布真实服务器环境
-
域名(万网/阿里云购买)
-
云服务器(阿里云/华为云/百度云)
-
域名解析到服务器(DNS解析)
买域名
一级域名: www.zhouzhengyang.cn
不带www叫子域名可以包含N个: m.zhouzhengyang.cn
django.zhouzhengyang.cn
阿里购买地址:
https://developer.huaweicloud.com/campus
https://wanwang.aliyun.com/?utm_content=se_1000301943
买服务器
阿里云
https://www.aliyun.com/?utm_content=se_1000301881
DNS解析
域名解析到服务器叫:DNS解析
登陆域名管理平台!
阿里云解析过程
实现: 输入 www.zhouzhengyang.cn 自动打开我的网站
前提:
-
购买:阿里云服务器:
39.98.39.173
-
进入阿里云后台进行DNS解析!
-
解析之前: 需要完成备案!
DNS解析
配置完后:需要配置安全组或叫防火墙
防火墙打开对应的端口,允许对应端口访问服务器
服务器搭建:
python3 + uwsgi + nginx +django2+ mysql5.7或以上
====>nginx 监听80端口 =====> uwsgi: 每个web项目一个端口8000
-
查看nginx 和 uwsgin 或其他软件,的运行状态?
#查看进程端口号及运行的程序
netstat -atunp
#由端口号port(8000)查看进程id
netstat -anp |grep 8000
#停止
#杀死指定进程根据pid(进程id) uwsgi
kill pid
#强制杀死指定进程根据pid(进程id) nginx
kill -9 pid
常用指令
-
解压tar.xz使用 xz -d 命令解压出tar包
xz -d Python-3.6.6.tar.xz
-
tar包解压
tar -xvf Python-3.6.6.tar
-
查找
find / -name *libsqlite3.so
* -
检测服务列
chkconfig --list
service 服务名 start/stop/restart
-
查看nginx 服务是否自动启动
netstat -apn|grep nginx
常用问题
找不到sqlite3模块
https://blog.csdn.net/sparkexpert/article/details/79118448 [详细说明]
对python3进行重新编译
# sudo yum install sqlite-devel
#cd /usr/local/Python-3.6.6
#LD_RUN_PATH=/usr/local/sqlite3/lib ./configure LDFLAGS="-L/usr/local/sqlite3/lib" CPPFLAGS="-I /usr/local/sqlite3/include"
#LD_RUN_PATH=/usr/local/sqlite3/lib make
#LD_RUN_PATH=/usr/local/sqlite3/lib sudo make install
常用指令
-
解压tar.xz使用 xz -d 命令解压出tar包
xz -d Python-3.6.6.tar.xz
-
tar包解压
tar -xvf Python-3.6.6.tar
-
查找
find / -name *libsqlite3.so
* -
检测服务列
chkconfig --list
service 服务名 start/stop/restart
-
查看nginx 服务是否自动启动
netstat -apn|grep nginx
-
查看当前启动端口
netstat -atunt