2.0版本部署 2022年12月
建立虚拟目录 python -m venv ttlock source bin/activate deactivate Scripts\activate.bat Scripts\deactivate.bat 使用douban源 python -m pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple/ pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple/
一、nginx
1、nginx_dockerfileFROM nginx:latest COPY nginx/conf.d /etc/nginx/conf.d WORKDIR /etc/nginx RUN mkdir html log
2、build镜像:xy-nginx:2.0
docker build -f nginx_dockerfile -t xy-nginx:2.0 .
3、run容器:xy-nginx(已确认:不能在运行容器时载入配置文件)
docker run -itd \
-e TZ="Asia/Shanghai" \
--restart=always \
--network host \
-v /root/nginx/nginx/conf.d:/etc/nginx/conf.d \
-v /root/nginx/nginx/log:/etc/nginx/log \
-v /root/nginx/nginx/html:/etc/nginx/html \
--name xy-nginx xy-nginx:2.0 \
/bin/bash
4、进入容器
docker exec -it xy-nginx /bin/bash
5、载入配置文件,注:修改配置文件后,必须先重启xy-nginx,再进入容器重新载入
nginx -c /etc/nginx/conf.d/xy20.conf
6、测试nginx是否部署成功
[root@pg-2 nginx]# curl http://localhost
[root@pg-2 nginx]# netstat -tunlp
nginx目录文件结构:
[root@web-3 nginx]# pwd
/root/nginx
[root@web-3 nginx]# ls
nginx nginx.conf nginx_dockerfile readme.doc xy20.conf xy.conf
[root@web-3 nginx]# cd nginx
[root@web-3 nginx]# ls
conf.d html log
7、配置文件:xy.pg0.nginx,在pg-0服务器:/root/nginx,在云盘2.0部署。
二、pg部署 查看日志最后10条内容:docker logs --tail=10 pg-0
0、最终在用部署
*****************************************在用***************** docker run -detach --restart always --name pg-0 \ --net=host \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-0 \ --env REPMGR_NODE_NETWORK_NAME=pg-0 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=Exxxxxxx9 \ --env POSTGRESQL_PASSWORD=Exxxxxxx9 \ -v /opt/pg/:/bitnami/postgresql/ \ bitnami/postgresql-repmgr:latest docker run -detach --restart always --name pg-1 \ --net=host \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-1 \ --env REPMGR_NODE_NETWORK_NAME=pg-1 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=Exxxxxxx9 \ --env POSTGRESQL_PASSWORD=Exxxxxxx9 \ -v /opt/pg/:/bitnami/postgresql/ \ bitnami/postgresql-repmgr:latest ### 生成pgpool容器 *****************************************在用***************** docker run -detach --restart always --name pgpool \ --env PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 \ --env PGPOOL_SR_CHECK_USER=xiaoyan \ --env PGPOOL_SR_CHECK_PASSWORD=Exxxxxxx9 \ --env PGPOOL_ENABLE_LDAP=no \ --env PGPOOL_POSTGRES_USERNAME=postgres \ --env PGPOOL_POSTGRES_PASSWORD=Exxxxxxx9 \ --env PGPOOL_ADMIN_USERNAME=admin \ --env PGPOOL_ADMIN_PASSWORD=Exxxxxxx9 \ --add-host=pg-0:172.16.227.246 \ --add-host=pg-1:172.16.227.236 \ -p 9999:5432 \ bitnami/pgpool:latest
上面这个是pg和pgpool实际使用的命令。pg和pgpool之间需要执行下列命令新建数据库和用户。
#新建数据库
postgres=# CREATE DATABASE ttlock;
#新建用户
postgres-# CREATE USER xiaoyan WITH PASSWORD 'Exxxxxxx9';
三、fastapi部署
1、fastapi_dockerfile2 FROM tiangolo/uvicorn-gunicorn:python3.8 WORKDIR /code COPY /code/requirements.txt /code/requirements.txt RUN python -m pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple/ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple/ COPY /code /code CMD ["sh"] 2、生成镜像 docker build -f fastapi_dockerfile -t fastapi3.8 . 3、准备
代码和日志目录: /fastapi/code /fastapi/logs
gunicorn和unicorn配置文件: /fastapi/code/gunicorn.conf.py /fastapi/code/config.py 4、运行容器
docker run -itd -e TZ="Asia/Shanghai" --restart=always \
--network host \
--name xy-fastapi \
-p 9001:9001 \
-v /opt/fastapi/code:/code \
-v /opt/fastapi/logs:/code/logs \
fastapi3.8 /bin/bash -c "gunicorn main:app -k uvicorn.workers.UvicornWorker -c gunicorn.conf.py"
5、2023运行容器最好方法uvicorn 4进程
docker run -itd -e TZ="Asia/Shanghai" --restart=always \
--network host \
--name iot01 \
-v /opt/iot01/code:/code -v /opt/iot01/logs:/code/logs \
fastapi3.8 /bin/bash -c "uvicorn main:app --host 0.0.0.0 --port 6001 --workers 4"
main.py对应代码:uvicorn.run(app='main:app', host='0.0.0.0', port=6001, workers=4)
6、添加reload参数后,可以代码改变自动reload,同时屏蔽多进程参数,只能单进程运行
docker run -itd -e TZ="Asia/Shanghai" --restart=always \
--network host \
--name web3 \
-v /opt/web3/code:/code -v /opt/web3/logs:/code/logs \
fastapi3.8 /bin/bash -c "uvicorn main:app --reload --host 0.0.0.0 --port 9001 --workers 3"
四、redis安装
1、准备工作 建立目录:/redis /redis/data 拷贝redis.conf文件到目录/redis下 2、运行run命令 docker run -itd -e TZ="Asia/Shanghai" --restart=always \ --network host \ --privileged=true \ --name xy-redis \ -v /opt/redis/redis.conf:/etc/redis/redis.conf \ -v /opt/redis/data:/data \ redis:6.0 redis-server /etc/redis/redis.conf --requirepass "Exxxxxxx9"
五、旧内容备份,以备查看
1、准备环境
1、pg-master主机操作: hostnamectl set-hostname pg-0 echo '172.16.227.246 pg-0' >> /etc/hosts echo '172.16.227.236 pg-1' >> /etc/hosts docker volume create pg-0 chgrp -R root /var/lib/docker/volumes/pg-0 chmod -R g+rwX /var/lib/docker/volumes/pg-0 2、pg-slaver从机操作: hostnamectl set-hostname pg-1 echo '172.16.227.246 pg-0' >> /etc/hosts echo '172.16.227.236 pg-1' >> /etc/hosts docker volume create pg-1 chgrp -R root /var/lib/docker/volumes/pg-1 chmod -R g+rwX /var/lib/docker/volumes/pg-1
2、生成容器 注意/bitnami/postgresql映射目录:为volumn:pg-0和pg-1
docker run -dit --restart always --name pg-0 \ --net=host \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-0 \ --env REPMGR_NODE_NETWORK_NAME=pg-0 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_POSTGRES_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_USERNAME=xxxxxxn \ --env POSTGRESQL_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_DATABASE=ttlock \ -v pg-0:/bitnami/postgresql \ bitnami/postgresql-repmgr:15 docker run -dit --restart always --name pg-1 \ --net=host \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-1 \ --env REPMGR_NODE_NETWORK_NAME=pg-1 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_POSTGRES_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_USERNAME=xxxxxxn \ --env POSTGRESQL_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_DATABASE=ttlock \ -v pg-1:/bitnami/postgresql \ bitnami/postgresql-repmgr:15
3、pgpool容器安装(使用中pg不稳定,实际没使用)
docker run -dit --restart always --name pgpool \ --env PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 \ --env PGPOOL_SR_CHECK_USER=xiaoyan \ --env PGPOOL_SR_CHECK_PASSWORD=2xxxxxx9 \ --env PGPOOL_ENABLE_LDAP=no \ --env PGPOOL_POSTGRES_USERNAME=postgres \ --env PGPOOL_POSTGRES_PASSWORD=2xxxxxx9 \ --env PGPOOL_ADMIN_USERNAME=admin \ --env PGPOOL_ADMIN_PASSWORD=2xxxxx9 \ --add-host=pg-0:172.16.227.246 \ --add-host=pg-1:172.16.227.236 \ -p 9999:5432 \ bitnami/pgpool:4
*********************下面为旧版内容***************************
1、准备工作
1、pg-master主机操作: hostnamectl set-hostname pg-0 echo '172.16.227.246 pg-0' >> /etc/hosts echo '172.16.227.236 pg-1' >> /etc/hosts mkdir -p /root/pg/pg_0_data chown -R 1001:1001 /root/pg/pg_0_data 2、pg-slaver从机操作: hostnamectl set-hostname pg-1 echo '172.16.227.246 pg-0' >> /etc/hosts echo '172.16.227.236 pg-1' >> /etc/hosts mkdir -p /root/pg/pg_1_data chown -R 1001:1001 /root/pg/pg_1_data
2、生成容器
***************************************** docker run --detach --name pg-0 \ --restart=always \ --network host \ -e TZ="Asia/Shanghai" \ -v /root/pg/pg_0_data:/bitnami/postgresql \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-0 \ --env REPMGR_NODE_NETWORK_NAME=pg-0 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_PASSWORD=2xxxxxx9 \ bitnami/postgresql-repmgr:15 docker run --detach --name pg-1 \ --restart=always \ --network host \ -e TZ="Asia/Shanghai" \ -v /root/pg/pg_1_data:/bitnami/postgresql \ --env REPMGR_PARTNER_NODES=pg-0,pg-1 \ --env REPMGR_NODE_NAME=pg-1 \ --env REPMGR_NODE_NETWORK_NAME=pg-1 \ --env REPMGR_PRIMARY_HOST=pg-0 \ --env REPMGR_PASSWORD=2xxxxxx9 \ --env POSTGRESQL_PASSWORD=2xxxxxx9 \ bitnami/postgresql-repmgr:15 ****************************************
3、进入docker数据库操作
#进入命令 docker run -it --rm \ --network host \ bitnami/postgresql:15 \ psql -h pg-0 -U postgres #各种操作命令 postgres=# \l 列出数据库 postgres=# \du 列出用户 postgres-# \h 数据操作帮助 postgres-# \? 常用命令帮助 #新建数据库 postgres=# CREATE DATABASE ttxxxx; #新建用户 postgres-# CREATE USER xiaoyan WITH PASSWORD 'Exxxxxx9';
4、测试
1.主备正常(查看⽇志) # 主机执⾏ docker logs -f pg-0 # 备机执⾏ docker logs -f pg-1 2.主机停⽌ # 主机执⾏ docker stop pg-0 备机⽇志 monitoring cluster primary "pg-1" (ID: 1001) 3.主机启动 # 主机执⾏ docker start pg-0 备机⽇志 new standby "pg-0" (ID: 1000) has connected 4.备机停⽌ # 备机执⾏ docker stop pg-1 主机⽇志 monitoring cluster primary "pg-0" (ID: 1000) 5.备机启动 # 备机执⾏ docker stop pg-1 主机⽇志 new standby "pg-1" (ID: 1001) has connected
3、操作命令及目录权限要点
rm -rf /root/pg/pg_0_data rm -rf /root/pg/pg_1_data [root@pg-0 /]# ll /root/pg total 0 drwxr-xr-x 5 1001 1001 42 Dec 12 19:53 pg_0_data
4、日志清理
1.docker日志的清理办法 docker inspect --format='{{.LogPath}}' <容器ID> echo > 日志路径 [root@pg-1 conf]# docker inspect --format='{{.LogPath}}' pg-1 /var/lib/docker/containers/8b91d7e5b384d1b797dd2e1064ef1a0c533de1d5f52a8b0feaa85652754eb0f1/8b91d7e5b384d1b797dd2e1064ef1a0c533de1d5f52a8b0feaa85652754eb0f1-json.log [root@pg-1 conf]# echo > /var/lib/docker/containers/8b91d7e5b384d1b797dd2e1064ef1a0c533de1d5f52a8b0feaa85652754eb0f1/8b91d7e5b384d1b797dd2e1064ef1a0c533de1d5f52a8b0feaa85652754eb0f1-json.log 2.查看日志的时候也可以限定查看多少条 //查看日志时可以指定看最新的n条: docker logs --tail=100 <容器ID> 3.1也可以修改docker配置文件 daemon.json 限定log文件的大小: { "log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"} } 3.2然后重启docker: systemctl reload docker
5、删除docker和目录命令
docker stop pg-0 docker rm pg-0 rm -rf /root/pg/pg_0_data mkdir -p /root/pg/pg_0_data chown -R 1001:1001 /root/pg/pg_0_data rm -rf /root/pg/pg_0_conf mkdir -p /root/pg/pg_0_conf chown -R 1001:1001 /root/pg/pg_0_conf docker stop pg-1 docker rm pg-1 rm -rf /root/pg/pg_1_data mkdir -p /root/pg/pg_1_data chown -R 1001:1001 /root/pg/pg_1_data rm -rf /root/pg/pg_1_conf mkdir -p /root/pg/pg_1_conf chown -R 1001:1001 /root/pg/pg_1_conf docker logs -f pg-0 docker exec -it pg-0 /bin/bash docker logs -f pg-1 docker exec -it pg-1 /bin/bash
6、配置文件真正位置
I have no name!@pg-1:/opt/bitnami/postgresql/conf$ pwd /opt/bitnami/postgresql/conf I have no name!@pg-1:/opt/bitnami/postgresql/conf$ cat pg_hba.conf host all repmgr 0.0.0.0/0 md5 host repmgr repmgr 0.0.0.0/0 md5 host repmgr repmgr ::/0 md5 host replication repmgr 0.0.0.0/0 md5 host replication repmgr ::/0 md5 #hostssl all all 0.0.0.0/0 cert #hostssl all all ::/0 cert host all all 0.0.0.0/0 md5 host all all ::/0 md5 local all all md5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix