目录
1.环境部署准备
首先从docker 里拉取nginx的镜像!
# 拉取镜像
docker pull nginx
# 查看当前拉取的所有镜像
docker images -a
# 运行打开容器
docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称
OPTIONS说明:
--name=“容器新名字”:为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-v: 挂载本地文件映射到容器里
-P:随机端口映射
-p:指定端口映射,有以下四种格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
nginx 容器拉取完成后 准备nginx部署所需要的 nginx.conf 文件和 default.conf 文件!!
这两个文件可以从运行的nginx容器中获取 然后根据自己的需求进行修改
# 随便创建一个nginx 容器
~] # docker run -p nginx
# 打开另一个终端 输入命令查看
~] # docker ps -a
CONTAINER ID IMAGE COMMAND CREATED ...
dac76787f7f2 nginx "/docker-entrypoint.猞" 19 seconds ago ...
# 进入容器中
~] # dockers exec -it dac76787f7f2 bash
root@dac76787f7f2:/# ...已经进入到容器里面啦
# 把容器中的文件copy到本地(容器外操作)
docker cp dac76787f7f2:/etc/nginx/nginx.conf /root/nginx/nginx.conf
docker cp dac76787f7f2:/etc/nginx/conf.d/default.conf /root/nginx/conf.d/default.conf
docker cp 容器id:容器路径 本地路径
本地已经copy 下来后我们进行nginx.conf的修改
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
#后面跟上服务器的IP地址与uwgis发布的Django项目使用的端口
proxy_pass http://106.12.205.171:8080;
root html;
index index.html index.htm;
}
# 静态文件 这里是容器内的路径
location /static{
alias /static;
}
}
}
进行uwsgi安装和 uwsgi.ini 文件的编写
# uwgis 的安装 通过pip 直接安装就可以啦
~] # python3 -m pip install uwsgi
# 查看python 安装包
~] # python3 -m pip list
uWSGI 2.0.19
websocket-client 0.57.0
websockets 8.1
...
uwsgi.ini 文件
# 这个文件要在django的项目 目录下创建
[uwsgi]
# 和nginx.conf 文件的端口相对应
http=0.0.0.0:8080
socket=app.sock
master = true
# 项目目录
chdir = /root/qing/ChpHahaa
# 指定 wsgi.py 文件的目录
wsgi-file = ChpHahaa/wsgi.py
processes = 4
thread = 2
vacuum = true
我的文件路径
/root/qing/ChpHahaa
ChpHahaa -
ChpHahaa -
__init__.py
__settings__.py
...
HLCHP -
migrations -
__init__.py
...
static -
js -
xxx.js
...
img -
logo.png
...
...
manage.py
uwsgi.ini
...
2.进行部署
重新打开一个 docker nginx 容器
# 一条命令 首先把nginx.conf 挂到容器中 在把静态文件挂到容器中
~] # docker run -p 443:443 -p 80:80 --name nginx
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf
-v /root/qing/ChpHahaa/HLCHP/static:/static
-d nginx
# 查看是否运行 显示下面的已经运行成功
~] # docker ps
CONTAINER ID IMAGE COMMAND CREATED
f7c58bd777cf nginx "/docker-entrypoint.猞" 20 hours ago Up 2
----------------------------------------------------------------------------------
STATUS PORTS NAMES
hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx
# 这个时候访问 我们的主机ip 会是 503 服务器错误 还需要在服务器上启动 uwsig
# 从根目录进入 django 项目目录下
~] # cd /root/qing/ChpHahaa/
运行uwsgi.ini 文件 保持这个运行不要 Ctrl+c 把这个给关啦
ChpHahaa] # uwsgi uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
*** Starting uWSGI 2.0.19 (64bit) on [Thu Jul 23 14:00:14 2020] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-39) on 15 June 2020 09:18:48
os: Linux-3.10.0-1062.4.1.el7.x86_64 #1 SMP Fri Oct 18 17:15:30 UTC 2019
nodename: instance-0jv3636j
machine: x86_64
clock source: unix
detected number of CPU cores: 1
...
这个时候我们在网页上打开 http://106.12.205.171 就可以看到网页啦
3.操作中遇到的问题
a.docker 启动 nginx 遇见启动失败 端口并没有能打开
CONTAINER ID IMAGE COMMAND CREATED
24e221f80985 nginx "/docker-entrypoint.猞" 2 hours ago
STATUS PORTS NAMES
Exited (0) 2 hours ago dazzling_gates
# PORTS 端口为空
这里我们要检查我们的 nginx.conf 文件是否有书写错误的地方
# 可以通过docker 日志查看错误
~] # docker logs 24e221f80985
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
...
b.静态文件访问404错误
# 首先检查 nginx.conf 配置的静态文件路径
location /static{
# 这里指容器内的路径
alias /static;
}
# 进入容器查看文件是否在
~] # docker exec -it 容器id bash
root@f7c58bd777cf:/# ls
mnt opt proc root run sbin srv ssl static ...
#这个目录下是有挂的static 文件夹的 进入 static文件夹 查看是否有静态文件 没有的话才会404 错误
root@f7c58bd777cf:/# cd static
root@f7c58bd777cf:/static# ls
root@f7c58bd777cf:/static#
# 退出容器把本地文件静态文件在挂到容器中(我是这么操作才不是404的)
docker cp 本地文件路径 容器id:/static
# 为了方便挂到容器中可以先把django 静态文件进行单独整理
# 在 django项目的setting.py 添加一下代码
STATIC_ROOT = os.path.join(BASE_DIR, "static_new")
# 然后在django项目文件夹下运行
~] # python3 manage.py collectstatic
...
# 这个时候检查目录就可以发现文件夹下多了 static_new 目录这里面都是静态文件