本文主要介绍服务器上搭建项目环境及部署项目。
一、安装python环境
(参考:)
1、安装相关依赖库(工具包)
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
2、下载python3的源代码(在linux终端下输入命令)
cd /opt/
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
(python 源码下载地址:https://www.python.org/ftp/python/)
3、解压缩源代码
tar -xf Python-3.7.4.tar.xz
4、进入python3.7.4 目录
cd Python-3.7.4
5、生成编译脚本(指定安装目录)
./configure --prefix=/opt/python37
6、编译
make
7、编译成功后,编译安装
make install
8、切换到安装好了的python3.7目录
cd /opt/python37/
9、执行python3.7解释器
bin/python3.7
10、添加环境变量
ln -s 源文件路径 目标文件路径
ln -s /opt/python37/bin/python3.7 /usr/local/bin/python3
11、添加pip3软连接
ln -s /opt/python37/bin/pip3 /usr/local/bin/pip3
12、验证
pip3 -V
python3 -V
二、创建python虚拟环境
1、安装virtualenv
pip install virtualenv
2、找到virtualenv.py的位置
find / -name 'virtualenv.py'
3、切换到virtualenv.py所在位置
cd /usr/python/lib/python3.7/site-packages
4、创建虚拟环境
python virtualenv.py 环境名称
补充:
如果不想使用以上方法创建环境,而是通过virtualenv直接创建环境,请参考:
5、启动虚拟环境
找到刚创建的虚拟环境的位置
find / -name '环境名称'
启动环境
source /usr/python/lib/python3.7/site-packages/test1/bin/activate
补充:
更多虚拟环境操作请参考:
三、安装mysql
(参考:)
1、下载rpm文件
wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
2、安装rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
需要确认的时候请按y,安装完成后在/etc/yum.repos.d目录将新增mysql-community.repo和mysql-community-source.repo
3、安装mysql
yum install mysql-community-server
4、启动mysql服务
systemctl start mysqld
5、设置mysql开机启动
systemctl enable mysqld
systemctl daemon-reload
6、查找root密码
mysql安装完成之后,在/var/log/mysqld.log文件中为root用户生成默认密码。
grep 'temporary password' /var/log/mysqld.log
7、登录mysql
mysql -u root -p 默认密码
补充:
密码的格式【大小写字母+数字+特殊符号】
8、修改登录密码
set password for 'root'@'localhost'=password('新密码');
9、修改配置文件
vi /etc/my.cnf
配置修改如下:
[mysqld]
character_set_server=utf8
init_connect=’SET NAMES utf8’
10、重启mysql
systemctl restart mysqld
补充:
设置mysql允许外部连接访问请参考:
四、安装与配置 Docker
(若没有使用Docker请跳过该步骤)
(参考:https://cloud.tencent.com/developer/labs/lab/10054)
1、安装 Docker 必要依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2、用 yum 安装 Docker
yum install -y docker-ce
3、查看版本
docker -v
4、启动docker
service docker start
5、设置开机启动
chkconfig docker on
6、配置Docker
因为国内访问 Docker Hub 较慢, 可以使用腾讯云提供的国内镜像源, 加速访问 Docker Hub
echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
systemctl daemon-reload
service docker restart
五、安装Redis
(若没有使用Redis请跳过该步骤)
(参考:)
1、下载安装包
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
2、解压
tar -zxvf redis-4.0.9.tar.gz
3、安装gcc依赖
yum install gcc
遇到选择,输入y即可
4、编译安装
make MALLOC=libc
make install
5、测试
找到至redis所在位置
find / -name 'redis-server'
启动redis
/usr/local/bin/redis-server
6、修改Redis启动方式
修改redis.conf
daemonize no 修改为 daemonize yes
大概在文件的136行
指定redis.conf文件启动(根据自己文件的路径)
/usr/local/bin/redis-server /root/project_res_store/redis-4.0.9/redis.conf
7、设置redis开机自启动
在/etc目录下新建redis目录
mkdir redis
将/usr/local/redis-4.0.9/redis.conf 文件复制一份到/etc/redis目录下,并命名为6379.conf
cp /root/redis-4.0.9/redis.conf /etc/redis/6379.conf
将redis的启动脚本复制一份放到/etc/init.d目录下
cp /root/redis-4.0.9/utils/redis_init_script /etc/init.d/redisd
设置redis开机自启动,先切换到/etc/init.d目录下,然后执行自启命令
chkconfig redisd on
启动
service redisd start
补充:
虽然这些问题我都没遇过,但还是要补充一下解决方法。
如果出现service redisd does not support chkconfig ,请修改redisd文件,在第一行添加:
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
(redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10)
如果出现 process is already running or crashed 删除/var/run/redis_6379.pid 的文件即可。
8、开启远程连接
修改6379.conf文件中88行protected-mode为no
注释6379.conf文件中69行 bind 127.0.0.1 为 # bind 127.0.0.1
六、Nginx安装
(参考:https://cloud.tencent.com/developer/article/1147804)
1、下载
wget http://nginx.org/download/nginx-1.13.1.tar.gz
2、安装Nginx依赖
gcc、gcc-c++(如果已经安装可忽略)
yum install gcc
yum install gcc-c++
pcre 、zilb
yum -y install pcre*
yum -y install zlib*
openssl (若需要支持 https 协议)
yum -y install openssl
yum -y install openssl-devel
3、解压安装包
tar -z -xv -f nginx-1.13.1.tar.gz
4、编译
cd nginx-1.13.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
提示:
–prefix:设置安装路径
–with-http_stub_status_module:支持nginx状态查询
–with-http_ssl_module:支持https
–with-pcre:为了支持rewrite重写功能,必须制定pcre
5、安装
make
make install
6、启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
7、测试
http://服务器ip/
或:curl -I 服务器ip
七、Django项目部署
(项目部署建议创建新的虚拟环境用于运行部署后的项目)
1、生成requirements.txt文件
生成requirements.txt文件(将项目中安装的包,存放到requirements.txt文件中)
pip freeze > requirements.txt
2、安装requirements.txt的包
(安装在项目新的虚拟环境)
pip install -r requirements.txt
3、settings.py配置
复制settings.py,创建一个副本命名为pro_settings.py,修改配置如下。
DEBUG = False
# 填写你自己的ip和域名
ALLOWED_HOSTS = [" xxx.xxx.xxx.xxx", "127.0.0.1"]
# 此处设置可以访问服务器的IP地址,*为允许所以地址
4、wsgi.py配置
修改项目的wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pro_res.pro_settings(pro_settings位置)')
application = get_wsgi_application()
5、uwsgi 安装
pip install uwsgi
测试uwsgi是否安装成功:
新建test.py,填写如下代码
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
运行uwsgi
uwsgi --http :8000 --wsgi-file test.py
测试uwsgi运行是否正常
curl 127.0.0.1:8000
测试访问
http://服务器ip:8000/
6、uwsgi 配置
在项目根目录中创建deploy目录,创建logs文件夹,用于存放日志文件,新建uwsgi_conf.ini文件。
[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
socket=内网ip/127.0.0.1:8000
#直接做web服务器使用,Django程序所在服务器地址
#http=内网ip/127.0.0.1:8000
#项目目录
chdir=/home/project_res/pro_res
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=pro_res/wsgi.py
# 进程数
processes=4
# 线程数
threads=32
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=logs/uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/usr/python/lib/python3.7/site-packages/pro_res_server
buffer-size=32768
补充:
项目建议放在home目录,放在其它目录可能导致权限不够而无法访问项目
7、nginx配置
/usr/local/nginx/conf/nginx.conf
user root;#自己的用户名
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 监听端口
listen 443;
#启用 SSL 功能
ssl on;
#证书文件名称
ssl_certificate 1_xxxxx_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_xxxxx.key;
ssl_session_timeout 5m;
#请按照这个协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 服务器域名或者ip地址
server_name 服务器公网ip 域名;
# 编码
charset utf-8;
# 文件最大上传大小
client_max_body_size 75M;
# 静态文件
location /static {
alias /home/project_res/pro_res/static;
}
# 主目录
location / {
uwsgi_pass 内网ip:8000;
include /usr/local/nginx/conf/uwsgi_params;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name 域名 服务器公网ip;
#把http的域名请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}
}
补充:
如果没有ssl证书文件,可将相应代码注释
nginx端口需和uwsgi端口一致(这里是8000端口)
8、启动/重启服务
启动nginx服务
进入nginx安装目录sbin下,输入命令./nginx -t
重启nginx服务(建议每一次修改nginx配置文件都重启)
进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可
启动uwsgi
切换到deploy目录中
uwsgi --ini uwsgi_conf.ini
停止uwsgi
uwsgi --stop uwsgi.pid
补充:
每一次修改uwsgi配置后,欲使其生效,需关闭uwsgi和nginx通信的端口(这里是8000端口),再重启
fuser -k 8000/tcp
uwsgi uwsgi_conf.ini
注意
以上所有涉及端口的操作,均需在腾讯云安全组开通相应端口,否则将无法访问。
心得
第一次使用云服务器配置项目环境、部署项目,面对不同的操作系统(centos7)也是满满的错误,只能说细节决定一切,上面的补充、建议,都是血一般的教训。
网站的搭建也不是随心所欲的,如果想要备案上线,就必须符合备案的要求,笔者之前就妄想搭建一个结合博客和哔哩哔哩的网站,功能繁多,结果备案成功的一个月后,因网站不符合个人性质被注销,需重新整改再备案,这无疑是白干一场,但在笔者开始搭建网站之前,问过许多前辈一些网站需注意的问题,却没有人提过备案,希望笔者的这次教训能对后来者有所帮助。
如果你想搭建一个网站,需要考虑是否组团,组团开发固然快速,只是所学知识不及个人开发,第一次开发建议一个人开发小项目,体验全栈开发,方便以后组团开发指导其它成员,笔者就因为想开发较大的项目浪费了不少时间。
网站开发过程往往不是一帆风顺的,可能有上千个bug等你,保持良好心态相信自己即可,很重要的一点还是要学会看官方文档。