Ubuntu 是比较受欢迎的 Liunx 系统,广泛应用有服务器领域,同时各种 GUI 版本层出不穷。本文将搭建一个 Ubuntu 网站服务器,部署 Django+uWSGI+nginx 。本文在 16.04.6 稳定版下通过,其他版本应该也一样。
Ubuntu
选择下载一个自己熟悉的 Ubuntu 版本,desktop 字样代表有界面。
http://mirrors.aliyun.com/centos/7/isos/x86_64/
## ubuntuOS ==> ubuntu-16.04.6-desktop-amd64.iso
https://mirrors.aliyun.com/ubuntu-releases/16.04.6/
注:可安装在 Virtualbox 等虚拟,虚拟机网络类型选择桥接,可以进行访问。
准备
为了方便起见,躲过权限相关的坑,直接使用 root 账号进行操作。
# 创建root账户
sudo passwd root
# 使用 root
su root
# 升级工具
apt update
# 遇到 lock 的执行一下
sudo rm /var/lib/dpkg/lock
SSH
开启 SSH 可远程管理,使用 putty、iTerm 或者系统自带的 shell 工具进行操作。
# ssh 开启
# 默认只安装ssh-client服务
dpkg -l | grep ssh
# 安装ssh-server服务
sudo apt-get install openssh-server
dpkg -l | grep ssh
# 然后确认ssh-server是否启动了
ps -e | grep ssh
# 启动 ssh
sudo /etc/init.d/ssh start
# 也可以用以下命令启动
sudo service ssh start
SSH 相关的配置:
# 配置相关: 支持远程访问
sudo nano /etc/ssh/sshd_config
# 在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222
# 把配置文件中的”PermitRootLogin without-password”加一个”#”号,把它注释掉
# 把配置文件中的”PermitRootLogin prohibit-password”加一个”#”号,把它注释掉
# 增加一句
PermitRootLogin yes
# 然后重启SSH服务:
sudo /etc/init.d/ssh restart
sudo service ssh restart
# nano
完成后按ctrl+x退出,按y保存
网络配置:
# 查看网络信息
ip addr
ifconfig
# 修改 IP 最后 ens32 为网卡名称
nano /etc/sysconfig/network-scripts/ifcfg-ens32
# or
nano /etc/network/interfaces
# 修改以下
bootproto=static
onboot=yes
# 在最后加上几行,IP地址、子网掩码、网关、dns服务器
IPADDR=192.168.1.160
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
# 重启网络服务
systemctl restart network
service network-manager restart
/etc/init.d/networking restart
SSH 使用:
# 在终端输入,对应域名
ssh root@192.168.1.160
# 连接成功后输入密码即可登录成功
Miniconda
Miniconda 可实现 python 版本的虚拟环境。首先,进行安装:
# 下载 miniconda, 官网 https://docs.conda.io/en/latest/miniconda.html
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 执行安装
sh Miniconda3-latest-Linux-x86_64.sh
# 安装过程中提示选择安装目录,推荐如下目录
/home/miniconda3
# 异常处理
eval "$(/home/miniconda3/bin/conda shell.bash hook)"
conda init
miniconda 相关配置:
# 写入环境变量
sudo nano /etc/profile
# 增加到 尾部
export PATH="/home/miniconda3/bin:$PATH"
# 修改源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
# 创建环境并安装包
conda create -n py37 python=3.7 django uwsgi
# 激活环境
conda activate py37
# OR
source activate py37
# 退出环境
conda deactivate
# 安装 python 包
conda activate py37
conda install django uwsgi
# or
pip install django uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
# conda 如果用安装找不到的包,可用以下命令
conda install -c conda-forge
一般做数据处理分析时可能需要以下包:
django pandas xlrd openpyxl xlsxwriter
xlwings premailer requests matplotlib
seaborn drymail pyecharts arrow
uwsgi 安装配置
需要进入相应环境下进行安装。
conda install uwsgi
# or
pip install uwsgi
测试:
# 创建以下内容的 test.py 测试文件
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return ["Hello World"]
执行以下命令进行测试,在浏览器中按端口打开
uwsgi --http :8000 --wsgi-file test.py
# 最后在项目根目录下运行 uwsgi 命令,载入配置文件
uwsgi --ini uwsgi.ini
文件配置,在项目根目录中 增加 uwsgi.ini 文件,内容为:
# uwsgi.ini
[uwsgi]
# 与nginx通信
socket = :8000
# socket = /home/www/uwsgi.sock
# 让uwsgi作为单独的web-server,这里注释掉
# http = :8888
# django项目根目录
# 根据实际情况改写成自己django项目的路径
chdir = /home/www/gairuo
# 本项指示uwsgi.py文件的位置,其位于Django工程目录下有个与
# 工程名同名的子文件夹内(设置方式为:文件夹名.wsgi)
# module = mysite_django
# web 为 app 名
wsgi-file = web/wsgi.py
# 修改 py 代码后自动重启uwsgi
py-autoreload=1
buffer-size = 65536
max-requests = 6000
chmod-socket = 664
processes = 4
threads = 2
master = True
pidfile = uwsgi.pid
daemonize = uwsgi.log
# uwsgi --stop uwsgi_stop.pid
# 虚拟环境地址
virtualenv = /home/miniconda3/envs/py37
Nginx 安装配置
安装 Nginx:
# 准备,升级工具
apt update
# 安装
sudo apt install nginx
# 异常处理
# ps -A | grep apt
# sudo kill 2725
# sudo rm /var/lib/dpkg/lock
文件配置,在项目根目录中 增加 nginx.conf 文件,内容为:
server {
listen 8888;
# server_name ;
charset UTF-8;
access_log /home/www/gairuo/nginx_access.log;
error_log /home/www/gairuo/nginx_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_read_timeout 20;
}
location /static/admin {
alias /home/miniconda3/envs/py37/lib/python3.7/site-packages/django/contrib/admin/static/admin/;
}
location /static {
# expires 30d;
# autoindex on;
# root /home/www/gairuo/static/;
# add_header Cache-Control private;
alias /home/www/gairuo/static/;
}
}
相关配置:
# 链接配置让它生效
sudo nano /etc/nginx/nginx.conf
# http {} 内 include 旁边加
include /home/www/gairuo/nginx.conf;
# 或者建立软链接(推荐)
sudo ln -s /home/www/gairuo/nginx.conf /etc/nginx/sites-enabled/gairuo_nginx.conf
# 重启
sudo service nginx start
# or
sudo /etc/init.d/nginx restart
uwsgi --ini /home/www/gairuo/uwsgi.ini
# 默认站点处理-关闭
cd /etc/nginx/sites-enabled
sudo nano default # 全注销
sudo service nginx restart
# 如果出现 400 可看 uwsgi.log
# kill 占用的端口
sudo fuser -k 8002/tcp
# 查看端口情况
sudo netstat -lnp
sudo netstat -lnp | grep 0.0.0.0:80
lsof -i:8888
# 关闭使用这个端口的程序,使用kill + 对应的pid
kill -9 PID号
如果上传文件 5xx 方便期间可进行如下修改(建议进行安全配置): /etc/nginx/nginx.conf 中修改成 user root;
开机启动服务
需要自动启动的有: - ssh (上文已设置) - nginx - uwsgi
手动启动 uwsgi:
conda activate py37
uwsgi --ini /home/www/gairuo/uwsgi.ini
# 或者直接执行
/home/miniconda3/envs/py37/bin/uwsgi --ini /home/www/gairuo/uwsgi.ini
配置开机 reboot 自动启动:
sudo nano /etc/rc.local
# 在 exit 0 前加入
/home/miniconda3/envs/py37/bin/uwsgi --ini /home/www/gairuo/uwsgi.ini
# reboot 测试下,就会生效
# 设置开机启动 nginx ? 待补充
systemctl enable nginx
reboot
其他
解决编码问题:
sudo nano ~/.bashrc
# 增加一行
export LC_ALL=en_US.UTF-8
source ~/.bashrc
ubuntu清理垃圾命令:
sudo apt-get autoclean
sudo apt-get clean
sudo apt-get autoremove
dpkg --get-selections|grep linux //寻找多余的内核包
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P//清理配置
# 删除指定文件
rm -rf /uwsgi.log