准备镜像
项目部署需要3个基础镜像外加一个izone的构建镜像(可以自己拉取代码构建,不过这里推荐拉取我构建好的镜像),拉取镜像的命令:
# 3个基础镜像
docker pull nginx
docker pull redis
docker pull mysql:5.7
# 1个原作者自构建镜像,默认不加版本号tag,使用最新的
docker pull registry.cn-shenzhen.aliyuncs.com/tendcode/izone
拉取项目代码
为了避免挂载目录权限问题,后续命令全部使用root账号执行。
拉取代码,直接拉取跟镜像的tag一样的项目tag:
git clone https://github.com/Hopetree/izone-docker.git
创建环境变量文件
项目依赖两个环境变量文件,必须创建,第一个文件是 .env,这个文件是docker-compose 默认使用的环境变量问题,可以把参数传递到 docker-compose 中。进入izone-docker 目录,创建两个文件,文件内容如下:
# .env
# db
MYSQL_IMAGE=mysql:5.7
MYSQL_ROOT_PASSWORD=1314520@abc
# redis
REDIS_IMAGE=redis
# web
IZONE_IMAGE=registry.cn-shenzhen.aliyuncs.com/tendcode/izone
IZONE_MYSQL_NAME=izone
# nginx
NGINX_IMAGE=nginx
然后创建一个 izone.env 文件,这个里面的环境变量都会传递给 izone 使用,至于izone 可以设置哪些环境变量,可以去 izone 项目的 settings 文件中查看。这里可以虽然传入几个变量(其实可以一个也不传,因为环境变量不传的时候有默认值使用):
# izone.env
# 个性化配置
IZONE_SECRET_KEY=#!kta!9e0)24p@9#=*=ra$r!0k0+p5@w+a%7g1bboo9+9080
IZONE_TOOL_FLAG=True
IZONE_API_FLAG=False
IZONE_DEBUG=False
IZONE_SITE_END_TITLE=izone
IZONE_SITE_DESCRIPTION=izone 博客
IZONE_SITE_KEYWORDS=Python自学,Python爬虫,Django博客,Python web开发,个人博客
IZONE_GITHUB=https://github.com/Hopetree
# 邮箱配置
IZONE_EMAIL_HOST=smtp.163.com
IZONE_EMAIL_HOST_USER=your-email
IZONE_EMAIL_HOST_PASSWORD=77777
IZONE_EMAIL_PORT=465
IZONE_EMAIL_USE_SSL=True
IZONE_DEFAULT_FROM_EMAIL=izone博客 <test@163.com>
IZONE_ACCOUNT_EMAIL_VERIFICATION=optional
# 非必须设置
IZONE_CNZZ_PROTOCOL=''
IZONE_BEIAN=''
IZONE_SITE_VERIFICATION=''
# 配置管理员邮箱,格式:name|test@test.com 多组用户用英文逗号隔开
IZONE_ADMIN_EMAIL_USER=name|test@test.com
两个文件创建成功之后可以检查一下文件是合格,执行命令:
docker-compose config
没有报错就说明格式没问题,可以查看一下环境变量是否传错
修改 docker-compose.yml 中 nginx ports部分
nginx:
restart: always
image: ${NGINX_IMAGE}
container_name: izone_nginx
volumes:
- ./web/static:/opt/izone/static:ro
- ./web/media:/opt/izone/media:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/ssl_cert:/etc/nginx/ssl_cert:ro
- ./nginx/log:/var/log/nginx
ports:
- "80:80"
- "443:443"
links:
- web
networks:
- frontend
修改 nginx配置
由于项目默认给的nginx配置是我自己项目的,所以不适合其他人使用,这里把项目代码中nginx/conf.d/ 目录中的配置文件全部删除,然后在nginx/conf.d/ 目录中创建一个通用的配置(使用 localhost):
cd nginx/conf.d && rm -f server_izone.conf`
vi default.conf
default.conf 的内容如下:
server {
# 端口和域名
listen 80;
server_name localhost;
# static 和 media 的地址
location /static/ {
root /opt/izone;
}
location /media/ {
root /opt/izone;
}
# web 服务使用8000端口,并且添加别名跟本地域名保持一致
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 其他配置
client_max_body_size 1m;
client_header_buffer_size 128k;
client_body_buffer_size 1m;
proxy_buffer_size 32k;
proxy_buffers 64 32k;
proxy_busy_buffers_size 1m;
proxy_temp_file_write_size 512k;
}
部署容器
退回到 izone-docker 目录,启动容器的命令(加 -d 是后台运行),可以看到输出:
[root@CentOS-2 izone-docker]# docker-compose up -d
Creating network "izone-docker_frontend" with driver "bridge"
Creating network "izone-docker_backend" with driver "bridge"
Creating izone_redis ... done
Creating izone_db ... done
Creating izone_web ... done
Creating izone_nginx ... done
然后可以查看一下容器运行状态,如果都是up 就没问题:
[root@CentOS-2 izone-docker]# docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
izone_db docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
izone_nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
izone_redis docker-entrypoint.sh redis ... Up 6379/tcp
izone_web gunicorn izone.wsgi -b 0.0 ... Up
初始化数据库
虽然容器都起来了,但是izone 项目的数据库里面是空的,所以要先初始化一下数据库,直接在izone-docker 目录下执行如下命令:
# 一条一条的输入
# 初始化数据
docker exec -it izone_web python manage.py makemigrations
docker exec -it izone_web python manage.py migrate
# 收集静态文件
docker exec -it izone_web python manage.py collectstatic
# 初始化搜索索引
docker exec -it izone_web python manage.py update_index
# 创建管理员账号
docker exec -it izone_web python manage.py createsuperuser
重启服务,浏览页面
在izone-docker 目录下,依次执行关闭和启动命令,重启服务:
[root@CentOS-2 izone-docker]# docker-compose down
Stopping izone_nginx ... done
Stopping izone_web ... done
Stopping izone_redis ... done
Stopping izone_db ... done
Removing izone_nginx ... done
Removing izone_web ... done
Removing izone_redis ... done
Removing izone_db ... done
Removing network izone-docker_frontend
Removing network izone-docker_backend
[root@CentOS-2 izone-docker]# docker-compose up -d
Creating network "izone-docker_frontend" with driver "bridge"
Creating network "izone-docker_backend" with driver "bridge"
Creating izone_redis ... done
Creating izone_db ... done
Creating izone_web ... done
Creating izone_nginx ... done
浏览器输入服务器(或者虚拟机)的IP地址查看页面是否正常,也可以在服务器使用curl 命令访问:
curl http://localhost
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://jiangyudong.top/subject/article/Project_deployment/
许可协议:署名-非商业性使用 4.0 国际许可协议