# iHarbor **Repository Path**: cstcloud-cnic/iharbor ## Basic Information - **Project Name**: iHarbor - **Description**: iHarbor对象存储 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 3 - **Created**: 2021-11-18 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [版本更新流程](docs/static/docs/upgrade.md) ## 1 环境搭建(CentOS9) ### 1.1 安装软件 1. **python**: python3.9 (Centos9默认已安装python3.9版本) 2. **Git** 3. **mysql、mariadb** (django支持的数据库) 4. **ceph** 集群 :版本17.2.3 (自行配置) 5. **python3-rados** (与ceph的通信使用官方librados的python包) 6. **mariadb-connector-c-devel** # mysqlclient依赖 ### 1.2 使用Git拉取代码 创建并切换进入目录/home/uwsgi/,在此路径下拉取代码: ``` git clone https://gitee.com/gosc-cnic/iharbor.git ``` * 如果不用python虚拟环境请跳过下面1.3和1.4小节python虚拟环境的搭建内容,直接安装iharbor服务需要的python依赖库: ```pip install -r requirements.txt``` * 环境依赖包 ```dnf install gcc python3-devel -y``` ### 1.3 安装Python依赖管理工具pipenv 使用pip命令安装pipenv。 ```pip install pipenv``` ### 1.4 使用pipenv搭建python虚拟环境 在代码工程根目录下,即文件Pipfile同目录下运行命令: ```pipenv install``` ### 1.5 数据库安装 1. 请自行安装 **mysql** 数据库,如果使用其他django支持的数据库,请根据官方文档自行配置。 2. 安装数据库依赖(mysql) ``` dnf install mariadb-connector-c-devel ``` 3. 查看1.7小节的内容。根据自己的情况修改 **security_settings.py** 中有关数据库的配置。 ### 1.6 ceph配置和依赖库安装 与ceph的通信使用官方librados的python包python3-rados。 1. 安装 **python3-rados** 提前安装ceph软件 ``` dnf install python3-rados.x86_64 ``` 2. python包会自动安装到系统python3第三方扩展包路径下(/usr/lib64/python3.9/site-packages/)。 注意:在使用虚拟环境时需要将以下文件复制到虚拟环境下对应的目录中。 ``` rados.cpython-39-x86_64-linux-gnu.so rados-2.0.0-py3.9.egg-info ``` 3. ceph的配置, 支持多个ceph集群: 1. 在项目在第一次启动后需要登录到后端配置ceph,否则无法使用存储服务。 2. 对应的ceph配置文件存储在工程文件 **data** 目录中。 后端ceph配置中必须有一个 **别名** 为`default`。 ### 1.7 安全敏感信息配置文件security_settings.py 1. 创建配置文件 **security_settings.py** 或 复制项目下 **django_site/security_settings_demo.py** 文件为 **django_site/security_settings.py**。 2. **security_settings.py** 中定义了一些安全敏感信息,请根据自己情况自行修改完成配置,此文件信息在 **settings.py** 文件最后被导入。 例如: 1. mysql配置: ``` 创建数据库 CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; # Mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'xxx', # 数据的库名,事先要创建之 'HOST': 'localhost', # 主机 'PORT': '3306', # 数据库使用的端口 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'} }, 'metadata': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'metadata', # 数据的库名,事先要创建之 'USER': 'xxx', # 数据库用户名 'PASSWORD': 'xxx', # 密码 'HOST': '127.0.0.1', # 主机 'PORT': '3306', # 数据库使用的端口 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'} }, } ``` ### 1.8 FTP配置 1. 不开启TLF加密情况下: 需要修改`ftpserver/harbor_handler.py`文件开头部分代码`work_mode_in_tls = False`。 2. ftp默认开启TLS加密,需要域名证书文件`/etc/nginx/conf.d/ftp-keycert.pem`。 ### 1.9 特定需求配置 1. 连接池的配置 ```shell 路径:django_site/settings.py 配置参数: RADOS_POOL_MAX_CONNECT_NUM = 1 ``` 2. iharbro_uwsgi.ini ```shell 如果使用uwsgi http 启动方式 需修改配置(默认socket) ``` ## 2 运行iharbor服务 ### 2.1 激活python虚拟环境 * 非python虚拟环境忽略此步骤。 ```pipenv shell``` ### 2.2 数据库迁移 在项目根目录下运行如下命令完成数据库迁移。 ``` python manage.py migrate python manage.py create_multipart_upload_table ``` ### 2.3 启动服务 #### 2.3.1 开发测试模式运行服务 注:第一次启动服务后请先在后台配置ceph的集群配置,之后重启服务。 * 启动WEB服务 在代码工程根目录下运行命令: ```python manage.py runserver 0.0.0.0:8000``` 如果一切正常,打开浏览器输入url(主机IP:8000, 如:127.0.0.1:8000)即可查看站点; 如果出现js文件无法加载,修改 `DEBUG = True`。 * 启动FTP服务 ```python ftpserver/harbor_ftp.py``` #### 2.3.2 生产环境模式运行服务 * 收集静态文件 ```python manage.py collectstatic``` * systemctl管理配置,开机自启服务 在项目根目录下执行脚本: ```./config_systemctl.sh``` 脚本会复制iharbor.service、iharbor_ftp.service两个文件到 /usr/lib/systemd/system/ 目录下,并开启服务开机自启动。 然后可以使用systemctl命令管理ihabor的web和ftp服务了: ``` systemctl start/reload/stop iharbor.service systemctl start/reload/stop iharbor_ftp.service ``` ## 3. nginx 配置 ```shell socket配置 server { listen 80; server_name localhost; #改为自己的域名,没域名修改为127.0.0.1:80 charset utf-8; client_max_body_size 1024M; location / { include uwsgi_params; uwsgi_pass unix:///home/uwsgi/iharbor/iharbor.sock; #端口要和uwsgi里配置的一样 uwsgi_param UWSGI_SCRIPT webserve.wsgi; #wsgi.py所在的目录名+.wsgi uwsgi_param UWSGI_CHDIR /home/uwsgi/iharbor/; #项目路径 } location /static/ { alias /home/uwsgi/iharbor/static/; #静态资源路径 } } ``` ## 4. uwsgi 参数调试问题 1. uwsgi 进程无法释放、无法接收请求、nginx报502、504错误 ```shell 2个进程、8个线程、每个进程请求数上限5120、物理内存2GB、rados连接池设置为1 processes = 2 threads = 8 max-requests = 5120 reload-on-rss = 2048 django_site/setting.py 设置连接池 备份测试: 1-36 个服务节点、 40-400 个并发请求 rados连接频繁的被创建 ``` 修改 ```shell 2个进程、1个线程、每个进程请求数上限500、rados连接池设置为16 processes = 2 threads = 1 max-requests = 500 harakiri = 60 django_site/setting.py 设置连接池16 ```