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_dockerfile
FROM 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

 

 
















posted @ 2022-11-12 00:09  pearlcity  阅读(147)  评论(0编辑  收藏  举报