一、安装python3.8版本
1. 在 Ubuntu 16.04 中,python3 的默认版本为 3.5:
~# python3 -V
Python 3.5.2
2. Ubuntu 官方 apt 库中还未收录 python 3.8,这里使用 deadsnakes PPA 库安装。
$ sudo apt update
$ sudo apt install software-properties-common
- 添加 deadsnakes PPA 源
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
- 安装python 3.8
$ sudo apt install python3.8
- 检查是否安装成功
$ python3.8 -V
Python 3.8.5
二、配置python3.8为系统默认python3
1. 将 python 各版本添加到 update-alternatives
$ which python3.8
/usr/bin/python3.8
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
$ which python3.5
/usr/bin/python3.5
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 2
- 配置 python3 默认指向 python3.8
sudo update-alternatives --config python3
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.5 2 auto mode
1 /usr/bin/python3.5 2 manual mode
2 /usr/bin/python3.8 1 manual mode
Press <enter> to keep the current choice[*], or type selection number:
选择2,回车
以下说明配置成功了
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python3 (python3) in manual mode
三、安装pip
$ sudo apt-get install python3-pip
更新pip版本
$ sudo pip3 install --upgrade pip
四、安装pipenv
pip3 install pipenv
检查pipenv
pipenv --version
五、安装nginx
1. 进入usr目录,创建tengine文件夹
cd /usr
mkdir tengine
2. 进入创建的文件夹,下载Tengine 最新版本
cd /usr/tengine
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
3.解压下载的文件
tar -xvf tengine-2.3.2.tar.gz
4. 进入解压的目录(/usr/tengine/tengine-2.3.2),开始安装
cd tengine-2.3.2/
./configure
报错了
./configure: error: the HTTP rewrite module requires the PCRE library.
5. 安装Nginx所需依赖
(1)更新apt-get
apt-get update
(2)解决依赖包openssl安装
apt-get install openssl libssl-dev
(3)解决依赖包pcre安装
apt-get install libpcre3 libpcre3-dev
(4)解决依赖包zlib安装
apt-get install zlib1g-dev
6. 正式安装Nginx
./configure
make
make install
7.找到Nginx的安装位置(/usr/local/nginx )
cd /usr/local/nginx
ls
8.开启nginx(在sbin目录下)
cd sbin
./nginx
9.打开浏览器,输入ip/域名查看Nginx是否安装成功
六、配置nginx.conf文件
1.进入Nginx安装目录
find / -name nginx
cd /usr/local/nginx
cd conf
vim nginx.conf
2. 重新编写nginx.conf文件
#基础配置,无需改动,有需要可以深入研究
#user nobody;
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
#pid logs/nginx.pid;
#基础配置,无需改动,有需要可以深入研究
events {
use epoll;
worker_connections 1024;
}
http {
#基础配置,无需改动,有需要可以深入研究
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
#access_log logs/access.log main;
#access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/json image/png image/jpg image/jpeg;
gzip_vary on;
server_tag XUNMA;
server_info off;
server_tokens off;
log_format accesslog '$time_iso8601 | $remote_addr | $status | $request | $request_body | $proxy_add_x_forwarded_for | $upstream_addr | $upstream_response_time | $request_time | $unix_time | $scheme://$host:$server_port | $request_completion ' ;
###################核心配置区域################
#Nginx配置 http xxx.xxx.com
include server/www-xxx-com.conf;
}
3.生成项目配置文件
mkdir server
具体配置:
server {
listen 80;
server_name xxx.xxx.xxx; #公网地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /root/.local/share/virtualenvs/xxxxx-7bBwEi2q; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /usr/xxxxx; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT main:app; # 指定启动程序
}
}
- 重启Nginx
每次修改完文件后,都需要重启Nginx,重启后配置即可生效
重启在 nginx 的 sbin目录下
./nginx -s reload
七、上传项目到指定目录(/usr/muxxx)
排除Pipfile、Pipfile.lock文件
1. 在本地生成requirements.text
pipenv lock -r > requirements.txt
2. 通过requirements.text在服务器创建虚拟环境
pipenv install -r requirements.text
八、安装uswgi
1.在服务器虚拟环境安装uswgi
pipenv shell
pipenv install uswgi
安装uswgi可能会出现失败,失败原因是没有安装python3.8-dev
apt-get install python3.8.dev
2. 设置uswgi配置文件(config.ini)
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:5000
# 指向网站目录
chdir = /usr/xxxx/
# python 启动程序文件
wsgi-file = main.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191
存放在项目目录下
3.启动uwsgi
uwsgi config.ini
此时已经正常启动 uwsgi 并将 Flask 项目载入其中了,ctrl+c 关闭程序。但这只是命令启动形式,要使其随同服务器启动并作为后台服务运行才是运营环境的实际所需要。因此接下来我们需要安装另一个工具来引导 uwsgi 。
九、安装并配置Supervisor
1.安装
sudo apt-get install supervisor
Supervisor 的全局的配置文件位置在:
/etc/supervisor/supervisor.conf
2. 配置文件
正常情况下我们并不需要去对其作出任何的改动,只需要添加一个新的 *.conf 文件放在
/etc/supervisor/conf.d/
下就可以,那么我们就新建立一个用于启动 muxxx 项目的 uwsgi 的 supervisor 配置 (命名为:muxxx_supervisor.conf):
[program:muxxx]
# 启动命令入口
command=/root/.local/share/virtualenvs/muxxx-7bBwEi2q/bin/uwsgi /usr/muxxx/config.ini
# 命令程序所在目录
directory=/usr/muxxx
#运行命令的用户名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/usr/muxxx/logs/uwsgi_supervisor.log
其中command前目录地址是该项目虚拟环境根目录
通过项目目录中shell获取
pipenv shell
pipenv --venv
/root/.local/share/virtualenvs/muxxx-7bBwEi2q
command后目录为uwsgi配置地址
3.提前创建logs
项目目录下创建logs目录、logs/uwsgi_supervisor.log文件
4.操作
supervisord -c /etc/supervisord.conf #启动项目
supervisorctl -c /etxc/supervisord.conf #重启项目
supervisorctl update #更新新的配置到supervisord,更新了配置文件后要update 启动
supervisorctl reload #重新启动配置中的所有程序
supervisorctl start program_name #启动某个进程(program_name=你配置中写的程序名称)
supervisorctl # 查看正在守候的进程
pervisorctl stop program_name #停止某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name # 重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl stop all # 停止全部进程
参考资料:
https://www.jianshu.com/p/ce2f559bded6
https://www.cnblogs.com/Ray-liang/p/4173923.html
https://www.jianshu.com/p/8546b879b10b
https://www.jianshu.com/p/b3dd2614a2a2