2024部署经验
一、深刻教训
1、svelte或vue中axios访问后端使用的URL地址:最后的斜杠(/)要加,否则nginx配置中rewrite会不起作用
// const baseURL = 'http://47.97.19.34:9001/'; 重点:最后的斜杠(/)要加 // const baseURL = 'https://xiaoyan.mobi/backend/'; 重点:最后的斜杠(/)要加 const baseURL = 'http://47.115.208.135/backend/';
2、ng安装
先拷贝文件到三个目录:/opt/ng/conf、/opt/ng/log、/opt/ng/html 然后运行下面docker命令: docker run -itd -e TZ="Asia/Shanghai" --restart=always \ --log-opt max-size=10m --log-opt max-file=3 \ --network host \ --name ng \ -v /opt/ng/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /opt/ng/conf/conf.d:/etc/nginx/conf.d \ -v /opt/ng/log:/var/log/nginx \ -v /opt/ng/html:/usr/share/nginx/html \ -d nginx:1.23.3
3、web
fastapi_dockerfile.sh 文件内容:
FROM tiangolo/uvicorn-gunicorn:python3.8 WORKDIR /code COPY /code/requirements.txt /code/requirements.txt RUN python -m pip install --upgrade pip -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple/ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple/ RUN pip uninstall -y urllib3 RUN pip uninstall -y chardet RUN pip install --upgrade requests -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple/ COPY /code /code CMD ["sh"]
操作过程:
1、fastapi_dockerfile.sh文件放在 /opt/web 目录下 2、在bash终端内: cd /opt/web 3、执行生成镜像命令: docker build -f fastapi_dockerfile.sh -t fastapi.sam.3.80 .
4、查看镜像: docker images
运行docker:
先拷贝python代码到目录:/opt/web/code 然后运行docker命令: docker run -itd -e TZ="Asia/Shanghai" --restart=always \ --log-opt max-size=1m --log-opt max-file=3 \ --network host \ --name web \ -v /opt/web/code:/code -v /opt/web/logs:/code/logs \ fastapi.sam.3.80 /bin/bash -c "uvicorn main:app --reload --host 0.0.0.0 --port 9001 --workers 3" fastapi3.8 /bin/bash -c "uvicorn main:app --host 0.0.0.0 --port 9001 --workers 3" --reload参数决定代码修改自动重启和多进程,main.py对应代码:uvicorn.run(app='main:app', host='0.0.0.0', port=9001, workers=3)
二、运维常用命令
Portainer是一个轻量级的、开源的容器管理和编排工具,它提供了一个易于使用的图形用户界面(GUI),用于管理和操作Docker和Kubernetes环境。
docker ps docker ps -a docker logs -f pgpool 端口占用查看/监听查看 netstat -tunlp ss -tnl web访问测试 curl http://localhost curl http://localhost:9001/test curl -k -v -i https://localhost/backend/test curl -k -v https://localhost:9443/backend/test/pgread ip地址查看 ip addr cpu、内存、硬盘查看 top free -m df -h 处理nginx log文件: cd /opt/ng/log echo "" > nginx_access.log 删除目录 cd /opt rm -rf web 修改/etc/hosts文件后,执行生效命令 /etc/init.d/network restart 数据库常用操作 docker exec -it web /bin/bash docker exec -it pg /bin/bash docker exec -it ng /bin/bash docker exec -it pdix /bin/bash docker exec -it rs /bin/bash redis-cli -a Emixx8089 -h 172.16.227.236 -p 7617 info docker exec -it rc /bin/bash redis-cli -a Emixx8089 -p 7617 info 查看容器日志最后100条内容 docker logs --tail=100 web 查看容器目录 ll /var/lib/docker/containers 查看容器详情,可看到容器ID docker inspect uvicorn 查看容器中日志文件大小,下例为pg-0中uvicorn ll /var/lib/docker/containers/1dd4c4a2c67d2bbf13b0605edd17452a1aa62e35d1952def15f6999a004bc61d 生成公钥位于:/root/.ssh/id_rsa.pub ssh-keygen -t rsa -P '' 部署到远端主机,就可以免密码访问远端主机 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.160.160 传送文件: scp /opt/pg/data/dump20030212.sql root@172.16.160.160:/opt/pg/data
三、pg数据库
1、登陆
A、进入pg docker命令行界面:
docker exec -it pg /bin/bash
退出bash:exit
B、进入到pg数据库管理命令行界面(psql是pg的命令行数据库管理软件):
psql -U postgres
psql -h 172.16.93.160 -p 5432 -U postgres -W
退出数据库:\q
bash下数据库常用操作:
转到映射目录: cd /bitnami/postgresql 执行bash命令备份数据库ttlock: pg_dump -U postgres -d lock -f dump0206.sql pg_dumpall -U postgres > db_all.sql 将备份文件dump20230206.sql拷贝到在容器外映射目录:/opt/pg 转到容器内映射目录:cd /bitnami/postgresql 将备份写入数据库,在bash命令界面: psql -d ttlock -U postgres -f dump0206.sql psql -d lock -U postgres -f ttlock20230520.sql
2、数据库内常用操作命令
postgres-# h 数据操作帮助 postgres-# ? 常用命令帮助 postgres=# \l 列出数据库 postgres=# \du 列出用户 postgres-# CREATE USER xiaoyan WITH PASSWORD 'Emixx8089'; 新建用户 postgres=# \q 从psql命令状态返回bash命令状态 postgres=# \c ttlock 切换到ttlock数据库 postgres=# \d 查看当前schema中所有的表 使用提供的命令 psql -h 172.16.93.160 -p 5432 -U postgres -W 登录到 PostgreSQL 数据库后,你将进入 psql 命令行界面,可以执行多种数据库操作命令。以下是一些常用的数据库操作命令: 查看数据库列表: \l 或者使用 SQL 命令: SELECT datname FROM pg_database; 选择数据库: \c [database_name] 或者使用 SQL 命令: SELECT pg_switch_db('database_name'); 查看表列表: \d 或者使用 SQL 命令: SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; 查看表结构: \d [table_name] 创建数据库: CREATE DATABASE [database_name]; 创建表: CREATE TABLE [table_name] ([column_definitions]); 插入数据: INSERT INTO [table_name] ([column1], [column2], ...) VALUES ([value1], [value2], ...); 查询数据: SELECT * FROM [table_name]; 更新数据: UPDATE [table_name] SET [column1] = [value1], [column2] = [value2], ... WHERE [condition]; 删除数据: DELETE FROM [table_name] WHERE [condition]; 删除表: DROP TABLE [table_name]; 删除数据库: DROP DATABASE [database_name]; 退出 psql: \q 查看当前用户: \user 查看当前数据库: \database 查看服务器版本: \version 帮助命令: \? 这些命令在 psql 命令行界面中通常以反斜杠 \ 开头,这些是 psql 的元命令。而 SQL 命令则是标准的 SQL 语句,用于与 PostgreSQL 数据库交互。记得在执行 SQL 命令时以分号 ; 结尾。