简介
官网: http://www.pgoops.com
gitee: https://gitee.com/pgoops
github: https://github.com/yanshicheng/pgoops
准备工作
准备工作如果已经安装好了环境可以越过。
编译安装 Python3.10
项目基于 python 3.10+ ,确保 python 和 pip 正确配置
下载软件包
root@cloud-001:~# wget https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tar.xz --no-check-certificate
解压软件包
root@cloud-001:~# tar xf Python-3.10.3.tar.xz
root@cloud-001:~# cd Python-3.10.3/
编译安装
root@cloud-001:~/Python-3.10.3# apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev liblzma-dev
root@cloud-001:~/Python-3.10.3# ./configure --prefix=/usr/local/python3.10 --enable-shared --enable-optimizations --with-ssl
root@cloud-001:~/Python-3.10.3# make -j 8
root@cloud-001:~/Python-3.10.3# make install
root@cloud-001:~/Python-3.10.3# echo "/usr/local/python3.10/lib/" >> /etc/ld.so.conf
root@cloud-001:~/Python-3.10.3# ldconfig
设置环境变量
root@cloud-001:~/Python-3.10.3# cat > /etc/profile.d/python3.10.sh <<EOF
export PYTHONPATH=/usr/local/python3.10
export PATH=${PYTHONPATH}/bin:${PATH}
EOF
root@cloud-001:~/Python-3.10.3# source /etc/profile
# 检查
root@cloud-001:~# pip3 -V
pip 22.0.4 from /usr/local/python3.10/lib/python3.10/site-packages/pip (python 3.10)
root@cloud-001:~# python3 -V
Python 3.10.3
# pip 全局加速
root@cloud-001:~# pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装 NodeJs
基于二进制格式安装部署
下载及解压
root@cloud-001:~# wget https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.xz --no-check-certificate
root@cloud-001:~# tar xf node-v16.15.0-linux-x64.tar.xz -C /usr/local/
root@cloud-001:~# ln -s /usr/local/node-v16.15.0-linux-x64/ /usr/local/node
设置环境变量
# 设置全局变量
cat > /etc/profile.d/nodejs.sh <<EOF
export NODEPATH=/usr/local/node
export PATH=${NODEPATH}/bin:${PATH}
EOF
# 加载全局变量
root@cloud-001:~/Python-3.10.3# source /etc/profile
# 检查
root@cloud-001:~# node -v
v16.15.0
root@cloud-001:~# npm -v
8.5.5
# 全局变量
root@cloud-001:~# npm config set registry https://registry.npm.taobao.org
安装 mariadb
root@cloud-001:~# sudo apt install mariadb-server
# 初始化回车输入密码。一路Y
root@cloud-001:~# sudo mysql_secure_installation
# 禁用 bind-address
root@cloud-001:~# vi /etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address = 127.0.0.1
root@cloud-001:~# systemctl restart mariadb.service
root@cloud-001:~# systemctl enable mariadb@.service
root@cloud-001:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 35
Server version: 10.3.34-MariaDB-0ubuntu0.20.04.1-log Ubuntu 20.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 设置密码
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
安装 redis
root@cloud-001:~# sudo apt-get install redis-server -y
# 添加密码
root@cloud-001:~# vim /etc/redis/redis.conf
requirepass 123456
# 开启自动启动
root@cloud-001:~# systemctl enable redis-server.service --now
root@cloud-001:~# systemctl status redis-server.service
安装 nginx
root@cloud-001:~# apt install nginx
root@cloud-001:~# systemctl enable nginx --now
root@cloud-001:~# systemctl status nginx
项目部署 - 后端
项目地址(github):
项目地址(gitee):
部署虚拟环境
确保是 python3.10+ 环境
# 安装虚拟环境管理工具
root@cloud-001:~# pip3 install poetry
root@cloud-001:~# poetry config virtualenvs.in-project true
# 安装ansible ,任何安装方法都可,全局可用即可。
root@cloud-001:~# pip3 install ansible
克隆项目
root@cloud-001:~# mkdir /data/ops
root@cloud-001:~# cd /data/ops
root@cloud-001:/data/ops# git clone https://gitee.com/pgoops/pgoops.git
Cloning into 'pgoops'...
remote: Enumerating objects: 5751, done.
remote: Counting objects: 100% (5751/5751), done.
remote: Compressing objects: 100% (3762/3762), done.
remote: Total 5751 (delta 1812), reused 5746 (delta 1810), pack-reused 0
Receiving objects: 100% (5751/5751), 3.45 MiB | 938.00 KiB/s, done.
Resolving deltas: 100% (1812/1812), done.
安装依赖包
root@cloud-001:/data/ops# cd pgoops/
root@cloud-001:/data/ops/pgoops# poetry install
Updating dependencies
Resolving dependencies... (124.2s)
Writing lock file
....
创建数据库
# 创建数据库
CREATE DATABASE pgoops DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 创建用户
create user 'pgoops'@'%' identified by '123456';
# 授权
grant all privileges on pgoops.* to pgoops@'%' identified by '123456';
# 刷新权限
flush privileges;
# 操作记录
root@cloud-001:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 124
Server version: 10.3.34-MariaDB-0ubuntu0.20.04.1-log Ubuntu 20.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE pgoops DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.002 sec)
MariaDB [(none)]> create user 'pgoops'@'%' identified by '123456';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> grant all privileges on pgoops.* to pgoops@'%' identified by '123456';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> exit
Bye
创建&修改配置文件
项目中提供了一个标准配置文件模板,按照实际情况进行修改即可。
修改 Mysql 链接地址,redis 链接地址,以及 运行模式。
需改拷贝模板生成配置文件,路径: .../pgoops/config/pgoops.ini
root@cloud-001:/data/ops/pgoops# cp config/pgoops.ini.temp config/pgoops.ini
root@cloud-001:/data/ops/pgoops# vim config/pgoops.ini
[DEFAULT]
mode = prod
debug = false
[db.mysql.prod]
host = 127.0.0.1
port = 3306
name = pgoops
user = pgoops
password = 123456
options = {"charset": "utf8mb4"}
[db.redis.prod]
host = 127.0.0.1
port = 6379
password = 123456
初始化 & 运行后端
切记在项目目录下进行操作。
# 按照提示执行此脚本 服务即可起来
root@cloud-001:/data/ops/pgoops# ./inti_pgoops.sh
root@cloud-001:/data/ops/pgoops# ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
......
LISTEN 0 4096 127.0.0.1:953 0.0.0.0:*
LISTEN 0 50 0.0.0.0:8000 0.0.0.0:*
LISTEN 0 300 0.0.0.0:3306 0.0.0.0:*
LISTEN 0 511 127.0.0.1:6379 0.0.0.0:* ......
交互式修改用户密码
在项目根目录执行.venv/bin/python3 manage.py shell
进入shell环境
也可以在WEB界面中通过超级管理员账号进行登陆。
# 引入 用户模型
from django.contrib.auth import get_user_model
# 查找用户 如果修改 pgoops 则替换 (name='super')
super_ops = get_user_model().objects.filter(name='super').first()
# 测试引入是否成功,打印即成功
super_ops.name
'super'
# 修改密码
super_ops.set_password('123456')
# 保存
super_ops.save()
项目部署 - 前端
项目地址(github):
项目地址(gitee):
克隆前端项目
root@cloud-001:/data/ops# git clone https://gitee.com/pgoops/pgoops_web.git
Cloning into 'pgoops_web'...
remote: Enumerating objects: 431, done.
remote: Counting objects: 100% (431/431), done.
remote: Compressing objects: 100% (352/352), done.
remote: Total 431 (delta 43), reused 431 (delta 43), pack-reused 0
Receiving objects: 100% (431/431), 1.22 MiB | 611.00 KiB/s, done.
Resolving deltas: 100% (43/43), done.
项目依赖安装及打包
root@cloud-001:/data/ops# cd pgoops_web/
# 安装依赖包
root@cloud-001:/data/ops/pgoops_web# npm i
(⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠙ idealTree:pgoops_web: sill idealTree buildDeps
# 打包项目
root@cloud-001:/data/ops/pgoops_web# npm run build
> pgoops_web_www.pgoops.com@1.0.0 build
> vue-cli-service build
⠏ Building for production...
Nginx 虚拟主机配置
文件中的路径及地址根据实际情况修改。
root@cloud-001:/usr/local/nginx/conf.d# cat www.pgoops.conf
server {
listen 80;
server_name 0.0.0.0 www.pgoops.com;
error_log /var/log/nginx/www_pgoops_error.log info;
access_log /var/log/nginx/www_pgoops_access.log;
# underscores_in_headers on;
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($request_method = OPTIONS ) {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET,POST,PUT,PATCH,OPTIONS,DELETE";
add_header Access-Control-Allow-Headers "Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,If-None-Match,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With";
add_header Access-Control-Allow-Credentials "true";
}
}
location /admin {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /data/ops/pgoops/static/;
}
location /media/ {
alias /data/ops/pgoops/upload/;
}
location / {
root /data/ops/pgoops_web/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET,POST,PUT,PATCH,OPTIONS,DELETE";
add_header Access-Control-Allow-Headers "Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,If-None-Match,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
访问测试
确保服务运行正常
root@cloud-001:~# systemctl is-active pgoops-celery-server.service
active
root@cloud-001:~# systemctl is-active pgoops-celery-beat.service
active
root@cloud-001:~# systemctl is-active pgoops-server.service
active
root@cloud-001:~# systemctl is-active nginx
active
>>>> 前端 地址: http://ip_addr/"
>>>> 管理 地址: http://ip_addr/admin/"
>>>> 超级管理员用户: pgoops 密码: 123456"
>>>> 普通管理员用户: super 密码: 123456"
>>>> 普通 用户: edit 密码: 123456"
>>>> 官网 地址: http://www.pgoops.com"