Linux部署web服务器
步骤
- 安装linux系统
- 安装基础工具包(根据官网)
- 在root账户下 安装python解释器
- 创建专属权限账户,根据需要对账户进行提权,创建虚拟环境
- 上传项目文件,根据requirements文件,安装环境依赖包
- 安装redis数据库
- 安装nginx服务器,调试静态文件访问
- 安装uwsgi,接管flask与nginx间的动态文件访问
实施代码
安装linux
选择centOS系统安装 最新版本
安装基础工具包
设置镜像源
#1.备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#2.设置镜像源
#2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#3、之后运行yum makecache生成缓存
yum makecache
安装基础工具包
# 安装 gcc c的解释器 (只需要装一次 如果已安装,则跳过安装)
yum -y install gcc
# 安装多个库
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 expat-devel libffi-devel wget curl-devel
源码安装python解释器
1. 下载软件
#下载软件 wget url地址 (地址在 官网/ftp/ 找对应版本的源码文件)
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
#解压
tar -xvf Python-3.6.5.tgz
2.安装python
#打开解压文件
#配置 --prefix 设置程序安装路径
#./configure [--enable-optimizations] --prefix=路径 []内,命令执行时间很长,但可以提升效率
$ ./configure --prefix=/usr/local/python3 --enable-optimizations
# 编译和安装
$ make & make install
3.配置环境变量
# 进入编辑 profile
vim /etc/profile
# 添加成环境变量(所有用户都有效)
#export PATH=路径:$PATH
export PATH=/usr/local/python3/bin:$PATH
# 让环境变量生效
source /etc/profile
4. 修改pip镜像源
在家目录下创建一个.pip目录,然后在这个目录下创建pip.conf文件
内容:
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
5. 安装virtualenv
#在线安装virtualenv linux中必须用 pip3
#升级pip
pip3 install --upgrade pip
#安装virtualenv
pip3 install virtualenv
创建专属权限用户
创建用户
#在root用户下运行命令 创建web用户(其用户组名与用户名同名)
adduser webapp
#设置web账户密码
passwd webapp
用户提权
设置web用户的权限配置文件(root账户配置文件)
# 在/etc/sudoers.d/里新建一个权限申请单,名字建议使用同名的用户名
$ vim /etc/sudoers.d/用户名
内容:
用户名 ALL=(ALL) ALL
普通用户提权,
通过sudo命令,得到系统的root权限(需要输入普通用户密码)
切换用户
su webapp : 切换到普通用户webapp权限
su - : 切换到root用户
#在普通用户下使用命令
sudo 命令 相当于运行root权限命令
创建环境
创建虚拟环境
webapp用户提权操作,生成虚拟环境
#sudo virtualenv -p 源路径 目标路径(最安全的方式为绝对路径)
sudo virtualenv -p python3 ./
#打开虚拟环境
source activate
上传项目文件
#可以通过pycharm集成工具sftp远程上传
也可以在操作窗口拖拽完成
注意上传时的用的谁的权限
安装项目运行需要的第三方库
#首先在开发环境中镜像第三方安装包目录
pip freeze > requirements.txt
#打开虚拟环境
source activate
#在虚拟环境中安装工具
pip3 install -r requirements.txt
安装redis数据库
/usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
/opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
源码放哪里?
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
在root权限下
# 下载redis源码,目前下载4.0版本
$ wget http://download.redis.io/releases/redis-4.0.11.tar.gz
# 解压
$ tar -zxvf redis-4.0.11.tar.gz
#打开解压文件 编译redis
make
#安装到本地文件夹,
make install
#将配置文件拷贝到/etc/
cp redis.conf /etc/
#修改/etc/下的配置文件redis.conf 将redis设置为守护进程
daemonize yes
#开启redis服务
redis-server /etc/redis.conf
测试项目代码能否正常运行
注意配置 ip 和 端口
以及开通远程服务器的端口访问权限
在服务器上 配置安全组
安装nginx服务器
nginx服务器要点:1. 是多进程方式工作 2. master进程主要是来管理worker进程,负载均衡管理
- 安装
#在root权限下,yum安装nginx
yum install nginx
测试
$ nginx -t
启动:
$ nginx
关闭/重启
$ nginx -s stop/reload
-
修改配置文件
其配置文件在 /etc/nginx/nginx.conf
# user指定了nginx的worker进程以什么用户和组权限运行,必须改为你开发的用户和所属组 user whn webapps; # 需要修改 # worker_processes代表工人进程的数量,建议和CPU核心数一致 worker_processes auto; # 全局错误日志文件 error_log /var/log/nginx/error.log; # master进程的进程号存放的位置 pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; # ★ 不建议修改这里的include文件,他是代表全局; ★ # ★ 建议修改http空间里的include来包含个人业务网站的配置信息. ★
events { # 每个工人进程的连接最大数 worker_connections 1024; # 使用什么模型进行IO复用 use epoll; #需要添加 }
http { # 日志打印格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 访问日志存储位置及存储内容所使用的格式 access_log /var/log/nginx/access.log main; # 打开内核文件传输的开关 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # 包含content-type的取值依据文件 include /etc/nginx/mime.types; # 若传输文件后缀名无效时,默认content-type的取值 default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. # ★ 系统默认的子配置存储的位置,建议屏蔽后,包含自己工程目录下的文件 ★ include /etc/nginx/conf.d/*.conf; # ★ 配置自己工程项目的nginx配置文件 ★ #include /webapps/whn/elm_webapps/conf.d/*.conf; include /home/webapp/eleme/nginx.conf;
nginx后台配置文件参考:
将原有server配置注释,配置自己的server,并更改http中自己的nginx配置文件路径
server {
# listen代表监听端口
listen 80;
# server_name代表虚拟服务器的域名
server_name www.gmjone.cn;
#静态路由设置
# location代表一条匹配规则,当规则满足时,指定括号里的映射关系
location /static/ {
# 使用alias做虚拟url和物理目录的映射关系.
alias /home/webapp/eleme/apps/static/;
}
#设置动态路由
location / {
# 加载nginx提供的uwsgi模块
include uwsgi_params;
# 利用uwsgi_pass访问本地socket的5050端口,进行进程间通信,
uwsgi_pass 127.0.0.1:5050; #端口号要与uwsgi中配置的端口号一致
}
}
api接口配置文件参考:
server {
# listen代表监听端口
listen 80;
# server_name代表虚拟服务器的域名
server_name _;
#静态路由设置
# location代表一条匹配规则,当规则满足时,指定括号里的映射关系
location / {
# 使用alias做虚拟url和物理目录的映射关系.
alias /home/webapp/eleme/apps/client/;
index index.html
}
#设置动态路由
location /api/ {
# 加载nginx提供的uwsgi模块
include uwsgi_params;
# 利用uwsgi_pass访问本地socket的5050端口,进行进程间通信,
uwsgi_pass 127.0.0.1:5051; #端口号要与uwsgi中配置的端口号一致
}
}
测试静态文件访问
安装uwsgi服务器
#安装
$ pip install uwsgi
配置uwsgi
建议将uwsgi的配置信息保存在文件进行维护,方便管理.在开发环境项目文件中增加一个uwsgi.ini目录,将目录内容同步到生产环境中.
/home/webapp/eleme/uwsgi.ini
uwsgi都运行在127.0.0.1内部端口,由nginx的反向代理来把数据交付过来.
参考配置:
后台服务器配置:
[uwsgi]
# 所有的配置文件的路径必须为绝对路径
# uwsgi服务开放的socket接口的信息
socket = 127.0.0.1:5050
# wsgi规范的模块的路径信息
wsgi-file = /home/webapp/eleme/manager.py
# application的对象名
callable = app
# 运行时,先进入到哪个工程目录
chdir = /home/webapp/eleme/
# 虚拟环境的路径
virtualenv = /home/webapp/env/vflask/
processes = 1
threads = 1
master = true
# 守护进行的日志文件路径 访问没有问题,最后改为守护进程
#daemonize = /home/webapp/eleme/logs/cms.log
客户端配置参考:
[uwsgi]
# 所有的配置文件的路径必须为绝对路径
# uwsgi服务开放的socket接口的信息
socket = 127.0.0.1:5051
# wsgi规范的模块的路径信息
wsgi-file = /home/webapp/eleme/app_api.py
# application的对象名
callable = app
# 运行时,先进入到哪个工程目录
chdir = /home/webapp/eleme/
# 虚拟环境的路径
virtualenv = /home/webapp/env/vflask/
processes = 1
threads = 1
master = true
# 守护进行的日志文件路径 访问没有问题,最后改为守护进程
#daemonize = /home/webapp/eleme/logs/api.log
开启uwsgi,用于测试
#在虚拟环境中测试
uwsgi --http 地址:端口 --wsgi-file 入口文件 --callable 回调函数
uwsgi --http :9904 --wsgi-file manager.py --callable app
#添加日志文件夹
#运行uwsgi 后面为配置文件
uwsgi /home/webapp/eleme/uwsgi.ini
uwsgi /home/webapp/eleme/uwsgi_api.ini
常用命令
netstat -tuanp 查看tcp udp 进程
ps -aux | grep nginx 查看nginx的进程