阿里云ECS(CentOS7)中使用Docker构建Django应用环境(uWSGI,容器环境为CentOS8,使用Anaconda3)

1.Docker拉取CentOS镜像

搜索可用镜像列表 docker search centos
拉取镜像 docker pull centos (根据该镜像创建的容器是CentOS8环境)

2.用镜像centos创建一个名为test的容器

docker run -p 1234:8080 --name test -idt centos
并把服务器1234端口映射到容器的8080端口(端口映射后续不太方便添加或修改,这一步慎重一些比较好)
参考:
Docker容器设置端口映射的方法_docker容器端口映射到服务器-CSDN博客

3.进入test容器,更改yum源

进入容器 docker exec -it test /bin/bash

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

后续需要用yum安装文本编辑器vim

cd /etc/yum.repos.d/

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

yum install wget

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

yum clean all

yum makecache

更改yum源的目的是解决报错:

Failed to download metadata for repo ‘AppStream’: Cannot prepare
internal mirrorlist: No URLs in mirrorlist”

出现这个错误提示的原因是CentOS 8 已于2021年12月31日停止官方服务了.
参考:
问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:…-腾讯云开发者社区-腾讯云 (tencent.com)
在 CentOS 8 中安装软件出现 “错误:为仓库 ‘appstream’ 下载元数据失败” 的解决办法 - 知乎 (zhihu.com)

4.安装Anaconda

使用Anaconda主要由于以下两个原因:
一是容器中手动搭建python环境非常繁琐麻烦,使用Anaconda的话可以在创建conda环境时conda create -n test python=3.8一句命令解决。
二是pip3安装uwsgi会报错。

ERROR: Failed building wheel for uwsgi Failed to build uwsgi ERROR:
Could not build wheels for uwsgi, which is required to install
pyproject.toml-based projects

搜索了一圈,最简单的解决方法是在Anaconda虚拟环境中直接使用 conda install 安装,所以先下载Anaconda创建虚拟环境

下载Anaconda
cd到.sh文件的目标目录,执行以下语句从官网下载文件:
wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh

wget太慢可以直接用windows系统访问这个网址下载好后用Xftp传到服务器。 退出当前test容器:exit
将传输到服务器tmp目录下的python3安装包复制到test容器的usr/local目录中:docker cp /tmp/Anaconda3-2024.02-1-Linux-x86_64.sh test:/usr/local
再重新进入容器的相应目录继续下列步骤即可 (wget下载5min左右,windows下载1min左右、传输1min左右)

进入.sh文件所在目录
运行安装脚本 bash Anaconda3-2024.02-1-Linux-x86_64.sh
按回车键查看许可协议至结束
输入yes回车确认安装
选择安装路径时,回车选择默认路径。需要更改路径则输入自定义路径,这里更改为 /usr/local/anaconda3
等待安装完成
选择是否初始化Anaconda:
在这里插入图片描述

输入yes

配置环境变量
需要先下载vim,方便后续编辑配置文件: yum install vim

编辑profile:vim /etc/profile
在文件尾部添加以下内容

export ANACONDA_PATH=/usr/local/anaconda3
export PATH=$PATH:$ANACONDA_PATH/bin

使环境变量生效 source /etc/profile

查看版本检验是否安装成功 conda --version
参考:
CentOS8安装配置Anaconda&Python_cent8安装conda-CSDN博客

5.创建conda环境并安装django和uwsgi

conda创建名为test的python3.8环境:conda create -n test python=3.8
python3.8以下好像没有适合的uwsgi版本,python3.7.2环境中 conda install uwsgi 报错:

Could not solve for environment specs The following packages are incompatible ├─ pin-1 is installable and it requires │ └─ python
3.7.
, which can be installed; └─ uwsgi is not installable because there are no viable options
├─ uwsgi 2.0.21 would require
│ └─ python >=3.10,< 3.11.0a0 , which conflicts with any installable versions previously reported;
├─ uwsgi 2.0.21 would require
│ └─ python >=3.11,< 3.12.0a0 , which conflicts with any installable versions previously reported;
├─ uwsgi 2.0.21 would require
│ └─ python >=3.8,< 3.9.0a0 , which conflicts with any installable versions previously reported;
└─ uwsgi 2.0.21 would require
└─ python >=3.9,< 3.10.0a0 , which conflicts with any installable versions previously reported.
*

激活环境:

source activate
conda activate test

只使用 conda activate test 会报错

CondaError: Run ‘conda init’ before ‘conda activate’

conda init无法解决

参考:Run ‘conda init’ before 'conda activate’报错 - 知乎 (zhihu.com)

安装django conda install django
安装uwsgi conda install uwsgi

关闭环境再次启动,激活conda环境时报错 bash: activate: No such file or directory
可以输入以下指令解决

source /etc/profile
source activate
conda activate test

6.将django项目复制到容器中

可以先利用Xftp将项目传输到服务器的/tmp目录下,然后执行docker cp /tmp/proFile test:/home 将名为proFile的文件复制到test容器的/home目录中

7.编写uwsgi启动配置文件

在django项目目录下(manage.py同级目录)新建配置文件uwsgi.ini,内容如下:

[uwsgi]
http= 0.0.0.0:8080 #端口号填写docker容器的映射端口
chdir = /home/test #项目所在目录(manage.py)的绝对路径
wsgi-file = test/wsgi.py #wsgi.py文件相对于manage.py的相对路径
processes = 1
threads = 4

为uwsgi建立软连接
执行 where is uwsgi 确定uwsgi的绝对路径
建立软连接 ln -s uwsgi绝对路径 /usr/bin/uwsgi

启动uwsgi
cd到uwsgi.ini文件所在目录
运行 uwsgi --ini uwsgi.ini

检查uwsgi是否成功启动
ps -ef|grep uwsgi
若显示以下内容,则uwsgi启动成功

root        47     1  4 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root        48    47  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root        49    47  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root        53    47  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root        54    47  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root        65    18  0 09:38 pts/1    00:00:00 grep --color=auto uwsgi

这时候项目应该已经运行起来了,可以浏览器访问 http://服务器ip地址:服务器映射docker端口号 检验一下
在这里插入图片描述

出现这样的页面就是运行成功了。
参考:
基于docker部署nginx+uwsgi+django_docker django-CSDN博客
docker容器内uwsgi及nginx服务部署_docker uwsgi nginx 开机自启动-CSDN博客

查看端口占用情况 netstat -lnp|grep 8080
杀掉占用某个端口的进程 fuser -k 8080/tcp

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值