CentOS下的Docker Django环境部署
Docker安装
Install Docker Engine on CentOS
根据步骤安装即可
DockerFile
docker pull centos:7
首先拉取一下centos7镜像
新建Dockerfile
文件,将以下内容放入。
# 使用 CentOS 7 作为基础镜像
FROM centos:7
# 更新系统并安装必要的工具
RUN yum -y update && \
yum -y install epel-release && \
yum -y install python3-pip gcc mysql-devel python3-devel openssh-server && \
yum clean all
# 配置 SSH 服务
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed2519_key -N ""
# 设置 SSH 的 root 密码。为了安全起见,建议后续更改此密码
RUN echo 'root:password' | chpasswd
# 安装 Python 库 (这里是我需要的)
RUN pip3 install Django
RUN pip3 install mysqlclient
RUN pip3 install redis
RUN pip3 install djangorestframework
RUN pip3 install kafka-python
# 暴露所需的端口(例如:8000 是 Django 默认的端口,22 是 SSH 的默认端口)
EXPOSE 8000 22
# 使用 supervisord 来同时运行 SSH 和 Django
CMD ["/usr/sbin/sshd", "-D"]
执行以下命令构建及运行镜像
docker build -t django_lesson:1.0 .
docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0
可以看到已经创建好的镜像
SSH免密登陆
# 密码为password
ssh root@localhost -p 20000
# 进入后可以配置ssh免密登陆
# ssh-keygen
# ssh-copy-id
# 这里就不做展示
开放安全组
如果想外部通过ssh连接,云服务的安全组必须打开,阿里云和华为云都叫安全组,腾讯的轻量服务器叫做防火墙
开放这两个端口
设置普通用户并分配sudo权限
useradd acs
passwd acs
CentOS 7 使用 wheel
组为用户分配 sudo 权限
usermod -aG wheel ac
确保 /etc/sudoers
文件中有以下行来允许 wheel
组的成员使用 sudo:
%wheel ALL=(ALL) ALL
通常,这一行已经存在并被默认启用。如果需要查看或编辑 /etc/sudoers
文件,建议使用 visudo
命令,因为这是一个受保护的文件,而 visudo
会检查你的编辑是否有误。
# 使用acs用户执行以下命令,如果成功即sudo权限分配成功
sudo visudo
创建Django项目
django-admin startproject <你的项目名称>
由于这种安装模式sqlite的版本会不兼容,我一开始也是打算直接用mysql,所以更改配置文件变为mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<你的database>',
'USER': 'root',
'PASSWORD': '<你的数据库密码>',
'HOST': '<你的数据库ip地址>',
'PORT': '<你的数据库端口>',
}
}
接下来创建ap
python3 manage.py startapp <你的app名称>
在settings.py中修改
INSTALLED_APPS = [
'aimodel.apps.AimodelConfig', # 添加的内容,我的app叫aimodel
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
测试mysql数据库
写一个model.py
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
执行以下命令
python3 manage.py makemigrations
python3 manage.py migrate
启动服务
python3 manage.py runserver 0.0.0.0:8000
通过: <你的服务器IP>:8000
,可以访问到