文档参考
1、http://testingpai.com/article/1649671014266
2、下载nginx
docker pull nginx:alpine
然后启动nginx,
docker run --rm -it -p 9192:80 nginx:alpine /bin/sh
关闭容器后,自动删除该容器
进入后,启动nginx,
nginx
进行curl http://127.0.0.1:9192(记得服务器进行端口放开)
也可以进行浏览器进行方位。
cat /etc/nginx/conf.d/default.conf
# 删除的就是读取默认
server {
location / {
root /usr/share/nginx/html;
}
}
修改文件之后,重新启动nginx,
nginx -s reload
具体可以看最上面的连接。
3、继续上次的文章,
收集django中的静态文件
# settings.pro.py
STATIC_ROOT = BASE_DIR / 'static'
然后执行
python manage.py collectstatic
目录下会有一个静态文件,
注意,得到静态文件后,
要把STATIC_ROOT = BASE_DIR / ‘static’,注释掉,要不然运行会报错
4、创建nginx目录,在djangoapp同级目录下
并在该nginx文件夹上传static文件,
创建文件 touch default.conf
server {
listen 80; # 配置后端服务的监听端口
server_name www.hhxpython.com; # 配置域名
location /static/ {
alias /usr/share/nginx/html/static/; # 配置静态文件路径
}
location / {
# 检查静态文件,如果不是代理到应用
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://django_app:8000;
}
}
5、和打包的前端文件dist,和static一样。
该server配置与上面的配置并列存在
server {
listen 81; # 配置前端项目服务的监听端口
server_name www.hhxpython.com; # 配置域名
root /usr/share/nginx/html/dist; # 配置文件根路径
location / {
try_files $uri $uri/ @router; #需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
index index.html;
}
#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}
6、运行服务(太长了,可忽略,也能启动)
docker run --rm -it --network auto -p 9292:80 -p 9293:81 -v ***/nginx/dist:/usr/share/nginx/html/dist -v **/static://usr/share/nginx/html/static
-v */default.conf:/etc/nginx/conf.d/default.conf nginx:alpine /bin/sh
进入后,命令:nginx启动即可
7、写Dockerfile文件,
进行准备工作,就不需要上面那么长的命令行了
FROM nginx:alpine
COPY ./static/ /usr/share/nginx/html/static/
COPY ./dist/ /usr/share/nginx/html/dist/
COPY ./default.conf /etc/nginx/conf.d/
VOLUME /var/log/
EXPOSE 80 81
8、执行构建命令
docker build -t auto_nginx .
9、最后docker run 命令即可
docker run -d --name auto_nginx_app -p 9292:80 -p 9293:81 --network auto auto_nginx
# 这是上篇文章的docker 启动。换了了端口。可以忽略。
docker run --name app --network auto -p 9195:8000 -e TZ=Asia/Shanghai -e ENV="production" -d --restart=always -v auto_logs:/app/logs auto_app:latest
至此,手动部署结束,前后端结束,浏览器访问即可。