1.前言

最近学院一个志愿服务项目要做个网站展示,并且要求部署上线。趁着学校报销,我租了个阿里云服务器爽一把hhh。这篇文章大概写下我从买服务器到部署上线的历程以及报错的解决,给大家分享的同时,我自己也相当于纪念一下做个笔记。

2.部署历程

 阿里云配着学生认证,有个一年的基础配置最划算,一年99一月115三月335.。。。

 

自己选了centos系统,有人报销无脑下单哈哈哈

虽然不知道以后会面临啥艰难险阻,至少支付的那一刻是激动的

买好了,我就用mobaxterm链接了

 发现完全o的k,接着我去配了服务器的安全组

点击 管理规则,然后设置入方向,常用的都打开,留一个给django项目,还有一个给uwsgi代理

 哦对了,我这个项目用来展览的,所以没用mysql,3306那个端口也没开,大家用的时候结合自己项目开端口,我这个图里都是最基本的。

至少阿里云服务器的操作到这就结束了,然后开始转向mobaxterm

1.更新系统软件包和安装软件管理包以及可能使用的依赖

yum update -y

yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
 

这里第三条指令有个y/n的选择,输入y然后回车

2.安装sqlite3、python

这两个的安装逻辑类似,我一会以python为例(sqlite3的图忘记截了.。。)

其实阿里云服务器自带sqlite3和python,只是版本不对,网上有的大佬说默认sqlite3的版本为3.7.17,django是会报错的,不管了,既然有人踩过坑,我们就不跳了,老老实实下个新版本的把

先给个网址

https://sqlite.org/download.html

下这个 

 

 前面说了python安装逻辑类似的,下面说下具体步骤

 

装python的时候,本地cmd看下python版本,服务器最好和本地版本一致

比如我的就是3.9.9

所以也从官网下载一致的

https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz

这里数字改下就行,url结构没毛病

下到local,然后解压

cd /usr/local
wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
tar -zxvf Python-3.9.9.tgz

 这里要比sqlite3慢好多,大概半个多小时

 看到100%很释然

 

接着编译安装

cd Python-3.9.9

mkdir /usr/local/python3

cd /usr/local/python-3.7.7/  

LD_RUN_PATH=/usr/local/sqlite3.45/lib/ ./configure LDFLAGS="-L/usr/local/sqlite3.45/lib" CPPFLAGS="-I/usr/local/sqlite3.45/include"  --prefix=/usr/local/python3/
 
LD_RUN_PATH=/usr/local/sqlite3.45/lib/ make 
make clean  
make && make install  

 

这几条命令跟我一样是正确的

 这里的话,用到sqlite的两个路径

编译好的二进制文件会安装到/usr/local/sqlite3.46/lib

头文件sqlite3.h sqlite3ext.h会安装到/usr/local/sqlite3.46/include

这两个路径,也就是把python3换成sqlite3.46

接着建立软连接

ls -la python*   # 查看python已存在的软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 #python的
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3     #pip的

 安装好可以验证

python3
import sqlite3
sqlite3.sqlite_version
exit()

毕竟sqlite那块没图没有详细展开写,如果大家报错可以评论区问我

3.安装virtualenv项目环境

建议大家都安装一个virtualenv,方便以后不同版本的项目管理,跑项目用虚拟环境跑

pip3 install virtualenv # 安装
# 建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

这里pip任意目录就行

接着创建虚拟环境

mkdir -p /www/env    # 该项目虚拟环境
mkdir -p /www/wwwroot   # 该项目文件存放目录

cd /www/env/
virtualenv --python=/usr/bin/python3 ntu_env # 创建指定版本的虚拟环境

cd /www/env/ntu_env/bin
source activate  # 启动该虚拟环境

启动成功后,可以在左边看到括弧,里面是你的命名

 

4.安装uwsgi

pip3 install uwsgi

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

 5.项目正式部署

首先本地导出requirements.txt,到项目的目录,在地址栏cmd回车

在终端输入

pip freeze > requirements.txt

然后将项目拽入mobaxterm

这里注意地址/www/wwwroot/

下面安装项目的依赖包,这里注意下排包,先把mysqlclient删掉,后续需要在单独装上

cd /www/wwwroot/NTUVolunteer1/     # 在虚拟环境下进行
pip3 install -r requirements.txt # 依赖包

如果pip报错哪个包error,百度下是不是跟你的项目相关,如果无关就删掉

(我当时有深度学习的tensorflow等报错,排包之后就ok了)

安装完输入命令检查

python3 manage.py check

没问题的话继续

这时候就可以进入项目跑代码了(注意要进入manage.py的文件)

cd /www/wwwroot/NTUVolunteer1/
python3 manage.py runserver 

这里就是成功了,接下来就是配置文件了

先是uwsgi,在项目根目录里创建 uwsgi.ini 文件,vim文件写入内容

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:7788
#配置项目路径,项目的所在目录(安全组端口开好)
chdir=/www/wwwroot/NTUVolunteer1/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=NTUVolunteer1/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log

 启动uwsgi

uwsgi  --ini  uwsgi.ini

出现[uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功

下面安装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
make && make install

配置conf文件

在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外

cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak

然后vim 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; #改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:7788;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT NTUVolunteer1.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /www/wwwroot/NTUVolunteer1/; #项目路径
           
        }
        location /static/ {
        alias /www/wwwroot/IP4G/static/; #静态资源路径
        }
    }
}

接着

cd /usr/local/nginx/sbin/
./nginx -t
# 上两步没错再执行下面这条
./nginx

终端没有任何提示就证明nginx启动成功

接着,我浏览器访问出现这个

 linux启动了项目但是页面打不开项目

后来改了项目的ALLOWED_HOSTS加入了服务器公网ip,终于可以了😭

(真就是两行代码搞一天)

 ps:注意debug,正常是True就不要改了,我就是改了导致js解析404

接下来就可以用服务器ip+端口跑项目了

(需要注意的我都加红或者在代码里注释了,大家自己部署看细点) 

3.后续

上面是需要linux启动项目再跑,如果想把mobaxterm关掉也能运行,那就额外需要一条指令

(刚开始以为要写脚本,得亏大佬指点一二)

首先要cd到项目,然后nohup(如果改代码了要先kill进程再重复,不然改的无法生效)

#如果后续改代码
#先关闭进程
1. netstat -nalp | grep 8000,查看第二个字段为0.0.0.0开头的一行,并记录下最后一个字段中的数字

2. kill -9 进程ID  进程ID为上一步找到的数字

cd /path/to/project
nohup python manage.py runserver 0.0.0.0:8000 >/dev/null 2>&1 &   #神奇的指令

部署成功,完结撒花❀

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐